ESP8266 Code
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <MQTTClient.h>
#include <ArduinoJson.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // Default I2C and SPI.
#define LEDRED D6
#define LEDGREEN D8
#define LEDYELLOW D7
String receivedBtData = "";
int ledState[3] = {0, 0, 0};
void handleSerialCommand(String command);
#define CLIENT_ID "ESP8266-001"
const char WIFI_SSID[] = "TurkTelekom_ZXUMT";
const char WIFI_PASSWORD[] = "f707730997990";
const char MQTT_BROKER_ADRRESS[] = "192.168.1.160";
const int MQTT_PORT = 1883;
const char MQTT_USERNAME[] = "Knetrix";
const char MQTT_PASSWORD[] = "Dknemos";
#define PUBLISH_TOPIC "ESP8266-001/send"
// #define SUBSCRIBE_TOPIC "ESP8266-001/receive"
#define PUBLISH_INTERVAL 5000 // 5 Second.
IPAddress local_IP(192, 168, 1, 180);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(192, 168, 1, 1);
IPAddress secondaryDNS(1, 1, 1, 1);
WiFiClient network;
MQTTClient mqtt = MQTTClient(256);
unsigned long lastPublishTime = 0;
void connectToMQTT();
void sendToMQTT();
// void messageHandler(String &topic, String &payload);
void setup()
{
Serial.begin(9600);
bme.begin(0x76);
pinMode(LEDRED, OUTPUT);
pinMode(LEDGREEN, OUTPUT);
pinMode(LEDYELLOW, OUTPUT);
WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
delay(1000);
connectToMQTT();
}
void loop()
{
mqtt.loop();
if (!mqtt.connected())
connectToMQTT();
else if (millis() - lastPublishTime > PUBLISH_INTERVAL)
{
sendToMQTT();
lastPublishTime = millis();
}
if (Serial.available() > 0)
{
receivedBtData = Serial.readString();
handleSerialCommand(receivedBtData);
}
}
void connectToMQTT()
{
mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network);
// mqtt.onMessage(messageHandler);
while (!mqtt.connect(CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD))
delay(1000);
// mqtt.subscribe(SUBSCRIBE_TOPIC);
}
void sendToMQTT()
{
float h = bme.readHumidity();
float t = bme.readTemperature();
float p = bme.readPressure() / 100.0F;
JsonDocument message;
message["temperature"] = isnan(t) ? -999 : t;
message["humidity"] = isnan(h) ? -999 : h;
message["pressure"] = isnan(p) ? -999 : p;
// message["ledState"] = String(ledState[0]) + ", " + String(ledState[1]) + ", " + String(ledState[2]);
JsonArray ledStateArray = message.createNestedArray("ledState");
for (int i = 0; i < 3; i++)
ledStateArray.add(ledState[i]);
char messageBuffer[512];
serializeJson(message, messageBuffer);
mqtt.publish(PUBLISH_TOPIC, messageBuffer);
}
void handleSerialCommand(String command)
{
command.trim();
command.toLowerCase();
if (command == "red_on")
{
digitalWrite(LEDRED, HIGH);
Serial.println("Opened Red LED.");
ledState[0] = 1;
}
else if (command == "red_off")
{
digitalWrite(LEDRED, LOW);
Serial.println("Closed Red LED.");
ledState[0] = 0;
}
else if (command == "green_on")
{
digitalWrite(LEDGREEN, HIGH);
Serial.println("Opened Green LED.");
ledState[1] = 1;
}
else if (command == "green_off")
{
digitalWrite(LEDGREEN, LOW);
Serial.println("Closed Green LED.");
ledState[1] = 0;
}
else if (command == "yellow_on")
{
digitalWrite(LEDYELLOW, HIGH);
Serial.println("Opened Yellow LED.");
ledState[2] = 1;
}
else if (command == "yellow_off")
{
digitalWrite(LEDYELLOW, LOW);
Serial.println("Closed Yellow LED.");
ledState[2] = 0;
}
else
Serial.println("Wrong Command.");
}
Node-RED Flow