diff --git a/.travis.yml b/.travis.yml index f24935f..b15fc0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,11 +3,12 @@ language: bash os: - linux env: - global: - - IDE_VERSION=1.6.5 matrix: - - CPU="esp8266" BOARD="esp8266com:esp8266:generic" - - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80" IDE_VERSION=1.6.5 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80" IDE_VERSION=1.8.5 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80,Debug=Serial1" IDE_VERSION=1.6.5 + - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.6.5 + - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.5 script: - /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16 @@ -25,7 +26,7 @@ script: - cd $TRAVIS_BUILD_DIR - arduino --board $BOARD --save-prefs - arduino --get-pref sketchbook.path - - build_sketches arduino $HOME/Arduino/libraries/arduinoWebSockets $CPU + - build_sketches arduino $HOME/Arduino/libraries/arduinoWebSockets/examples/$CPU $CPU notifications: email: diff --git a/examples/ParticleWebSocketClient/.esp32.skip b/examples/ParticleWebSocketClient/.esp32.skip deleted file mode 100644 index e69de29..0000000 diff --git a/examples/ParticleWebSocketClient/.esp8266.skip b/examples/ParticleWebSocketClient/.esp8266.skip deleted file mode 100644 index e69de29..0000000 diff --git a/examples/WebSocketClientAVR/.esp32.skip b/examples/WebSocketClientAVR/.esp32.skip deleted file mode 100644 index e69de29..0000000 diff --git a/examples/WebSocketClientAVR/.esp8266.skip b/examples/WebSocketClientAVR/.esp8266.skip deleted file mode 100644 index e69de29..0000000 diff --git a/examples/WebSocketClientAVR/WebSocketClientAVR.ino b/examples/avr/WebSocketClientAVR/WebSocketClientAVR.ino similarity index 100% rename from examples/WebSocketClientAVR/WebSocketClientAVR.ino rename to examples/avr/WebSocketClientAVR/WebSocketClientAVR.ino diff --git a/examples/WebSocketClient/WebSocketClient.ino b/examples/esp32/WebSocketClient/WebSocketClient.ino similarity index 80% rename from examples/WebSocketClient/WebSocketClient.ino rename to examples/esp32/WebSocketClient/WebSocketClient.ino index fe602aa..7483b6b 100644 --- a/examples/WebSocketClient/WebSocketClient.ino +++ b/examples/esp32/WebSocketClient/WebSocketClient.ino @@ -7,39 +7,44 @@ #include -#if defined(ESP8266) - #include - #include - ESP8266WiFiMulti WiFiMulti; -#elif defined(ESP32) - #include - #include - #include - WiFiMulti WiFiMulti; - - HardwareSerial Serial1(2); -#endif +#include +#include +#include #include -#include +WiFiMulti WiFiMulti; WebSocketsClient webSocket; +HardwareSerial Serial1(2); + #define USE_SERIAL Serial1 +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(WStype_t type, uint8_t * payload, size_t length) { switch(type) { case WStype_DISCONNECTED: USE_SERIAL.printf("[WSc] Disconnected!\n"); break; - case WStype_CONNECTED: { + case WStype_CONNECTED: USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload); // send message to server when Connected webSocket.sendTXT("Connected"); - } break; case WStype_TEXT: USE_SERIAL.printf("[WSc] get text: %s\n", payload); @@ -99,19 +104,3 @@ void setup() { void loop() { webSocket.loop(); } - - -#ifndef ESP8266 -void hexdump(const void *mem, uint32_t len, uint8_t cols) { - 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"); -} -#endif diff --git a/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino b/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino new file mode 100644 index 0000000..5b4f3a5 --- /dev/null +++ b/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino @@ -0,0 +1,102 @@ +/* + * WebSocketClientSSL.ino + * + * Created on: 10.12.2015 + * + * note SSL is only possible with the ESP8266 + * + */ + +#include + +#include +#include +#include + +#include + + +WiFiMulti WiFiMulti; +WebSocketsClient webSocket; + +HardwareSerial Serial1(2); + +#define USE_SERIAL Serial1 + +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(WStype_t type, uint8_t * payload, size_t length) { + + + switch(type) { + case WStype_DISCONNECTED: + USE_SERIAL.printf("[WSc] Disconnected!\n"); + break; + case WStype_CONNECTED: + { + USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload); + + // send message to server when Connected + webSocket.sendTXT("Connected"); + } + break; + case WStype_TEXT: + USE_SERIAL.printf("[WSc] get text: %s\n", payload); + + // send message to server + // webSocket.sendTXT("message here"); + break; + case WStype_BIN: + USE_SERIAL.printf("[WSc] get binary length: %u\n", length); + hexdump(payload, length); + + // send data to server + // webSocket.sendBIN(payload, length); + 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("SSID", "passpasspass"); + + //WiFi.disconnect(); + while(WiFiMulti.run() != WL_CONNECTED) { + delay(100); + } + + webSocket.beginSSL("192.168.0.123", 81); + webSocket.onEvent(webSocketEvent); + +} + +void loop() { + webSocket.loop(); +} diff --git a/examples/WebSocketServer/WebSocketServer.ino b/examples/esp32/WebSocketServer/WebSocketServer.ino similarity index 78% rename from examples/WebSocketServer/WebSocketServer.ino rename to examples/esp32/WebSocketServer/WebSocketServer.ino index de9c63e..da7d38f 100644 --- a/examples/WebSocketServer/WebSocketServer.ino +++ b/examples/esp32/WebSocketServer/WebSocketServer.ino @@ -7,31 +7,31 @@ #include -#if defined(ESP8266) - #include #include - #include #include - ESP8266WiFiMulti WiFiMulti; -#elif defined(ESP32) - #include - #include - WiFiMulti WiFiMulti; - - HardwareSerial Serial1(2); -#endif +#include +#include +#include #include -#include - -ESP8266WiFiMulti WiFiMulti; +WiFiMulti WiFiMulti; WebSocketsServer webSocket = WebSocketsServer(81); +HardwareSerial Serial1(2); + #define USE_SERIAL Serial1 - -#ifndef ESP8266 -void hexdump(const void *mem, uint32_t len, uint8_t cols = 16); -#endif +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) { @@ -98,18 +98,3 @@ void setup() { void loop() { webSocket.loop(); } - -#ifndef ESP8266 -void hexdump(const void *mem, uint32_t len, uint8_t cols) { - 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"); -} -#endif diff --git a/examples/esp8266/WebSocketClient/WebSocketClient.ino b/examples/esp8266/WebSocketClient/WebSocketClient.ino new file mode 100644 index 0000000..3ce8498 --- /dev/null +++ b/examples/esp8266/WebSocketClient/WebSocketClient.ino @@ -0,0 +1,92 @@ +/* + * WebSocketClient.ino + * + * Created on: 24.05.2015 + * + */ + +#include + +#include +#include + +#include + +#include + +ESP8266WiFiMulti WiFiMulti; +WebSocketsClient webSocket; + +#define USE_SERIAL Serial1 + +void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { + + switch(type) { + case WStype_DISCONNECTED: + USE_SERIAL.printf("[WSc] Disconnected!\n"); + break; + case WStype_CONNECTED: { + USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload); + + // send message to server when Connected + webSocket.sendTXT("Connected"); + } + break; + case WStype_TEXT: + USE_SERIAL.printf("[WSc] get text: %s\n", payload); + + // send message to server + // webSocket.sendTXT("message here"); + break; + case WStype_BIN: + USE_SERIAL.printf("[WSc] get binary length: %u\n", length); + hexdump(payload, length); + + // send data to server + // webSocket.sendBIN(payload, length); + 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("SSID", "passpasspass"); + + //WiFi.disconnect(); + while(WiFiMulti.run() != WL_CONNECTED) { + delay(100); + } + + // server address, port and URL + webSocket.begin("192.168.0.123", 81, "/"); + + // event handler + webSocket.onEvent(webSocketEvent); + + // use HTTP Basic Authorization this is optional remove if not needed + webSocket.setAuthorization("user", "Password"); + + // try ever 5000 again if connection has failed + webSocket.setReconnectInterval(5000); + +} + +void loop() { + webSocket.loop(); +} diff --git a/examples/WebSocketClientSSL/WebSocketClientSSL.ino b/examples/esp8266/WebSocketClientSSL/WebSocketClientSSL.ino similarity index 100% rename from examples/WebSocketClientSSL/WebSocketClientSSL.ino rename to examples/esp8266/WebSocketClientSSL/WebSocketClientSSL.ino diff --git a/examples/WebSocketClientSocketIO/WebSocketClientSocketIO.ino b/examples/esp8266/WebSocketClientSocketIO/WebSocketClientSocketIO.ino similarity index 100% rename from examples/WebSocketClientSocketIO/WebSocketClientSocketIO.ino rename to examples/esp8266/WebSocketClientSocketIO/WebSocketClientSocketIO.ino diff --git a/examples/WebSocketClientStomp/WebSocketClientStomp.ino b/examples/esp8266/WebSocketClientStomp/WebSocketClientStomp.ino similarity index 100% rename from examples/WebSocketClientStomp/WebSocketClientStomp.ino rename to examples/esp8266/WebSocketClientStomp/WebSocketClientStomp.ino diff --git a/examples/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino b/examples/esp8266/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino similarity index 100% rename from examples/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino rename to examples/esp8266/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino diff --git a/examples/esp8266/WebSocketServer/WebSocketServer.ino b/examples/esp8266/WebSocketServer/WebSocketServer.ino new file mode 100644 index 0000000..5e266a2 --- /dev/null +++ b/examples/esp8266/WebSocketServer/WebSocketServer.ino @@ -0,0 +1,86 @@ +/* + * WebSocketServer.ino + * + * Created on: 22.05.2015 + * + */ + +#include + +#include +#include +#include +#include + +ESP8266WiFiMulti WiFiMulti; + +WebSocketsServer webSocket = WebSocketsServer(81); + +#define USE_SERIAL Serial1 + +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, "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; + } + +} + +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("SSID", "passpasspass"); + + while(WiFiMulti.run() != WL_CONNECTED) { + delay(100); + } + + webSocket.begin(); + webSocket.onEvent(webSocketEvent); +} + +void loop() { + webSocket.loop(); +} + diff --git a/examples/WebSocketServerFragmentation/WebSocketServerFragmentation.ino b/examples/esp8266/WebSocketServerFragmentation/WebSocketServerFragmentation.ino similarity index 100% rename from examples/WebSocketServerFragmentation/WebSocketServerFragmentation.ino rename to examples/esp8266/WebSocketServerFragmentation/WebSocketServerFragmentation.ino diff --git a/examples/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino b/examples/esp8266/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino similarity index 100% rename from examples/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino rename to examples/esp8266/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino diff --git a/examples/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino b/examples/esp8266/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino similarity index 96% rename from examples/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino rename to examples/esp8266/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino index 913b799..7915409 100644 --- a/examples/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino +++ b/examples/esp8266/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino @@ -119,4 +119,3 @@ void loop() { webSocket.loop(); server.handleClient(); } - diff --git a/examples/ParticleWebSocketClient/application.cpp b/examples/particle/ParticleWebSocketClient/application.cpp similarity index 100% rename from examples/ParticleWebSocketClient/application.cpp rename to examples/particle/ParticleWebSocketClient/application.cpp diff --git a/src/WebSockets.h b/src/WebSockets.h index c63bb5e..0d930f7 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -49,23 +49,28 @@ #endif #if defined(ESP8266) || defined(ESP32) + #define WEBSOCKETS_MAX_DATA_SIZE (15*1024) #define WEBSOCKETS_USE_BIG_MEM #define GET_FREE_HEAP ESP.getFreeHeap() // moves all Header strings to Flash (~300 Byte) //#define WEBSOCKETS_SAVE_RAM -#else -#ifdef STM32_DEVICE + +#elif defined(STM32_DEVICE) + #define WEBSOCKETS_MAX_DATA_SIZE (15*1024) #define WEBSOCKETS_USE_BIG_MEM #define GET_FREE_HEAP System.freeMemory() + #else + //atmega328p has only 2KB ram! #define WEBSOCKETS_MAX_DATA_SIZE (1024) // moves all Header strings to Flash #define WEBSOCKETS_SAVE_RAM + #endif -#endif + #define WEBSOCKETS_TCP_TIMEOUT (2000) @@ -84,28 +89,35 @@ #define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP8266 //#define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP8266_ASYNC //#define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100 + #elif defined(ESP32) #define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP32 + #else #define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100 + #endif #endif +// Includes and defined based on Network Type #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) // Note: // No SSL/WSS support for client in Async mode // TLS lib need a sync interface! -#if !defined(ESP8266) && !defined(ESP31B) && !defined(ESP32) + +#if defined(ESP8266) +#include +#elif defined(ESP32) +#include +#include +#elif defined(ESP31B) +#include +#else #error "network type ESP8266 ASYNC only possible on the ESP mcu!" #endif -#ifdef ESP8266 -#include -#else -#include -#endif #include #include #define WEBSOCKETS_NETWORK_CLASS AsyncTCPbuffer diff --git a/travis/common.sh b/travis/common.sh index 062ba05..be959fa 100644 --- a/travis/common.sh +++ b/travis/common.sh @@ -13,10 +13,15 @@ function build_sketches() continue fi echo -e "\n\n ------------ Building $sketch ------------ \n\n"; - $arduino --verify --verbose $sketch; + $arduino --verify $sketch; local result=$? if [ $result -ne 0 ]; then - echo "Build failed ($1)" + echo "Build failed ($sketch) build verbose..." + $arduino --verify --verbose --preserve-temp-files $sketch + result=$? + fi + if [ $result -ne 0 ]; then + echo "Build failed ($1) $sketch" return $result fi done