HOME | Raspberry Pi | ビジネス書籍紹介 | 2026-01-04 (Sun) Today's Access : 183 Total : 1260881. Since 10 Sep. 2019

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 XIAOArduino Nano
CPUARM Cortex-M0+ 32bit 48MHz
(SAMD21G18)
Atmel ATmega328P 8bit 16MHz
Flash Memory256KB32KB
SRAM32KB2KB
Digital I/O11 pins14 pins
Analog I/O11 pins8 pins
interfaceI2C,SPI,UARTI2C,SPI,UART
USBType-CType-B
動作電圧3.3V5V
Size20×17.543.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プロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2019.12.13 モバイルバッテリーによる瞬間停電対策
2020.01.01 1280x800 HDMI MONITOR
2020.01.12 micro:bitをコマンドラインで使う
2020.02.04 サーマルプリンタを使う
2020.04.10 電卓を制御して数字を表示する
2020.08.03 Seeeduino XIAO
2020.08.09 LGT8F328P - Arduino clone
2020.09.18 電流計測モジュール INA219
2021.02.16 癒しの電子回路
2021.03.06 疑似コンソール
2021.08.08 電子ペーパー
2021.09.04 AVRマイコン・ATTiny85
2021.09.25 pH測定
2021.11.13 NTP時刻取得と活用
2021.11.27 GPS情報取得
2021.12.11 GR-KURUMI
2021.12.25 ATMEGA328P 3.3V/8MHz
2022.01.11 AS-289R2 プリンタシールド
2022.01.25 TM1637 & ATtiny85
2022.02.22 Raspberry Pi Zero 小道具
2022.03.01 ATTinyCore
2022.03.18 Adafruit QT Py + XIAO Expansion board
2022.07.31 サーマルプリンター番外編:通信筒
2023.01.01 FTP Server & SPI Flash SD
2023.02.01 LPC810(ARM Cortex-M0+)
2023.02.15 IchigoJam互換機
2023.03.01 Telnet
2023.04.26 USBメモリをUART接続で利用する
2023.05.14 焦電型赤外線モーションセンサー
2023.07.01 文字化けしないキーボード
2023.08.01 Bluetoothサーマルプリンター
2023.08.12 LattePanda 2G/32GB
2023.09.04 SI-3012KS
2023.12.01 疑似コンソール(C言語編)
2023.12.16 昭和レトロ・温度湿度時刻計
2023.12.25 二酸化炭素濃度監視
2024.01.23 なんちゃってmicro:bit
2024.02.07 オリジナル micro:bit
2024.02.23 ESP32 OTA
2024.03.08 TELNETサーマルプリンター
2024.05.08 ESP32 PROGRAM SELECTOR
2024.05.23 統合開発環境とQwiic
2025.01.24 赤外線リモコン
2025.03.25 QRCode SCANNER
2025.04.08 Keyestudio 328 WiFi Plus
2025.08.23 NanoPi NEO3
2025.09.24 I2C接続microSDモジュール
2025.10.08 UNO 3.3V@8MHz

たいていのことは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)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.