You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
5.2 KiB
Arduino
139 lines
5.2 KiB
Arduino
|
3 days ago
|
#include <WiFi.h>
|
||
|
|
#include <PubSubClient.h>
|
||
|
|
#include <WiFiClientSecure.h>
|
||
|
|
|
||
|
|
// WiFi credentials
|
||
|
|
const char *ssid = "WIFI_SSID"; // Replace with your WiFi name
|
||
|
|
const char *password = "WIFI_PASSWORD"; // Replace with your WiFi password
|
||
|
|
|
||
|
|
// MQTT Broker settings
|
||
|
|
const char *mqtt_broker = "broker.emqx.io";
|
||
|
|
const char *mqtt_topic = "emqx/esp32";
|
||
|
|
const char *mqtt_username = "emqx";
|
||
|
|
const char *mqtt_password = "public";
|
||
|
|
const int mqtt_port = 8883;
|
||
|
|
|
||
|
|
// WiFi and MQTT client initialization
|
||
|
|
WiFiClientSecure esp_client;
|
||
|
|
PubSubClient mqtt_client(esp_client);
|
||
|
|
|
||
|
|
// Root CA Certificate
|
||
|
|
// Load DigiCert Global Root G2, which is used by EMQX Public Broker: broker.emqx.io
|
||
|
|
const char *ca_cert = R"EOF(
|
||
|
|
-----BEGIN CERTIFICATE-----
|
||
|
|
MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh
|
||
|
|
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||
|
|
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
|
||
|
|
MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT
|
||
|
|
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
||
|
|
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG
|
||
|
|
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI
|
||
|
|
2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx
|
||
|
|
1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ
|
||
|
|
q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz
|
||
|
|
tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ
|
||
|
|
vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP
|
||
|
|
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV
|
||
|
|
5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY
|
||
|
|
1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4
|
||
|
|
NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG
|
||
|
|
Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91
|
||
|
|
8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe
|
||
|
|
pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
|
||
|
|
MrY=
|
||
|
|
-----END CERTIFICATE-----
|
||
|
|
)EOF";
|
||
|
|
|
||
|
|
// Load DigiCert Global Root CA ca_cert, which is used by EMQX Cloud Serverless Deployment
|
||
|
|
/*
|
||
|
|
const char* ca_cert = R"EOF(
|
||
|
|
-----BEGIN CERTIFICATE-----
|
||
|
|
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
|
||
|
|
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||
|
|
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
||
|
|
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
|
||
|
|
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
||
|
|
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
|
||
|
|
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
|
||
|
|
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
|
||
|
|
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
|
||
|
|
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
|
||
|
|
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
|
||
|
|
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
|
||
|
|
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
|
||
|
|
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
|
||
|
|
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
|
||
|
|
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
|
||
|
|
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
|
||
|
|
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
|
||
|
|
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
||
|
|
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
||
|
|
-----END CERTIFICATE-----
|
||
|
|
*/
|
||
|
|
|
||
|
|
|
||
|
|
// Function Declarations
|
||
|
|
void connectToWiFi();
|
||
|
|
|
||
|
|
void connectToMQTT();
|
||
|
|
|
||
|
|
void mqttCallback(char *topic, byte *payload, unsigned int length);
|
||
|
|
|
||
|
|
|
||
|
|
void setup() {
|
||
|
|
Serial.begin(115200);
|
||
|
|
connectToWiFi();
|
||
|
|
|
||
|
|
// Set Root CA certificate
|
||
|
|
esp_client.setCACert(ca_cert);
|
||
|
|
|
||
|
|
mqtt_client.setServer(mqtt_broker, mqtt_port);
|
||
|
|
mqtt_client.setKeepAlive(60);
|
||
|
|
mqtt_client.setCallback(mqttCallback);
|
||
|
|
connectToMQTT();
|
||
|
|
}
|
||
|
|
|
||
|
|
void connectToWiFi() {
|
||
|
|
WiFi.begin(ssid, password);
|
||
|
|
Serial.print("Connecting to WiFi");
|
||
|
|
while (WiFi.status() != WL_CONNECTED) {
|
||
|
|
delay(500);
|
||
|
|
Serial.print(".");
|
||
|
|
}
|
||
|
|
Serial.println("\nConnected to WiFi");
|
||
|
|
}
|
||
|
|
|
||
|
|
void connectToMQTT() {
|
||
|
|
while (!mqtt_client.connected()) {
|
||
|
|
String client_id = "esp32-client-" + String(WiFi.macAddress());
|
||
|
|
Serial.printf("Connecting to MQTT Broker as %s...\n", client_id.c_str());
|
||
|
|
if (mqtt_client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
|
||
|
|
Serial.println("Connected to MQTT broker");
|
||
|
|
mqtt_client.subscribe(mqtt_topic);
|
||
|
|
mqtt_client.publish(mqtt_topic, "Hi EMQX I'm ESP32 ^^"); // Publish message upon connection
|
||
|
|
} else {
|
||
|
|
Serial.print("Failed to connect to MQTT broker, rc=");
|
||
|
|
Serial.print(mqtt_client.state());
|
||
|
|
Serial.println(" Retrying in 5 seconds.");
|
||
|
|
delay(5000);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void mqttCallback(char *topic, byte *payload, unsigned int length) {
|
||
|
|
Serial.print("Message received on topic: ");
|
||
|
|
Serial.println(topic);
|
||
|
|
Serial.print("Message: ");
|
||
|
|
for (unsigned int i = 0; i < length; i++) {
|
||
|
|
Serial.print((char) payload[i]);
|
||
|
|
}
|
||
|
|
Serial.println("\n-----------------------");
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
void loop() {
|
||
|
|
if (!mqtt_client.connected()) {
|
||
|
|
connectToMQTT();
|
||
|
|
}
|
||
|
|
mqtt_client.loop();
|
||
|
|
}
|