Arduino IDEでRP2040-ZERO(1) | お父にゃんの電子工作

お父にゃんの電子工作

暇なおじさんが、電子工作(主にラジオ製作)をして勝手な感想を書く

テーマ:

これまで、Raspberry pi picoやRP2040-ZEROをMicroPythonで動かしてきた。

まぁ、これはこれで良かった。

MicroPythonはCのように{}で括らなくて良いので読みやすい。

エラーになった時に、どこで発生したのかが分かりやすくデバッグしやすい。

コンパイル⇒書き込みの手間も無いので、すぐに試せるのも、おじさんのような初心者にはありがたい。

そして、おじさんのPythonの勉強にもなった。

 

しかし、以前にも書いたがArduinoの方がライブラリや製作例が圧倒的に豊富で、電子工作するにはありがたい。今回はRP2040-ZEROをArduino IDEで動かしてみたい。

 

調べてみると、Arduino IDEでは2つの開発環境が有るらしい。

 

1つ目はArduino公式の開発環境

Arduino IDEのボードマネージャを開いてRP2040で検索すると出てくる。

詳細情報をクリックすると、Arduinoのホームページが出てくる。

ホームページ内でRP2040を検索すると、「Arduino Nano RP2040」に対応してるよ、Raspberry pi pico Wも動くよ、的なことが書いてありそう。

(英語なので詳しくは読んでない)

Mbed OSってARMが作ったRTOSらしい。これの上に環境を作っているようだ。

 

2つ目はこちら↓ Earle F. Philhower氏が作った物らしい

RP2040 Arduinoで検索するとこちらを使う記事が多い。

 

 

どちらを使うのが正解なのか、おじさんには分からない。

試しにArduino公式版「Arduino Mbed OS RP2040 Boards」をインストールしてみる。

ボードマネージャーからインストールボタンを押すだけの簡単作業。

 

インストールが完了したので内蔵のカラーLEDを光らせてみる。

以前にも使ったNeoPixelのライブラリを使う。

<スケッチ>

#include <Adafruit_NeoPixel.h>
// RGBLEDに出力するピン番号
#define RGBLED_OUTPIN    16
// Arduinoにぶら下がっているRGBLEDの個数
#define NUMRGBLED        1
 
#define R_max 110
#define G_max 90
#define B_max 250
 
// RGBLEDのライブラリを生成する
//(色指定はRGBの並びで行う、LEDの速度は800KHzとする)
Adafruit_NeoPixel RGBLED = Adafruit_NeoPixel(NUMRGBLED, RGBLED_OUTPIN,
                                              NEO_RGB + NEO_KHZ800);
uint8_t R,G,B,i;
 
void setup(){
  R=R_max;
  G=0;
  B=0;
  RGBLED.begin() ;                   // RGBLEDのライブラリを初期化する
  RGBLED.setBrightness(200) ;        // 明るさの指定(0-255)を行う
  RGBLED.setPixelColor(0, R, G, B) ; // 初期値。
  RGBLED.show() ;                    // LEDにデータを送り出す
}
 
void loop(){
  for (i = 0; i <= 9; i++) {
    B= 0;
    R= R_max-(i*(R_max/10));  
    G= i*R_max/10;
    RGBLED.setPixelColor(0, R,G,B) ;   // 色設定
    RGBLED.show() ;                    // LEDにデータを送り出す
    delay(250);
  }
  for (i = 0; i <= 9; i++) {
    R = 0;
    G = G_max-(i*(G_max/10));
    B = i*(B_max/10);
    RGBLED.setPixelColor(0, R,G,B) ;   // 色設定
    RGBLED.show() ;                    // LEDにデータを送り出す
    delay(250);
  }
  for (i = 0; i <= 9; i++) {
    G = 0;
    B = B_max-(i*(B_max/10));
    R = i*R_max/10;
    RGBLED.setPixelColor(0, R,G,B);   // 色設定
    RGBLED.show();                    // LEDにデータを送り出す
    delay(250);
  }
}

 

一番最初に書き込む際には、BOOTボタンを押したままUSBポートに繋ぎ、書き込みが終わるまでBOOTボタンを押し続ける必要が有る。(最初書けなくて焦った。)

2回目以降は何もする必要は無い。

少しづつ色を変えながら怪しげに光る。

おお、順調順調

 

 

 

 

次に、ハードウェア依存の多いタイマー割込みを試す。

CPUが違うと、いつもプログラムの書き直しが必要になる。初心者向けに標準化して欲しい。

 

何も考えずに、こちら↓のページから、タイマー割込みのサンプルスケッチをコピペしてみる。

 

すると、ライブラリが無い、といってエラーになる。

どうやらEarle F. Philhower版↓固有のコードのようだ。

 

公式版を改めて探してみる。

なら、こちら↓ならどうだろう。知らないライブラリのincludeも無いから動くかも?

 

結果は、やはり'add_repeating_timer_us' was not declared in this scopeとなりコンパイルできない。

 

むむむむ・・・

他にも検索していたらArduino公式↓があった

タイマー割込み使いたければ、github、もしくはライブラリマネージャーから、このライブラリをインストールしろと言うことらしい。

え~、標準機能じゃないの~、なんだかな~。

 

まぁ、他にもanalogWriteとかも試したけどanalogWriteFreqが指定できないとか、かゆいところに手が届かない感じがしたので、Arduino公式版は一旦断念することにする。

 

ボードマネージャーから削除ボタンを押して、アンインストール。

さようなら、Arduino公式版

 

次回はこっち↓を試してみる

 

 

「いろいろ試行錯誤してみるのも良いにゃ」