Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

Arduino Nano + BH1750FVI + SSD1306 with U8g2

Arduino Nano + BH1750FVI」の続き。
上ではシリアル・モニターに結果を出力するスケッチのサンプルをもらってきて試しただけだ。
使えそうなのでスタンド・アローンで使うために表示用の液晶をつけることにした。

BH1750FVIは照度センサーのモジュール、SSD1306は今回追加するモノクロOLED、U8g2はその表示ライブラリだ。
BH1750FVIの読み込み処理はライブラリ化されていないのでスケッチ内に書かれている。
センサーの使い方に関しては簡単だし上の記事でほとんど済んでいるので書かない。
ここは、表示がらみの覚書きがメインになる。

U8g2はもう幾度も使った気でいたが、
Nokia5110 LCDで使っただけで、あとはHX1230の動作テストに一瞬使っただけだった。
いろんな液晶に対応しているので使い込んだ気がしていただけだった。
このライブラリのいい点はフォントが多いこと。
特にサイズの大きいプロポーショナル・フォントは見た目がいいので好みだ。

フォントリスト:https://github.com/olikraus/u8g2/wiki/fntlistall
リファレンス:https://github.com/olikraus/u8g2/wiki/u8g2reference
基本的には、サンプルを書き込めばそのまま表示確認できるが、今回使った関数だけ書き出しておく。
プロポーショナルなフォントを使ったので、表示位置を合わせるときに文字の長さが必要になる。
上のReferenceは、そのためのgetStrWidthを探し出すために参照した程度。

使う液晶の種類に合わせてたくさん並んでいる中から使うものをコメントアウトする。
当初は

を使っていたが、BH1750FVIをつないだら何も表示されなくなって、上にしたら動いた。
HWはハードウェア、SWはソフトウェアでI2Cを実装するという意味らしいが、5, 4と指定する時点でHWだよなあと漠然と後で思った程度の理解。

使ったのは以下の関数だ。

drawStrだけが動作確認に使ったのサンプル・スケッチには無かった関数なので、右詰めのやり方だけ少し書く。
getStrWidth(“Intensity”)で、実際の表示文字の長さを得る。
液晶の幅である128から長さの値を引いた位置から文字を書けば右に寄せて書かれる。

上のIntensityと46 luxはこの方法で右いっぱいに表示させている。
センサーも液晶も同じI2C用のピンに接続してあるが、特にぶつかる様子もなく問題なく動作している。

というか、BH1750FVIのアドレスは0x23とサンプルに書いてあってそのまま使っているが、SSD1306の方はライブラリ化されていてアドレス指定すら勝手に行われている。
こういうのがArduinoって何か嫌な感じがするが、うまくいってるからまあいいやとなる。
うまくいかないと、いったい内部でどうなってんのか、原因探しが容易ではない。

下の写真は、ライトで照らして動作確認しているところ。

このエントリーをはてなブックマークに追加

Posted under: Arduino系, 液晶


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.