Skip to content

Instantly share code, notes, and snippets.

@simap
Created July 24, 2018 19:59
Show Gist options
  • Save simap/6723beab8668035d19b9d7f8aea07b2e to your computer and use it in GitHub Desktop.
Save simap/6723beab8668035d19b9d7f8aea07b2e to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<label>ESP IP: <input id="ip" type="text" value="192.168.1.223"></label><br>
<button onclick="connect();">Connect</button><br>
<button onclick="startTest('headerToPayload'); ">Test w headerToPayload</button>
<button onclick="startTest(''); ">Test simple</button>
<script>
var passNumber = 0;
function startTest(cmd) {
websocket.send(cmd);
passNumber = 0;
}
var websocket;
function connect() {
if (websocket)
websocket.close();
var ip = document.getElementById("ip").value;
var wsUri = "ws://" + ip + ":81/";
websocket = new WebSocket(wsUri);
websocket.binaryType = "arraybuffer";
websocket.onopen = function (evt) {
console.log("CONNECTED");
};
websocket.onclose = function (evt) {
console.log("DISCONNECTED");
};
websocket.onmessage = function (evt) {
var buf = new Uint8Array(evt.data);
if (buf.some(function (v) {
return v !== passNumber
})) {
console.log("data corrupted!")
} else {
console.log("data ok for run " + passNumber, buf.length);
}
passNumber++;
}
websocket.onerror = function (evt) {
console.log("ERROR: " + evt.data);
};
}
</script>
</body>
</html>
//
// Created by Ben Hencke on 7/24/18.
//
#include "Arduino.h"
#include <ESP8266WiFi.h>
#include <WebSocketsServer.h>
WebSocketsServer webSocket = WebSocketsServer(81);
//how large will binary packets be
static const int blastSize = 4096;
static const int fillSize = 33000;
static const bool logVerbose = false;
static const char *const ssid = "SSID";
static const char *const passphrase = "PASSPHRASE";
void logMem() {
Serial.print(millis());
Serial.print("\t");
Serial.println(ESP.getFreeHeap());
}
void blastBin(uint8_t num, bool headerToPayload) {
for (int i = 0; i < 40; i++) {
int extra = 0;
if (headerToPayload)
extra = WEBSOCKETS_MAX_HEADER_SIZE;
std::unique_ptr<uint8_t[]> buf(new uint8_t[blastSize + extra]);
memset(buf.get() + extra, i, blastSize);
bool res = webSocket.sendBIN(num, buf.get(), blastSize, headerToPayload);
if (!res) {
Serial.print("send returned false on pass ");
Serial.println(i);
break;
} else {
if (logVerbose)
Serial.print("+");
}
if (logVerbose)
logMem();
}
if (logVerbose)
Serial.println();
}
void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) {
switch (type) {
case WStype_TEXT: {
bool headerToPayload = String((char*)payload) == "headerToPayload";
blastBin(num, headerToPayload);
}
break;
case WStype_BIN:
break;
}
}
uint8_t *filler;
void setup() {
filler = static_cast<uint8_t *>(malloc(fillSize));
Serial.begin(115200);
delay(10);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passphrase);
while (WiFi.status() != WL_CONNECTED) {
delay(50);
Serial.print(".");
}
Serial.println();
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
webSocket.begin();
webSocket.onEvent(webSocketEvent);
}
long timer = millis();
void loop() {
webSocket.loop();
if (millis() - timer > 1000) {
timer = millis();
logMem();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment