Last active
March 11, 2021 11:55
-
-
Save prohazko2/0a6b35517734529396b902a288302a7b 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
// original HTTP over TLS (HTTPS) example sketch from: | |
// https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/HTTPSRequest/HTTPSRequest.ino | |
/*** platformio.ini | |
[env:nodemcuv2] | |
platform = espressif8266 | |
board = nodemcuv2 | |
framework = arduino | |
lib_deps = knolleary/PubSubClient@^2.8.0 | |
; build_flags = -DDEBUG_ESP_SSL -DDEBUG_ESP_PORT=Serial -DCORE_DEBUG_LEVEL=5 | |
; set frequency to 160MHz | |
board_build.f_cpu = 160000000L | |
*/ | |
#include <ESP8266WiFi.h> | |
#include <WiFiClientSecure.h> | |
#include <PubSubClient.h> | |
#define MQTTS_USE_CLIENT_CERT 0 | |
const char *wifi_ssid = "..."; | |
const char *wifi_pass = "..."; | |
const char *mqtt_server = "dev.rightech.io"; | |
const char *mqtt_client_id = "..."; | |
const char pem_ca[] PROGMEM = R"EOF( | |
# ISRG Root X1 (Self-signed) | |
# https://letsencrypt.org/certs/isrgrootx1.pem.txt | |
-----BEGIN CERTIFICATE----- | |
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw | |
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh | |
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 | |
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu | |
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY | |
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc | |
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ | |
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U | |
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW | |
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH | |
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC | |
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv | |
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn | |
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn | |
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw | |
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI | |
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV | |
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq | |
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL | |
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ | |
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK | |
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 | |
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur | |
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC | |
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc | |
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq | |
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA | |
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d | |
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= | |
-----END CERTIFICATE----- | |
)EOF"; | |
X509List ca(pem_ca); | |
#if MQTTS_USE_CLIENT_CERT | |
const char pem_cert[] PROGMEM = R"EOF( | |
-----BEGIN CERTIFICATE----- | |
... | |
-----END CERTIFICATE----- | |
)EOF"; | |
X509List cert(pem_cert); | |
const char pem_key[] PROGMEM = R"EOF( | |
-----BEGIN RSA PRIVATE KEY----- | |
... | |
-----END RSA PRIVATE KEY----- | |
)EOF"; | |
PrivateKey key(pem_key); | |
#endif | |
WiFiClientSecure wifi; | |
PubSubClient mqtt(wifi); | |
void onmsg(char *topic, byte *payload, unsigned int length) | |
{ | |
Serial.printf("Message arrived [%s]\n", topic); | |
} | |
void setup() | |
{ | |
Serial.begin(9600); | |
Serial.println(); | |
Serial.print("Connecting to "); | |
Serial.println(wifi_ssid); | |
WiFi.mode(WIFI_STA); | |
WiFi.begin(wifi_ssid, wifi_pass); | |
while (WiFi.status() != WL_CONNECTED) | |
{ | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected"); | |
Serial.println("IP address: "); | |
Serial.println(WiFi.localIP()); | |
// Set time via NTP, as required for x.509 validation | |
configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); | |
Serial.print("Waiting for NTP time sync: "); | |
time_t now = time(nullptr); | |
while (now < 8 * 3600 * 2) | |
{ | |
delay(500); | |
Serial.print("."); | |
now = time(nullptr); | |
} | |
Serial.println(""); | |
struct tm timeinfo; | |
gmtime_r(&now, &timeinfo); | |
Serial.print("Current time: "); | |
Serial.print(asctime(&timeinfo)); | |
wifi.setTrustAnchors(&ca); | |
#if MQTTS_USE_CLIENT_CERT | |
Serial.println("Using client certs"); | |
wifi.setClientRSACert(&cert, &key); | |
#endif | |
mqtt.setServer(mqtt_server, 8883); | |
mqtt.setCallback(onmsg); | |
Serial.print("Attempting MQTT connection..."); | |
if (mqtt.connect(mqtt_client_id)) | |
{ | |
Serial.println("connected"); | |
mqtt.publish("hi", "hello mqtts"); | |
mqtt.subscribe("#"); | |
} | |
else | |
{ | |
Serial.print("failed, rc="); | |
Serial.print(mqtt.state()); | |
} | |
} | |
void loop() | |
{ | |
mqtt.loop(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment