Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方

組み込みエンジニア
本記事はプロモーションが含まれています。

こんにちは、ENGかぴです。

Seeeduino XIAOはArduino環境でソフト開発ができるため標準搭載のライブラリを使用することで各種センサーの動作確認ができます。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるため趣味や業務で簡単なアプリを作りたい場合にお勧めの開発環境です。

私が動作確認しているライブラリなどのプログラムを動作させてみたり改造したりと有効利用していただき少しでも興味を持っていただけたのなら幸いです。

ソフト開発と標準ライブラリの使い方

Seeduino XIAOはSeeeduinoシリーズにおいて最も最小なモジュールです。ARMマイコンでありATSAMD21G18A-MUを搭載しています。500円玉適度の小サイズですがArduinoと互換性があり使い勝手のよいモジュールです。

Seeeduino Xiaoをはじめよう – Seeedウィキ(日本語版) (seeedstudio.com)

SeeedウィキではSeeeduino XIAOについてハードウェアやソフトウェアの情報やピン配置などの情報が記載されています。Arduinoと互換性があるためArduino IDEを使ったソフト開発や標準ライブラリを使用することができます。

Seeeduinoの開発環境を作る

Arduinoの開発環境であるArduino IDEのダウンロードからインストールまでの手順をまとめていきます。対象OSはWindows10です。Seeeduino XIAOの開発環境をArduino IDEに追加する手順と動作確認を行った方法についてまとめています。

広告

BME280で温湿度と気圧のデータを取得(I2C/SPI)

Wireライブラリを使ってI2C通信を行いBME280から温度・気圧・湿度のデータを取得しBOSCH社が提供しているAPIを組み込んで計測値を各種データに換算して表示しました。

I2C通信を持つセンサーモジュールが増えてきているためWireライブラリでI2C通信で動作確認ができることはセンサーの性能が検討しやすいのは良い点だと思います。

Arduino環境ではSPI通信を行うために標準ライブラリとしてSPIライブラリがあります。BME280の製作メーカが提供しているAPIを使用して温度・気圧・湿度の計算を行いSPI通信でセンサー情報を取得する方法をまとめました。

BME280の製作メーカであるBOSCH社が提供しているAPIを使用することを推奨しているためAPIの実装方法についても説明しています。

応用編としてWireを使用してLCDにBME280から取得したデータを表示しました。

温度は室温計とほぼ同じ値でしたが気圧や湿度はスマホのデータを比較した場合少しずれている気がしました。実際はスマホのデータ環境と室内では環境が違うため厳密には比較できませんが、センサーからデータが取得できているのが確認できると達成感があります。

スポンサーリンク

FreeRTOSを使用してマルチタスク処理を行う

FreeRTOSライブラリを使用してBME280から温湿度・気圧の情報を取得しLCDに表示するタスクと動作中であることを表示するLEDを点灯/消灯させるタスクを登録しました。

タスクの一時停止についての注意事項やタスク登録を増やし過ぎた時のデメリットであるスタックオーバーについて説明しています。

広告

パルス波形でブザーを鳴らす

標準ライブラリのanalogWrite()によってPWM波形を生成しブザーを鳴らしました。analogWrite()ではPWMのデューティ比が変更できるためデューティ比を変更してブザーに供給する電圧を変化させることで若干音程が変わります。

Seeeduino XIAOを使って標準ライブラリであるtone()によってブザーを鳴らす方法とタイマを使ってブザーを鳴らす2つの方法で動作確認しました。タイマを使ってブザーを鳴らす方法は、キャリア周波数とデューティ比のどちらの管理が可能となる方法です。

割り込みの頻度が多くなりすぎると割り込みの渋滞の問題もありますが、動作確認を手早く行いたい場合には有効な方法だと思います。

拡張基板のブザーの動作を確認するためボタンを押した回数をOLEDに表示しながらブザーを鳴らして動作確認を行いました。

デジタル加速度センサのデータを取得

Wire(SPI)を使用すると加速度センサー(ADXL345)の加速度やタップ情報などを取得することができます。ADXL345のライブラリのスケッチ例である「ADXL345_demo_code」を一部追加して動作確認を行いました。

広告

RTCを使って時刻情報を読み書きする

RTCモジュールにRX8900(秋月電子)を使用してRTCモジュールから書き込んだ時刻からの時間を取得しています。RTCへの時刻書き込みはシリアルモニタの送信を使ってできるように自作の電文を作成して書き込みを行っています。

RX8900モジュールを動作させるために自作したAPIを使用して時刻データの読み出しと書き込みを行っています。RTCに書き込んだ時刻が電源OFFによって消失しないように電気二重層コンデンサを使ってバックアップしています。

電源OFFにしてから12時間経過した後バックアップ電源は0.18Vしか低下していなかったことからかなり低消費であると感じました。

GPSモジュールで時刻と位置情報を取得

GPSモジュールを使って時刻と位置情報を取得を取得しました。GPSモジュールはGPS受信機キット:AE-GYSFDMAXB(秋月電子)を使用しLCDに表示しました。GPSモジュールから取得したパケット情報から時刻情報と位置情報を取得する方法をまとめています。

