■ねらい
・製造現場などで↓こういう機械式カウンタを複数使っているが、
これを電子化したい。1ステーションで4台ぐらい使う。
・市販の電子式カウンタは高価かつネット接続がすぐにはできない。
・マイコンでスイッチを読めばカウントアップダウンは実現容易。
また、データをMQTTなどで送信するのも過去例で十分可能。
結局、表示を大きく見やすくかつ安価に実現することが実用上のポイント。
・7セグ4桁でやればよいが、構成機器が多くなり保守性低下。
I2Cの7セグ4桁は一見保守容易だが、安価なものはアドレス変更に難があり、
4台使いだと結局は保守性が低下する。
I2Cを8チャンネルに拡張するTCA9548Aを使うと、同じアドレスのI2Cデバイスを
8個接続できるらしい。
(250116追記)
→ できました!別途記事予定
安価な7セグ4桁LED(TM1637搭載)を色違いで使ってやれば
単純な構成になりそう・・・のはずでした。
が、TM1637はI2Cではありませんでした!!!
・・・
あかんやん。。。
・16文字2行LCDは有効だが、文字が小さく見にくく、
もう少し大きく表示できるものにしたい。
16文字2行OLEDは文字を見やすいが小さいのはLCDと同じ。
・ということで、今回はカラーグラフィックでの表示を試みました。
■機器構成など
・ラズパイPICO-WH
・ディスプレイ
・ブレッドボード
・Windows11
・Thonny
■参考出典:ラズベリーパイ Pico にILI9341(MSP2807)を接続する
https://kousaku-prog.com/ili9341msp2807/
■ライブラリ、フォントのあるGithubは↓これ。
↑ILI9341のピンアサインは裏側に記載されており、
ブレッドボードでの結線では見えないので、何度も間違えました。
この写真は結線作業都合で上下逆にしてあります。
↑動作例(開発作業途中での表示)
■PICOのファイル
他の用途のものがいっしょに多々入ってます。
今回使うのは、
・main.py
・ライブラリ
ili9341.py
xglcd_font.py
・フォント
Dejavu24X43.py
Unispace12X24.py
Githubにあるfontは拡張子.cを他のネット情報に基づき.pyに書き換えています。
また、GithubにあるフォントDejavu24X43.cはそのままでは動作しませんので、
下記のように赤文字部分を追記しました。
// data = dejavu_sans_mono_28pt[offset]
const unsigned short Dejavu24x43[] = {
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
・・・・・
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Character 0x7e (126: '~')
};
■動作画面例(サンプルコードでの表示)。
目視では美しいのですが、反射が結構強くて写真ですと色の再現性が低いです。
今回は縦長表示ですが、ライブラリは横長表示も対応しているようです。
このフォントはDejavu24X43です。
手押しの機械式カウンタの表示より大きめの感じ。
文字の色を簡単に変えられるのが電子式のよいところですね。
フォントはUnispace12X24でも机上ならば十分読めますが、
作業現場では可読性が大きく低下するでしょう。
最終行の「i=1998」の数字部分は自動でカウントアップしていますが、
表示速度は1秒10カウント程度でした。
これならばIoT用途で十分に使えます。
■テストサンプルコード:ほぼネットからコピーしたものを若干追加しました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
from machine import Pin, SPI
from xglcd_font import XglcdFont
import ili9341
spi = SPI(0, baudrate=512000000, sck=Pin(6), mosi=Pin(7))
display = ili9341.Display(spi, dc=Pin(15), cs=Pin(13), rst=Pin(14))
#font = XglcdFont("Unispace12x24.py", 12, 24)
font = XglcdFont("Dejavu24x43.py", 24, 43)
display.draw_text(10, 10, "cnt 1234", font, ili9341.color565(255, 255, 255),spacing=2)
display.draw_text(10, 70, " OK 1234", font, ili9341.color565( 0, 255, 0),spacing=2)
display.draw_text(10, 130," NG 1234", font, ili9341.color565(255, 0, 100),spacing=2)
display.draw_text(10, 190," ck 1234", font, ili9341.color565(255, 255, 0),spacing=2)
for i in range(1,1999):
count_i = "i="+str(i)
display.draw_text(10, 250,count_i, font, ili9341.color565( 0, 0, 255),spacing=2)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
■結論
・表示速度が若干低いように思いますが、
「ねらい」に対しては概ね合格だと思います。
・データ記録はMQTTで繋げばよいだけですので、
アップダウンのスイッチ類も含めて別記事での報告を予定します。
以上