Created
July 24, 2018 19:59
-
-
Save simap/6723beab8668035d19b9d7f8aea07b2e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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