Raspberry Pi Pico(RP2040)は、計3つのハードウェアでのシリアル通信に対応しています。
1つはUSB、残りの2つはペリフェラルで、対応しているGPIO中から指定してやることで使えるようになります。
なお、本記事では以下のボードライブラリを使用しています。
github.com
より詳細な内容はgithub上に記載されているドキュメントを参照してください。
ちなみに、マイクロUSBのuart通信に関しては以下のドキュメントにあるように、ボーレートが固定されているようです。
Serial is the USB serial port, and while Serial.begin() does allow specifying a baud rate, this rate is ignored since it is USB-based. (Also be aware that this USB Serial port is responsible for resetting the RP2040 during the upload process, following the Arduino standard of 1200bps = reset to bootloader).
Serial Ports (USB and UART) — Arduino-Pico 1.0.0 documentation
ハードウェアシリアル通信
以下に通信に使えるピン一覧を貼っておきます。
Serial自体は1と2しかありませんが、多くのピンが通信に対応しているので、配線が何かと楽になっていいですね~
ポート | IDE上の表記 | デフォルトピン1(TX、RX) | 対応ピン2(TX、RX) | 対応ピン3(TX、RX) |
UART0 | Serial1 | GP0、GP1 | GP12、GP13 | GP16、GP17 |
UART1 | Serial2 | - | GP4、GP5 | GP8、GP9 |
サンプルプログラムは以下の通りです。
Serial1のGP0、GP1を使用する場合は「setTX(),setRX()」関数が不要ですが、
それ以外のピンを使用する場合には、以下のように指定してやらないといけないので注意してください。
void setup() { Serial2.setTX(4); Serial2.setRX(5); Serial2.begin(9600); } void loop() { Serial2.println("TEST"); delay(100); }
ソフトウェアシリアル通信
今回使っているボードライブラリはRaspberry Pi PicoのPIO(Programmable I/O)機能を用いた、ソフトウェアシリアルにも対応しており、最大8つのシリアルポートを実行可能です。
PIOはCPUから独立しているため、CPUのリソースを必要としないそうです。
...これは強い。
実際に動くかは確かめていませんが、一応例も載せておきます。(ボードのバージョン2.0.1でのコンパイルを確認)
SerialPIO myserial(2/*TXpin*/, 3/*RXpin*/,32 /*FIFOサイズ(未指定の場合32バイト)*/); void setup() { myserial.begin(9600); } void loop() { myserial.println("TEST"); delay(100); }
手軽に通信を確かめる機器がほしいです
akizukidenshi.com
誰かおごってください。