2020年8月8日土曜日

ESP32-DevKitC-32D にobnizOSを入れる

windows10の環境で、秋月電子で扱っているESP32-DevKitC-32D(以下"ESP32"と記す)にobnizOSを入れる方法のメモです。

(公式の説明ではlinux環境での説明になっているため、コマンドのシリアルポート番号などを変える必要があります。また、コマンドの実行はコマンドライン(DOS窓)で行う必要があります。このあたりの作業方法の置き換えは、なじみがないと気づけないと思います)


公式の説明より、こちらの”公式サポートされたM5Stack+M5StickC用obnizOSをインストールしてみよう!”の説明の方が分かりやすいです。このページに従いM5Stackの部分を"esp32w"に置き換えて作業します。

以下、このページの補足を書き出しておきます。


obniz-cliのインストール

obniz-cliのインストールには

pythonのインストール

Node.js12以降のインストール

の2つのツールが必要になります。このツールをインストールした後で、パソコンを再起動します。(インストールの仕方は上記リンク先で確認してください)


再起動後、コマンドプロンプト(DOS窓)をひらいて、


"npm i obniz-cli -g"
と打ち込んでenterを押して実行します

(この後の説明でも、”コマンドの実行”は同様にコマンドプロンプト窓でコマンドを打ち込んで実行します)


・esptoolのインストール

コマンドプロンプト窓から
"pip install esptool"と打ち込んで実行します。


ESP32へのobnizOSのインストール

ESP32のCOM番号の確認

パソコンにESP32を接続します。


ここで、ESP32のCOMポート番号を確認します。
デバイスマネージャーで確認できます。


それか、コマンドプロンプト窓で、
"obniz-cli os:ports"
と打ち込めば、"COMxx"などとCOM番号が出てきます。

”COMxx"という文字列は、obnizOSのインストールで使用します。

obnizへのサインイン

の内容に従って作業してください。


obnizOSのインストール


コマンドプロンプト窓から
"obniz-cli os:flash-create -h esp32w -p COMxx"
と実行します。

最後の"COMxx"のxx部分は先に調べた番号に置き換えてください。
例 ”COM12”の場合は
"obniz-cli os:flash-create -h esp32w -p COM12"
となります。

ESP32のデバイスキーの取得

EPS32にインストールしたobnizOSを有効にするためには、obnizでデバイスを追加して、デバイスキーを取得し、そのデバイスキーをEPS32に設定する必要があります。

obnizの管理 - デバイス にある”+デバイスを追加”から登録をします。


ESP32へのobnizOSのインストールはすでに行っているため、”IDのみオンラインで発行”を選択します。

登録するとデバイスキーのダウンロードができますので、それを保管しておきます。
(デバイスキーはobnizID("xxxx-xxxx"の4桁+4桁”の番号とは別の物です)


ESP32へのデバイスキーの設定

ESP32をパソコンにつなげて、arduinoIDEのシリアルモニタで、


ESP32へデバイスキーの設定をします。
シリアルモニタの画面にデバイスキーの入力待ちになるので、デバイスキーを入力します。

その後、ESP32のwifiがアクセスポイントモードになります。シリアルモニタの画面にはブラウザで設定を行うためのIPアドレスが表示されます。スマホなどで、ESP32と直接wifi接続し、ブラウザでIPアドレスを入力するとルータへの接続設定画面が出ます。その設定を行うと、ESP32はobnizのサーバと通信をして、obnizへの登録が完了し、obnizデバイスとしてESP32が使えるようになります。

動作確認

obnizIDの確認

web画面からESP32を操作するときに必要になります。
htmlファイルに直接埋め込むか、web窓を開いたときに入力窓から設定します。

obnizのweb の右上にある"開発者コンソール”をクリックします。

登録したESP32のobnizIDを確認します。

上記画面の左側にある”プログラム”を押すとサンプルプログラムが出てきます。
これはobniz公式ボードのプログラムなのでそのままでは使用できません。


動作確認用回路


サンプルプログラム用のESP32へのLED配線
io0: obnizOS動作確認用LED (htmlからの指示で1s毎に点滅)
io5: obnizOS動作確認用LED (web画面のボタン操作で点灯・消灯)
io23: arduinoプログラム動作確認用LED (arduinoプログラムの指示で1s毎に点滅)

ioxx --- (アノード)LED(カソード) --- 抵抗:1kΩ --- ESP32のGND
と配線してください。

ESP32への給電はUSBコネクタから行います。 



obnizOSの動作確認


パソコンのローカルファイルとしてhtmlファイルを作りそれで実行します。

htmlファイル( "test.html"などと拡張子を"html"として保管する)

<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="/css/starter-sample.css" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.7.0/obniz.js" crossorigin="anonymous"></script>
</head>

<body>
<div id="obniz-debug"></div>

<div class="wrap">

<div class="switch">
<h3 class="text-center">Swtich</h3>
<span id="print">undefined</span>
</div>

<div class="led">
<h3 class="text-center">Turning on a LED</h3>
<button class="btn btn-primary" id="on">LED ON</button>
<button class="btn btn-outline-primary" id="off">LED OFF</button>
<dl>
<dt>Demo Pin assign</dt>
<dd>- SW: io5:LED anode</dd>
<dd>- auto 1s: io0:LED anode</dd>
<dd>- Switch state will be printed on browser</dd>
</dl>
</div>
</div>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {

$("#on").click(function () {
// obniz.io0.output(1); // この命令では応答しなかった
obniz.getIO(5).output(1);
$("#print").text(1);
});

$("#off").click(function () {
// obniz.io0.output(0);
obniz.getIO(5).output(0);
$("#print").text(0);
});
};

var num3 =0;

var priod1 = function () {
num3++;
if (num3 % 2 == 0) {
obniz.getIO(0).output(1);
}
else {
obniz.getIO(0).output(0);
}

};
setInterval(priod1, 1000);

</script>
</body>

</html>

これをパソコンのローカルドライブに保管して実行するとwebに操作画面が現れる。
この画面が出ている間、
io0のLEDは1秒ごとに点滅を繰り返す。
io5のLEDはweb画面の"LEDON", "LEDOFF"のボタンを操作すると点灯・消灯する。


arduinoプログラムとobnizOSの共存実行


obnizのドキュメント(obnizOS)を参考に、arudinoIDEの設定を行います。



arduinoのスケッチ例にobniz - led_blink があるのでそれを流用します。
 
サンプルプログラムではpin 番号が"12"になっているので"23"に変えます。
(ここは自分の配線に合わせて番号をつける)

#include <obniz.h>
void setup() {
  Serial.begin(115200);
  obniz.start();
  pinMode(23, OUTPUT);
}
void loop() {
  digitalWrite(23, HIGH);
  delay(500);
  digitalWrite(23, LOW);
  delay(500);
}


コンパイルしてESP32に書き込みます。

この状態で、webからの操作でのLED点滅(io0, io5)とarduinoプログラムでのLED点滅(io23)が行われます。

以上で、ESP32へのobnizOSのインストールと動作確認を終わります。