【Arduino】RP2040-ZERO互換基板を使う

it

小型、安価、入手性が良いく高性能なWaveshareのRP2040-ZEROの互換基板を使いました。
WaveshareからはRP2040-ZEROの派生基板も多く発売されています。
各基板を比較し特徴をピックアップします。

記事の概要

ESP32-C3が搭載された小型のマイコン基板Super Miniについて複数の基板を試した内容です。
基板ごとの違いを主に、使用した経験での信号上の注意点なども記載しました。

ESP32C3 Super Mini

簡単紹介

RP2040を搭載した小型の基板。
安価で入手性が良く、機能拡張バージョンも豊富に出回っている。

当ページでは左から以下の表記とします。
・RP2040-Zero
・RP2040-NANO
・Pico Bit RP2040
・Super Mini RP2040
・RP2040-One
・RP2040-Matrix
・RP2040-Tiny

RP2040の基本的な使い方はこちらの記事で紹介しています。

◆入手

Ali Expressではすべて\350~\500/個(送料込み)が目安で、まとめ買いで送料の節約も期待できます。
AmazonでもESP32 C3 Super Mini(K2)は扱っているようです。

◆関連記事

ESP32C3搭載 小型で安価なSuperMini ESP32C3の記事

ピン配置

◆RP2040-Zero

◆RP2040-NANO

◆Pico Bit RP2040

◆Super Mini RP2040

◆RP2040-One

◆RP2040-Matrix

◆RP2040-Tiny

外観

◆RP2040-Zero

◆RP2040-NANO

◆Pico Bit RP2040

◆Super Mini RP2040

◆RP2040-One

◆RP2040-Matrix

◆RP2040-Tiny

使ってみた

◆開発

Arduino環境で開発を行います。

ボードライブラリは「Raspberry Pi Pico/RP2040 by Earle F. Philhower, III」の「Raspberry Pi RP2040 Boards(x.x.x)」を使います。
選択するボードはWaveshare製品は専用ボードを使用します。
ライブラリに見つからないボードは「RP2040-Zero」を使用します。

◆差異比較

RP2040
-Zero
RP2040
-NANO
Pico Bit
RP2040
Super Mini
RP2040
RP2040
-One
RP2040
-Matrix
RP2040
-Tiny
入手価格350~450350~450500~600450~600800~1,000600~800550~650
接続Type-CType-CType-CType-C
端子あり
Type-AType-CType-C
+ FFC
リセット
ボタン
有(表面)有(表面)有(表面)
有(PAD)
有(表面)有(裏面)有(書き込み基板側)
PAD
GPIO
9979900
RGB LED
11111251
ユーザLED
0001000
S/W Debugger有(PAD)有(PAD)

入手価格は目安です。購入店や時期により変動します(送料込み)。
国内入手では600~1,00円程高い感覚です。

ピン配置
基板のサイドエッジのピン配置はすべて共通です。
背面のパッドパターンに個性があり、使えるGPIOの数、並び、ピッチともにバラバラです。

LED
単色ユーザLEDが実装されているのは「Super Mini RP2040」だけです。
全ての基板にRGB LED(WS2812)が実装されていて、「RP2040-Matrix」は5×5の合計25個のLEDが使えます。

スケッチの書き込み
「RP2040-One」のコネクタ形状はType-Aオスです。
書き込み方法は他のTypeCと同じです。

「RP2040-Tiny」は書き込み基板と本体をFFCコネクタで接続した後は他のTypeCと同じです。

「Super Mini RP2040」はTypeCの書き込み他、USB端子(D+, D-)のパッドが出ているので、USB配線を接触させて書き込むこともできます。

BOOTボタン、RESETボタン
「RP2040-Tiny」は書き込み基板側に実装されています。
本体と離れた位置に設置できるので実装設計の自由度があります。

「RP2040-Matrix」は基板の背面に実装されていますが、ブレッドボードに実装した状態ではとても押しにくいです。

「RP2040-NANO」は小ぶりなボタンを採用していますが作業性には影響ありません。

