-
Notifications
You must be signed in to change notification settings - Fork 0
/
arduino_mqtt_rf_transmitter.ino
98 lines (82 loc) · 2.47 KB
/
arduino_mqtt_rf_transmitter.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <RCSwitch.h>
// Define the MQTT client and RCSwitch transmitter objects
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
RCSwitch rfTransmitter;
// Wi-Fi credentials
const char* ssid = "ssid";
const char* password = "password";
// MQTT broker configuration
const char* mqttServer = "mqtt.server.com";
const int mqttPort = 1883;
const char* mqttUser = "";
const char* mqttPassword = "";
const char* mqttTopic = "cmnd/do_bell";
// Transmitter information
const uint8_t transmitterPin = D2;
const int transmitterProtocol = 1;
const int transmitterPulseLength = 417;
// Transmission data information
const unsigned long transmissionData = 4310281;
const unsigned int transmissionLength = 24;
// Function to connect to Wi-Fi
void connectToWiFi() {
Serial.println("Connecting to Wi-Fi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Connected to Wi-Fi!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
// Function to connect to MQTT broker
void connectToMQTT() {
Serial.println("Connecting to MQTT server...");
mqttClient.setServer(mqttServer, mqttPort);
while (!mqttClient.connected()) {
if (mqttClient.connect("NodeMCU", mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT server!");
mqttClient.subscribe(mqttTopic);
} else {
Serial.print("Failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" Retrying in 5 seconds...");
delay(5000);
}
}
}
// Function to handle incoming MQTT messages
void mqttCallback(char* topic, byte* payload, unsigned int length) {
if (strcmp(topic, mqttTopic) == 0) {
Serial.println("Sending transmission");
rfTransmitter.send(transmissionData, transmissionLength);
}
}
void setup() {
Serial.begin(115200);
// Initialize the RCSwitch transmitter
rfTransmitter.enableTransmit(transmitterPin); // Set the appropriate pin
rfTransmitter.setProtocol(transmitterProtocol, transmitterPulseLength);
// Connect to Wi-Fi
connectToWiFi();
// Connect to MQTT server
connectToMQTT();
// Set MQTT callback function
mqttClient.setCallback(mqttCallback);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Lost Wi-Fi connection");
// Attempt to reconnect to Wi-Fi
connectToWiFi();
}
if (!mqttClient.connected()) {
connectToMQTT();
}
mqttClient.loop();
}