Seeeduino XIAO でPWM調光のLチカとI2CのLCDを使ってみる

最近発売されたコインサイズの小型arduino互換機 Seeeduino XIAO でLチカやLCD表示などを試してみました。

Seeeduino XIAO

先月に発売されました。秋月やSwitchScienceで買えます。

公式doc
https://wiki.seeedstudio.com/Seeeduino-XIAO/

動画にありますが、ウェアラブルにも良さそう。

シールが白紙を含めて4種類添付されています。薄緑色を貼ってみました。

Arduino IDEの設定

[環境設定]-[設定]-[追加のボードマネージャのURL:] に以下を追加。
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

[ボードマネージャ]から Seeed SAND Boards by Seeed Studio (現時点で v1.7.2)をインストールして
ボードで “Seeeduino XIAO” を選択すればOK。

基本的にArduinoのコードが動く様です。

Lチカ

Blinkサンプルはそのまま動作しました。オンボードLEDがUSBコネクタ近くにあります。
サンプルに外部LEDをpin1に追加してLチカしてみました。

#define LED_1 1

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED_1, OUTPUT);
}

void loop() {
  // LED Off
  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(LED_1, LOW);
  delay(500);
  // LED On
  digitalWrite(LED_BUILTIN, LOW);
  digitalWrite(LED_1, HIGH);
  delay(100);
}

調光Lチカ

analogWrite()を使うとPWM出力によるLEDの調光ができます。pin8にトランジスタ 2SC2120 を接続してLEDをスイッチングしてみました。

#define LED_2 8

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

void loop() {
  int i=0;
  while (i <= 255){
    analogWrite(LED_2, i);
    delay(20);
    i += 5;
  }
  i=255;
  while (i >= 0){
    analogWrite(LED_2, i);
    delay(20);
    i -= 5;
  }  
  analogWrite(LED_2, 0);
  delay(500);
}

I2CでLCD接続

手元にあるこちらのLCD AQM1602 を接続しました。Seeeduino XIAO のI2Cは SDA:A4, SCL:A5 です。

I2C接続小型キャラクタLCDモジュール(16X2行・3.3V/5V)ピッチ変換キット

データシートに書かれているあるarduino用サンプルコードがそのまま動作します。

#include <Wire.h>
#define LCD_ADRS 0x3E
char moji[] ="AQM1602XA-RN-GBW";

void setup() {
  Wire.begin();
  init_LCD();
}
void loop() {
 for(int i=0; i<16; i++) {
   writeData(moji[i]);
 }
 writeCommand(0x40+0x80); // 2LINE TOP
 for(int i=0; i<16; i++) {
   writeData(i+0xb1);
 }
 delay(1000);
 writeCommand(0x01);  // Clear Display
 delay(1000);
}

void writeData(byte t_data) {
 Wire.beginTransmission(LCD_ADRS);
 Wire.write(0x40);
 Wire.write(t_data);
 Wire.endTransmission();
 delay(1);
}

void writeCommand(byte t_command) {
 Wire.beginTransmission(LCD_ADRS);
 Wire.write(0x00);
 Wire.write(t_command);
 Wire.endTransmission();
 delay(10);
}

void init_LCD() {
  delay(100);
  writeCommand(0x38);
  delay(20);
  writeCommand(0x39);
  delay(20);
  writeCommand(0x14);
  delay(20);
  writeCommand(0x73);
  delay(20);
  writeCommand(0x56);
  delay(20);
  writeCommand(0x6C);
  delay(20);
  writeCommand(0x38);
  delay(20);
  writeCommand(0x01);
  delay(20);
  writeCommand(0x0C);
  delay(20);
}

Duty可変の調光とLCD表示

pin1に可変抵抗を接続してanalogRead()でLED調光のDutyとしてみました。DutyをLCDへ表示しています。

Duty 10%
オシロの測定値で 周波数: 752Hz Duty: 13%

Duty 25%

Duty 49%

まとめ

WiFiが必要ならばESP32、そうでない用途ならばXIAOで十分と思いました。Serial UART出力を使ってラズパイに出力してもよさそうです。
何より小さいので組み込んだりウェアラブルにも色々用途がありそうです。

コメントを残す

メールアドレスが公開されることはありません。

four × one =