MH-ET LIVE MiniKit for ESP32とパソコン間で、WebSocketを使って通信を行います。
MH-ET LIVE MiniKit for ESP32はWebSocketのサーバとして動作します。パソコンはxamppを使ってHTTPサーバとして動作させ、パソコンからブラウザによりWebを表示し、この実行により、MH-ET LIVE MiniKit for ESP32にWebSocketによりアクセスします。
「ESP8266でWebSocket接続」ではESP8266を使った接続を行いました。今回はMH-ET LIVE MiniKit for ESP32を使用します。
WebSocketアプリ(MH-ET LIVE MiniKit側)の作成
aruduino IDEでMH-ET LIVE MiniKit側WebSocketアプリを作成します。
画面左側のライブラリマネージャーで「WebSockets」を検索して、WebSocketライブラリ「WebSockets」をインストールします。
次の手順でスケッチ例「WebSocketServer」を取得します。
取得したスケッチ例「WebSocketServer」にSSIDやパスワード等を追加します。
WebSocketTest.ino
/* * WebSocketServer.ino * * Created on: 22.05.2015 * */ #include <Arduino.h> #include <WiFi.h> #include <WiFiMulti.h> #include <WiFiClientSecure.h> #include <WebSocketsServer.h> WiFiMulti WiFiMulti; WebSocketsServer webSocket = WebSocketsServer(81); #define USE_SERIAL Serial void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) { const uint8_t* src = (const uint8_t*)mem; USE_SERIAL.printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (ptrdiff_t)src, len, len); for (uint32_t i = 0; i < len; i++) { if (i % cols == 0) { USE_SERIAL.printf("\n[0x%08X] 0x%08X: ", (ptrdiff_t)src, i); } USE_SERIAL.printf("%02X ", *src); src++; } USE_SERIAL.printf("\n"); } void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) { switch (type) { case WStype_DISCONNECTED: USE_SERIAL.printf("[%u] Disconnected!\n", num); break; case WStype_CONNECTED: { IPAddress ip = webSocket.remoteIP(num); USE_SERIAL.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload); // send message to client webSocket.sendTXT(num, "TomoSoft Connected"); } break; case WStype_TEXT: USE_SERIAL.printf("[%u] get Text: %s\n", num, payload); // send message to client // webSocket.sendTXT(num, "message here"); // send data to all connected clients // webSocket.broadcastTXT("message here"); break; case WStype_BIN: USE_SERIAL.printf("[%u] get binary length: %u\n", num, length); hexdump(payload, length); // send message to client // webSocket.sendBIN(num, payload, length); break; case WStype_ERROR: case WStype_FRAGMENT_TEXT_START: case WStype_FRAGMENT_BIN_START: case WStype_FRAGMENT: case WStype_FRAGMENT_FIN: break; } } void setup() { // USE_SERIAL.begin(921600); USE_SERIAL.begin(115200); //Serial.setDebugOutput(true); USE_SERIAL.setDebugOutput(true); USE_SERIAL.println(); USE_SERIAL.println(); USE_SERIAL.println(); for (uint8_t t = 4; t > 0; t--) { USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t); USE_SERIAL.flush(); delay(1000); } WiFiMulti.addAP("aterm-5459b0-g", "618fcf2fb4b02"); while (WiFiMulti.run() != WL_CONNECTED) { delay(100); } USE_SERIAL.printf("WiFi connected IP: "); USE_SERIAL.println(WiFi.localIP()); webSocket.begin(); webSocket.onEvent(webSocketEvent); } void loop() { webSocket.loop(); }
WebSocketアプリ(パソコン側)の作成
パソコン側でWebSocketアプリを作成します。
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>WebSocketTest</title> <meta name="viewport" content="initial-scale=1"> <script src="scripts.js"></script> </head> <body> </body> </html>
scripts.js
var connection = new WebSocket("ws://192.168.10.120:81"); connection.onopen = function () { connection.send('TomoSoft Connect ' + new Date()); }; connection.onerror = function (error) { console.log('WebSocket Error ', error); }; connection.onmessage = function (e) { console.log('TomoSoft Server: ', e.data); };
WebSocketアプリの実行
パソコンのChromeから「http://localhost/WebSocketTest/」を設定し、WebSocketアプリを実行します。
Chromeでのデベロッパーツール画面を次に示します。
aruduino IDEのシリアルモニタの表示を次に示します。