ラズベリーパイPicoはUSBシリアルのデバイスとして認識できます。
応用すればUSB1本で簡単にデータ通信することが可能です。
PicoをArduinoの代わりにAD変換デバイスとして使う方法を紹介します。
ラズパイPicoをArduinoの代わりにシリアル通信させてみた
ラズベリーパイPicoはUSBシリアル接続のデバイスとして使用することが可能です。
またPicoはArduinoと同様にアナログ入力ピンを持ち、AD変換の機能があります。
ラズパイPicoをAD変換のUSBデバイスとして使用することが出来ました。
ホスト側のPythonを利用して、リアルタイムでPicoのAD変換のデータをプロットしています。
設定方法からプログラムまで一から手順を説明します。
下記動画でも紹介しています。是非一緒にご覧ください。
USBシリアル経由でPicoのデータをリアルタイムで取得できていることが分かります。
PicoとArduinoはアナログ入力できます
PicoとArduinoはアナログ入力ピンが有り、AD変換が可能です。
アナログの電圧値をデジタルに変換することができます。
温度・湿度などのアナログのセンサーを接続することが可能です。
PicoをUSBシリアルと認識しています
Arduino同様にPicoもUSBシリアルでデータを送受信することが可能です。
下記記事のようにホスト側(ラズパイ)のPythonで受け取ることができます。
ラズベリーパイとArduinoを連携!アナログ入力を応用してみた
Picoと接続しているホスト(ラズベリーパイ)側からもUSBデバイスと認識できています。
dmesgで確認すると、よくあるUSBシリアルデバイス(ttyACM0)として認識していました。
ラズベリーパイPicoとArduinoの比較
ラズベリーパイPicoとArduinoはCPUから違い、大きな差があります。
どちらにも多くメリットがあるので、代表的なAD変換箇所をメインに紹介します。
ラズベリーパイPicoのメリット
ラズベリーパイPicoのAD変換の使い方・メリットに関しては下記記事でも紹介しています。

Picoは価格が安い
ラズベリーパイPicoは1台500円程度で非常に安いです。正規のArduinoと比べると格安です。
またサードパーティーの互換品のArduinoと比べてもほぼ同じ価格です。
- Pico…500円程度
- Arduino…数百円~3000円程度 ※互換品~正規品で価格差があり
PicoのADCの分解能は12bit
ArduinoのADCの分解能が10bitに対して、Picoは12bitです。
さらに電圧が3.3Vのため、より精度の高いAD変換が可能となります。
下記計算のように精度だけで見ると、PicoはArduinoの5倍以上の数値となります。
- Pico…3.3V/4096(2^12)≒0.8mV刻みのAD変換
- Arduino…5V/1024(2^10)≒5mV刻みのAD変換
実際にPicoでAD変換のプログラムを実行したところ、約0.8mV刻みでAD変換できていました。
※プログラム上では16bit(read_u16())でreadしているため、65535(2^16)で分解しています。
Arduinoのメリット
ArduinoのAD変換については下記記事でも紹介しています。
ArduinoでAD変換!分解能10bitで電圧測定してみた

Arduinoは5Vのアナログ入力
Arduinoは5Vまでのアナログ入力が可能です。またArduino Unoは6chあります。
(PicoのIO電圧は3.3Vのため、5Vの入力はできません)
- Pico…アナログ入力_3.3V・3ch
- Arduino…アナログ入力_5V・6ch
Arduinoはジャンパー線の接続が楽
Arduinoはデフォルトでピンソケットが実装されています。
購入してすぐにジャンパー線を接続することが可能です。
Picoはピンヘッダーがデフォルトでは実装されていません。
- Pico…ジャンパー線の接続には「改造要」
- Arduino…ジャンパー線の接続には「改造不要」
Picoでは別にピンヘッダーを購入してはんだ付けする必要があります。
(筆者も)はんだ付けが面倒だったため、ICクリップ-ワニ口を使用しています。
Picoの簡単なテストレベルでは十分に対応できます。
ICクリップは狭い箇所を接続するのに便利です。
ラズベリーパイPicoでUSBシリアル出力する
ラズベリーパイPicoでテスト的にUSBシリアル出力する方法は簡単です。
ラズパイPico公式のスタートガイドのファイルを使用するだけです。
下記記事の手順でファイルをPicoに書き込めば、自動的にUSBシリアル出力します。

Pico側で出力するとUSB接続されているホスト側にもデータが届きます。
結果、ホスト側のPythonやシリアルコンソールでデータ取得することが可能です。
筆者はPythonにて下記設定でUSBシリアルのデータを取得しました。
- デバイス名…ttyACM0
- ボーレート…115200bps
PythonでPicoのデータを取得する
Picoのアナログ入力のデータをホスト側(ラズパイ)のPythonで取得します。
そして、リアルタイムでプロットするテストを行います。
Picoで取得するデータは可変抵抗で調整した0-3.3Vの電圧値です。
可変抵抗で3.3Vの電圧調整をする
ラズパイPicoで使用したピンは下記の通りです。
- 3V3(36ピン)→可変抵抗_1or3ピン
- GND[AGND](33ピン)→可変抵抗_1or3ピン
- ADC0(31ピン)→可変抵抗_2ピン
回路としても非常に簡単です。部品としては可変抵抗しか使用していません。
今回は10kΩを使っていますが1kΩでも問題ありません。
PicoのMicroPythonのプログラム
Pico側で実際に使ったMicropythonのプログラムは下記です。
下記記事の電圧値をAD変換するプログラムにLチカを合わせたものです。
ホスト側のPythonのプログラム
ホスト(ラズパイ)側で実際に使ったPythonのプログラムは下記です。
下記記事のプログラムをPico用に修正したものです。
ラズベリーパイとArduinoを連携!アナログ入力を応用してみた
PicoのAD変換をリアルタイムでプロットする
冒頭でも紹介しましたが、動画だと実際のテストの様子が分かりやすいです。
USBシリアル経由でPicoのデータをリアルタイムで取得できています。
是非一緒にご覧ください。
PicoのMicroPythonのプログラムを起動
最初にPico側のAD変換+Lチカの(Micropython)プログラムを起動しておきます。
ホスト側のPythonのプログラムを起動
次にホスト側のPython側の開発環境を立ち上げます。
(筆者は両方ともThonnyで実施したので、設定を切り替えているだけです)
ホスト側のプログラムを起動すると、自動的に電圧値のプロットが始まります。
リアルタイムで電圧値のプロットを確認
可変抵抗を調整すると、Pythonのグラフもリアルタイムで変わりました。
Picoからホスト(ラズパイ)側にデータがしっかり送られていることが分かります。
まとめ
今回はラズパイPicoのUSBシリアル通信の応用例に関して紹介させていただきました。
記事をまとめますと下記になります。
ラズベリーパイPicoにはICクリップ-ワニ口が便利です。
はんだ付けしなくても簡単にテストが出来るようになります。
皆さまも是非試してみてください。
コメント