|
| 1 | +/* |
| 2 | + * WebSocketClientSSLWithCA.ino |
| 3 | + * |
| 4 | + * Created on: 27.10.2019 |
| 5 | + * |
| 6 | + * note SSL is only possible with the ESP8266 |
| 7 | + * |
| 8 | + */ |
| 9 | + |
| 10 | +#include <Arduino.h> |
| 11 | + |
| 12 | +#include <ESP8266WiFi.h> |
| 13 | +#include <ESP8266WiFiMulti.h> |
| 14 | + |
| 15 | +#include <WebSocketsClient.h> |
| 16 | + |
| 17 | +ESP8266WiFiMulti WiFiMulti; |
| 18 | +WebSocketsClient webSocket; |
| 19 | + |
| 20 | +#define USE_SERIAL Serial1 |
| 21 | + |
| 22 | + |
| 23 | +// Can be obtained with: |
| 24 | +// openssl s_client -showcerts -connect echo.websocket.org:443 </dev/null |
| 25 | +const char ENDPOINT_CA_CERT[] PROGMEM = R"EOF( |
| 26 | +-----BEGIN CERTIFICATE----- |
| 27 | +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ |
| 28 | +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT |
| 29 | +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow |
| 30 | +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT |
| 31 | +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC |
| 32 | +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF |
| 33 | +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 |
| 34 | +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 |
| 35 | +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA |
| 36 | +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj |
| 37 | +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T |
| 38 | +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG |
| 39 | +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv |
| 40 | +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k |
| 41 | +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw |
| 42 | +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC |
| 43 | +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz |
| 44 | +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu |
| 45 | +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF |
| 46 | +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo |
| 47 | +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ |
| 48 | +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu |
| 49 | +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG |
| 50 | +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 |
| 51 | +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== |
| 52 | +-----END CERTIFICATE----- |
| 53 | +)EOF"; |
| 54 | + |
| 55 | +void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { |
| 56 | + switch(type) { |
| 57 | + case WStype_DISCONNECTED: |
| 58 | + USE_SERIAL.printf("[WSc] Disconnected!\n"); |
| 59 | + break; |
| 60 | + case WStype_CONNECTED: |
| 61 | + { |
| 62 | + USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload); |
| 63 | + |
| 64 | + // send message to server when Connected |
| 65 | + webSocket.sendTXT("Connected"); |
| 66 | + } |
| 67 | + break; |
| 68 | + case WStype_TEXT: |
| 69 | + USE_SERIAL.printf("[WSc] get text: %s\n", payload); |
| 70 | + |
| 71 | + // send message to server |
| 72 | + // webSocket.sendTXT("message here"); |
| 73 | + break; |
| 74 | + case WStype_BIN: |
| 75 | + USE_SERIAL.printf("[WSc] get binary length: %u\n", length); |
| 76 | + hexdump(payload, length); |
| 77 | + |
| 78 | + // send data to server |
| 79 | + // webSocket.sendBIN(payload, length); |
| 80 | + break; |
| 81 | + } |
| 82 | +} |
| 83 | + |
| 84 | +void setup() { |
| 85 | + USE_SERIAL.begin(115200); |
| 86 | + |
| 87 | + USE_SERIAL.setDebugOutput(true); |
| 88 | + |
| 89 | + USE_SERIAL.println(); |
| 90 | + USE_SERIAL.println(); |
| 91 | + USE_SERIAL.println(); |
| 92 | + |
| 93 | + for(uint8_t t = 4; t > 0; t--) { |
| 94 | + USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t); |
| 95 | + USE_SERIAL.flush(); |
| 96 | + delay(1000); |
| 97 | + } |
| 98 | + |
| 99 | + WiFiMulti.addAP("SSID", "passpasspass"); |
| 100 | + |
| 101 | + while(WiFiMulti.run() != WL_CONNECTED) { |
| 102 | + delay(100); |
| 103 | + } |
| 104 | + |
| 105 | + webSocket.beginSslWithCA("echo.websocket.org", 443, "/", ENDPOINT_CA_CERT); |
| 106 | + webSocket.onEvent(webSocketEvent); |
| 107 | +} |
| 108 | + |
| 109 | +void loop() { |
| 110 | + webSocket.loop(); |
| 111 | +} |
0 commit comments