Adafruit QT Py RP2040を試してみました【Arduino使用】

Raspberry Pi/電子工作

こんにちは、あろっちです。

Adafruit QT Py RP2040を入手したので試してみました。

特徴

  • Seeeduino XIAO、QT Py(SAMDベースモデル)互換のピン配置/形状
  • USB Type-C
  • RGB NeoPixel LED内蔵
  • STEMMA QT/Qwiicポート搭載
  • リセットボタン
  • ブートローダーセレクトボタン

スペックはこんな感じです。

マイコンRP2040 32ビットCortex M0+ デュアルコア(最大125 MHz@3.3 Vロジック/電源)
フラッシュメモリ8MB
GPIO13
・11xブレイクアウト(7xディジタル, 4xアナログ対応(12bit ADC))
・2xQT
サイズ21.8×17.8×5.8mm
Adafruit QT Py RP2040
What a cutie pie! Or is it... a QT Py? This diminutive development board comes with one of our new favorite chips, the Raspberry Pi RP2040. A new chip means a n...

Arduino IDEが使えます。
今回は、Arduino(C/C++)で試してみます。

ちなみに、開発環境としてVS Codeを使うこともできたりします。

スポンサーリンク

ピンについて

GPIOとの対応を記載します。

ピンGPIO
A029/ADC3
A128/ADC2
A227/ADC1
A326/ADC0
SDA24
SCL25
TX20
RX5
SCK6
MISO4
MOSI3
NEOPIXEL POWER11
NEOPIXEL12
BUTTON21

QT

ピンGPIO
SDA122
SCL123

以下を参考にしました。

PINリファレンス

Adafruit QT Py RP2040
What a cutie pie! Or is it... a QT Py? This diminutive development board comes with one of our new favorite chips, the Raspberry Pi RP2040. A new chip means a n...

Arduino IDEの設定

ボードは、RP2040のearlephilhowerボードを使用します。
このボードを使用するには、以下の設定を行います。

Arduino IDEから[ファイル]>[環境設定]の画面を開き、[追加のボードマネージャのURL:]のボックス(赤枠の箇所)に以下のURLを入力し、[OK]をクリックします。

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

[ツール] > [ボード] > [ボードマネージャ]を開き、検索ボックスにrp2040と入力し、Raspberry Pi Pico/RP2040ボードをインストールします。
※以下の画像はRaspberry Pi Pico/RP2040をインストール済みです。

ボードは、[ツール] > [ボード] > Raspberry Pi RP2040 Boards(Ver)から[Adafruit QT Py RP2040]を選択します。(画像の赤枠参照)

NeoPixelをLチカしてみる

QT Py RP2040の内蔵LEDはNeoPixel。折角なので、カラフルにLチカしてみましょう。

#include <Adafruit_NeoPixel.h>

#define LED_POWER 11
#define LED_PIN 12

#define COLOR_REPEAT 2

Adafruit_NeoPixel pixels(1, LED_PIN);

uint8_t color = 0, count = 0;
uint32_t colors[] = {pixels.Color(255, 0, 0), pixels.Color(0, 255, 0), pixels.Color(0, 0, 255), pixels.Color(255, 255, 255)};
const uint8_t COLORS_LEN = (uint8_t)(sizeof(colors) / sizeof(colors[0]));

void setup() {
  pinMode(LED_POWER, OUTPUT);
  digitalWrite(LED_POWER, HIGH);
  pixels.begin();  // initialize the pixel
}

void loop() {
  pixels.setPixelColor(0, colors[color]);
  pixels.show();
  
  delay(1000);
  
  pixels.clear();
  pixels.show();
  
  delay(1000);
  
  count++;

  if(count >= COLOR_REPEAT) {
    count = 0;
    color++;
    if(color >= COLORS_LEN) {
      color = 0;
    }
  }
}

このスケッチは、ライブラリにAdafruit NeoPixelを使用しています。
スケッチを書き込む場合は、事前にライブラリマネージャからインストールしておいてください。

こんな感じで光ります。

STEMMA QT/Qwiicポートを試してみました

QTポートが搭載されているので、試してみました。

今回は、GroveのLEDモジュールを使ってLチカしてみました。

QTポートとGroveモジュールの接続には、Groveアダプタケーブルを使います。

Groveアダプタケーブルは、スイッチサイエンスさんで入手しました。

#define LED 23

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

QTポートのGPIO 23のオン/オフでLチカできます。

Seeeduino XIAO 拡張ボードを試してみました

QT Py RP2040は、Seeeduino XIAO互換ということで、Seeeduino XIAO 拡張ボードという便利なボードが使えます。

Seeeduino XIAO 拡張ボードは、以下のような豊富なインターフェースが備わっています。

  • OLEDディスプレイ
  • RTC
  • 拡張可能なメモリスペース
  • パッシブブザー
  • ユーザーボタン
  • Groveポート
  • オンボードバッテリー管理チップなど

