秋月マイコンボード AE-RP2040 を使ってみた

コンピュータ、組み込み

秋月さんから販売されているRP2040搭載基板、AE-RP2040を入手しました。
基本的な入出力(デジタル、アナログ入出力)と、通信(UART, I2C, SPI)を試してみます。

紹介するもの

AE-RP2040

秋月電子通商さんから販売されているRP2040搭載基板です。
RP2040で使用できるすべてのIOを引き出しています。

特徴

CPURP2040 ARM Cortex M0+ 133MHz
接続Type C
USB1.1 ホスト/デバイス両対応
MemorySRAM 264KB
フラッシュメモリ 2MB
ロジックレベル3.3V
GPIO30
PWM30 (8bit 0 ~ 255)
ADC4 (10bit 0 ~ 1023)
UART2
I2C2
SPI2

その他のRP2040搭載基板の一覧

ピン配置

外観

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

梱包物には、ピンヘッダ20pinが2本とSWD用に3pinが付属していました。

ピンヘッダは直径の細いタイプのものです。(SWD用は太いピンヘッダです)
下図画像の左側が付属の細いピン、右は太いピンです。


どちらが標準というわけではありませんが、それぞれのメリットとデメリットは反対の関係です。

メリットデメリット
細いピンヘッダブレッドボードの挿抜が楽接触不良が起きやすい
ジャンパワイヤのソケットではゆるくて抜ける
ピン曲がりが起きやすい
太いピンヘッダ接触不良が起きにくい
ジャンパワイヤのソケットでも接触する
ブレッドボードの挿抜が大変
ピン曲がりが起きやすい

使ってみて

コンパクトなサイズに納まってめているうえに機能を損ねることのないよく考えられた設計だと思います。

RP2040で使用できるI/Oを30ピンすべて使用できるように引き出しています。
すべてのI/Oを使用できる基板の中では最小です。(※ピンヘッダで使用できるもの)

SWDスルーホールもやRUNもスルーホールで用意されているので、デバッグやリセット操作もRaspberryPi Picoに遜色なく利用することができます。

LEDすらついていない思い切りの良さもありますが、反面ゆったりと押せるリセットボタン、シルクによるピン配置の表示もあるので作業もしやすいく、USBコネクタもTypeCであることでユーティリティはしっかり向上しています。

純正のRaspberry Pi Pico 同等の価格で販売されているのでコスパ高めです。

準備

基板の初期化

1.AE-RP2040のBOOT SELボタンを押しながら、USBケーブルをパソコンに接続します。

2.パソコンの画面では、AE-RP2040をストレージとして認識します。

3.UF2ファイルを以下のサイトからダウンロードします。

circuit python UF2 Download

4.ダウンロードしたファイル[adafruit-circuitpython-raspberry_pi_pico-ja-7.3.0.uf2]※をストレージ認識したAE-RP2040にドラッグ&ドロップする。

以上の作業でAE-RP2040はCOM認識されます。

今回ダウンロードしたuf2ファイルは、保存しておいてください。
AE-RP2040を初期化したいとき(今何のファームウエアが書かれているかわからなくなったとき)には、BOOTSELボタンを押しながら再起動することで、やり直しができます。

※2022/Jun 時点ではVersion 7.3.0

ライブラリ

ボードライブラリ

Arduino IDEのボードマネージャからRaspberry Pi Pico Purple用のライブラリのインストールとボードの選択をします。

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

モジュールライブラリ

モジュールを使用しない場合インストールの必要はありません。

機能/モジュールライブラリ名検索確認時のバージョン
SSD1306Adafruit SSD1306 by AdafruitSSD13062.5.1
ST7735Adafruit ST7735 and ST7789
Library by Adafruit
ST77351.9.3
関連
SSD1306
ST7735
Adafruit GFX Library by AdafruitGFX1.11.3

基本スケッチ

タクトスイッチとLED点灯

説明

タクトボタンとLEDの組み合わせの動作をします。

タクトボタンはPULLDOWN設定します。(押下したらHIGH)
タクトボタンを読み取り、押下されるとLEDが点灯します。
ボタンが離されるとLEDは消灯します。

配線
AE-RP2040配線LED配線タクトボタン
3V3端子
GPIO28端子
GPIO25LED (Anode)
GNDLED (Cathode)
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
AE-RP2040

【スケッチの説明】
プルダウンしたピンの状態がHighならLEDを点灯、LowならLEDを消灯させます。

【ライブラリ】
Raspberry Pi Pico / RP2040 > Generic RP2040

