RP2040開発基板 PimoroniのTiny 2040を使ってみた

コンピュータ、組み込み

Arduino環境で使用できる最小クラスの基板 Pimoroni の Tiny 2040を紹介します。

Tiny 2040

特徴

RP2040搭載基板では、SeedstudioのXIAO RP2040、RP2040-CORE-Aに次いで小型の基板。
面積状の際はほとんどないのに、XIAO RP2040より多くのピンを使用できる。

比較項目Tiny 2040
外観
接続Micro C
フラッシュMemory8MB
ADC4
I2C2
SPI1
GPIO※111
ボタンBOOT
RESET
LEDフルカラーLED
青 GP20
緑 GP19
赤 GP18
価格\1,400~\1,700
※1 ピンヘッダで使用できるピン数

[2023/10/15] RP2040-Zero記事から分離しました。

ピン配置

外観

比較 vs Waveshare RP2040-Zero

どちらも最小クラスの基板です。
RP2040 ZeroのほうがGPIOを多く引き出している分大きい。

ピン配置はよく似ていますが、RP2040-Zeroの拡張されたGP14, GP8 以外にGP15がTiny 2040ではGNDなので、置き換えがある場合は配慮が必要です。

フラッシュメモリが8Mあり大きなスケッチやデータが格納できるほか、小型基板でSWDがスルーホールで使用できる優位点があります。

使ってみて

小型の割にピンを多く使える点や、SWDがスルーホールで使用できるためデバッガーを使用したデバッグ作業ができる点がこの基板のメリットです。
リセットボタンやピン番号のシルク表示など、ついててくれると助かるユーティリティが自然に搭載されている上質な基板だと思います。

フルカラーLEDが搭載されていますが、各色要素を個別で制御するタイプなのでスケッチ上は直感的にプログラムできますが行数はかさばり気味です。
ライブラリなく使用できる点は良いですが、使用者の判断が分かれるところだと思います。

入手性は電子部品の通販サイトから購入できるため良い方だと思います。
気軽に使用していきたいところですが、価格があまり安くないので気安く使用しにくい点があります。

RP2040搭載最小基板

XIAO RP2040

RP2040デバッガーの記事

準備

使い方はRaspberrpPi Picoと同じですので、こちらのリンクを参照してください。

ライブラリ

Arduino IDEのボードマネージャからRP2040-Zero, Tiny 2040用のライブラリのインストールとボードの選択をします。
どちらも同じライブラリを使用します。
“変更する設定”にてメモリサイズを変更してください。

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

サンプルスケッチ

フルカラーLED

スケッチの説明

フルカラーLEDを点灯させます。
3色のLEDが1個に集約されたものですが、1色ずつ点灯させ混ぜ合わせることでフルカラーになります。

Tiny 2040 ではLowActiveになっているので、Lowが点灯、HIGHが消灯になります。
PWM制御では0に近いほど明るく、255に近いほど暗くなります。

1秒ごとに、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);
}

結果

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ボタンを押して基板の初期化をする方法はこちらの記事の「準備」を参照してください。

関連リンク

コメント

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