ESP32-DevKitC-VE(8MB)とAE-SHT31が余ったので、obniz(オブナイズ)にチャレンジしました。
- ESP32にobnizOSをインストール
- ESP32へスケッチをアップロード(温湿度データをobnizへ送る)
- obniz cloudでアプリ開発(JavaScript)
obnizはjavascriptでWebブラウザ経由でコントロールするマイコン開発ができますよ、というヤツ。そんでもってobnizOSを利用することで、Arduinoスケッチと共存できるという。これをobnizプラグインと言うそうです。今回は温湿度の文字を表示するだけ。
まずはESP32のスケッチ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
/////////////////////////////////////////////////////////////////////////////// // 102_obniz03.ino //----------------------------------------------------------------------------- // obnizプラグイン //============================================================================= #include <obniz.h> #include <Wire.h> #include "AE_SHT31.h" //----------------------------------------------------------------------------- // 関数プロトタイプ宣言 void onCommand(uint8_t* data, uint16_t length); //----------------------------------------------------------------------------- // Global変数 char message[20]; //----------------------------------------------------------------------------- // SHT31のアドレスを設定 AE_SHT31 SHT31 = AE_SHT31(0x45); // Open:0x45, GND:0x44 //----------------------------------------------------------------------------- // obniz callback function void onCommand(uint8_t* data, uint16_t length){ Serial.println("\nonCommand"); Serial.write(data,length); Serial.println("\nEnd onCommand"); } //----------------------------------------------------------------------------- // 初期化関数 void setup(){ // シリアルポート初期化 Serial.begin(115200); // SHT31をソフトリセット SHT31.SoftReset(); // 内蔵ヒーター 0:OFF 1:ON SHT31.Heater(0); obniz.commandReceive(onCommand); // obnizeOS 開始 obniz.start(); // obniz IDを取得 while(!obniz.getId()); Serial.printf("obnizID : %s\n",obniz.getId()); } //----------------------------------------------------------------------------- // 通常処理 void loop(){ // SHT31から温湿度データを取得 SHT31.GetTempHum(); int16_t temp = SHT31.Temperature() * 10; int16_t hum = SHT31.Humidity() * 10; int16_t Data[] = {temp,hum}; Serial.print("Temperature = ");Serial.print(SHT31.Temperature());Serial.print("[degC], "); Serial.print("Humidity = ");Serial.print(SHT31.Humidity());Serial.print("[%]"); Serial.println(); // 文字データを送信する場合はsprintfで全体を整える // sprintf(message, "%3.1f,%3.1f\n",SHT31.Temperature(), SHT31.Humidity()); // obnizがオンラインなら if(obniz.isOnline()){ // 文字列として送信する場合 // obniz.commandSend((uint8_t*)message,strlen(message)); // データをbyte値で送信 obniz.commandSend((uint8_t*)Data, sizeof(Data)); } delay(2000); } |
続いてobnizアプリ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<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" /> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script> </head> <body> <div id="obniz-debug"></div> <script> var obniz = new Obniz("OBNIZ_ID_HERE"); // called on online obniz.onconnect = async function() { var data; obniz.plugin.onreceive = data => { let el = document.body; // el.innerHTML = "<h1>" + data + "</h1>"; // byteを文字にする(UTF8) // var text_decoder = new TextDecoder("utf-8"); // var str = text_decoder.decode(Uint8Array.from(data).buffer); var dv = new DataView(Uint8Array.from(data).buffer); var temp = dv.getInt16(0, true) /10; var hum = dv.getInt16(2, true) /10; el.innerHTML = "<h2>" + temp + ", " + hum + "</h2>"; el.innerHTML = "<h3>" + temp.toFixed(1) + "[℃], " + hum.toFixed(1) + "[%]</h3>"; console.log(data); document.write(data); }; // called while online. obniz.onloop = async function() { }; }; // called on offline obniz.onclose = async function() { }; </script> </body> </html> |
またあとで追記・修正します。