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のシリアルモニタの表示を次に示します。



