2020.08.03 Seeeduino XIAO 2021.07.14更新
YouTubeでポイントを説明しています。画像をクリックすると再生できます。
今回は、Seeeduino XIAO に、I2CによりAHT10温湿度センサーモジュールを、SPIによりTFTディスプレイを接続してみます。
Seeeduino XIAOはCPUにARMR CortexR-M0+ 32bit 48MHzを採用し、256KB Flashと32KB SRAMを搭載したマイクロコントローラー(SAMD21G18)です。
大きさは、Seeeduinoシリーズ最小の20x17.5mmです。
【更新情報】
2021/03/11 PlatformIO 5.1.0 におけるビルド
■仕様 Seeeduino XIAO と Arduino Nano 比較
| Seeeduino XIAO | Arduino Nano |
| CPU | ARM Cortex-M0+ 32bit 48MHz (SAMD21G18) | Atmel ATmega328P 8bit 16MHz |
| Flash Memory | 256KB | 32KB |
| SRAM | 32KB | 2KB |
| Digital I/O | 11 pins | 14 pins |
| Analog I/O | 11 pins | 8 pins |
| interface | I2C,SPI,UART | I2C,SPI,UART |
| USB | Type-C | Type-B |
| 動作電圧 | 3.3V | 5V |
| Size | 20×17.5 | 43.2×17.8mm |
Ref.https://wiki.seeedstudio.com/Seeeduino-XIAO/#features
ピン上の UART は USB 経由のシリアルとは別物で、Serial1 で操作が可能です。
Seeeduino XIAO はリセットボタンがありません。基板上に二つのリセット用ランドをショートすることでリセットできます。
表面の5V.3.3Vは入出力兼用、背面には電源Pad 5V(VIN)が付いています。
具体的なピン番号は、SAMD 系 Arduino と同様に variant.h/variant.cpp に記述されています。
■開発環境

