Arduino環境でRP2040-Zero を使う

it

RP2040搭載基板の中で比較的入手性もよく安価に使用できる Waveshare RP2040-Zeroを使ってみました。

RP2040-Zero

主なスペック

サイドエッジ以外に裏面にはGPIOのパッドパターンがあり、小型基板ながらRP2040のほとんどのGPIOを使用することができる。

比較項目RP2040-Zero
外観
接続Type C
フラッシュMemory2MB
ADC4
I2C2
SPI2
GPIO※120
背面パッドパターンx9
ボタンBOOT
RESET
LEDGPIO16 W2182
価格\650~\800
Ali Expressでは\400前後(送料込み)
※1 ピンヘッダで使用できるピン数

メーカーサイト : Waveshare RP2040-Zero

RP2040-Zeroの互換基板と比較記事はこちら

ピン配置

公式のピン配置表

外観

使ってみた

400穴ブレッドボードでは、左右2列と3列使用することができます。

後方のスルーホールはピンヘッダかピンソケットを基板上面に取り付けることでブレッドボードと併用できます。
次の画像はピンヘッダを取り付けた状態です。

背面のパッドはGPIOが9ch、GNDが1ch使用できます。
半田初心者には難しい作業になると思います。
ピンヘッダの取り付け前なら多少作業性が良いと思います。

基板にはWS2812が実装されているので、スケッチの動作状態を示すインジケータに使用できます。
WS2812のライブラリが必要になるので、ただのLEDと比べると手軽さはありません。

左の画像はRaspberryPi PicoのLED点灯、右の画像はRP2040-ZEROのLED点灯のスケッチと点灯状態です。

使用感

Good

RP2040ではトップクラスの安価と入手性のよさ。
小型なのでブレッドボードを広く使えるのに、使用できるGPIOは多い。
小型のマイコン基板は軽い力でブレッドボードへ挿抜できる。
リセットボタン付きで作業性が良い。

Bad

SWDが無いため、RP2040デバッガを使用できない。(ステップ実行ができない)
背面パッドのはんだ付けは狭小すぎて作業性がしにくい。

そのほか

多くのRP2040搭載基板を使ってみましたが、トップクラスの低価格と入手性の良さがあります。
マイコン基板が安価だと、ためらいなく工作に直接組み込んでいけます。
後から回収するために、作った工作にピンソケットで実装する工夫が要りません。

メーカーのWaveshareもこの基板規格に力が入っているようで特別な機能を追加した基板や形状をした互換ラインナップの他、CPU違いのモデルも多く設計しています。
ESP32系を搭載した同じ規格の基板も出てきていますが、技適マークがないのが残念です。
ほとんどがAli Expressでの取り扱いですが、RP2040搭載基板は国内でも見かけるようになりました。

RP2040-ZEROのコピー基板もいくつか登場してきているので、注目度の高さを感じます。

基板上には小さい表示ですが、ピン番号のシルクもあるので作業性もいいです。

準備

ライブラリのインストール

ボードライブラリ

Arduino IDEのボードマネージャからRP2040-Zeroのライブラリのインストールとボードの選択をします。

検索RP2040
ボードライブラリRaspberry Pi Pico/RP2040 by Earle F. Philhower,III ※1
選択するボードRaspberry Pi RP2040 Boards >
 Generic RP2040 または
 Waveshare RP2040 Zero
変更する設定Tools > Flash Size > xxMB(no FS)
※1 確認時のバージョン  Oct/2023 では3.6.0

モジュールライブラリ

WS2812を制御するためのライブラリにはAdafruit NeoPixelライブラリを使用します。
WS2812を使用しない場合インストールの必要はありません。

機能/モジュールライブラリ名検索確認時のバージョン
WS2812Adafruit NeoPixel by Adafruit(x.x.x)※neopixel1.11.0
※x.x.x Oct/2023 では 1.11.0

基本スケッチ

基本的なI/Oの使い方や通信については、こちらの記事に記載します。
またボードライブラリは「Raspberry Pi Pico/RP2040 by Earle F. Philhower, III」、ボードは「Generic RP2040」を選択します。

WS2812

スケッチの説明

Adafruit のAdafruit NeoPixel by Adafruitを使用します。

loop()関数内で1秒ごとにLEDの色を変化させます。
赤->緑->黄->青->紫->水->白

発光の最大輝度はマクロ定義 BRIGHTNESSで設定しています。
範囲は0~255 で、値が大きいほど明るく発光します。

配線

不要

サンプルスケッチ

#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);
}

結果

1秒ごとに色の変化が確認出来ました。
サンプルのスケッチでは発光輝度は1/4程度にしていますが十分明るいです。
最大輝度はかなり明るいので、直視すると残影が残ります。

コメント

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