BBC の micro:bit v1.5を紹介します。
子供向けプログラム教育用に作られたマイコンで主にスクラッチでプログラムの記述を行いますが、Arduino環境でも使用することができます。
基本的な入出力や通信関連をArduino環境で使用してみます。
紹介するもの
BBC micro:bit v1.5
接続 | Micro B |
CPU | Nordic nRF52840 64MHz |
GPIO | 17 |
PWM | 17(8bit 0 – 255) |
ADC | 6(10bit 0 – 1023, 3.3V) |
I2C | 1 |
SPI | 1 |
そのほか | リセットボタン ユーザボタン A(GPIO5), B(GPIO11) 電源コネクタ 温度センサ 地磁気センサ 加速度センサ 加速度センサ マトリクス(5×5)LED 照度センサ |
ピン配置
外観
画像はピンクの柄ですが、購入時に何色が出てくるかはわからないようです。
ブレークアウト基板を使用することでピンをピンヘッダへ変換して使用することができます。
ブレッドボードに使用するとこのような状態になります。
当方の使用しているブレークアウト基板では立てた状態で使用します。
使ってみて
0, 1, 2 と 3V GNDはワニ口クリップでつまめますが、そのほかの端子はそのまま使用するのは難しいので、外観画像のようにブレークアウトボードからピンソケットに変換することで多くのIOを使用することができます。
ブレークアウトボードは種類がありますので、目的に合った基板を選んでください(通信(I2C, SPI)が使えるなど)
micro:bitはスクラッチではとても簡単に多くの機能を使用することができます。
Arduino環境は、スクラッチのように視覚的に関数機能の一覧からの選択やデバッグ機能がないため、同じ感覚で使用を考えているとなかなか手こずるものと思います。
micro:bitは多くのセンサーを搭載しているので準備ができましたら少しずつ記事の更新をしていきます。
準備
ライブラリ
ボードライブラリ
Arduino IDEのボードマネージャからAE-nRF52840用のライブラリのインストールとボードの選択をします。
ボードマネージャのURL | https://sandeepmistry.github.io/arduino-RF5/package_nRF5_boards_index.json |
検索 | micro:bit |
ボードライブラリ | Nordic Semiconductor nRF5 Boards by Sandeep Mistry バージョン x.x.x |
選択するボード | Nordic Semiconductor nRF5 Boards > BBC micro:bit |
モジュールライブラリ
機能やモジュールを使用しない場合インストールの必要はありません。
機能/モジュール | ライブラリ名 | 検索 | 確認時のバージョン |
---|---|---|---|
SSD1306 | Adafruit SSD1306 by Adafruit | SSD1306 | 2.5.1 |
ST7735 | Adafruit ST7735 and ST7789 Library by Adafruit | ST7735 | 1.9.3 |
関連 SSD1306 ST7735 | Adafruit GFX Library by Adafruit | GFX | 1.11.3 |
スケッチの書き込み方
パソコンとMicro:bitをUSBケーブルで接続します。
Arduino IDEから接続したCOMポート番号を選択し、プログラムを書き込むボタンを押下します。
小さなプロジェクトでのmicro:bitでのコンパイルとほかのSoc(ESP32やRP2040)と比べると書き込みはとても速いです。
出力画面には赤文字ですべての経過が表示されるのでErrorがあったかのように感じますが、メッセージをよく読んで判断してください。
基本スケッチ
ボタンLED
説明
ボタンが押下されている間LEDを点灯させます。
ボタンが離されている間LEDは消灯させます。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
BBC micro:bit
【スケッチの説明】
Bボタンが押されていたらLEDを点灯、離されていたらLEDを消灯します。
micro:bitでは Aボタンは GPIO5で PIN_BUTTON_A 定義
BボタンはGPIO11で PIN_BUTTON_B が定義されています。
実装ボタンはPULL UPして使用するので、LEDの点灯、消灯は状態反転します。
【ライブラリ】
Nordic Semiconductor nRF5 Boards > BBC micro:bit
【準備】
GPIO0 -> 保護抵抗(200Ω) -> LED -> GND
【バージョン情報】
2023/3/16 : 新規
**********************************************************************/
#define LED 0 //LED
void setup()
{
pinMode(LED, OUTPUT); //ピン出力設定
pinMode(PIN_BUTTON_B, INPUT_PULLUP); //プルダウンで入力
}
void loop()
{
int iStat = !digitalRead(PIN_BUTTON_B); //PULL UPしているので状態反転する
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/
【マイコン基板】
micro:bit
【スケッチの説明】
PWMを使ってLEDをゆっくり点灯、ゆっくり消灯を繰り返します。
【ライブラリ】
Nordic Semiconductor nRF5 Boards > BBC micro:bit
【準備】
GPIO0(OUTPUT) -> 保護抵抗(約200Ω) -> LED -> GND
LEDの保護抵抗は適値を求めて使用してください。
【バージョン情報】
2023/3/16 : 新規
**********************************************************************/
#define PWM 0
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ずつ下降する設定を繰り返します。
配線
micro:bit | 配線 | LOLIN32 Lite |
---|---|---|
GPIO14(ADC) | 赤 | GPIO26(DAC) |
GND | 黒 | GND |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
micro:bit
【スケッチの説明】
入力された電圧を読み取ります。
【ライブラリ】
Nordic Semiconductor nRF5 Boards > BBC micro:bit
【準備】
micro:bit <-> LOLIN32 Lite
GPIO0(ADC) <-> GPIO26(DAC)
GND <-> GND
【バージョン情報】
2023/3/17 : 新規
**********************************************************************/
#define ADC 0
void setup()
{
Serial.begin(115200);
pinMode(ADC, INPUT);
}
void loop()
{
int iADC = 0;
//外部から入力された電圧を読み取り、結果をCOMに出力します。
iADC = analogRead(ADC);
Serial.print("(ADC) =");
Serial.println(iADC);
delay(2);
}
結果
入力した電圧を読み取った結果をグラフにしました。
電圧の変化は0V -> 3.3Vまでを約500msで上昇し、3.3V -> 0Vまで約500msで下降します。
ADC読み取り値は低値から高値まで直線でキレイな波形になっています。
電圧と読み取り値の同期はできていませんが、参考程度に入力電圧を添付します。
COM通信
説明
micro:bitではUARTピンが標準で出ていないので、COM通信でのオウム返しをします。
配線
不要
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
micro:bit
【スケッチの説明】
COM通信のオウム返しをします。
【ライブラリ】
Nordic Semiconductor nRF5 Boards > BBC micro:bit
【準備】
不要
【バージョン情報】
2023/3/17 : 新規
**********************************************************************/
void setup()
{
Serial.begin(115200); //SerialオブジェクトはUART0 (COM)
}
void loop()
{
if(Serial.available() != 0) //S/W uartにデータがあれば、読み取った内容をCOMに送信
{
Serial.write(Serial.read());
}
}
結果
結果はTeratermを起動して確認します。
Teratermに入力された文字は、すぐにmicro:bitから戻ってくるので画面に表示されます。
ローカルエコーが有効の場合は、2文字ずつ表示される結果になります。
I2C(SSD1306)
説明
I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
図形の描画やそのほかの命令はArduinoサンプルスケッチを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c
配線
micro:bit | 配線 | SSD1306(0.96inch) |
---|---|---|
3.3V | 赤 | VCC |
GND | 黒 | GND |
GPIO20(SDA) | 黄 | SDA |
GPIO19(SCL) | 青 | SCL |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
micro:bit
【スケッチの説明】
SSD1306 OLEDの制御をします。
【ライブラリ】
Nordic Semiconductor nRF5 Boards > BBC micro:bit
Adafruit SSD1306 by Adafruit
Adafruit GFX Library by Adafruit
【準備】
マイコン基板 <-> SSD1306
3V3 <-> VCC
GND <-> GND
GPIO20(SDA) <-> SDA
GPIO19(SCL) <-> SCL
【バージョン情報】
2023/03/17 : 新規
**********************************************************************/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#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);
//表示制御にはAdafruit製 SSD1306を使用する。
void setup()
{
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)モニタのサンプルを動作させます。
図形の描画やそのほかの命令はArduinoサンプルスケッチを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest
配線
micro:bit | 配線 | ST7735(1.8inch) |
---|---|---|
3.3V | 赤 | VCC |
3.3V | 赤 | LED |
GND | 黒 | GND |
GPIO12 | 黄 | CS |
GPIO11 | 青 | Reset |
GPIO10 | 橙 | AO(DC) |
GPIO15(SPI MOSI) | 緑 | SDA |
GPIO13(SPI SCK) | 紫 | SCK |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
micro:bit
【スケッチの説明】
ST7735 LCDの表示制御します。
【ライブラリ】
Nordic Semiconductor nRF5 Boards > BBC micro:bit
Adafruit ST7735 and ST7789 Library
Adafruit GFX Library
【準備】
マイコン基板 <-> ST7735
3V3 <-> VCC
GND <-> GND
GPIO12 <-> CS
GPIO11 <-> Reset
GPIO10 <-> AO
GPIO13(SPI MOSI) <-> SDA
GPIO15(SPI SCK) <-> SCK
【バージョン情報】
2023/3/17 : 新規
**********************************************************************/
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 12
#define TFT_RST 11
#define TFT_DC 10
#define TFT_MOSI 15
#define TFT_SCK 13
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
//S/W SPIはこちら。遅いが任意のピンを使用できる。
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCK, TFT_RST);
void setup(void)
{
//SPI.setPins(-1, TFT_SCK, TFT_MOSI); //デフォルトピンから変更する場合は、定義のピン番号を変更してコメントを外す。
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.print("TAMANEGI\n");
tft.setCursor(0, 50); //カーソル位置
tft.setTextSize(2); //サイズ
tft.setTextColor(ST77XX_RED); //赤
tft.print("1.8inch LCD\n");
tft.setTextColor(ST77XX_YELLOW); //黄
tft.print("Res=128 x 160\n");
tft.setTextColor(ST77XX_BLUE); //青
tft.print("ST7735\n");
}
void loop()
{
}
結果
ST7735のサンプルスケッチが動作しました。
特別な機能スケッチ
<準備中>
コメント