RP2040搭載基板の中で比較的入手性もよく安価に使用できる Waveshare RP2040-Zeroについて
とPIMORONI のTiny 2040を使ってみました。
Arduino環境で使用できる最小クラスの基板を紹介します。
RP2040-Zero と Tiny 2040 比較
外観
どちらも最小クラスの基板です。
RP2040ZeroのほうがGPIOを多く引き出している分大きい。
主な仕様比較
比較項目 | RP2040-Zero | Tiny 2040 |
---|---|---|
外観 | ![]() | ![]() |
接続 | Type C | Micro C |
フラッシュMemory | 2MB | 8MB |
ADC | 4 | 4 |
I2C | 2 | 2 |
SPI | 2 | 1 |
GPIO※1 | 20 背面パッドパターンx9 | 11 |
ボタン | BOOT RESET | BOOT RESET |
LED | GP16 W2182 | フルカラーLED 青 GP20 緑 GP19 赤 GP18 |
価格 | \650~\800 | \1,400~\1,700 |
ピン配置の違い
ピン配置はよく似ていますが、RP2040-Zeroの拡張されたGP14, GP8 以外にGP15がTiny 2040ではGNDなので、置き換えがある場合は配慮が必要です。
RP2040-Zero
ピン配置
外観
後方(TypeCコネクタの反対側)のスルーホールにピンヘッダをつけてしまうと、ブレッドボードが使えなくなります。
背面のパッドパターンにもGPIOが9ピン+GNDありますが、サイズと間隔がなかなかの難関。
Tiny 2040
ピン配置
外観
RP2040-ZeroとTiny 2040使ってみて
どちらも小型なので400穴ブレッドボードでも余裕で複数のモジュールを配線することができる。
ピン数が少ないことでブレッドボードの挿抜が楽。
[2022/12/22 WaveshareのRP2040-Zeroのドングルタイプの記事を追加]
準備
使い方はRaspberrpPi Picoと同じですので、こちらのリンクを参照してください。
ライブラリ
Arduino IDEのボードマネージャからRP2040-Zero, Tiny 2040用のライブラリのインストールとボードの選択をします。
どちらも同じライブラリを使用します。
“変更する設定”にてメモリサイズを変更してください。
検索 | RP2040 |
ボードライブラリ | Raspberry Pi RP2040 Boards(x.x.x)※1 |
選択するボード | Raspberry Pi RP2040 Boards(x.x.x) > Generic RP2040 |
変更する設定 | Tools > Flash Size > xxMB(no FS)※2 |
※2 RP2040-Zero は 2MB(no FS), Tiny 2040 8MB(no FS)を選択する
W2812を制御するためのライブラリにはAdafruit NeoPixelライブラリを使用します。
検索 | neopixel |
ライブラリ名 | Adafruit NeoPixel by Adafruit(x.x.x)※ |
基本スケッチ(RP2040-Zero)
W2812
サンプルスケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence//【スケッチの説明】
【スケッチの説明】
NeoPixel搭載RP2040基板で使用できます。
実装 W2812を点灯させます。
1秒間隔で、赤->緑->黄->青->紫->水->白 の順で点灯させます。
【バージョン情報】
2022/7/6 : 新規
2022/9/8 : RP2040-Zero用にBuilt In LEDのピン番号を変更 23 -> 16
**********************************************************************/
#include <Adafruit_NeoPixel.h>
#define DIN_PIN 16 // NeoPixel の出力ピン番号はGP16
#define LED_COUNT 1 // LEDの連結数
#define WAIT_MS 1000 // 次の点灯までのウエイト
#define BRIGHTNESS 64 // 輝度
Adafruit_NeoPixel pixels(LED_COUNT, DIN_PIN, NEO_GRB + NEO_KHZ800);
void setup()
{
pixels.begin(); //NeoPixel制御開始
}
void loop()
{
pixels.clear();
//pixels.Color(Red, Green, Blue)で、パレット情報を作成する。
//赤点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, 0, 0));
pixels.show();
delay(WAIT_MS);
//緑点灯
pixels.setPixelColor(0, pixels.Color(0, BRIGHTNESS, 0));
pixels.show();
delay(WAIT_MS);
//赤 + 緑 で 黄点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, BRIGHTNESS, 0));
pixels.show();
delay(WAIT_MS);
//青点灯
pixels.setPixelColor(0, pixels.Color(0, 0, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
//赤 + 青 で 紫点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, 0, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
//緑 + 青 で 水点灯
pixels.setPixelColor(0, pixels.Color(0, BRIGHTNESS, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
//赤 + 緑 + 青 で 白点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
}
スケッチの説明
Adafruit のAdafruit NeoPixel by Adafruitを使用します。
1秒ごとに、LEDの色を変化させます。
赤->緑->黄->青->紫->水->白
結果
1秒ごとに色の変化が確認出来ました。
最大輝度はかなり明るいので、直視すると残影が残ります。

サンプルスケッチ(Tiny 2040)
フルカラーLED
サンプルスケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence//
【スケッチの説明】
Tiny2040基板で使用できます。
Built In LED(フルカラー)を点灯させます。
1秒間隔で、赤->緑->黄->青->紫->水->白 の順で点灯させます。
【バージョン情報】
2022/9/9 : 新規
***********************************************************************/
#define LED_R 18 //赤のピン番号
#define LED_G 19 //緑のピン番号
#define LED_B 20 //青のピン番号
#define WAIT_MS 1000 // 次の点灯までのウエイト
#define BRIGHTNESS 64 // 輝度
void setup()
{
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
}
void loop()
{
//Tiny 2040のLEDはLow Active なので、LOWで点灯
//赤点灯
Tiny_LED(BRIGHTNESS, 0, 0);
delay(WAIT_MS);
//緑点灯
Tiny_LED(0, BRIGHTNESS, 0);
delay(WAIT_MS);
//赤 + 緑 で 黄点灯
Tiny_LED(BRIGHTNESS, BRIGHTNESS, 0);
delay(WAIT_MS);
//青点灯
Tiny_LED(0, 0, BRIGHTNESS);
delay(WAIT_MS);
//赤 + 青 で 紫点灯
Tiny_LED(BRIGHTNESS, 0, BRIGHTNESS);
delay(WAIT_MS);
//緑 + 青 で 水点灯
Tiny_LED(0, BRIGHTNESS, BRIGHTNESS);
delay(WAIT_MS);
//赤 + 緑 + 青 で 白点灯
Tiny_LED(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
delay(WAIT_MS);
}
//Build In LED を点灯させます。
//引数
//R : (0 to 255) 赤の輝度
//G : (0 to 255) 緑の輝度
//B : (0 to 255) 青の輝度
void Tiny_LED(const unsigned char R, const unsigned char G, const unsigned char B)
{
const unsigned char AnalogMax = 255;
analogWrite(LED_R, AnalogMax - R);
analogWrite(LED_G, AnalogMax - G);
analogWrite(LED_B, AnalogMax - B);
}
スケッチの説明
フルカラーLEDを点灯させます。
3色のLEDが1個に集約されたものですが、1色ずつ点灯させ混ぜ合わせることでフルカラーになります。
Tiny 2040 ではLowActiveになっているので、Lowが点灯、HIGHが消灯になります。
PWM制御では0に近いほど明るく、255に近いほど暗くなります。
1秒ごとに、LEDの色を変化させます。
赤->緑->黄->青->紫->水->白
結果
1秒ごとに色の変化が確認出来ました。
混色はそれほどきれいに混ざりあっていないです。

トラブル
CPU Speed
現象
Tiny 2040のスケッチ書き込み後、フルカラーLEDが半発光状態でシリアル認識されなくなった。
書き込んだスケッチの動作もしない。
原因
CPU Speed に 133MHzを選択すると発生する模様。
因果は不明ですが、125MHz以下を選択すると期待通りの動作をしました。
generic RP2040ライブラリから選択できるCPU Speedの設定を確認してみると以下の結果になりました。
CPU Speed(MHz) | 動作可否 |
---|---|
50 | ○ |
100 | ○ |
125 | ○ |
133 | × |
150(Over Clock) | × |
175(Over Clock) | × |
200(Over Clock) | × |
225(Over Clock) | × |
250(Over Clock) | × |
300(Over Clock) | × |
対応
BOOTボタンを押して再起動し、初期化を行った。
CPU Speedを125MHz以下に設定して動作させた。
BOOTボタンを押して基板の初期化をする方法はこちらの記事の「準備」を参照してください。
コメント