Secured-Esp32-Client.ino 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. Secured Esp32 Websockets Client
  3. This sketch:
  4. 1. Connects to a WiFi network
  5. 2. Connects to a Websockets server (using WSS)
  6. 3. Sends the websockets server a message ("Hello Server")
  7. 4. Sends the websocket server a "ping"
  8. 5. Prints all incoming messages while the connection is open
  9. NOTE:
  10. The sketch dosen't check or indicate about errors while connecting to
  11. WiFi or to the websockets server. For full example you might want
  12. to try the example named "Esp32-Client" (And use the ssl methods).
  13. Hardware:
  14. For this sketch you only need an Esp32 board.
  15. Created 15/02/2019
  16. By Gil Maimon
  17. https://github.com/gilmaimon/ArduinoWebsockets
  18. */
  19. #include <ArduinoWebsockets.h>
  20. #include <WiFi.h>
  21. const char* ssid = "ssid"; //Enter SSID
  22. const char* password = "password"; //Enter Password
  23. const char* websockets_connection_string = "wss://echo.websocket.org/"; //Enter server adress
  24. // This certificate was updated 20.04.2019
  25. const char echo_org_ssl_ca_cert[] PROGMEM = \
  26. "-----BEGIN CERTIFICATE-----\n" \
  27. "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" \
  28. "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" \
  29. "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" \
  30. "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" \
  31. "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" \
  32. "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" \
  33. "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" \
  34. "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" \
  35. "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" \
  36. "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" \
  37. "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" \
  38. "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" \
  39. "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" \
  40. "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" \
  41. "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" \
  42. "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" \
  43. "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" \
  44. "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" \
  45. "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" \
  46. "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" \
  47. "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" \
  48. "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" \
  49. "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" \
  50. "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" \
  51. "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" \
  52. "-----END CERTIFICATE-----\n";
  53. using namespace websockets;
  54. void onMessageCallback(WebsocketsMessage message) {
  55. Serial.print("Got Message: ");
  56. Serial.println(message.data());
  57. }
  58. void onEventsCallback(WebsocketsEvent event, String data) {
  59. if(event == WebsocketsEvent::ConnectionOpened) {
  60. Serial.println("Connnection Opened");
  61. } else if(event == WebsocketsEvent::ConnectionClosed) {
  62. Serial.println("Connnection Closed");
  63. } else if(event == WebsocketsEvent::GotPing) {
  64. Serial.println("Got a Ping!");
  65. } else if(event == WebsocketsEvent::GotPong) {
  66. Serial.println("Got a Pong!");
  67. }
  68. }
  69. WebsocketsClient client;
  70. void setup() {
  71. Serial.begin(115200);
  72. // Connect to wifi
  73. WiFi.begin(ssid, password);
  74. // Wait some time to connect to wifi
  75. for(int i = 0; i < 10 && WiFi.status() != WL_CONNECTED; i++) {
  76. Serial.print(".");
  77. delay(1000);
  78. }
  79. // run callback when messages are received
  80. client.onMessage(onMessageCallback);
  81. // run callback when events are occuring
  82. client.onEvent(onEventsCallback);
  83. // Before connecting, set the ssl fingerprint of the server
  84. client.setCACert(echo_org_ssl_ca_cert);
  85. // Connect to server
  86. client.connect(websockets_connection_string);
  87. // Send a message
  88. client.send("Hello Server");
  89. // Send a ping
  90. client.ping();
  91. }
  92. void loop() {
  93. client.poll();
  94. }