YD-RP2040とRaspberryPi Pico

コンピュータ、組み込み

Arduino環境にRaspberryPi Picoが登場してからいくつかのジェネリックも登場しました。
RaspberryPi Picoと互換性も高く、コスパの良いYD-RP2040を紹介します。

特徴

YD-RP2040の特徴

RaspberryPi Pico のジェネリック基板としては、完全ではないが十分な互換性があります。
RaspberrpPi Picoよりも使えるピンの数や機能が多く、フラッシュメモリの搭載量をラインナップから選択することができます。

差分項目YD-RP2040RaspberryPi Pico
接続Type CMicro B
フラッシュMemory4, 8, 16MB
3種類のラインナップ
2MB
ADC4
GPIO2826
ボタンBOOT
RESET
USER (GP24)
BOOT
LED青(GP25)
WS2812(GP23)
緑(GP25)

4MByte品も所有していますが、電源が故障しました。
部品の型番、調査方法と修理方法はこちらの記事にまとめました。

ピン配置

外観

ピン番号のシルク表示が表にも裏にもあるので、作業はしやすい。
フラッシュメモリのサイズが違っても外観が同じなので、シールやピンヘッダの色を変えて識別しています。

左が4MB, 右が16MB、外観が同じなので、ピンヘッダの色やシールで識別しています。

使ってみて

国内での流通はあまりないのが残念ですが、基板自体はRaspberryPi Picoの上位互換と考えていいと思います。
メモリは最大の16MBを使っていますが、いまだに2MBすら使えていないので今のところ不要です。
ボタンやLEDも充実しているので、これ一枚でRaspberryPi Picoよりも充実した評価ができます。

準備

使い方は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
※1 x.x.x Jul/2022 では1.9.3
※2 xx は 使用されるボードのメモリサイズを選択する

WS2812を制御するためのライブラリにはAdafruit NeoPixelライブラリを使用します。

検索neopixel
ライブラリ名Adafruit NeoPixel by Adafruit(x.x.x)※
※x.x.x Jul/2022 では 1.10.5

トラブル

電源が入らない

現象は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青が点灯する様子。

赤いLEDは電源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秒ごとに色の変化が確認出来ました。
かなり最大輝度はかなり明るいので、直視すると残影が残ります。

関連リンク

コメント

タイトルとURLをコピーしました