【準備】
GPIO25(OUTPUT) -> 保護抵抗(約200Ω) -> LED -> GND
3.3V -> タクトボタン -> GPIO28(INPUT)

LEDは基板実装LED(GP25)を使用します。
ワイヤによる配線で行う場合は、保護抵抗の適値を求めて使用してください。
 
【バージョン情報】
2023/3/4 : 新規
**********************************************************************/


#define LED 25       //LED
#define BUTTON 28    //タクトスイッチ

void setup()
{
  pinMode(LED, OUTPUT);               //ピン出力設定
  pinMode(BUTTON, INPUT_PULLDOWN);    //プルダウンで入力
}

void loop()
{
  int iStat = digitalRead(BUTTON);
  digitalWrite(LED, iStat);           //ボタンの状態をLEDに出力
}
結果

ボタンを押下することでLEDが点灯しました。
ボタンを離すとLEDは消灯しました。

PWM

説明

PWMを使ってLEDのフェード点灯(ゆっくり点灯させる)を行います。

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
AE-RP2040

【スケッチの説明】
PWM出力でのフェード点灯(ゆっくり点灯)とフェード消灯(ゆっくり消灯)を行います。

【ライブラリ】
Raspberry Pi Pico/RP2040 > Generic RP2040

【準備】
GPIO25(OUTPUT) - 保護抵抗(約200Ω) - LED - GND

抵抗値は使用するLEDにより適切な抵抗値を求めてください。

【バージョン情報】
2023/3/4 : 新規
**********************************************************************/

#define PWM 25        //PWM 出力pin

void setup()
{
  pinMode(PWM , OUTPUT);
}

void loop()
{
  for(int i = 0; i < 256; i ++)
  {
    analogWrite(PWM, i);
    delay(2);
  }

  for(int i = 0; i < 256; i ++)
  {
    analogWrite(PWM, 255 - i);
    delay(2);
  }
}
結果

LEDがゆっくり点灯、ゆっくり消灯しました。

ADC

説明

ADCに入力された電圧を読み取りCOMに出力します。

電圧の入力にLOLIN32 Liteを使用します。
0~255(約3.3V) まで2msごとに1ずつ上昇し、255(約3.3V)~0までを2msごとに1ずつ下降する設定を繰り返します。

配線
AE-RP2040配線LOLIN32 Lite
GPIO28(ADC)GPIO26(DAC)
GNDGND
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
AE-RP2040

【スケッチの説明】
入力された電圧を読み取ります。

【ライブラリ】
 Raspberry Pi Pico/RP2040 > Generic RP2040

【準備】
AE-RP2040 <-> LOLIN32 Lite
GPIO28(ADC)       <-> GPIO26(DAC)
GND               <-> GND

【バージョン情報】
2023/3/4 : 新規
**********************************************************************/

#define ADC 28

void setup()
{
  Serial.begin(115200);
  pinMode(ADC, INPUT);
}

void loop()
{
  int iADC = 0;

  //外部から入力された電圧を読み取り、結果をCOMに出力します。
  iADC = analogRead(ADC);
  Serial.printf("(ADC) = %d\r\n", iADC);
  delay(2);
}
結果

入力した電圧を読み取った結果をグラフにしました。
電圧の変化は0V -> 3.3Vまでを約500msで上昇し、3.3V -> 0Vまで約500msで下降します。

結果はRaspberryPi Pico Purple version を掲載していますが、同等の結果が得られています。
直線的な波形でノイズもほとんどありません。

電圧と読み取り値の同期はできていませんが、参考程度に入力電圧を添付します。

UART

説明

UART0から読み取ったデータをUART1に送信します。
UART1から読み取ったデータをUART0に送信します。

配線
AE-RP2040配線FT232RL(1)配線FT232RL(2)
GP0(UART0 TX)RX
GP1(UART0 RX)TX
GP4(UART1 TX)RX
GP5(UART1 RX)TX
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
AE-RP2040

【スケッチの説明】
UART0 と UART1の通信をします。

UART0から受信した内容をUART1へ送信します。
UART1から受信した内容をUART0へ送信します。

【ライブラリ】
Raspberry Pi Pico/RP2040 > Generic RP2040


【準備】
UARTの送受信にFT232RLを使用します。
FT232RLはUART0用と、UART1用の2個使います。それぞれを(1), (2)と識別します。

AE-RP2040 <-> FT232RL(1)
GPIO0 (UART0 TX) <-> RX
GP1O1 (UART0 RX) <-> TX

