やっと文字描画出来た。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文字の描画しか出来ません。今度は文字列を描画出来る関数を作りたいと思います。電圧表示出来れば充分なので、その内出来るかなぁ。

Raspberry Pi PicoのADコンバータ(ADC)を使用しSPI接続のOLEDに電圧変化を描画させました。

軽トラのエンジン始動時、バッテリーの電圧降下を監視する為に、只今悪戦苦闘中。

慣れない私が初めてADCを操作しているので、Pi PicoのADC機能を十分に出せていない事を理解して画像をご覧下さい。↓

↑ この波形は商用電源の50Hzに起因するものだと思います。ADC0はブレッドボードの空き穴に繋がり回路的にオープン。手を近付けると正弦波の最大値が高くなりました。撮影時は手を離しています。

 

 

バッテリー直でも、電圧降下で稀にリグの調子が悪くなるので、今はセルを回す前に手動でリグの電源を落としています。(バッテリーが弱っているので尚更です)

ご存知の通り解決法としてリレーを入れる事で問題は無くなる訳ですが、そのリレーの制御をPi Picoにさせたいのです。

 

今迄、その制御をPICマイコン又はArduino Nanoしようか迷うだけで手を付けなかったのですが、新しく出たPi Picoに飛び付きました。決めては普通に制限なしのC言語が使用出来る所でした。別にC言語が得意の訳では無く、C言語も分かっていないのに、新たに他の言語を覚える能力が無いので。

スケッチとは何かを知る前に「Arduino言語?スケッチ?何それ」と思ってしまいArduino(未だに発音出来ない)が近寄り難い物になりましたから。

でも、食わず嫌いのArduino言語。知って見ればC言語がベースらしいですね。確かに、今回のOLED表示器の初期設定コードや描画コード作成に、Arduino用コードが大変参考になりました。

やっとの思いで描画出来るようになりました。SPIの表示器は初めてで、そもそもPicoの端子と表示器の端子の繋ぎ方も分からない状態でしたし、コマンドの送り方も分からなかったので苦労しました。

Raspberry Pi PicoをPCやラズパイの母艦にマウントする場合、オンボードのスイッチを押しながらUSBケーブルを接続させるのですが、これが意外と厄介です。

自作プログラムの書き込み時、Pi Picoを母艦PCにマウントさせないといけないのですが、ドラックアンドドロップで書き込みすると問答無用でアンマウントされてしまいます。その為再度書き込みする為に、いちいちUSBケーブルを抜き差ししないといけないので非常に面倒です。この事は期待したPicoだけにガッカリです。しかし

そう、USBケーブルを接続したまま再マウントする方法があるのです。私が考えた事では無いのですが、YouTubeのPi Pico関連の動画を色々と見ていたら、可愛い女の子がその方法を説明していました。英語なので言葉は分かりませんが多分その説明だと思います。↓

 

その動画を真似て私もやってみました。↓

新たに接続したスイッチとオンボードのスイッチの押し方ですが、先に新たなスイッチを押しながらオンボードのスイッチを押します。そして新たなスイッチを先に離してからオンボードのスイッチを離します。これでPi Picoがマウントされます。分かりました?

↑「下手な文章で分からない!」と言う人も居るでしょう。その場合は例の女の子の動画を見て下さい。

 

Pi Picoのガッカリした事が解決したのでスッキリです。

本日、Raspberry Pi Picoが届いたので早速Lチカを試しました。

Picoの母艦はRaspberry Pi 4(以下ラズパイ4)です。

開発環境はラズパイ公式サイトのWelcome to your Raspberry Pi PicoにあるGetting started with Raspberry Pi Picoの絵を見て整えました。英文なので主に絵を参考にします。半分冗談です、ごめんなさい。

上記リンク先にある「Chapter 1. Quick Pico Setup」から始まるグレーのボックスに書かれたコマンドラインを参考にして、ラズパイ4に開発環境を整えました。↓

$ wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh

$ chmod +x pico_setup.sh

$ ./pico_setup.sh

$ sudo reboot
$ cd ./pico/pico-examples/build/

$ export PICO_SDK_PATH=../../pico-sdk

$ cmake ..

↑ これで ./pico/pico-examples/ にあるサンプルコードがVisual Studio Codeでビルド出来る筈です。

 

 

↓ サンプルコードのピン番号を変えただけですが、Lチカに使用したコードです。

#include "pico/stdlib.h"

int main() {
    const uint LED_PIN = 22;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(100);
        gpio_put(LED_PIN, 0);
        sleep_ms(100);
    }
}

 

↓ ラズパイ4にインストールされたVisual Studio Codeでビルドした時の画像。