MP-101ワイヤレスリモコンの作成 その4
その1で悩んでいたI/O数と小型化ですが、arduino nanoよりも小型の互換機を見つけました。seeed XIAOです。
たまたまアマゾンで見つけたのですが、レビュー評価はあまり良くないのですが、値段も安く、書き込んでいる方のスキルによって評価が結構変わっているようなので、とりあえず試してみようと買ってみました。3個入りで2450円ですので一つ816円。秋月だと一個売りで580円。ただしちょうど秋月で売り切れていたため、仕方なくアマゾンで購入。どうせ使うときは3個使う予定だったので。
3.3V系のみで動作するため、レベルコンバーターも不要です。PCAL9555APW I2C GPIOエクスパンダは動作電圧が広く 3.3V、5Vどちらでも動作するためxbee含めてすべて3.3Vで統一できるのも魅力的でした。
I/O数が減るのは残念でしたが、PCAL9555APWとxbeeの出力ポートを使うことでギリギリ 入力17個(XIAO->6個 PCAL9555APW->11個)出力11個(XIAO->1個 PCAL9555APW->5個 xbee->5個)を確保。xbeeは動作速度が遅いため、入力は使用せず、出力もあまり変更するような箇所やブリンクさせるような箇所には使用していません。
XIAOの癖?
色々ありますが、一番の問題はUSBがシリアルポートとしてちょくちょく認識されなくなることです。USBハブの接続箇所を変えることで一時的に改善するのですが、またしばらく使用しているとダメになります。最終的に使えるポートがなくなった場合にはPCをリセットするとまた使えるようになります。時にはリセットピンの二回クリックなどをしてUSBつなぎ治したり。これが改善されればかなり使いやすいデバイスなんだと思うのですが。ブートローダーの問題なんでしょうけど、本家が全く更新などしてくれないため、世界中でこの問題は指摘されてますが、解決はできていない様子です。ブートローダーが完全におかしくなった場合、背面のランドから修正している方はいるようです。
このブートローダーの癖は中の人が参考資料3)で解説してくれてます。中の人も悩んでいる位なので解決にはならないけど。
arduino標準のIDEを使用した場合。複数プログラムを立ち上げて、裏でも同じCOMポートを利用していると、トラブルが多いような気がしてます。今回の場合親機と子機の2個のプログラムを立ち上げているとエラーが頻発するような、あくまでも気がするレベルですが。
arduinoとして使う分には各ピンはpinmodeで設定したとおりに動作します。すべてのピンをアナログ入出力、デジタル入出力に使えます。sirial通信やI2Cを使用する場合D4/A4~D7/A7のピンはそれぞれの目的に使用されます。
sirial通信を使用する場合、普通のSerial.begin で使用した場合はUSBに接続したCOMポートとの通信となります。Tx.Rxピンでの通信の場合 Serial1.beginを使用することとなります。xbeeとの通信にTx、Rxを使用してますのでデバッグの時にUSB->COMで表示できるのは便利なのですが、いかんせん この USB->COMポートが不安定なためデバッグがはかどりにくいです。結局xbeeを使ってxbee越しにシリアル通信のデーターをターミナル確認して確認してデバッグしてました。
I2Cは基本の動作とほぼ変わりません。ただしハード的に、NanoやUNOではwire.biginで自動的にプルアップされるようなのですが、XAIOではされません。普通のpinmodeで入力プルアップとかはできていますので、何処かライブラリーをよく見るとできると思うのですが、面倒なので今回はPCAL9555APWにプルアップ抵抗はハンダつけしてしまいました。
リファレンスマニュアル的な公式文章がないためすべてソースを見て考え無いと、NanoやUNOとの違いが分かりません。
あと通常のarduinoと異なるのは、内蔵されているLEDはLOWで点灯します。内蔵されているLEDについては参考資料2)に詳しく、3個まで使えるため開発中にLEDで確認した時などは良いかもしれません。ただし、2個の青色LEDはどちらが点灯しているのかわかりにくいため、点滅で使用して区別したりしてみました。(それならLED 一つで十分という話もあります)
arduinoでLEDを点灯させるときにHIGHで点灯の方がsoft的にわかりやすいため、個人的にはそう設計してしまうのですが。実際ブレッドボードで開発中などではたくさんLEDを配置するためスイッチサイエンス「PCA9622DR I2C 16ch LEDドライバ基板」
これのLED部分だけ使用して、LED確認用に使ってます。本来はI2CでLEDを駆動するための基板ですが、確認用に付いているLEDが外部からも端子をLOWにすれば点灯するため、本来の動作とは逆になりますが、ブレッドボードにたくさん抵抗やLEDを配置する手間を考えたら非常に楽になります。これのGND共通配置の部品作成したら便利だと思うのですが探したら何処かにありますかね。抵抗入りLEDを使う手もありますが、こちらの方がコンパクトでジャンパーピンだけで配線できるため圧倒的に楽だと思います。
つづく
MP-101ワイヤレスリモコンの作成 シリーズ
その1 その2 その3 その4 その5 その6 その7 その8
関連
参考資料
- Seeeduino Xiaoをはじめよう https://wiki.seeedstudio.com/jp/Seeeduino-XIAO/
- コインサイズ Arduino互換機 Seeeduino XIAO を使ってみた https://qiita.com/nanase/items/0fed598975c49b1d707e
- Seeed K.K. エンジニアブログ https://lab.seeed.co.jp/entry/2020/04/08/120000