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でビルドした時の画像。

OLED用にマイクロ秒(μs)の画像を作ってみました。

環境はこちらの別サイトに習い整えました。
Raspberry Pi: OLED-Display 128×64 mit Python ansteuern (I2C)

 

ひらがな変換した μ を使用すると文字化けするので、これまでは代わりに小文字の u を使用していました。しかしどうにも気になっていたので、画像の扱い方の勉強がてら作ったのが次の画像です。サイズは12×7ピクセルのグレースケール、PNG形式。GIMPで作成。↓

 

↓ 実際に使用したのがこれです。(μsは画像)

draw.bitmap((116, 4), Image.open('us.png'), fill=1)

 

↓ μ の代わりに小文字のユーの字 u を使用すると。(usは文字)

draw.text((116, 0), 'us', fill=1)