AE-RP2040 <-> FT232RL(2)
GPIO4 (UART1 TX) <-> RX
GPIO5 (UART1 RX) <-> TX

【バージョン情報】
2023/3/4 : 新規
**********************************************************************/

void setup()
{
  //Serial は USB(COM)を使ったシリアル通信用オブジェクト
  //Serial1は UART0の通信オブジェクト
  //Serial2は UART1の通信オブジェクト

  Serial1.setTX(0);            //UART0はSerial1オブジェクトを使用します。
  Serial1.setRX(1);             //デフォルトではTX = 0, RX = 1

  Serial2.setTX(4);
  Serial2.setRX(5);

  Serial1.begin(115200);                //Serial1オブジェクトはUART0
  Serial2.begin(115200);                //Serial2オブジェクトはUART1
}

void loop()
{
  if(Serial2.available() != 0)          //UART1にデータがあれば、読み取った内容をUART0に送信
  {
      Serial1.write(Serial2.read());
  }

  if(Serial1.available() != 0)           //UART0にデータがあれば、読み取った内容をUART1に送信
  {
      Serial2.write(Serial1.read());
  }
}
結果

結果はTeratermを2つ起動して確認します。
1つはUART0 用で、もう一つはUART1用です。
結果は省略します。

UART0用のTeratermに入力された文字は、UART1用のTeraterm画面に表示されます。
UART1用のTeratermに入力された文字は、UART0用のTeraterm画面に表示されます。

I2C(SSD1306)

説明

I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
AE-RP2040ではI2Cが2系統あります。
決められた中から任意のピンに信号を出力することができます。
本サンプルではピン設定の仕方と簡単な表示を行っています。
各I2C系統での設定可能なピンはサンプルを参照してください。

掲載以外の図形表示などのサンプルは以下のサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c

配線

本サンプルはI2C0を使用します。
配線は以下の表のとおりです。

AE-RP2040配線SSD1306(0.96inch)
3.3VVCC
GNDGND
GP1(I2C0 SCL)SCL
GP0(I2C0 SDA)SDA
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
AE-RP2040

【スケッチの説明】
SSD1306 OLEDの制御をします。
I2Cは I2C0とI2C1のどちらのサンプルも掲載しますが、
I2C1側はコメントアウトしますので、状況に応じてコメントを外してください。
※コメント検索 [I2C1の場合]

【ライブラリ】
Raspberry Pi Pico / RP2040 > Generic RP2040

【準備】
マイコン基板 <-> SSD1306
3V3           <-> VCC
GND           <-> GND
GP0(I2C0 SDA) <-> SDA
GP1(I2C0 SCL) <-> SCL

I2C1の場合
3V3           <-> VCC
GND           <-> GND
GP2(I2C1 SDA) <-> SDA
GP3(I2C1 SCL) <-> SCL

【バージョン情報】
2023/3/4 : 新規
**********************************************************************/
//I2C0 SDA に設定可能なピン : 0, 4, 8, 12, 16, 20, 24, 28
//I2C0 SCL に設定可能なピン : 1, 5, 9, 13, 17, 21, 25, 29
//I2C1 SDA に設定可能なピン : 2, 6, 10, 14, 18, 22, 26 
//I2C1 SCL に設定可能なピン : 3, 7, 11, 15, 19, 23, 27

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define PIN0_SDA 0
#define PIN0_SCL 1
#define PIN1_SDA 2
#define PIN1_SCL 3

#define SCREEN_WIDTH 128                //解像度 128 x 64 で使用します。
#define SCREEN_HEIGHT 64                //SCREEN_HEIGHTは 32 に設定することができます。

#define OLED_RESET     -1               //使用しないので -1を設定する。
#define SCREEN_ADDRESS 0x3C             //I2Cアドレスは 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);     //I2C0の場合
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, OLED_RESET);     //I2C1の場合

                                        
void setup()
{
  
  // //I2C0の場合
  Wire.setSDA(PIN0_SDA);
  Wire.setSCL(PIN0_SCL);

  //I2C1の場合
  // Wire1.setSDA(PIN1_SDA);
  // Wire1.setSCL(PIN1_SCL);


  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    for(;;);
  }

  display.clearDisplay();               //何か表示されている場合に備えて表示クリア

  display.setTextSize(2);               //フォントサイズは2(番目に小さい)
  display.setTextColor(SSD1306_WHITE);  //色指定はできないが必要
  display.setCursor(20, 0);            //テキストの表示開始位置
  display.print(F("TAMANEGI"));         //表示文字列
  display.setCursor(15, 25);
  display.print(F("OLED 0.96"));
  display.setCursor(25, 45);
  display.print(F("SSD1306"));

  display.display();                    //バッファ転送(表示)
}

