RP2040-Zero をUART経由でラズパイZeroから制御してみる(PWM制御ーメモ)


Pi Pico よりサイズの小さなマイコンボードRP2040-ZeroをラズパイZeroから制御してサーボモータを動かしてみます。

前回はPico とI2Cの組み合わせでしたが、ここではサーボ1個を駆動させるだけなのでUARTを使います。

これはRP2040チップを使ったPico互換デバイスです。

 

 

 

 

 

 

 

 

 

RP2040-Zero用のMicroPythonのファームウェア(uf2)はPi Picoのものを使います。

ラズパイZeroのOSはBullseye Lite を使ってみます。

 

以下のようにラズパイZeroからRP2040-ZeroにUART経由でコマンドを送ってサーボモータ(SG-90)を制御します。

 

 

 

 

 

 

 

 

 

 

結線

UART1(Rx,Tx)で結線します。RP2040-ZeroにはGNDは2つありますが、内1つは非常にはんだ付けしづらい場所にあるので実質1つと思ったほうがいいです、その1つにまとめてグラウンドします。

 

 

 

 

 

 

 

 

 

 

 

 


ラズパイZeroに環境構築

OSにはBullseye Liteを使ってみます。

OSインストールに関しては以下をご参照ください。

UARTを使うのでSerial Port の設定は正しく行っておいてください。

ラズベリーパイで顔認識(改-2)

 

次にシリアル接続用のライブラリをインストールします。

pyserialを使いますがBullseyeには入っていないのでインストールします。

インストールにはpipを使いますがBullseyeにはこれも入っていないのでこれからインストールします。

aptリポジトリにはなく少し古いapt-getリポジトリを使ってpipをインストール。

で、/dev/serial0 へのアクセス権を得るためsudoでpyserialをインストールします。

 


RP2040-Zero に環境構築

ファームウェア(uf2)は以下からダウンロードできます。

MicroPython

最初にあるPicoのファームウェアをダウンロードして使います。

 

 

 

 

 

 

この環境構築にはラズパイZeroは使えません、他のラズパイ4や5、Windowsなどを使います。

例:ラズパイを使用

BOOTボタンを押しながらUSBケーブルで接続します。

 

 

 

 

 

 

 

RP2040-Zeroはストレージデバイスとして認識され、デバイスをオープンするウィンドウが開きます。

ここに先にダウンロードしたuf2ファイルをドラッグ・ドロップします。コピーが始まり終了するとウィンドウが閉じます。

これでインストール完了です。

以降開発ツールはThonny IDE を使います。

 


RP2040-Zero側のコード

Pi Zeroから送られてきた角度変数を受けてサーボモータを駆動します。

Thonnyを開いて右下の三本線のバーガーアイコンをクリックして、接続したRP2040-Zeroを開きます(デバイスは/dev/ttyACM0)。

もしここに選択できるメニュが現れなければ、RP2040-Zeroにまだファームウェアがインストールされていない…ということです。

 

 

 

 

 

 

 

 

 

 

 

コード

起動時にサーボを3回回転させて位置決めし、パラメータが送られてくるのを待機しています。

これをmain.py という名前でRP2040-Zeroに保存します。

main.pyという名前にすることでRP2040-Zeroに通電されると単独で起動します。

コードをコピーペーストして保存ボタンをクリックします。

 

 

 

 

 

 

 

 

 

 

 

どこに保存するか聞いてくるので、「Raspberry Pi Pico」と書かれた方に保存します。

 

 

 

 

 

 

 

これでOKです。

あとはケーブルを一度外して、再度接続すればRP2040-Zeroは単体で給電されて起動します。

 


Pi Zero 側のコード

ZeroからUART経由でRP2040-Zeroに角度パラメータを送ります。

送る文字変数はバイト列にする必要があります。

こんな感じ。

【UART_send_angle.py】

UART_send_angle.pyはsudo権限で実行する必要があります。

こんな感じ。

sudo python3 UART_send_angle.py <角度>

いちいちsudo をつけるのは面倒なのでUART_send_angle.pyをsubprocessで実行してみます。

【UART_send_angle_sub.py】

例:55度の角度を送る場合

python3 UART_send_angle_sub.py 55

 

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*