Pico-ResTouch-LCD-2.8のケースを造形。
今月21日夜にガーバーデータをPCB工場にアップロードして、今年最後の今日12月31日午前に私のプリント基板が届きました。届くのは正月明けかなぁと思っていたので嬉しい。今週の月曜日に発送されて、2ドルちょっとの送料で香港から5日で届いた。今回利用した送料の安いOCS Expressはいい。勿論今回利用したプリント基板工場(JLCPCB)も、また利用したい。
↓ 届いたプリント基板
↑ ランドが金メッキ(無電解金メッキ ENIG)だったら、もっといい感じだったんだろうけど、追加料金$15.80だから我慢。この基板は追加料金ゼロのHASL(with lead)です。
設計は素人の私ですが、プリント基板製造はプロなので見た目は素晴らしいです。この品質で製造に$2、香港からの送料が$2.03、合計$4.03、日本円合計が546円。たったの546円でプリント基板が出来てしまう。自分で蛇目基板に配線したりエッチングするより遥かに良いと私は思う。
「これでハンダ付すれば良いだけ」って、ちょっと待って。実物を手にするとランド間隔が狭い!
ランド間隔は狭い所で2.54mmなんだけど、こんなに狭かったか? 拡大鏡が必須です。
PCB設計中はPCモニターに拡大して見ていたせいか、実物は小さい!
↓ この基板をRaspberry Pi 4に乗せてみました。基板の乗せられた部品はまだハンダ付されていませんけど。
C言語などで開発する時便利なのが、printf分でターミナルに文字列を出力する事です。
でもPi Picoはディスプレイが無いので
printf(“Hello, world!\n”); と書いても出力先が無いので意味がありません。
その出力先として、USBやUARTを通して母艦PCのターミナルを出力先に出来るとの事です。
私は母艦PCにRaspberry Pi 4を使用しUSBケーブルでPi Picoを繋げています。ですからUSB接続での設定をします。
開発中のC言語ソースファイルがあるディレクトリにCMakeLists.txtを用意します。中身は画像の通りです。LXS-TESTとはそのディレクトリ名(フォルダ名)なので参考になるでしょう。 ↓
CMakeLists.txt
add_executable(LXS-TEST
test.c
)
target_link_libraries(LXS-TEST pico_stdlib hardware_spi hardware_adc)
# enable usb output, disable uart output
pico_enable_stdio_usb(LXS-TEST 1)
pico_enable_stdio_uart(LXS-TEST 0)
# create map/bin/hex file etc.
pico_add_extra_outputs(LXS-TEST)
# add url via pico_set_program_url
example_auto_set_url(LXS-TEST)
↑ 赤線で囲まれた部分がターミナル関連です。
CMakeLists.txtが用意出来、ビルドが済んだ uf2ファイルをPi Picoに書き込むと、以下のコマンドでウインドウ内にprintf文の出力が表示されます。
$ minicom -b 115200 -o -D /dev/ttyACM0
複数の文字描画が出来るようになったので、上から最大、平均、最小の各電圧を表示させました。平均の求め方は、(最大 + 最小)÷ 2ではありません。左端から右端まで96データあるので、この96データの平均です。
↓ 電圧数値の表示テストの為、数値を10倍にしています。右寄せの確認です。ちゃんと右寄せになっています。
↓ 動画も用意したので見て下さい。表示スピードが分かると思います。
手持ちの安価なデジタルテスターと比べると、0.02V位の差がありました。ご承知の通り? この分野も私は素人なので、Pi PicoのADC0ピンにダイレクトで可変直流安定化電源を繋げてテストするずさんさですから、この電圧差はなんとも言えません。
取り敢えず、電圧表示出来るようになったので面白くなって来ました。
やっと文字描画出来た。5×7ドット英数字フォントデータの1ドットをOLEDの1ピクセルずつ描画して数字の3になりました。↓
備忘録
自分が忘れ無いように書き留めておきます。SSD1331 カラーOLED
↓ 数字の3を描画する時、次の画像のようなデータを配列として用意します。{ 0x21, 0x41, 0x45, 0x4B, 0x31 } のデータからビット演算等駆使して1の部分を描画すれば数字の3になります。ただ、見て分るように寝ているので左に90度回転させないといけません。
90度左回転させるには、最初にA0→B0→C0→D0→E0と進めて1の時はその1ピクセルをカラー描画、0の場合は黒とかを描画します。続けてA1→B1→C1→D1→E1と同じように続けて最後のE6で完了。これをコードに書けば数字の3がカラー描画されます。
↓ { 0x21, 0x41, 0x45, 0x4B, 0x31 }のイメージ。図中の”ABDCE”は座標を表現しやすくする為のもので、ソースコードでは”01234″を使用します。
↓ SSD1331 カラーOLEDの5×7ピクセル描画領域。1ピクセルは光の三原色RGBで構成されています。(写真に撮った数字3と同じ領域)
↑ この場合、描画する開始位置(スタートアドレス)は左上の “Column 24” “Row 0” で、終了位置(エンドアドレス)は右下の “Column 28” “Row 6″になります。そこにデータをずらずら送ると、OLEDが勝手に赤矢印で示したように右方向に進みながらデータを埋めて行き、右端に達すると1段下の左端から続けてデータを埋めて行きます。このようにスタートアドレスとエンドアドレスを指定してしまえば、後は5×7≡35ピクセル分のデータを送るだけです。
ただ、最初に5×7の描画領域を決めてしまうと、背景色と0に該当する色と異なる場合が出て来ます、これでは見た目が悪くなりますよね〜。
その解決策として、1に該当するピクセルは描画領域を指定して描画。0に該当する所は、何もせず次に進むを繰り返す。って言う手があります。そう言えば、このようなコードをネットで見たかも。
まだ1文字の描画しか出来ません。今度は文字列を描画出来る関数を作りたいと思います。電圧表示出来れば充分なので、その内出来るかなぁ。