Arduino環境にRaspberryPi Picoが登場してからいくつかのジェネリックも登場しました。
RaspberryPi Picoと互換性も高く、コスパの良いYD-RP2040を紹介します。
特徴
YD-RP2040の特徴
RaspberryPi Pico のジェネリック基板としては、完全ではないが十分な互換性があります。
RaspberrpPi Picoよりも使えるピンの数や機能が多く、フラッシュメモリの搭載量をラインナップから選択することができます。
差分項目 | YD-RP2040 | RaspberryPi Pico |
---|---|---|
接続 | Type C | Micro B |
フラッシュMemory | 4, 8, 16MB 3種類のラインナップ | 2MB |
ADC | 4 | 3 |
GPIO | 28 | 26 |
ボタン | BOOT RESET USER (GP24) | BOOT |
LED | 青(GP25) WS2812(GP23) | 緑(GP25) |
RaspberryPi Picoと互換があり、とにかく安い基板の場合Ali ExpressではRP2040-Aという基板を販売しています。
フラッシュメモリは1MBしかないのであまり大きなスケッチやデータを保存することはできません。
[2023/4/21] YD-RP2040の廉価版基板 YD-RP2040-Liteを使ってみました。
Raspberry Pi Pico 基板サイズ互換一覧
RaspberryPi Picoのもっと詳しい使い方はこちらで紹介しています。
ピン配置
外観
ピン番号のシルク表示が表にも裏にもあるので作業はしやすい。
フラッシュメモリのサイズが違っても外観が同じなので、シールやピンヘッダの色を変えて識別しています。
使ってみて
国内での流通があまりないのが残念ですが、基板自体はRaspberryPi Picoの上位互換で使用できました。
Ali Expressでは\500~\600/1枚(送料込み), 国内ショッピングサイトでは\900~\1,000(送料込み)あたりが目安になると思います。
メモリは最大の16MBを使っていますが、いまだに2MBすら使えていないので今のところ不要です。
ボタンやLEDも充実しているので、これ一枚でRaspberryPi Picoよりも充実した評価ができます。
少し故障が多いところもあります。
4MByte品も所有していますが、電源が故障しました。
部品の型番、調査方法と修理方法はこちらの記事にまとめました。
YD-RP2040以外のRaspberry Pi Pico の上位互換
VCC-GNDのESP32 S2搭載基板について記事を書きました
準備
使い方はRaspberrpPi Picoと同じですので、こちらのリンクを参照してください。
ライブラリ
Arduino IDEのボードマネージャからYD-RP2040用のライブラリのインストールとボードの選択をします。
検索 | 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 xx は 使用されるボードのメモリサイズを選択する
WS2812を制御するためのライブラリにはAdafruit NeoPixelライブラリを使用します。
検索 | neopixel |
ライブラリ名 | Adafruit NeoPixel by Adafruit(x.x.x)※ |
トラブル
電源が入らない
現象はUSBからの電源供給からは電源LEDが微弱な点滅をしてスケッチが動作しない。
VINからの供給であれば動作するという現象です。
この現象の修理の様子はこちらの記事で紹介しています。
基本スケッチ
YD-RP2040 のペリフェラルの使い方についてサンプルを記載します。
ユーザボタン
サンプルスケッチ
//Programing by たまねぎ
//【スケッチの説明】
//YD-RP2040基板で使用できます。
// USERボタンが押下されている間、ビルトインLEDを点灯させます。
//
//【バージョン情報】
// 2022/7/7 : 新規
#define USER_BUTTON 24 //Built In LED は GP24
#define BUILT_IN_LED 25 //USER Button は GP25
void setup()
{
pinMode(BUILT_IN_LED, OUTPUT); //ビルトインLEDを使用します
pinMode(USER_BUTTON, INPUT_PULLUP); //ユーザボタンをプルアップして使用します。
}
void loop()
{
PinStatus Val = digitalRead(USER_BUTTON); //ボタンの状態を読み取る, Pull Upしているので押下状態は Low, 押していない場合は Highです。
digitalWrite(BUILT_IN_LED, !Val); //LEDの点灯、または消灯を行います。 PullUpしたボタンの状態を反転させます。
}
スケッチの説明
ユーザボタンを押下している間点灯。
ユーザボタンを押していない間消灯します。
ユーザボタンはプルアップして使用します。
押下状態が Low, 通常状態が High です。
結果
画像左がアイドリング状態。
画像右が、ボタン押下状態で、LED青が点灯する様子。
WS2812
サンプルスケッチ
//Programing by たまねぎ
//【スケッチの説明】
//YD-RP2040 または、NeoPixel搭載RP2040基板で使用できます。
//実装 W2812を点灯させます。
//1秒間隔で、赤->緑->黄->青->紫->水->白 の順で点灯させます。
//
//【バージョン情報】
// 2022/7/6 : 新規
#include <Adafruit_NeoPixel.h>
#define DIN_PIN 23 // NeoPixel の出力ピン番号はGP23
#define LED_COUNT 1 // LEDの連結数
#define WAIT_MS 1000 // 次の点灯までのウエイト
#define BRIGHTNESS 128 // 輝度
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);
}
スケッチの説明
1秒ごとに、LEDの色を変化させます。
赤->緑->黄->青->紫->水->白
結果
1秒ごとに色の変化が確認出来ました。
かなり最大輝度はかなり明るいので、直視すると残影が残ります。
コメント
WS2812を利用する場合は基板上のRGBパッドをショートさせる必要がありますね。
当方が購入したものは初めからRGBパッドがショートされていたため気が付きませんでした。
手元のYD-RP2040の半田をはがしてオープンにしてみたところWS2812は点灯しなくなりました。
購入時期や店舗によっては処置にばらつきがあるのかもしれませんね。
ご連絡ありがとうございました。