obnizOS on M5S*
https://gyazo.com/1b0e6ffff1c8bacd5eb0eb880ad653d0
はじめに
obnizといえば、専用デバイスで利用している人がほとんどだと思いますが、実はESP32 dev boardや、M5Stack、M5StickC、ATOM Liteなどの色々なデバイスで利用することができるobnizOSというものが提供されています。 このobnizOSはLiteプランでも、1デバイスに関しては無料で利用することができます。 今回は、その中でも、M5Stack社が発売している以下のボードでobnizOSを使ってみる方法をご紹介します。
M5Stack Basic
M5StickC
ATOM Lite
この記事までに必要な前準備
この記事の通りに作業する前に、以下のような準備が必要です。
ここでは、その方法については説明しませんので、各ページを参照して作業してください。
obniz-cliのインストール
obnizOSのファームウエアをデバイスに書き込んだり設定したりするためには、obniz-cliを利用します。
obniz-cliをインストールする前に準備しておくソフトウエアがあります。
npm: Node.jsのライブラリやコマンドをインストールするためのコマンドです。obniz-cliの動作には、Nodejs12以降が要求されます。
pip: Pythonライブラリやコマンドをインストールするためのコマンドです。
esptool: ESP32にファームウエアなどの書き込みを行うプログラムです。
pipとnpmのインストールに関しては、ここでは省略します。
以下のように、esptoolとobniz-cliをインストールします。
code:shell
$ pip install esptool
(snip)
$ npm i obniz-cli -g
(snip)
obniz-cliだけで実行すると、使えるコマンドの一覧が得られます。。
code:shell
% obniz-cli
Unknown Command see below help
_ _ _ _
___ | |__ _ __ (_)____ ___| (_)
/ _ \| '_ \| '_ \| |_ /____ / __| | |
| (_) | |_) | | | | |/ /_____| (__| | |
\___/|_.__/|_| |_|_/___| \___|_|_|
CLI to interact with obniz device and cloud.
VERSION
obniz-cli/0.5.4
USAGE
COMMANDS
signin Signin to obniz cloud.
signout Signout
user:info Show current Logged in user
os:flash-create Flashing and configure target device and registrate it on your account on obnizCloud.
os:flash Flashing and configure target device.
os:config Configure obnizOS flashed device.
os:config-via-wifi Configure ObnizOS network via Wi-Fi from devices.
os:erase Fully erase a flash on target device.
os:list List of available obnizOS hardwares and versions
os:ports Getting serial ports on your machine.
obnizOSファームウエアの書き込み手順
以下では、M5Stack basicを使った例だけをあげます。
os:portsコマンドを使うことで、シリアルポートを確認することができます。
ここでは、/dev/tty.SLAB_USBtoUARTがM5Stack Basicです。
M5StickCの場合は、/dev/tty.usbserial-9952A29E45のような形式になります。
code:shell
% obniz-cli os:ports
===Founded Serial Ports===
/dev/tty.Bluetooth-Incoming-Port
/dev/tty.SLAB_USBtoUART (Silicon Labs)
/dev/tty.usbserial-0194EF22 (Silicon Labs)
signinコマンドで、に作成したアカウントで、デバイスを認証します。 code:shell
% obniz-cli signin
✔ Authenticated.
✔ Sign in as "MyMailAddr@example.jp"
以下のようにWebブラウザでページが開かれますので、アカウント情報を入力します。
https://gyazo.com/0d62bf9e0d59f1e03befd1b08bc0d97b
利用する権限に関して、以下のように表示されるため、問題なければ続けます。
https://gyazo.com/48de5fa1dd8c156559ae6ae4679853d6
次に、os:flash-createを使って、デバイスのファームウエアを書き換えます。
ESP32ボード以外のM5Stack Basic(m5stack_basic)やM5StickC(m5stickc)やATOM Lite(m5atom_lite)の場合は、--hardwareを指定する必要があります。
M5Stack Basicの場合は、以下のようになります。
code:shell
% obniz-cli os:flash-create -p /dev/tty.SLAB_USBtoUART --hardware m5stack_basic
✔ Serial Port: decided /dev/tty.SLAB_USBtoUART baundrate 1500000
✔ obnizOS: using default hardware=m5stack_basic version=3.4.3(Public Latest Version) ✔ Flashing obnizOS: Flashed
参考情報:ファームウエアの消去
obnizOSファームウエアを消去するためには、obniz-cli os:eraseが利用できます。
code:shell
% obniz-cli os:erase -p /dev/tty.SLAB_USBtoUART
✔ Serial Port: decided /dev/tty.SLAB_USBtoUART baundrate 1500000
esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 1500000 erase_flash
esptool.py v2.8
Serial port /dev/tty.SLAB_USBtoUART
Connecting........_
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 80:7d:3a:dc:b2:44
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 1500000
Changed.
Erasing flash (this may take a while)...
Chip erase completed successfully in 4.6s
Hard resetting via RTS pin...
デバイスキーの登録
ここからの説明では、obnizIDとデバイスキーは、以下の値を使うことを仮定します。
obnizID: MY_OBNIZID
デバイスキー: MY_DEVICE_KEY
アカウントにデバイスを一つも登録していない状態でobniz-cli os:flash-createを実行すると、以下のように、自動的にobnizIDが登録されます。
code:shell
% obniz-cli os:flash-create -p /dev/tty.SLAB_USBtoUART --hardware m5stack_basic
✔ Serial Port: decided /dev/tty.SLAB_USBtoUART baundrate 1500000
✔ obnizOS: using default hardware=m5stack_basic version=3.4.3(Public Latest Version) ✔ Flashing obnizOS: Flashed
✔ obnizCloud: created device on obnizCloud obnizID=MY_OBNIZID description= region=jp
✔ Serial Port: decided /dev/tty.SLAB_USBtoUART baundrate 1500000
✔ Configure: Opening Serial Port /dev/tty.SLAB_USBtoUART
✔ Configure: Success
デバイスの設定は、以下のようにos:configを利用します。ここでは、obnizIDとしてMY_OBNIZIDを指定することで、デバイスとobnizIDのひも付けを行います。
code:shell
% obniz-cli os:config --id MY_OBNIZID -p /dev/tty.SLAB_USBtoUART
✔ Serial Port: decided /dev/tty.SLAB_USBtoUART baundrate 1500000
✔ Configure: obnizID=MY_OBNIZID hardware=m5stack_basic devicekey=MY_DEVICE_KEY
✔ Configure: Opening Serial Port /dev/tty.SLAB_USBtoUART
✔ Failed Setting devicekey 1 times. Device seems not launched. Reset the connected device to wake up as Normal Mode
✔ Configure: Success
https://gyazo.com/f285ed972f3f121bbd79370ed3cab3fe
ここから、MY_OBNIZIDをクリックすることで、デバイスに対する様々な設定を行うことができます。
WiFiの設定
WiFiの設定には、以下の二つの方法があります。
A. USBシリアルで設定する方法
B. スマートフォンなどを使って、obniz-MY_OBNIZID形式のSSIDに接続して、設定をする方法
C. wifi-config.json設定ファイルを使って、設定する方法(後述)
ここでは、シリアルターミナルの設定などが少し面倒くさいので、Aについては説明しません。
Bの方法は以下のような手順で行います。
以下のような画面が表示され、obniz-MY_OBNIZIDのSSIDに接続するように指示されているので、これにつなぎます。
https://gyazo.com/f4a49110c438cfe18f02b769e0c55527
例えば、スマートフォンで接続した場合、以下のような画面が表示されます。
ここで、SSIDを選択し、さらにSSID用のパスワードを入力します。
https://gyazo.com/d86d4cefd053d2c490998cc8b87fd584
WiFiの設定が成功すると、以下のような表示になります。
https://gyazo.com/ff655d816ca0466ddeb6d34e62241bea
obnizクラウドに接続ができると、以下のような表示になります。
https://gyazo.com/a6b526aa0f75d0a2a5936fd2fe26df0b
方法C: obnizOS書き込み時にデバイスキーとWiFiの設定も行う
obnizOSの書き込み時に、デバイスキー(または、obnizID)とWiFiの設定を同時に行う方法もあります。
何回も設定を繰り返す場合は、この方法が便利です。
以下のような形式(wifi-config.json)で、WiFiの設定項目を書いておきます。
MY_SSID: 接続するWiFiのSSID
MY_PASSWD: 接続するWiFiのパスワード
code:wifi-config.json
{
"networks":[
{
"type": "wifi",
"settings": {
"ssid": "MY_SSID",
"password": "MY_PASSWD"
}
}
]
}
以下のように、obniz-cli os:configを実行すると、WiFiの設定まで完了した状態で、obnizOSが立ち上がります。
code:shell
% obniz-cli os:config --id=MY_OBNIZID --config=wifi-config.json -p /dev/tty.SLAB_USBtoUART
✔ Serial Port: decided /dev/tty.SLAB_USBtoUART baundrate 1500000
✔ Configure: obnizID=MY_OBNIZID hardware=m5stack_basic devicekey=MY_DEVICE_KEY
✔ Configure: Opening Serial Port /dev/tty.SLAB_USBtoUART
✔ Failed Setting devicekey 1 times. Device seems not launched. Reset the connected device to wake up as Normal Mode
✔ Configure: This device is already configured as obnizID MY_OBNIZID
✔ Configure: Setting Network Type
✔ Configure: Setting Wi-Fi
✔ Configure: Success
実際にobnizOSを使ってみる
HTMLプログラム: JavaScriptによるプログラミング方法
ブロックプログラム: ブロックを組み合わせて行うプログラミング方法
https://gyazo.com/cac6c6ca1abfdc4533ea03304938ca22
ブロックプログラムによる画面表示とLチカ
最初に、ブロックプログラムによって、画面に文字を表示することと、LEDの点滅(いわゆるLチカ)をやってみます。
https://gyazo.com/42dbcb53270334c450e52dae370ec898
obnizOSでのピン配置は、M5Stack Basicの裏に書いてあるピン番号と対応するように決められています。
更に、一部ピンに関しては、M5Stackのハードウエアの制約として、あらかじめ役割が決めれられていて、自由に使うことができません。これに関しては、M5 Stack ハマりどころを参考にしてください。 例えば、以下のようなピンが利用できません。
ピン1,3はシリアルのTXD,RXDと共有
ピン18,19,23,25は、それぞれLCD,SD,LCD,Audioと共有
今回の例では、LEDをピン16とピン17の間に、足の長いアノード側をピン16にして刺します。
https://gyazo.com/c1a9f52dc0e90371171a6ab4c02c4672
プログラム例は、以下のようになります。
https://gyazo.com/bc944f191cd68eed92430dd7a71490bf
右上の実行を押すと、以下のように画面に表示され、LEDが点滅します。
https://gyazo.com/1b0e6ffff1c8bacd5eb0eb880ad653d0
M5StickCの場合は、内蔵のLEDや加速度計、2つのボタンスイッチがあり、これらも簡単に利用できます。
https://gyazo.com/c25a7fbc0e6fe09b0d69c0c1a5a8932f
HTMLプログラム(JavaScript)の場合
HTMLプログラム(JavaScript)のプログラムの場合は、以下のようになります。
ここでは、最初にプログラムを作成した時に例としてあげられているものを使います。
LEDを刺したピンに応じて、54行目を以下の様に変更します。
code:demo.js
var led = obniz.wired('LED', { anode: 16, cathode: 17});
https://gyazo.com/f733b3c0a003f27fae28dd6090421df3
このデモは、M5Stackの以下のような機能の利用例になっています。
文字列のディスプレイへの表示
M5Stackのボタンスイッチの状態(left, push, right)
LEDのON/OFF
https://gyazo.com/08f256d45db87324767413c15aa3b16d
https://gyazo.com/0e118bfccd6567373507671a30f9210c
おわりに
obnizは専用デバイスで使うと思われているかもしれませんが、obnizOSを使ってM5Stack社のデバイスやESP32ボードで遊ぶことも可能になっています。
皆さんも、一度試してみませんか?