Wio Node を Arduino として使うときのメモ


MobileHackerzのmiroさんがWio Node便利だと言っていた気がしたので試しに使ってみたときのメモ.

Wio Nodeとは

Wio NodeはSeeed StudioのGroveシステムに対応したWiFiモジュールです.バッテリーの充電回路まで搭載してるのでつなぐだけで簡単にバッテリー駆動もできます(すごい).

今回は,Wio Nodeらしい使い方はしないのでWio Node自体の説明は省きます.

Groveシステムはシリアルのコネクタにセンサなどのモジュールを接続するだけで簡単に使える便利なシリーズですが,色々なモジュールやキットが手軽に入手できるので,Groveシステムに興味がない場合も知っておいて損は無いです.

Wio NodeをArduinoとして使う

Wio NodeのWiFiは,安価て技適通っててArduino IDEも使えることで有名なESP-WROOM-02を使っています.つまりファームウェアを書き換えればArduinoとして使えます.

書き込み

事前にArduinoの開発環境と,ESP-WROOM-02をArduinoとして使うための環境を整えておきます.

まず,Wio NodeのPORT0 にシリアルでPCと接続します(TX,RX,GNDをつなぐ).適当なコネクタが無かったので2mmピッチのピンソケットで代用しました.電源は通信用のコネクタからは取れないので別途USB等で供給する必要があります.

FUNCボタンを押しながらリセットすることで,書き込みモードになります.以下のページを参考にしました.

ファームウェアはOSSとして開発されているようなので,元の状態に戻すことも可能です(試してはいません)

IOピン等

回路図も公開されているので,どこに何が繋がってるのか確認しました.

Arduinoのスケッチには以下のように書いておくと良さそうです.

const uint8_t PORT0A = 1;
const uint8_t PORT0B = 3;
const uint8_t PORT1A = 4;
const uint8_t PORT1B = 5;
const uint8_t PORT_POWER = 15; // (common with RED_LED)

const uint8_t FUNC_BTN = 0;
const uint8_t BLUE_LED = 2;
const uint8_t RED_LED = PORT_POWER;

const uint8_t UART_TX = PORT0A;
const uint8_t UART_RX = PORT0B;
const uint8_t I2C_SDA = PORT1A;
const uint8_t I2C_SCL = PORT1B;
  • 自由に使えるGPIOは4本(IO1,3,4,5)
  • ※PORT_POWER(IO15) を HIGH にしないと,Groveコネクタのポートに電源3.3Vが供給されない(消費電力が気になる場合はON/OFFしろってことなのだと思う)
  • 赤色のLEDはPORT_POWERにつながってるので,コネクタに電力供給が必要な場合は単体でON/OFFはできない(ちなみに緑色のLEDは電源の状態を表しているので制御できない)
  • I2C も Wireライブラリで簡単に使える

たとえば,Wio Node の PORT0 を UART, PORT1 を I2C として使う場合のsetup関数は以下のようになります.

#include <Wire.h>
void setup() {
  pinMode(FUNC_BTN, INPUT);
  pinMode(BLUE_LED, OUTPUT);
  pinMode(PORT_POWER, OUTPUT);
  digitalWrite(PORT_POWER, HIGH);
  Serial.begin(115200);
  Wire.begin(I2C_SDA,I2C_SCL);
  // ...
}

色々

HDC1000(I2Cでつながる温度・湿度センサー) を使って温度と湿度を定期的にサーバに送信するようにしたりしました.
(BME280を使えばArduinoとして使わなくても標準で対応してたのは後から気づきましたが...)

Wio Nodeは外に出ているIOピンが少ないのでちょっと物足りない気もしましたが,コンパクトで電源周りの回路もついてて楽なので,次からは積極的にこちらを使おうと思いました.