「Super Mini RP2040」はリセットボタンがありませんが、背面にパッドパターンでEN(Reset)が利用できます。

ユニバーサル基板
基板後方のスルーホールは2.54ピッチの行列からズレているものがあります。

・RP2040-One : 使用できません。
・RP2040-Nano : 使用できるが若干ズレ有。
・Super Mini RP2040 : 使用できるが若干ズレ有。

RP2040-NANOは画像ではピンヘッダは斜めに見えませんが、ユニバーサル基板のスルーホールとの摩擦を感じます。

SWD
Super Mini RP2040とPico Bit RP2040には背面にSWD用PADがあります。
ジュンフロン線など細いワイヤーをはんだ付けすることで使用できます。

背面PAD作業
GPIOほか、SWD、EN、USB端子など使える基板があります。
狭小作業なので半田作業では高い技術が必要です。

ピンヘッダの樹脂分に若干干渉しています。
ピンヘッダを取り付ける前に作業する必要があります。
ピンヘッダを取り付けた後に作業すると、作業性も悪く熱で樹脂部が溶けます。

背面PADが使える基板ではSuper Mini RP2040はパッド間隔も広めで、背面に部品が実装されていないので作業性が良いです。

まとめ

7種比べてみました。
それぞれに個性があり長所と短所がそれぞれにあるため、単純に序列がつけられません。
用途や予算に応じた選択肢が多くあるという結論となりました。

小さな基板に多くの機能(GPIO)を含めています。
背面のPADを使用するための半田作業は高い技術が必要です。
ピンヘッダを取り付けた後では作業性が悪いので計画的な組み立てが必要です。

準備

Arduino環境の作成

◆開発環境

当記事ではArduino環境を使って開発します。
Arduino環境の準備はこちらの記事で紹介しています。

◆ボードライブラリ

Arduino IDEのボードマネージャからRP2040用のライブラリのインストールとボードの選択をします。
ボードライブラリには「Raspberry Pi Pico/RP2040 by Earle F. Philhower, III」を使用します。
Waveshare製(RP2040-Zero, RP2040-Matrix, RP2040-One, RP2040-Tiny)は専用ボードが用意されています。
それ以外(RP2040-NANO, Pico Bit RP2040, Super Mini RP2040)は「Generic RP2040」を使用します。

追加のボードマネージャのURLhttps://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
検索RP2040
ボードライブラリRaspberry Pi RP2040 Boards(x.x.x)※
※動作確認はバージョン 4.4.3です

選択するボードは以下を使用します。
Waveshare製品以外は専用のボードが無いので「Waveshare RP2040 Zero」を使用します。
RP2040-Tinyも見当たらないので(ボードバージョン 4.4.3時点)「Waveshare RP2040 Zero」にします。

ボード名選択するボード
RP2040-ZeroWaveshare RP2040 Zero
RP2040-NANOWaveshare RP2040 Zero
RP2040 Pico BitWaveshare RP2040 Zero
Super Mini RP2040Waveshare RP2040 Zero
RP2040-OneWaveshare RP2040 One
RP2040-MatrixWaveshare RP2040 Matrix
RP2040-TinyWaveshare RP2040 Zero

◆モジュールライブラリ

I2CのサンプルではSSD1306 OLED、SPIのサンプルではILI9341を使用します。
サンプルやモジュールを使用しない場合はインストール不要です。

WS2812

ライブラリ名検索確認時のバージョン
Adafruit NeoPixel by Adafruitneopixel1.12.4

◆スケッチの書き込み(接続)

PR2040基板への書き込みはUSBコネクタから行います。
「Waveshare RP2040 One」のようにTypeAでUSBデータ転送端子が使えるものは直接端子にデータ線を接続することで書き込みができます。
今回紹介する「Super Mini RP2040」の裏面にはUSBデータ転送端子が使えます。

端子接続例を掲載します。

RP2040-One

通常TypeAメスにより接続しますが、USB端子に直接配線することでスケッチの書き込みやUSBシリアル通信ができます。
組み込み箇所にUSB TypeAメスが配線できないときなどに。

Super Mini RP2040

