2軸のアナログJoystickをラズパイで使ってみます。
ただしラズパイでアナログデータを直接扱うことはできません。中間にアナログデジタルコンバータ(ADC)を挟む必要があります。
例:MCP3008
でもこれを結線するのは非常に面倒です。(細かいピンの対応などはこのページ参照)
なのでちょっとだけ高いですがピンヘッダ付きのPicoを使います。
PicoにはADCが5つあり、内3つがユーザに解放されています。
USBケーブルで接続して、シリアル通信でjoystickデータをラズパイに送ります。
Pico でjoystickを扱うやり方は以下のページを参照してください(MicroPython)。
Pi Pico でJoystick を使ってサーボモータを制御してみる
servo.pyとmain.pyをPicoに書き込んだらUSBケーブルを抜き差しして再接続します。これでmain.pyが自動起動してjoystickデータを送る準備はできています。
シリアル通信でPicoからラズパイにデータを送るのは簡単です。
print()で送るだけです。
ラズパイで受信する場合、ポートとボーレートを正しく設定すればOKです。
Windowsなどではポートは番号付きのCOMですが、ラズパイなどは/dev/tty*です。
ラズパイなら、/dev/ttyACM0になっていると思います(要確認)。
通信速度は115200でいいと思います。
コードはこんな感じです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import serial import time ser = serial.Serial('/dev/ttyACM0', 115200, timeout=1) time.sleep(2) print("シリアル通信を開始します。Ctrl+Cで終了。") try: while True: if ser.in_waiting > 0: # 受信バッファにデータがあるか確認 # 受信データ(バイト列)を読み込み、UTF-8でデコード received_data = ser.read(ser.in_waiting).decode('utf-8').strip() print(f"受信データ: {received_data}") except KeyboardInterrupt: print("通信を終了します。") except serial.SerialException as e: print(f"シリアル通信エラー: {e}") finally: ser.close() |




Leave a Reply