もよいめも

不定期更新ものづくりブログ

【Raspberry Pi Pico】シリアル通信( Software Serialも)をArduino IDEで使い倒す!

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
誰かおごってください。