ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Raspberry Pi Pico/Windows】Raspberry Pi Picoでデュアルコアを使ってみる

 前にC/C++Raspberry Pi Picoを使うための環境構築方法の記事を書きました。

 最近またちょっと触ってみようと思い色々調べたところ、Arduino IDEでも簡単に開発できるようになっていたのとデュアルコアの処理をやってたなかったのでやってみようと思い記事にした次第です。


 では、始めます。


1:Arduino IDERaspberry Pi Picoを使えるようにする
 まずはArduino IDERaspberry Pi Picoを使えるようにします。

 Arduino IDEを開いて「ファイル」→「環境設定」を選択します。

 環境設定画面の「追加のボードマネージャのURL」の右側にあるアイコンをクリックします。

 クリックしたら以下のURLをコピペし、そのURLを一行追加してOKをクリックします。

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

 URLが追加されていることを確認して「OK」をクリックします。

 次に「ツール」→「ボード」→「ボードマネージャ」を選択します。

 検索欄に「pico」と入力すると色々と出てきますが「Raspberry Pi Pico/RP2040」と書かれているものの「インストール」ボタンをクリックしてインストールします。

 これでArduino IDERaspberry Pi Picoを使えるようになりました。

 ※ちなみに検索欄で出てきたボードの一番最初に出てくる「Arduino Mbed OS RP2040 Boards」はArduino公式が出しているものですが、こちらでは簡単にデュアルコアを使えないようだったのでインストールはしていません。一応共存はできるようなので両方インストールしていても大丈夫ですが、今回のデュアルコアを使うには「Raspberry Pi Pico/RP2040」をインストールしておく必要があります。


2:Raspberry Pi Picoでデュアルコアを使う方法
 Raspberry Pi PicoはCore 0とCore 1の2つのコアがあります。

 以下の書き方でどちらで処理させるかを指定することができます。

/* Core 0の処理 */
void setup() {
}

void loop() {
}

/* Core 1の処理 */
void setup1() {
}

void loop1() {
}

 「setup」と「loop」関数はCore 0で処理、「setup1」と「loop1」関数はCore 1で処理というとてもわかりやすく簡単な書き方で記述できます。


3:Raspberry Pi Picoでデュアルコアを使ったサンプル
 書き方がわかったので実際にサンプルを動かしてみます。

・pico_dual_test.ino

/**
 * Raspberry Pi Picoでデュアルコアテスト
 */
const int LED_PIN = 25;

int count = 0;
bool led_flg = true;
 
/* ---- Core 0の処理 ---- */
void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("core0:start....");
}

void loop() {
  Serial.println(count);
  count = count + 1;

  if (count > 100) {
    count = 0;
  }
  delay(1000);
}

/* ---- Core 1の処理 ---- */
void setup1() {
  pinMode(25, OUTPUT);
  delay(1000);
  Serial.println("core1:start....");
}

void loop1() {
  count = count + 1;
  digitalWrite(LED_PIN, led_flg);
  led_flg = !led_flg;
  delay(2000);
}

 サンプルを少し解説するとCore 0の方で1秒ごとにカウントアップとシリアルでその値を表示させています。Core 1の方ではボードにあるLEDを点滅させつつ、Core 0で行っているカウントアップの変数に2秒ごとにさらに1を追加しています。

 上記のサンプルのスケッチを書き込む際は「ボード」→「Raspberry Pi RP2040 Boards」→「Raspberry Pi Pico」を選択します。

 デフォルトの値のまま「シリアルポート」から該当のポートを選択します。

 あとは書き込みボタンをクリックして書き込みます。

 書き込む時は一度Raspberry Pi Picoとの接続が途切れ、エクスプローラーのファイル画面が表示されますがすぐに消えます。それが消えたら書き込みは終了しています。

 初回の場合はドライバのインストールが走る場合がありますが、その場合はもう一度ポートを選択しなおしてから書き込みを実行してみてください。

 サンプルの書き込みが終了すると、Raspberry Pi PicoのボードにあるLEDが2秒ごとに点滅します。シリアルモニタを開くと以下のようにちゃんとCore 1でのカウントアップも反映されているのがわかると思います。


 以上がRaspberry Pi Picoでデュアルコアを使う方法になります。

 Arduino IDEで開発ができるという手軽さもありますし、何よりデュアルコアでの書き方も簡単だったので同時並行で色々処理させたい場合は非常に便利かと思います。

 またRaspberry Pi Picoは価格としてもかなり安くデュアルコアでの処理も行えるので、無線通信などをしないのであればこれが一番使いやすいボードなのではないかと個人的には思います。


・参考資料