ちなみにSeeeduino XIAOも保有していて、なにか試したい時によく使うボードですね。

OLEDディスプレイを表示してみる

スケッチ例を使った表示方法を紹介します。

ボード搭載のOLEDディスプレイは、0.96インチ(128×64)、制御IC: SSD1306、通信: I2Cのものです。

単体でもよく見かけるポピュラーなOLEDディスプレイですね。

事前にライブラリマネージャから、Adafruit SSD1306ライブラリをインストールしておきます。

スケッチ例から、[Adafruit SSD1306] > [ssd1306_128x64_i2c]を選択します。

#define OLED_RESET 4
#define SCREEN_ADDRESS 0x3D

#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C

に変更し、スケッチを書き込みます。

以下、抜粋です。

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

こんな感じで、表示されます。

ちなみに、Seeeduino XIAOでもこのスケッチを書き込めば同じように表示されます。

パッシブブザーでメロディを鳴らしてみる

メロディは、恥ずかしながらオリジナルだったりします。

int duration = 250;
int pin = A0;

void do1(int k) {
  tone(pin, 261, k);
  delay(k);
  noTone(pin);
}

void re(int k) {
  tone(pin, 293, k);
  delay(k);
  noTone(pin);
}

void mi(int k) {
  tone(pin, 329, k);
  delay(k);
  noTone(pin);
}

void fa(int k) {
  tone(pin, 349, k);
  delay(k);
  noTone(pin);
}

void so(int k) {
  tone(pin, 391, k);
  delay(k);
  noTone(pin);
}

void ra(int k) {
  tone(pin, 440, k);
  delay(k);
  noTone(pin);
}

void si(int k) {
  tone(pin, 494, k);
  delay(k);
  noTone(pin);
}

void do2(int k) {
  tone(pin, 523, k);
  delay(k);
  noTone(pin);
}

void logo1() {
  mi(duration / 2);
  mi(duration / 2);
  mi(duration / 2);
  mi(duration / 2);
  mi(duration / 2);
  mi(duration / 2);
  delay(duration * 2);
  so(duration * 2);
  so(duration * 2);
  do2(duration * 2);
}

void logo2() {
  so(duration);
  delay(duration);
  do2(duration);
  ra(duration);
  si(duration);
  delay(duration);
  ra(duration);
  so(duration);

  so(duration);
  do2(duration);
  delay(duration);
  si(duration);
  do2(duration);
}

void title() {
  re(duration);
  do1(duration);
  re(duration * 2);
  mi(duration * 2);
  fa(duration * 2);

  ra(duration);
  ra(duration);
  so(duration * 2);
  re(duration * 2);
  mi(duration * 2);

  ra(duration);
  ra(duration);
  so(duration * 2);
  re(duration * 2);
  mi(duration * 2);
  fa(duration * 2);
}

void mainbgm() {
  so(duration);
  delay(duration);
  do2(duration);
  ra(duration);
  si(duration);
  delay(duration);
  ra(duration);
  so(duration);

  so(duration);
  do2(duration);
  delay(duration);
  si(duration);
  do2(duration * 2);
  delay(duration * 2);

  so(duration);
  delay(duration);
  do2(duration);
  delay(duration);
  ra(duration);
  ra(duration);
  si(duration);
  delay(duration);

  so(duration);
  do2(duration);
  delay(duration);
  si(duration);
  do2(duration * 2);
  delay(duration * 2);
}

void setup() {
 do1(duration);
 re(duration);
 mi(duration);
 fa(duration);
 so(duration);
 ra(duration);
 si(duration);
 do2(duration);
  delay(2000);

  logo1();
  delay(2000);

  logo2();
  delay(2000);

  title();
  delay(2000);

  mainbgm();
  delay(2000);
}

void loop() {
}

ポイントは、ブザー(A3)が、スケッチでは、A0になっているところです。
これは、ピン配置を見ればわかるのですが、QT Py RP2040のA3ピンはADC0(GPIO 26)に対応しているためです。

ちなみにSeeeduino XIAOでも鳴らせます。この場合、int pin = A3に変更してください。

まとめ

Adafruit QT Py RP2040は、小さくて高性能。今では、お気に入りのマイコンの一つです。

スポンサーリンク
この記事を書いた人
あろっち

元ITエンジニア
エンジニア時代は大手企業などでSE・プログラマを経験してきました。

当ブログでは、経験や日々の暮らしの中で、興味があること、役に立ちそうなこと、気になったことを発信していきます。

IT関係(技術的な内容もあります) / スマホ・PC / ガジェット / 生活に役立ちそうなこと ... etc

あろっちをフォローする
Raspberry Pi/電子工作IT
スポンサーリンク
あろっちをフォローする
あろしーど

コメント

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