RaspberryPi Pico用のGPIOテストボードを試してみた

コンピュータ、組み込み

RaspberryPi Pico用のGPIOテストボードを入手しました。
LEDやボタンが豊富についているので、電子工作のプログラミングやGPIO制御をするための練習ができます。

今回紹介するもの

Spotpear GPIO Testボード

特徴

RaspberryPi Picoのピンヘッダ付きと合体させて使用します。
GPIOの入出力を使って配線不要でLEDの点灯やボタンの入力、ADCの変化を確認することができます。

電源電圧3.3V
LED20個
タクトボタン5個
ボリューム抵抗1個(50kΩ)
対応基板RaspberryPi Pico互換基板
ピン配置

RaspberryPi Picoのピン配置は、GPIOが何に使われているか。
GPIO TESTボードは、RaspberryPi PicoのどのGPIOピンが使用されているかを示しています。

外観

RaspberryPi Picoと合体させます。
撮影のためピンを少し浮かせています。

使用感

LEDがマトリクス上に配置され、ボタンが付いているだけの基板です。
機能的に何かをしてくれるわけではありません。

ボード同士を合体させることだけでGPIOの簡単な入出力の確認ができます。
これから電子工作をArduinoやPythonなどで始めようと考えている方など、スケッチが悪いのか配線が悪いのかわからないことがあると思います。
ピンヘッダ付きのRaspberryPi Picoが必要ですが、思ったように動作しない原因から配線を切り離して考えることができます。
プログラミングの練習や、GPIOの使い方を学ぶことに集中できるといったメリットがあります。

準備

使うもの

画像名称、型番用途
RGBカラーセンサ
TCS34725
LEDを光らせる
ボタンを押す
ADCの値を変化させるなど
RaspberryPi PicoGPIO TESTボードと合体させて制御させます。

動作

MatrixLED

説明

実装LEDMatrixの点灯制御をします。
全体で3パターン

1.すべてのLEDを全点灯します。
2.すべてのLEDをフェードアウトさせます。
3.LED1個ずつを点灯消灯させます。

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

【スケッチの説明】
RaspberryPi PicoとGPIO TestBoardの組み合わせで使用します。

実装LEDMatrixの点灯制御をします。
全体で3パターン
1.すべてのLEDを全点灯します。
2.すべてのLEDをフェードアウトさせます。
3.LED1個ずつを点灯消灯させます。

【バージョン情報】
 2023/11/24 : 新規
**********************************************************************/

char TblLEDPin[] = {
  0, 2, 4, 6, 8,
  1, 3, 5, 7, 9,
  27, 21, 19, 18,
  10, 28, 22, 20, 15, 11
};

void setup()
{
  long TblSize = sizeof(TblLEDPin);
  for(int i = 0; i < TblSize; i ++)
  {
    pinMode(TblLEDPin[i], OUTPUT);
  }
}

void loop()
{
  long TblSize = sizeof(TblLEDPin);

  //1.すべてのLEDを全点灯します。
  for(int i = 0; i < TblSize; i ++)
  {
    digitalWrite(TblLEDPin[i], HIGH);
  }

  //2.すべてのLEDをフェードアウトさせます。
  for(int bright = 0; bright < 256; bright ++)
  {
    for(int i = 0; i < TblSize; i ++)
    {
      analogWrite(TblLEDPin[i], 255 - bright);
    }
    delay(10);
  }

  //3.LED1個ずつを点灯消灯させます。
  for(int i = 0; i < TblSize; i ++)
  {
    digitalWrite(TblLEDPin[i], HIGH);
    delay(100);
    digitalWrite(TblLEDPin[i], LOW);
  }
}
結果

LEDが点灯しました。
ボタンと組み合わせて簡単なゲームが作れそうです。

ボタン

説明

押したボタンの種類をシリアル出力します。

GPIOの入力はINPUT_PULLUPで行います。
状態の読み取りでは、
ボタンを押している状態 = false
ボタンを離している状態 = true
です。

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

【スケッチの説明】
RaspberryPi PicoとGPIO TestBoardの組み合わせで使用します。

押したボタンの種類をシリアル出力します。

GPIOの入力はINPUT_PULLUPで行います。
状態の読み取りでは、
ボタンを押している状態 = false
ボタンを離している状態 = true
です。

【バージョン情報】
 2023/11/26 : 新規
**********************************************************************/

//ボタンの上下左右の定義は、USBコネクタが上部になる方向(縦持ち)
#define BUTTON_TOP    (14)
#define BUTTON_LEFT   (16)
#define BUTTON_RIGHT  (12)
#define BUTTON_BOTTOM (17)
#define BUTTON_CENTER (13)

//ボタンに使用するピン
char TblButtonPin[] = {
  BUTTON_TOP,
  BUTTON_LEFT,
  BUTTON_RIGHT,
  BUTTON_BOTTOM,
  BUTTON_CENTER,
};
  
void setup()
{
  Serial.begin(115200);

  //ボタンは、プルアップ設定で使用します。
  long TblSize = sizeof(TblButtonPin);
  for(int i = 0; i < TblSize; i ++)
  {
    pinMode(TblButtonPin[i], INPUT_PULLUP);
  }
}

void loop()
{
  if(digitalRead(BUTTON_TOP) == false) Serial.println("Up");
  if(digitalRead(BUTTON_LEFT) == false) Serial.println("Left");
  if(digitalRead(BUTTON_RIGHT) == false) Serial.println("Right");
  if(digitalRead(BUTTON_BOTTOM) == false) Serial.println("Bottom");
  if(digitalRead(BUTTON_CENTER) == false) Serial.println("Center");
}
結果

結果をシリアルモニタで確認します。
画像は右ボタン(GPIO12に割り当て)を押した時の画像です。
押されている間は”Right”文字列の出力を続けます。

ボリューム抵抗(ADC)

説明

アナログ値を読み取りシリアルに出力します。
ボリューム抵抗を時計方向に回すと抵抗が小さくなり、ADCの読み取り値が大きくなります。
ボリューム抵抗を半時計方向に回すと抵抗が大きくなり、ADCの読み取り値が小さくなります。

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

【スケッチの説明】
RaspberryPi PicoとGPIO TestBoardの組み合わせで使用します。

アナログ値を読み取りシリアルに出力します。
ボリューム抵抗を時計方向に回すと抵抗が小さくなり、ADCの読み取り値が大きくなります。
ボリューム抵抗を半時計方向に回すと抵抗が大きくなり、ADCの読み取り値が小さくなります。

【バージョン情報】
 2023/11/26 : 新規
**********************************************************************/

#define PIN_ADC    (26)
  
void setup()
{
  Serial.begin(115200);

  pinMode(PIN_ADC, INPUT);

  long adc = 0;
  while(1)
  {
    adc = analogRead(PIN_ADC);
    Serial.println(adc);
  }
}

void loop()
{
}
結果

ADCを読み取りました。
説明の通りボリューム抵抗の回す方向によりADCの読み取り値は変化します。
掲載の結果はおおむね中間の位置です。

コメント

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