void loop()
{
}
結果

SSD1306のサンプルスケッチが動作しました。

SPI(ST7735)

説明

SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。

掲載以外の図形表示などのサンプルは以下のサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest

配線

本サンプルはSPI0を使用します。
配線は以下の表のとおりです。

AE-RP2040配線ST7735(1.8inch)
3.3VVCC
3.3VLED
GNDGND
GPIO18CS
GPIO19Reset
GPIO20AO(DC)
GPIO23(SPI0 TX)SDA
GPIO22(SPI0 SCK)SCK
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
RP2040搭載基板で利用できます。
AE-RP2040

【スケッチの説明】
ST7735 LCDの制御をします。
SPIは SPI0とSPI1のどちらのサンプルも掲載しますが、
SPI1側はコメントアウトしますので、状況に応じてコメントを外してください。
※コメント検索 [SPI1の場合]

【ライブラリ】
Raspberry Pi Pico / RP2040 > Generic RP2040
Adafruit ST7735 and ST7789 Library
Adafruit GFX Library

【準備】
マイコン基板 <-> ST7735
3V3               <-> VCC
GND               <-> GND
GPIO1(SPI0 CS)    <-> CS
GPIO28            <-> Reset
GPIO27            <-> AO
GPIO3(SPI0 MOSI)  <-> SDA
GPIO2(SPI0 SCK)   <-> SCK

SPI1の場合
3V3               <-> VCC
GND               <-> GND
GPIO13(SPI1 CS)   <-> CS
GPIO28            <-> Reset
GPIO27            <-> AO
GPIO14(SPI1 MOSI) <-> SDA
GPIO15(SPI1 SCK)  <-> SCK

【バージョン情報】
2023/3/4 : 新規
**********************************************************************/

#include <Adafruit_GFX.h> 
#include <Adafruit_ST7735.h>
#include <SPI.h>

//SPI0の場合
#define TFT_CS          18   // CS
#define TFT_RST         19  // Reset 
#define TFT_DC          20  // DC
#define TFT_MOSI        23   // MOSI
#define TFT_SCK         22   // SCK

//SPI1の場合
// #define TFT_CS          13  // CS
// #define TFT_RST         28  // Reset 
// #define TFT_DC          27  // DC
// #define TFT_MOSI        15  // MOSI
// #define TFT_SCK         14  // SCK

//SPI0の場合
Adafruit_ST7735 tft = Adafruit_ST7735(&SPI, TFT_CS, TFT_DC, TFT_RST);
//SPI1の場合
//Adafruit_ST7735 tft = Adafruit_ST7735(&SPI1, TFT_CS, TFT_DC, TFT_RST);

void setup(void) 
{
  //SPI0の場合
  SPI.setTX(TFT_MOSI);
  SPI.setSCK(TFT_SCK);

  //SPI1の場合
  // SPI1.setTX(TFT_MOSI);
  // SPI1.setSCK(TFT_SCK);
  

  tft.initR(INITR_BLACKTAB);                  //Init ST7735S初期化
  
  tft.fillScreen(ST77XX_BLACK);               //背景の塗りつぶし

    //テキスト表示
  tft.setRotation(3);                         //画面回転
  tft.setTextSize(3);                         //サイズ

  tft.setCursor(0, 10);                       //カーソル位置                      
  tft.setTextColor(ST77XX_GREEN);             //緑
  tft.printf("TAMANEGI\n");

  tft.setCursor(0, 50);                       //カーソル位置                      
  tft.setTextSize(2);                         //サイズ
  tft.setTextColor(ST77XX_RED);               //赤
  tft.printf("1.8inch LCD\n");
  tft.setTextColor(ST77XX_YELLOW);            //黄
  tft.printf("Res=128 x 160\n");
  tft.setTextColor(ST77XX_BLUE);              //青
  tft.printf("ST7735\n");
}

void loop()
{
}
結果

ST7735のサンプルスケッチが動作しました。

コメント

  1. Anonymous より:

    売れているようです。

    2024年1月から2月にかけて、店舗通販共に在庫払底で手に入らない時期がありました。
    2月のおわりくらいに2000個程度製造物が入ってきたようで、今は秋葉原でも問題なく陳列されている状態です。

    全部のI/Oが引き出されている分、ボタンやLEDなどを多数必要とする装置には相性抜群で、タイプC電源なのもあり、助かる一台です。

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