はじめに
今回は、Raspberry PiとRaspberry Pi Pico W間でデータを送受信する方法を紹介します。「センサーで測定した値をRaspberry Piに送りたい」「複数のマイコンで協調動作させたい」そんな方におすすめの記事です。
全体の流れ
1.なぜPico Wと通信したいのか?
2.通信方法の選定
3.USBシリアル通信で通信する
4.WiFi(TCPソケット)で通信する
5.トラブルシュート
なぜPico Wと通信したいのか?
Pico Wは安価で低消費電力なマイコンで、温度センサーや加速度センサーなどを接続して測定→Raspberry Piに送信するという使い方がよくされます。
たとえば、
- Pico Wに人感センサーをつけて、人の動きを感知
- Piが受信して、ログを保存 or 通知を飛ばす
こんな連携ができると、お手軽スマートホームも夢ではありません。
通信方法の選定
| 通信方法 | メリット | デメリット |
| USBシリアル通信 | 簡単・速い・安定 | ケーブルが必要 |
| Wi-Fi( ソケット通信) | ワイヤレス | 初心者に難しい |
USBシリアル通信で送る
PicoW → Raspberry Pi とデータを送信します
PicoW側(MicroPython)
import time
import machine
uart = machine.UART(0, baudrate=115200)
while True:
uart.write("Hello from Pico W!\n")
time.sleep(1)Raspberry Pi側(Python)
/dev/ttyACM0 は環境により異なるため、ターミナルで次のコマンドを入力し、ls /dev/tty* で確認してください
import serial
ser = serial.Serial('/dev/ttyACM0', 115200) # デバイス名は状況に応じて変わります
while True:
line = ser.readline().decode('utf-8').strip()
print(f"受信: {line}")Wi-Fi(TCPソケット)で通信する
PicoW ← Raspberry Pi とデータを送信します
PicoW側(MicroPython)
Wi-Fiにつながっている必要があるので、SSID、PASSWORDに必要な情報を入力ください。
import socket
import network
import time
# Wi-Fi接続
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('SSID', 'PASSWORD')
while not wlan.isconnected():
time.sleep(1)
print("接続完了:", wlan.ifconfig())
# TCPサーバーを立ち上げる
addr = socket.getaddrinfo('0.0.0.0', 5001)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print("待機中...")
conn, addr = s.accept()
print("接続あり:", addr)
while True:
data = conn.recv(1024)
if data:
print("受信:", data.decode())Raspberry Pi側(Python)
PicoWのIPアドレスを指定する必要があります。
方法は2つあります。1つは上述したコードを実行すればwlan.ifconfig()コマンドによってIPアドレスが表示されます
もう1つは、自宅のWi-Fiルーターにログインして確認することです。
ブラウザのURL欄に192.168.0.1または192.168.1.1を入力
ルーター本体の裏面などにID(adminなど)とパスワードが記載されているのでその情報でログイン
raspberrypiやESP-xxxxのような名前を探す
import socket
import time
HOST = '192.168.1.XX' # Pico WのIPアドレスを指定
PORT = 5001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while True:
s.send(b"Hello from Raspberry Pi!\n")
time.sleep(1)トラブルシュート
| 症状 | 原因と対処法 |
| /dev/ttyACM0が見つからない | Picoが接続されていない、またはドライバ未インストール |
| Permission denied | sudoをつけるかdialoutグループに追加 |
| Wi-Fiが繋がらない | SSID/PASSWORDミス or チャンネル設定の相性問題 |
| IPが見つからない | PiとPicoが同じネットワークにいるか確認 |
まとめ
デバイス同士で通信ができるようになると、できることが爆発的に増加します。
PicoWに接続したセンサの値をRaspberry Piに送信する、Raspberry Piを使ってインターネットから取得した情報をPicoWに接続したディスプレイに表示する、など活用の幅が広がります。是非試してみてください。
コメント