OLED 0.96インチで遊ぶ (4) - PBMファイル表示
今回はImagemagickのconvertを使用して文字列をPBMフォーマットに変換して表示を行ってみます。
文字列「柔術」を画像化してみます。
$ convert -font /usr/share/fonts/truetype/takao-gothic/TakaoGothic.ttf \ -pointsize 32 \ -extent 64x32 \ -compress none \ -monochrome \ +antialias \ label:'柔術' \ bjj.pbm
font : フォント名
pointsize : フォントサイズ
extent : 画像サイズ
label : 文字列
を指定します。
他のオプションはPBMを生成するのに必要なオプションとなります。
フォントは色々と試してみましたがTakaoGothicが一番見やすかったです。
生成されたbjj.pbmを開くとこんな感じで見えます。(見やすいようにデータ間のスペースは削除しています)
指定した位置にPBMファイルを表示するスクリプトを作りましたので、これを通して表示してみます。
#!/usr/bin/perl -w open(RFP, "<" . $ARGV[0]) || die("Fatal : Can't open file ... $ARGV[0]\n"); $pos_xs = $ARGV[1]; $pos_ys = $ARGV[2]; @pbm = (); $w = 0; $h = 0; $i = 0; while(<RFP>){ $l = $_; chomp($l); $l =~ s/#.*$//; if($l eq ''){ next; } $i++; if($i==1){ if($l ne 'P1'){ die("Error : It isn't P1 format ...\n"); } }elsif($i==2){ ($width, $height) = split(/\s+/, $l); }else{ $l =~ s/\s+//g; foreach $d (split(//, $l)){ $pbm[$h][$w] = $d; $w++; if($w==$width){ $h++; $w = 0; } } } } close(RFP); # display set $cmd = 'i2cset -y 1 0x3c 0x00 0xa0 0xc0 i'; system($cmd); $pos_xe = $pos_xs + $width - 1; $pos_ye = $pos_ys + $height / 8 - 1; $cmd = 'i2cset -y 1 '; $cmd .= '0x3c 0x00 '; $cmd .= '0x20 0x00 '; # horizontal mode $cmd .= sprintf("0x21 0x%02x 0x%02x ", $pos_xs, $pos_xe); # column $cmd .= sprintf("0x22 0x%02x 0x%02x ", $pos_ys, $pos_ye); # page $cmd .= 'i'; system($cmd); $i = 0; for($h=0; $h<$height; $h+=8){ for($w=0; $w<$width; $w++){ $d = unpack("C", pack("B8", $pbm[$h+7][$w] . $pbm[$h+6][$w] . $pbm[$h+5][$w] . $pbm[$h+4][$w] . $pbm[$h+3][$w] . $pbm[$h+2][$w] . $pbm[$h+1][$w] . $pbm[$h+0][$w])); if($i==0){ $cmd = "i2cset -y 1 0x3c 0x40 "; } $cmd .= sprintf("0x%02x ", $d); $i++; if($i==16){ $i = 0; $cmd .= "i"; system($cmd); } } } if($i != 0){ $cmd .= "i"; system($cmd); } # display enable $cmd = 'i2cset -y 1 0x3c 0x00 0x8d 0x14 0xaf i'; system($cmd);
引数に「PBMファイル」「表示開始カラム」「表示開始ページ 」を指定します。
$ ./disp_pbm.pl bjj.pbm 32 2
こんな感じで表示されました。
色々と組み合わせて文字列を表示してみました。
なお、上記のスクリプトはPBMファイルのHeightが8の倍数であることが前提となっていますのでご注意ください。
[参考記事]