パソコンから、TeraTeamでラズパイにSSH接続、ラズパイでビルドしたコードを、XIAO に転送します。
ラズパイのディストリビューションは、Raspbian Stretch、開発環境に platformio を使用しています。
→ Ref.Arduino開発環境構築 PlatformIO
$ platformio device list
/dev/ttyACM0
------------
Hardware ID: USB VID:PID=2886:802F SER=4B54E41B2D9D708 LOCATION=1-1:1.0
Description: Seeed femto M0
/dev/ttyAMA0
------------
Hardware ID: 20201000.serial
Description: ttyAMA0
$ platformio boards "Seeeduino"
Platform: atmelavr
==============================================================
ID MCU Frequency Flash RAM Name
--------- ---------- ----------- ------- ----- ---------
seeeduino ATMEGA328P 16MHz 31.50KB 2KB Seeeduino
Platform: atmelsam
====================================================================
ID MCU Frequency Flash RAM Name
----------------- ---------- --------- ----- ---- ------------------
seeed_femto SAMD21G18A 48MHz 256KB 32KB Seeeduino Femto M0
seeeduino_lorawan SAMD21G18A 48MHz 256KB 32KB Seeeduino LoRaWAN
seeed_xiao SAMD21G18A 48MHz 256KB 32KB Seeeduino XIAO
seeed_zero SAMD21G18A 48MHz 256KB 32KB Seeeduino Zero
■プロジェクトの作成
$ mkdir -p ~/xiao
$ cd ~/xiao
$ platformio init -b seeed_xiao
$ vi platformio.ini
[env:seeed_xiao]
platform = atmelsam
board = seeed_xiao
framework = arduino
↓追記
; change microcontroller
board_build.mcu = samd21g18a
; change MCU frequency
board_build.f_cpu = 48000000L
upload_protocol = sam-ba
Ref.https://docs.platformio.org/en/latest/boards/atmelsam/seeed_xiao.html
■ビルドテスト:Lチカ
$ vi src/led.ino
#define TX_PIN 11
#define RX_PIN 12
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(TX_PIN, OUTPUT);
pinMode(RX_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(TX_PIN, LOW);
delay(500);
digitalWrite(TX_PIN, HIGH);
delay(500);
digitalWrite(RX_PIN, LOW);
delay(500);
digitalWrite(RX_PIN, HIGH);
delay(500);
}
【XIAOのLED】
[P]緑色:電源ONで点灯
[L]黄色:デジタル13番(LED_BUILTIN)出力で点灯/消灯
[R]青色:UART-RX通信受信時点灯/デジタル12番(PIN_LED2)出力で点灯/消灯
[T]青色:UART-TX通信の送信時に点灯/デジタル11番(PIN_LED3)出力で点灯/消灯
Arduinoとは逆に、デジタル11-13番出力は"LOW"で点灯し、"HIGH"で消灯します。
デジタル11-13番出力はLEDのみでピン接続はありません。
$ pio run
Processing seeed_xiao (platform: atmelsam; board: seeed_xiao; framework: arduino)
---------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelsam/seeed_xiao.html
PLATFORM: Atmel SAM 4.5.1 > Seeeduino XIAO
HARDWARE: SAMD21G18A 48MHz, 32KB RAM, 256KB Flash
DEBUG: Current (atmel-ice) External (atmel-ice, blackmagic, jlink)
PACKAGES:
- framework-arduino-samd-seeed 1.7.6
- framework-cmsis 1.40500.0 (4.5.0)
- framework-cmsis-atmel 1.2.0
- toolchain-gccarmnoneeabi 1.70201.0 (7.2.1)
...................
Compiling .pio/build/seeed_xiao/FrameworkArduino/IPAddress.cpp.o
/home/pi/.platformio/packages/framework-arduino-samd-seeed/cores/arduino/IPAddress.cpp: In member function 'virtual size_t IPAddress::printTo(Print&) const':
/home/pi/.platformio/packages/framework-arduino-samd-seeed/cores/arduino/IPAddress.cpp:122:1: internal compiler error: Illegal instruction
}
^
コンパイルエラーで処理が中断します。
PlatformIO, version 3.7.0以降の注意点
$ platformio --version
PlatformIO, version 4.3.4
コンパイルエラーは、Platformio 3.7.0以降に導入された新しい toolchain に起因しています。
通常は、platformio.ini のプラットフォームをロールバックすると解決します。
$ vi platformio.ini
platform = atmelsam
↓変更
platform = atmelsam@3.6.1
Ref.PlatformIO Community
しかし、古いプラットフォームに戻すと、xiao に対応していません。
$ platformio run
....
Error: Unknown board ID 'seeed_xiao'
そこで、ロールバックせずに、xiao用のjsonファイルを書き換えます。
$ platformio upgrade
You're up-to-date!
PlatformIO 4.3.4 is currently the newest version available.
PlatformIOのボード情報を更新します。
$ platformio platform update
Platform Atmel AVR
--------
Updating atmelavr @ 2.2.0 [Up-to-date]
Updating toolchain-atmelavr @ 1.50400.190710 [Up-to-date]
Updating framework-arduino-avr-minicore @ 2.0.5 [Up-to-date]
Updating framework-arduino-avr @ 5.0.0 [Up-to-date]
Updating tool-avrdude @ 1.60300.200527 [Up-to-date]
Platform Atmel SAM
--------
Updating atmelsam @ 4.5.1 [Up-to-date]
Updating tool-bossac @ 1.10700.190624 [Up-to-date]
Updating framework-arduino-samd-seeed @ 1.7.6 [Up-to-date]
Updating framework-cmsis-atmel @ 1.2.0 [Up-to-date]
Updating tool-avrdude @ 1.60300.200527 [Up-to-date]
Updating toolchain-gccarmnoneeabi @ 1.70201.0 [Up-to-date]
Updating framework-cmsis @ 1.40500.0 [Up-to-date]
Platform Atmel SAM
--------
Updating atmelsam @ 3.6.1 [Detached]
Updating tool-avrdude @ 1.60300.200527 [Up-to-date]
Updating tool-bossac @ 1.10700.190624 [Up-to-date]
Platform Espressif 32
--------
Updating espressif32 @ 1.12.4 [Up-to-date]
Updating framework-arduinoespressif32 @ 3.10004.200129 [Up-to-date]
Updating tool-esptoolpy @ 1.20600.0 [Up-to-date]
$ vi ~/.platformio/platforms/atmelsam/platform.json
"toolchain-gccarmnoneeabi": {
"type": "toolchain",
"version": "~1.70201.0"
↓変更
"version": ">=1.40803.0,<1.40805.0"
},
$ pio run
Processing seeed_xiao (board: seeed_xiao; platform: atmelsam; framework: arduino)
----------------------------------------------------------------------------
PackageManager: Installing toolchain-gccarmnoneeabi @ >=1.40803.0,<1.40805.0
PLATFORM: Atmel SAM 4.5.1 > Seeeduino XIAO
HARDWARE: SAMD21G18A 48MHz, 32KB RAM, 256KB Flash
DEBUG: Current (atmel-ice) External (atmel-ice, blackmagic, jlink)
PACKAGES:
- framework-arduino-samd-seeed 1.7.6
- framework-cmsis 1.40500.0 (4.5.0)
- framework-cmsis-atmel 1.2.0
- toolchain-gccarmnoneeabi 1.40803.0 (4.8.3)
これで、無事コンパイルが完了します。
===========================================
PlatformIO 5.1.0 におけるビルド (2021/03/11追記)
環境設定ファイルが変更されています。
~/.platformio/platforms/atmelsam/platform.json
"packages": {
"toolchain-gccarmnoneeabi": {
"type": "toolchain",
"owner": "platformio",
"version": "~1.70201.0",
"optionalVersions": [
">=1.40803.0,<1.40805.0",
">=1.60301.0,<1.80000.0",
"~1.80201.0",
"~1.90301.0"
]
},
これにより、iniファイルでパッケージを指定することにより、toolchainを変更できます。
$ vi platformio.ini
[env:seeed_xiao]
platform = atmelsam
board = seeed_xiao
framework = arduino
platform_packages = toolchain-gccarmnoneeabi @ 1.40803.0
lib_deps =
adafruit/Adafruit INA219@^1.1.0
adafruit/Adafruit ST7735 and ST7789 Library@^1.6.0
Ref.PlatformIO Community
===========================================
$ pio run -t upload -t nobuild
Warning! Please install `99-platformio-udev.rules`.
Mode details: https://docs.platformio.org/en/latest/faq.html#platformio-udev-rules
Auto-detected: /dev/ttyACM0
Forcing reset using 1200bps open/close on port /dev/ttyACM0
Waiting for the new upload port...
scons: *** [upload] /sys/devices/platform/soc/20980000.usb/usb1/1-1/1-1:1.0/subsystem: No such file or directory
========== [FAILED] Took 18.01 seconds ===========
デバイス管理用のルールファイルを更新します。
$ curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
$ sudo service udev restart
$ platformio run -t upload -t nobuild

■シリアル通信
ラズパイ上のPlatformioデバイスモニターから打ち込んだ文字を、XIAOで受信し、受信文字をラズパイに返してみます。
$ vi serial.ino
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
char c = Serial.read();
Serial.println((char)c);
}
}
$ platformio run -t upload
$ platformio device monitor -p /dev/ttyACM0 -b 9600
■I2C通信
I2Cで繋いだ温湿度センサー測定モジュールから温度・湿度を取得してみます。
AHT10 高精度デジタル温湿度センサー 測定モジュール
・Interface:I2C
・動作電圧:1.8-6.0V
・湿度精度:標準±2%
・湿度分解能:0.024%
・温度精度:標準±0.3℃
| XIAO | - | AHT10 |
| A4/SDA | - | SDA |
| A5/SCK | - | SCL |
| GND | - | GND |
| 3.3V | - | Vin |

https://github.com/adafruit/Adafruit_AHTX0 から
・Adafruit_AHTX0.cpp
・Adafruit_AHTX0.h
・adafruit_aht_test.ino
をダウンロードして、~/xiao/src に配置します。
$ vi src/adafruit_aht_test.ino
#include <Adafruit_AHTX0.h>
Adafruit_AHTX0 aht;
void setup() {
Serial.begin(115200);
if (!aht.begin()) {
Serial.println("Could not find AHT? Check wiring");
while (1) delay(10);
}
}
void loop() {
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp);
Serial.print(temp.temperature);
Serial.print("℃ ");
Serial.print(humidity.relative_humidity);
Serial.println("%");
delay(500);
}
$ pio run
src/Adafruit_AHTX0.h:22:37: fatal error: Adafruit_BusIO_Register.h: No such file or directory
$ platformio lib search "header:Adafruit_BusIO_Register.h"
Adafruit BusIO
==============
#ID: 6214
This is a library for abstracting away UART, I2C and SPI interfacing
$ platformio lib install 6214
$ vi platformio.ini
lib_deps =
6214
同様に
$ platformio lib search "header:Adafruit_Sensor.h"
Adafruit Unified Sensor
=======================
#ID: 31
Required for all Adafruit Unified Sensor based libraries. A unified sensor abstraction layer used by many Adafruit sensor libraries.
$ platformio lib install 31
$ vi platformio.ini
lib_deps =
6214
31
$ pio run -t upload
$ platformio device monitor -p /dev/ttyACM0 -b 115200
30.19℃ 64.41%
30.19℃ 64.41%
30.19℃ 64.39%
30.19℃ 64.42%
30.19℃ 64.40%
■SPI通信
0.96inch TFT-LCD Module
Matrix Size:80*160
Interface:SPI
Driver IC:ST7735
Working Power Supply:3.3V
| XIAO | - | TFT DISPLAY |
| GND | - | [1]GND |
| 3.3V | - | [2]VCC |
| SCK[D8] | - | [3]SCL:SPI clock line |
| MOSI[D10] | - | [4]SDA:SPI data line |
| [D2] | - | [5]RES:Reset interface |
| [D3] | - | [6]DC:SPI data / command selection |
| [D1] | - | [7]CS:Chipselect |
| | - | [8]BLK:Backlight control |
$ vi src/ST7735.ino
#include <Adafruit_AHTX0.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 1
#define TFT_RST 2
#define TFT_DC 3
#define TFT_SCLK 8
#define TFT_MOSI 10
#define BLACK ST7735_WHITE
#define CYAN ST7735_BLUE
#define ORANGE ST7735_ORANGE
Adafruit_AHTX0 aht;
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI,
TFT_SCLK, TFT_RST);
void setup(void) {
if (! aht.begin()) {
Serial.println("Could not find AHT? Check wiring");
while (1) delay(10);
}
tft.initR(INITR_MINI160x80);
tft.setTextWrap(false);
tft.setRotation(3);
}
void loop() {
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp);
tft.fillScreen(BLACK);
tft.setCursor(5, 30);
tft.setTextSize(2);
tft.setTextColor(ORANGE);
tft.print(temp.temperature);
tft.print("C ");
tft.setTextColor(CYAN);
tft.print(humidity.relative_humidity);
tft.println("%");
delay(1000);
}
$ pio run
$ platformio lib search "header:Adafruit_GFX.h"
Adafruit GFX Library
====================
#ID: 13
Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from. Install this library in addition to the display library for your hardware.
.....
$ platformio lib search "header:Adafruit_ST7735.h"
Adafruit ST7735 and ST7789 Library
==================================
#ID: 12
This is a library for the Adafruit ST7735 and ST7789 SPI displays.
$ platformio lib install 13
$ platformio lib install 12
$ vi platformio.ini
lib_deps =
6214
31
13
12

■参考文献
・Seeeduino XIAO
・コインサイズ Arduino互換機 Seeeduino XIAO を使ってみた
・GitHub Adafruit-ST7735-Library
・graphicstest.ino
・Adafruit Mini TFT - 0.96" 160x80
・Arduinoリファレンス TFT
・TFT LCD(ST7735)モジュールに表示を行う
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|