Wio terminal + M5Stack ENV Unit

 Seeed StudioのWio terminal + M5Stack ENV Unitを動かしてみた。Wio terminalは1年前から興味はあったが諸般の事情もあって連休中の暇潰し用に決心して購入。M5Stackと異なりバッテリは搭載してないので増設バッテリ含めて秋月から購入。最近はM5StackもWio terminalも複数の販売店(スイッチサイエンス/マルツ/秋月など)から購入出来るし必要ならSeeedから直接購入出来る模様。Wio terminalを購入した理由は裏を返すとM5Stackに不満な点があった(私的には)訳で強いて記すと:

・造りがイマイチ:

 具体的にはバッテリの扱い、スピーカ周りの設計、筐体構成の造り、Offが無いスイッチ。

・プロセサが特殊(入手性、情報の意味で):

 ESP32と呼ばれるテンシリカのIPを使用しているがドキュメント情報に乏しくチップ全体の把握が難しい。中身が分からないと不安になる性分故。。。

 元々Arduinoはさまざまなアーキテクチャのプロセサに移植されており(AVR8,ARMv7M,RX63,PIC32,MSP430など)i2c,spi,uart,gpioインタフェースであれば移植は比較的容易でESP32なるチップに執着する必要は無さそうに思えるがコミュニティや雑誌ではM5Stack全盛でそれのコピーバージョンのWio terminalは知名度が低いのだけど上記理由でWio terminalをM5Stackの置き換えとして使ってみる。

(参考)本家サイト: 

https://jp.seeedstudio.com/Wio-Terminal-p-4509.html

1.目的

 ・M5Stackで使っていたI2Cのセンサ(ENV Unit)をハード、ソフト含めて流用。

 ・M5Stack→Wio terminal置き換え時に必要なコード変更の確認。

 ENV UnitはDHT12のみ使用。

2.構成

f:id:aki_iic:20210505211554j:plain

Wio terminal + M5Stack ENV Unit

 おまけでバッテリ追加した状態の厚みについて

f:id:aki_iic:20210505211743j:plain

Wio terminal + battery

 写真上がバッテリで拡張コネクタ(UART,GPIO,I2C)も兼ねる。バッテリの充電はバッテリ側のUSB-Cコネクタに接続する必要があるが充電のみである点に注意する必要がある。バッテリ裏側は充電/放電/バッテリOff/Onスイッチが配置されている。

f:id:aki_iic:20210505212134j:plain

 みづらいが画面左のアンバーに点灯してるのが放電表示LED、その上の黒丸がバッテリOn/Offスイッチでその上が充電用LEDで充電完了で滅灯し充電中は緑で点灯する。画面上の細長い黒い物はRPi互換の40pinコネクタでバッテリを搭載してもスタッキングが可能。写真の通りバッテリ装着すると厚みが倍になるが容量はM5Stackのそれよりは大きい(650mAh)でM5Stackのそれよりは電池の持ちは良いのではと期待。

3.プログラム

/*
20210505 : Wio terminal + M5Stack ENV Unit(DHT12 only)
*/

#include "SPI.h"
#include "TFT_eSPI.h"

// Use hardware SPI
TFT_eSPI tft = TFT_eSPI();

#include "DHT12.h"
#include <Wire.h> //The DHT12 uses I2C comunication.
#include "Adafruit_Sensor.h"

DHT12 dht12; //Preset scale CELSIUS and ID 0x5c.

void setup() {
tft.begin();
tft.setRotation(1);
Wire.begin();

Serial.println(F("ENV Unit(DHT12 and BMP280) test..."));

tft.fillScreen(TFT_BLUE);
tft.setTextColor(TFT_WHITE, TFT_BLUE);
}

void loop() {

float tmp = dht12.readTemperature();
float hum = dht12.readHumidity();
Serial.printf("Temperatura: %2.2f*C Humedad: %0.2f%%\r\n", tmp, hum);

tft.setCursor(0, 0);
tft.setTextColor(TFT_WHITE, TFT_BLUE);
tft.setTextSize(4);
tft.println("V01 20210505");
tft.printf("Temp: %2.1f \r\nHumi: %2.0f%% \r\n", tmp, hum);

delay(100);
}

M5Stack→Wio terminalへの変更内容(大雑把):

・M5.〜 は使えないのでLCD系はtft.〜 に変更。

・ENV Unit用のコードはDHT12(温度、湿度)はそのまま使えた(I2Cアドレス含めて)。Wio terminalの内蔵I2Cデバイスアドレス確認してないので偶然かもしれないがi2cデバイスはコンフリクトすると全く動作しない為多分大丈夫なのだろう。

4.まとめ

 ・M5StackからWio terminalへの移植は機種依存性の高いコード以外は可能と思われる。これはArduinoの移植性の高さに依る処が大きい。

 ・Wio terminalは(オリジナルの)M5Stack程の個性は無い「ただの支那コピー(自国製品のコピー)」ではあるが二番手だけにオリジナルを相応に分析して付加価値(プロセサ変更、RPI拡張コネクタ互換、各種センサ搭載)を無難に追加したEMSメーカのSeeed Studioらしい個性の薄さではあるがEMSメーカ故の造りの出来栄え(筐体の造りや設計の手堅さ)は高評価

 ・XIAOもそうだがArduino IDEからダウンロード時に失敗する場合がある。これはCDC-ACMとDFUデバイスが同時に動作(コンポジットデバイス)に原因があるのかArduino IDEのバージョンが古い為かは未確認。正直これはマイナスポイントだがM5StackのESP32がUSB-serial接続に対しチップ(ATSAM51)のUSBデバイスを使用している影響かは未確認だが旧Atmel社のチップは色々妙な点があるのでその影響かもしれない(偏見)。まあ今はMicrochip社の製品系列に過ぎないので情報開示は品質基準もMicrochip社のポリシーに準拠される事を中長期的に期待(願望)。