この記事は「 OLED-Display 128×64とPython 」からの続きです。

 

右寄せに嬉しいフォントが足元にありました。

フォントを FreeSans.ttf から DejaVuSansMono.ttf に変えました。

 

その足元とは、ラズパイの中です。Raspberry Pi OS Liteなのですが最初から入っていたのでしょうか? 等幅フォントで右寄せに良い感じのフォントです。

↓ その等幅フォントで表示させると温度、湿度、気圧の数値を右寄せに、小数点を揃える事が出来ました。それに、見やすいフォントなのでちょっと満足。因みに、日時のフォントは別のフォントです。

 

↓ こちらも右寄せなのですが、使用した FreeSans.ttf が等幅フォントでは無いせいか小数点の位置が不揃いです。気圧値がズレています。当初は、この状態で気持ち悪かったのですが、解決してスッキリです。

 

その等幅フォントは、DejaVuSansMono.ttf

/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf

↓ ラズパイの中をfindコマンドで

$ sudo find / -name "*.ttf"

この検索に複数ヒットして、その中にありました。

 

↓ FreeSans.ttf から DejaVuSansMono.ttf に変えた所のコード(Python)は

#FreeSans14 = ImageFont.truetype('FreeSans.ttf', 14)
DejaVuSansMono14 = ImageFont.truetype('DejaVuSansMono.ttf', 14)
oled.cls()

draw.text((10, 0), data1, fill=1) #日時
draw.text((10, 17), f'{data2:>6.1f}', font=DejaVuSansMono14, fill=1)#温度
draw.text((10, 34), f'{data3:>6.1f}', font=DejaVuSansMono14, fill=1)#湿度
draw.text((10, 51), f'{press:>6.1f}', font=DejaVuSansMono14, fill=1)#気圧
    
draw.text((65, 17), "C", font=DejaVuSansMono14, fill=1)
draw.text((65, 34), "%", font=DejaVuSansMono14, fill=1)
draw.text((65, 51), "hPa", font=DejaVuSansMono14, fill=1)

oled.display()

 

この記事の続きは「 OLED-Displayと反転文字 」です。

長い時間と過労(長時間のGoogle検索)を経て、表示させたい値をSSD1306使用0.96インチ128×64ドット有機ELディスプレイ(以下OLEDディスプレイ)に表示させる事が出来ました。

↑ Raspberry Pi 4のI2Cで各センサーから得た値をOLEDディスプレイに表示させている。データは5分毎にAmbient(ambidata.io)へ送り蓄積させています。↓

 

OLEDの表示に関して、凄く参考になったサイト

Raspberry Pi: OLED-Display 128×64 mit Python ansteuern (I2C)

 

↑ 凄く参考になったサイト(横文字でドイツ語?のサイトなので、私はコードを眺めるだけですが)の″Beispiel2″のコードを参考にしてフォントサイズを変えてみると。↓

↑ 日時のフォントサイズはデフォルト?で、温度、湿度、気圧のフォントサイズを14にしてみました。

 

フォントサイズに関するコード(Python)の一部です。

from lib_oled96 import ssd1306
from smbus import SMBus
from PIL import ImageFont
FreeSans14 = ImageFont.truetype('FreeSans.ttf', 14)
oled.cls()

draw.text((10, 0), data1, fill=1) # 日時
draw.text((10, 20), f'{data2:>8.1f}', font=FreeSans14, fill=1) # 温度値
draw.text((10, 35), f'{data3:>8.1f}', font=FreeSans14, fill=1) # 湿度値

draw.text((60, 20), "C", font=FreeSans14, fill=1) # 温度の単位
draw.text((60, 35), "%", font=FreeSans14, fill=1) # 湿度の単位

oled.display()

温度値と湿度値の表示は、桁数指定と右寄せをしています。気圧値の表示も右寄せをさせてますが、現時点で1000hPa未満の5桁(小数点を含む)にならないので確認出来ておらず恥ずかしいので気圧のコードは載せていません。

 

この記事の続きは「 OLED-Displayと等幅フォント 」です。