「Super Mini RP2040」の背面にはUSB端子が用意されています。
パッド面に直接配線することでスケッチの書き込みとUSBシリアル通信が利用できます。

電源やGNDはスルーホールを使用します。(GNDはパッドも使用できる)

※ピン番号は裏面から見た位置に反転しています。

◆SWD(デバッグプローブ接続)

「Pico Bit RP2040」と「Super Mini RP2040」はデバッグプローブを使ったデバッグができます。
狭面積なので難度高めですが、背面にSWDパッドがあるので半田作業をすることで使用できます。

SWDを使ったArduino上でのデバッグはこちらの記事で紹介しています。

Pico Bit RP2040

Super Mini RP2040

組み立て

◆RP2040-Tiny

本体側と書き込みボード側をFFCで接続します。
画像の通りFFCの青い面を上にしてまっすぐ差し込みます。

注意

作業に強い力は必要ありません。ヒンジ部は弱いので力を加えすぎると脱落します。

スケッチ

ユーザLED(Super Mini RP2040)

説明

ボード上のユーザLEDを点灯させます。
単色LEDが使えるのは本ページで紹介する中ではSuper Mini RP2040だけです。

配線

配線不要

スケッチ

#define LED_PIN   (8)
void setup()
{
  pinMode(LED_PIN, OUTPUT);

  while(1)
  {
    digitalWrite(LED_PIN, LOW);
    delay(500);

    digitalWrite(LED_PIN, HIGH);
    delay(100);
  }
}

void loop()
{  
}

結果

基板左上の赤のLEDが点滅しました。
ライブラリ不要で手軽に使えるので、内部動作を示すインジケータとして重宝します。

RGB LED(WS2812)

説明

基板実装WS2812を使います。

RP2040-Zero互換基板すべてにWS2812は実装されていますが、RP2040-Matrixのみ5×5の25個のLEDが実装されています。

使ったスケッチではWS2812の連結数25個で制御するようにしていますが、本ページで紹介するRP2040-Zero互換基板すべてで動作します。

ランダムに色変化をさせますが、変化させる前と後の色変化をなめらかに変化させます。
最大輝度は8bit分解能(0 ~ 255)ですが、まぶしいため12%程度まで抑えています。

注意

最大輝度発光は目が幻惑するほどまぶしいので直視しないように。
RP2040-Matrixの全LEDの最大輝度点灯は発熱します。

配線

配線不要

スケッチ

#include <Adafruit_NeoPixel.h>

#define DIN_PIN       (16)
#define LED_COUNT     (25)
#define WAIT_MS       (10)
#define BRIGHT        (32)
Adafruit_NeoPixel pixels(LED_COUNT, DIN_PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  pinMode(D0, OUTPUT);
  pixels.begin();
}

void loop()
{
  long Pattern = 0;
  int16_t addR = 0;
  int16_t addG = 0;
  int16_t addB = 0;
  
  int16_t colR = 0;
  int16_t colG = 0;
  int16_t colB = 0;

  while(1)
  {
    addR = (random(3) - 1);
    addG = (random(3) - 1);
    addB = (random(3) - 1);

    for (int32_t Count = 0; Count < (BRIGHT + 1); Count ++)
    {
      colR += addR;
      if(colR < 0) colR = 0;
      if(colR > BRIGHT) colR = BRIGHT;

      colG += addG;
      if(colG < 0) colG = 0;
      if(colG > BRIGHT) colG = BRIGHT;

      colB += addB;
      if(colB < 0) colB = 0;
      if(colB > BRIGHT) colB = BRIGHT;

    

      uint32_t Palette = pixels.Color(colR, colG, colB);
      
      for (int16_t n = 0; n < LED_COUNT; n ++)  
      {
        pixels.setPixelColor(n, Palette);
      }
      pixels.show();
      delay(WAIT_MS);
    }
  }
}

結果

RGB LEDがカラフルに点灯しました。
画像は色変化しているうちの白色発光シーンです。

RP2040-Matrixの色変化の様子です。
輝度は12%程度ですが十分明るく、このまましばらく動かしていると基板が軽く温まります。

コメント

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