Raspberry Pi Picoでシリアル通信する方法

 RaspberryPiPico(ラズパイPico)のシリアル通信(UART通信)をArduino環境から行ってみます。

 ArduinoIDEを使う場合、基本的な使い方はArduinoとほぼ同じです。

▼ラズパイPicoをArduino開発環境の準備はこちら▼

 今回の内容はearlephilhower/arduino pico 前提で説明していきます。

スポンサーリンク

概要

 Pico はハードウェアシリアル(UART0/UART1)が2系統、他にUSBシリアルポートもあるため、実質3系統ということになるのかな?また割り当てられるピン(RX、TX)も複数準備されているためArduinoUNOと比べると使い勝手は良さそうです。

 ArduinoIDEで利用する場合、SirialUSB/UART クラスから

SerialUSB  Serial;
SerialUART Serial1; // HW UART 0
SerialUART Serial2; // HW UART 1

でそれぞれ変数が定義されてます(裏でインスタンス化されてます)。全部は確認してませんが、関数はArduinoUNOとほぼ同等のものが使えると思います。

 earlephilhower/arduino picoでは、シリアル通信用(RX/TX)のピン割り当て関数が準備されてますが、Arduino公式のライブラリ(ボード)では、今のところ(2021/5)、ライブラリの外からピンを変更することができなさそう。いずれにせよ使い方はほぼArduinoと同様です。

シリアル通信の使い方

 順に使い方です。

 まずは設定方法。基本的にはArduinoと全く同じ

Serial.begin(115200);

.beginでシリアル通信が開始されます。

 汎用I/Oピンを使ってシリアル通信する場合は、

Serial1.setRX(pin);
Serial1.setTX(pin);
Serial1.begin(baud);

▲RX/TXを任意ピンに割り当ててからシリアル通信を開始します。割り当て可能なピンがあるため注意が必要です。

// Serial
#define PIN_SERIAL1_TX (0u)
#define PIN_SERIAL1_RX (1u)

#define PIN_SERIAL2_TX (8u)
#define PIN_SERIAL2_RX (9u)

▲デフォルトのピンアサインはこのようになっているようです。

 通信方法もArduinoのまま。

Serial.available();
Serial.readBytes();
Serial.write();
Serial.print();
Serial.println();

▲とりあえずここら辺の関数試してみましたが問題ありませんでした。

シリアルモニター例

 ArduinoIDEのシリアルモニター/プロッターも試しに使ってみましたがそのまま使えました。

▼テストソース▼

int i = 0;
void setup() {
  Serial.begin(115200);
}
void loop() {
  if (i < 360) {
    Serial.print(sin(radians(i)));
    Serial.print(',');
    Serial.println(cos(radians(i)));
    i++;
    delay(5);
  }
  else {
    i = 0;
  }
}

▲sin/cosカーブをシリアル出力しているだけのソースです。

▲問題なくリアルタイムモニターできます。

 Pico でもほぼ Arduino とほぼ全く同じ記述でOKのため、過去の遺産がそのまま使えてほんとに便利です。

コメント