/*
* MQTT connection using LOLIN ESP8266 D1 Mini Pro
* Connects to WiFi, then MQTT broker (running on Raspberry Pi 3b)
* Subscribes to multiple MQTT topics
* Publishes an MQTT topic
*
* Created by Nick Sebring
* 05-03-2025
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Connect to the WiFi
const char* ssid = "MySSID";
const char* password = "MyPassword!";
const char* mqtt_server = "192.168.#.###";
WiFiClient espClient;
PubSubClient client(espClient);
const int r1 = 0;
const int r2 = 4;
const int r3 = 5;
const int r4 = 14;
// ******************* REMOTE RELAY *****************************
void callback(char* topic, byte* payload, unsigned int length) {
// Relay 1
if (strcmp(topic, "R1") == 0) {
for (int i = 0; i < length; i++) {
char receivedChar = (char)payload[i];
if (receivedChar == '0') {
digitalWrite(r1, LOW);
Serial.println(F("Relay 1 OFF"));
}
if (receivedChar == '1') {
digitalWrite(r1, HIGH);
Serial.println(F("Relay 1 ON"));
}
}
}
// Relay 2
if (strcmp(topic, "R2") == 0) {
for (int i = 0; i < length; i++) {
char receivedChar = (char)payload[i];
if (receivedChar == '0') {
digitalWrite(r2, LOW);
Serial.println(F("Relay 2 OFF"));
}
if (receivedChar == '1') {
digitalWrite(r2, HIGH);
Serial.println(F("Relay 2 ON"));
}
}
}
// Relay 3
if (strcmp(topic, "R3") == 0) {
for (int i = 0; i < length; i++) {
char receivedChar = (char)payload[i];
if (receivedChar == '0') {
digitalWrite(r3, LOW);
Serial.println(F("Relay 3 OFF"));
}
if (receivedChar == '1') {
digitalWrite(r3, HIGH);
Serial.println(F("Relay 3 ON"));
}
}
}
// Relay 4
if (strcmp(topic, "R4") == 0) {
for (int i = 0; i < length; i++) {
char receivedChar = (char)payload[i];
if (receivedChar == '0') {
digitalWrite(r4, LOW);
Serial.println(F("Relay 4 OFF"));
}
if (receivedChar == '1') {
digitalWrite(r4, HIGH);
Serial.println(F("Relay 4 ON"));
}
}
}
}
void reconnect() { // **********************************************************
// Loop until we're reconnected
while (!client.connected()) {
Serial.print(F("Contacting MQTT server..."));
// Attempt to connect
if (client.connect("RelayBank")) { //assign a "client name". Each wemos must have a unique name
Serial.println(F("connected"));
// ... SUBSCRIBE TO TOPICS
client.subscribe("R1");
client.subscribe("R2");
client.subscribe("R3");
client.subscribe("R4");
} else {
Serial.print(F("Failed to connect. "));
Serial.println(F(" Attempting connection again in 3 seconds"));
// Wait 3 seconds before retrying
delay(3000);
}
}
}
void setup() {
{
Serial.begin(9600);
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
pinMode(r1, OUTPUT);
digitalWrite(r1, LOW); // Turn off LED at startup
pinMode(r2, OUTPUT);
digitalWrite(r2, LOW); // Turn off LED at startup
pinMode(r3, OUTPUT);
digitalWrite(r3, LOW); // Turn off LED at startup
pinMode(r4, OUTPUT);
digitalWrite(r4, LOW); // Turn off LED at startup
}
// Connect to WiFinetwork
Serial.println();
Serial.println();
Serial.print(F("Connecting to "));
Serial.println(ssid);
WiFi.begin(ssid, password);
WiFi.mode(WIFI_STA);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
Serial.println(F(""));
Serial.println(F("WiFi connected"));
// Print the IP address
Serial.print(F("Local IP: "));
Serial.println(WiFi.localIP());
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.publish("Outside/Temp", "140"); // Something like this
// delay(5000); // Report sensor data every 5 seconds
client.loop();
}
What is your question?
I think Showcase - Arduino Forum is not about asking questions...
1 Like
Ok.