Can someone point me to a library to handle an MQTT connection with TLS encryption using WiFi?
(Specifically for the OPTA)
I'm using the code below for a broker that uses a simple username and password over port 1883, However I need to connect to a broker over port 8883 which uses a cert for TLS encryption.
#include <WiFi.h>
#include <PubSubClient.h>
// Replace these with your WiFi network credentials
const char* ssid = "ssid";
const char* password = "password";
// Create an instance of the WiFiClient and PubSubClient
WiFiClient wifiClient;
PubSubClient client(wifiClient);
unsigned long previousMillis = 0;
const long interval = 2000; // Publish interval in milliseconds
void setup() {
Serial.begin(115200);
delay(10);
connectToWiFi();
}
void loop() {
if (!client.connected()) {
connectToMQTT();
}
client.loop();
digitalWrite(LED_D1, HIGH);
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int wifiSignalStrength = WiFi.RSSI();
char signalStrengthString[4];
itoa(wifiSignalStrength, signalStrengthString, 10);
client.publish("opta_1", signalStrengthString);
Serial.print("ssi: ");
Serial.println(signalStrengthString);
digitalWrite(LED_D2, HIGH);
delay(100);
digitalWrite(LED_D2, LOW);
}
}
void connectToWiFi() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
digitalWrite(LED_D0, LOW);
}
Serial.println("");
Serial.println("WiFi connected");
digitalWrite(LED_D0, HIGH);
}
void connectToMQTT() {
// Replace with the MQTT broker's domain or IP address and port
const char* mqtt_server = "mqtt broker ip addr";
const int mqtt_port = 1883;
const char* mqtt_username = "mqtt username";
const char* mqtt_password = "mqtt password";
// Generate a unique client ID
String clientId = "Arduino_OPTA";
client.setServer(mqtt_server, mqtt_port);
while (!client.connected()) {
digitalWrite(LED_D1, LOW);
// Close the TCP connection before trying to reconnect
wifiClient.stop();
delay(1000); // Optional delay
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi();
}
Serial.print("Attempting MQTT connection with ID ");
Serial.print(clientId);
Serial.print("...");
// Use the unique client ID
if (client.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
switch (client.state()) {
case -4:
Serial.println(" : Connection timeout");
break;
case -3:
Serial.println(" : Connection lost");
break;
case -2:
Serial.println(" : Connect failed");
break;
case -1:
Serial.println(" : Disconnect failed");
break;
case 1:
Serial.println(" : Invalid protocol");
break;
case 2:
Serial.println(" : Invalid client ID");
break;
case 3:
Serial.println(" : Server unavailable");
break;
case 4:
Serial.println(" : Bad credentials");
break;
case 5:
Serial.println(" : Not authorized");
break;
}
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}