Google Mapで取得したデータの座標を入力すると100m程度ずれていましたが位置情報が取得できていることが確認できました。

トワイライト(TWELITE)とシリアル通信

ZigBee無線モジュールでるトワイライトはシリアル機能を持つため各種センサーと通信する機能があります。トワイライトのSerialParserのAPIを使ってSeeeduino XIAOとバイナリ形式のデータをシリアル通信する方法をまとめました。

トワイライトのSerailParserは受信データに対してヘッダやチェックサムを計算するようにAPIが構成されているので定義に合わせた電文を送信することでトワイライトとシリアル通信ができます。

チャタリング防止やチェックサムの計算の仕方などのテクニックについてもまとめています。

Seeeduino XIAOではシリアルモニタ専用のSerialと外部機器へのシリアル通信するSerial1があります。Serialを区別して使用できるのはデバッグ効率が上がるため良い点だと感じています。

広告

ES920LR(LoRaモジュール)とシリアル通信

Seeeduino XIAOのSerial1を使ってLoRaモジュールであるES920LRと接続を行い初期化を行う例をまとめました。ES920LRはシリアル通信のデータをフォーマットに従って指定することでLoRa通信することができます。

子機と親機に分けて子機に接続したセンサーの情報を親機に無線通信して動作確認を行いました。

この構成は遠隔操作でセンサー情報を取得するようなIoT機器を作ることができるため応用範囲は広いと思います。

シリアル通信を使って音声を再生する

音声合成ICであるATP3012(アクエスト)を使って音声を再生する方法をまとめました。Arduino環境では簡単にシリアル通信ができるため手軽に音声ガイダンスが作れるのは面白い点だと感じています。

アクセント記号を使いこなせていないため棒読みよりも変な音声になってしまうことがありました。変なアクセントを楽しみながら音声を調整していく作業も面白いと感じています。

広告

拡張基板を使用する

Seeeduino XAIO専用の拡張基板に実装されているOLEDにボタン情報を表示して動作確認を行いました。OLEDのライブラリを追加することでLCDと同じように文字を表示することができます。

OLEDは複雑な表示を行いたいときに使用しLCDは簡易的に文字を表示したいときに使用するなど用途によって使い分けができます。

RGB LEDを操作する

RGB LEDは赤・緑・青の光の三原色を調整することで様々なパターン色でLEDを点灯させることができます。Adafruit NeoPixelライブラリを追加してRGB LEDを操作して動作確認を行いました。

光の三原色で様々な色を作ることができるのでRGB LEDを使ったイルミネーションなどに応用できて楽しそうです。

サーボモーターを操作する

サーボモーターを標準ライブラリで操作する方法をまとめました。スターターキットに付属されていたSG90を使って動作確認を行いました。

サーボモータを使ってラジコンカーを作ったりもできますが、モーターの動きを利用して小刻みに振動させることを利用して何かできそうな気がします。

広告

アナログ値を取得して土壌の水分量を確認

標準ライブラリのanalogRead()を使って土壌センサーであるSEN0114のアナログ値を取得します。計測したデータと土壌の状態をOLEDに表示して確認しました。

挿し木を行う際の水分量の管理に使用してみようと思いましたが結局目視で水分量を管理しても失敗することが少ないため大雑把な私には動作検証で十分だと感じました。

ZigBee無線モジュールであるトワイライト(TWELITE)と組み合わせることで土壌センサーの情報を無線通信することができます。太陽光パネルを使用した電源で昼間から夜間の土壌の様子を履歴に保存して動作確認を行いました。

DHT20モジュールから湿度と温度のデータを取得

Wireライブラリを使って湿度と温度センサーであるDHT20からデータを取得する方法をまとめました。データ取得する手順をモードで管理します。データの健全性の確認のために使用するCRC8についても計算方法を説明しています。

リモコンで遠隔操作する

Arduinoのスターターキットに付属しているリモコンとGrove-Infrared Receiverを使って遠隔操作を行う方法をまとめました。受信機の出力をDIで受けて通信フォーマットを解析する方法とIRremoteライブラリを使用する方法の2通りで動作確認しました。

ハードのスイッチを実装せず赤外線受信機モジュールのみでリモコンのボタン分のDIを拡張するのと同等なので応用範囲が広がりそうです。

ジョイスティックの情報を取得する

Grove-Thumb Joystickを使ってジョイスティックからアナログ値を取得します。ジョイスティックを操作して取得したアナログ値をOLEDに表示すると同時にブザーの音程と鳴らす間隔の長さを調整して動作確認を行いました。

PR: ゼロからはじめるPython入門講座の申込 テックジム

Seeed Studio XIAO nRF52840でBlutooth通信する

Seeed Studio XIAO nRF52840(以下nRF52840とする)はSeeeduino XIAOと姉妹品のモジュールですが大きな特徴としてBlutooth通信機能が搭載されています。nRF52840もArduino環境に準拠しているためArduinoBLEライブラリを使用してBLE通信を実装することができます。

スマホなどのデバイスにBlutoothの存在を通知するアドバタイジングパケットの実装方法をまとめました。アドバタイジングパケットはブロードキャストになるため複数のデバイスに存在を通知しながら任意のデータを送信することができます。

アドバタイジングパケットでデバイスの存在を通知した後、接続すると双方向通信がスタートします。双方向通信で使用するサービスとキャラクタリスティックを生成し、キャラクタリスティックを操作してLED点灯のパターンを変更する方法をまとめました。

スマホなどはBLE接続するデバイスはセントラルデバイスと呼ばれており、接続要求を出すクライアントとなります。セントラルデバイスを実装し、上記で動作確認したLEDの点灯のパターンを変更するソースコードを書き込んだペリフェラルデバイスと双方向通信してLEDの点灯パターンを変更させました。

Seeeduino XIAOとスターターキットを紹介

上記リンクで使用しているSeeeduinoはSeeeduino XIAOです。Seeeduino XIAO本体だけでは動作確認するには部品が足りないのでスタータキットもしくはSeeeduino XIAO専用の拡張ボードをお勧めします。

ELEGOO Arduino用のUNO R3 最終版スタータキット UNOチュートリアル付 (63 Items)
ELEGOO
200以上のコンポーネントも付き、本品は最も完全なArduinoを始めようとするキットです。部品が63種類も入れて、お買い得です
Seeeduino XIAO Arduino 互換ボード専用拡張ボード OLED+RTC+リセットボタン+拡張可能メモリ+パッシブブザー搭載 はんだ付け不要 CircuitPython対応 超小型
seeed studio
【使いやすさアップ】リセットボタンとSWDピンが搭載されており、簡単かつ迅速にSeeeduino XIAOをデバッグとリセットが可能です。 また、0.96インチOLEDを利用して、PCシリアルモニターなしでデータを表示でき、ラピッドプロトタイピングに適します。

Seeeduino XIAOは小さいながらも機能が充実しておりデジタルピンの不足しやすい欠点がありますが、使いやすさは満点だと感じています。

Seeed Studio XIAO nRF52840 - Arduino/CircuitPython対応 - Bluetooth5.0 NFC オンボードアンテナ付き マイクロコントローラー 小さな機械学習用 Amazon Sidewalk対応
seeed studio
【強力なCPU】Seeed XIAOファミリー初のワイヤレス製品として、Seeed Studio XIAO nRF52840は、Bluetooth 5.0モジュールで設計された強力なNordic nRF52840 MCUを搭載し、浮動小数点ユニット(FPU)を搭載した32ビットARM Cortex-M4 CPUを中心に構築されています。

Seeeduino XIAOと姉妹品でBLE通信に対応したモジュールです。Seeeduino XIAOと同様に小さいながらも機能が充実しておりBLE通信を使って温度湿度センサーの情報を通知するようなIoTセンサーを実現することができます。

まとめ:まずは感覚を掴むことが大切です。

Arduinoはライブラリを使用することでSPIやI2C通信などが簡単に実現できるためマイコンの動作を勉強するには最適な環境です。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるため苦手意識をなくせることがメリットと言えます。

Arduinoはライブラリを使って各種機能を実現するためライブラリにない動作を組み込みたい場合は自作する必要があります。ライブラリは有志が作成したものであるためバグがある可能性もあり動作の保証はないのがデメリットです。

実際にセンサー情報を取得したりシリアルモニタに表示したりと動作確認しながら1つ1つの技術の成功を積み重ねていけばできることが増えていき自信がつくことでソフト開発に対する苦手意識がなくなっていくことは間違いありません。

自信がつきマイコンの機能をフル活用してみようとレジスタの操作についてデータシートを見てみようと興味が湧いてくれば、あっという間に脱初心者となるでしょう。

私は業務に追われながらも独学していたためソフト開発に慣れるまでに10年程度かかってしまいました。ArduinoだけでなくPICマイコンやRXマイコン最近はIoTモジュールのソフト開発などをしていますが、早い段階でプログラミングを教養として身に着けておけば10年もかからなかったと感じています。

広告

最近では無料体験できるプログラミングスクールも増えてきており、あなたに合った学習プランによって短期集中してプログラミングに親しめる環境があります。無料体験でもプログラミングに対する感覚を掴めておけばソフト開発に対するハードルが下がることは間違いありません。

関連リンク

Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。

Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方

ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方

Arduinoのようにソフト開発したり周辺回路と組み合わせてデータを取得させたりして電子製品を開発するエンジニアは組み込みエンジニアといいます。IoT社会実現と組み込みエンジニアの職種との関係についてまとめています。

組み込みエンジニアはIoT社会実現のために需要が高い職種

ZigBeeモジュールであるトワイライトでソフト開発と無線通信を行い動作確認したことについてリンクをまとめています。

トワイライト(TWELITE)のソフト開発と無線通信でできること

最後まで、読んでいただきありがとうございました。

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