Raspberry Pi PicoはUSB CDC(USBシリアル)とUART0、UART1の2チャネルのシリアルポート(GPピン)が使えます。
Raspberry Pi Pico C/C++ SDKをRaspberry Pi 4 以外の別のプラットフォームで使う場合など、UARTとPC間でシリアル通信をする場合にはGPピンにケーブルを直接はんだ付けし、さらにUSBシリアル変換モジュールを使うことになります。であれば、Pi Pico用のUSBシリアル変換モジュールがあると嬉しいかもということでRaspberry Pi Pico(以降Pi Pico)用USBシリアル変換基板を作りました。
このPi Picoを重ねて使用することができるPi Pico用USBシリアル変換基板を使ってUARTによるシリアル通信をします。
尚、コンパイル・書き込みはArduino IDEで行い、ボードマネージャはRaspberry Pi Pico/RP2040 by Earle F. Philhowerを使っています。
Pi PicoのUART端子
UART0、UART1のTXとRXに標準で割り当てられているGPピンは下表のようになっています。()内のGPピンを使用する場合には設定が必要です。
UARTチャネル | TX | RX |
UART0 | 0 (12,17) | 1 (13,18) |
UART1 | 8 (4) | 9 (5) |
Pi Pico用USBシリアル変換基板ではTX/RXピンをGP0/GP1(UART0)とGP4/GP5(UART1)のどちらかを選択します。
基板の設定
Pi Pico用USBシリアル変換基板のジャンパーの設定方法です。
基板上のジャンパーにショートピンを挿入して設定します。UART0を使う時にはJP1、JP2の2-3にショートピンを挿入し、UART1を使う場合にはJP1、JP2の1-2にショートピンを挿入します。
JP NO. | UART0 | UART1 |
JP1 | 2-3 | 1-2 |
JP2 | 2-3 | 1-2 |
ここではUART0を使用します。
注意!! 基板上の、シルクで書かれた表は間違っています。
サンプルプログラム
このプログラムはPi Pico用USBシリアル変換基板と接続したWindows PCとデータの送受信を確認するものです。手順は
- PCから「hi pico, how are you?」と送信する
- Pi PicoがUART経由で受信しその内容を評価する
- 結果「hi pico, how are you?」と一致したら「it’s OK. how are you?」という文字列をArduino IDEのシリアルモニターと送信元のWindows PCに送信する
- 不一致の場合は何もしない
というものです。
void setup() { Serial.begin(115200); // Serial2.setRX(5); // Serial2.setTX(4); Serial1.begin(9600); } void loop() { if (Serial1.available()) { String message = Serial1.readStringUntil('\n'); if (message == "hi pico, how are you?") { Serial.println("it's OK. how are you?"); Serial1.println("it's OK. how are you?"); } } }
尚、ボードマネージャーをArduino Mbed OS RP2040 Boardsとしている場合、TX/RXのGPピンの設定を標準から変更する事はできないようでコンパイル時にエラーがでます。
サンプルプログラムの解説
setup()関数で
Serial.begin(115200);
はUSB CDC(USBシリアル)の初期設定で
Serial1.begin(9600);
はUART0の初期設定(ボーレートを9600)をしています。
// Serial2.setRX(5); // Serial2.setTX(4);
コメントアウトした2行はUART1を使用する場合の設定プロブラムになります。この2行のコメントを解除し、コード中のSerial1をSerial2に変更することでUART1を使う場合のコードになります。UART0がSerial1に、UART1がSerial2となる事に注意します。
また、UART1を使う場合は基板のJP1、JP2は1-2をショートします。
loop()関数では
if (Serial1.available()) {
で、UART0の受信データがある間この次以降のコードを実行します。
String message = Serial1.readStringUntil('\n');
は、\n が来るまでの受信データをmessageバッファに代入します。
Serial.println("it's OK. how are you?");
は、Arduino IDEのシリアルモニター(USB CDC(USBシリアル))に「it’s OK. how are you?」を出力します。
Serial1.println("it's OK. how are you?");
は、PC(UART0)に「it’s OK. how are you?」を出力します。
シリアル通信の確認
それでは、実際にシリアル通信の確認をしましょう。
Pi PicoのマイクロUSBはArduino IDEを実行しているMacに、Pi Pico用USBシリアル変換基板のType-CコネクタはWindows PCに接続しています。
確認は以下の手順で行いました。
- WindowsでTeraTermを起動し、メニューの「設定(S)」-「シリアルポート(E)…」でCOMポートの指定とボーレートの設定する
- あらかじめ用意した「hi pico, how are you?」と書かれたテキストファイルを「ファイル(F)」-「ファイル送信(S)…」でそのファイルを選択し「開く」をクリック
すると、MacのArduino IDEのシリアルモニターに「it’s OK. how are you?」が表示され、
WindowsのTeraTermの画面に「it’s OK. how are you?」と表示されるのが確認できます。