first .ino file
then .ino split to .cpp and .h
#include <Adafruit_Sensor.h> //Library for Adafruit sensors , we are using for DHT
#include <DHT.h> //DHT library which uses some func from Adafruit Sensor library
#include <ESP8266WiFi.h> //library for using ESP8266 WiFi
#include <PubSubClient.h> //library for MQTT
#include <ArduinoJson.h> //library for Parsing JSON
#include <Wire.h>
//defining Pins
#define DHTPIN D4
#define Addr 0x51
//DHT parameters
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
//MQTT Credentials
const char* ssid = "xxxxxx";//setting your ap ssid
const char* password = "xxxxxxx";//setting your ap psk
const char* mqttServer = "xxxxxxx"; //MQTT URL
const char* mqttUserName = "xxxxxxx"; // MQTT username
const char* mqttPwd = "xxxxxxx*"; // MQTT password
const char* clientID = "xxxxxxx"; // client id username+0001
const char* topic = "fxxxxxxx"; //publish topic
//parameters for using non-blocking delay
unsigned long previousMillis = 0;
const long TimeInMin = 10;
const long interval = (TimeInMin * 60000);
String msgStr = ""; // MQTT message buffer
float T1, T2, H1, H2;
int Chh;
String Status, Co, Te, Hu, Tv, Hc, Ch, out;
//setting up wifi and mqtt client
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
if (client.connect(clientID, mqttUserName, mqttPwd)) {
Serial.println("MQTT connected");
client.subscribe("xxxxxxxd");
Serial.println("Topic Subscribed");
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000); // wait 5sec and retry
}
}
}
//subscribe call back
void callback(char*topic, byte* payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
Serial.print("Message size :");
Serial.println(length);
Serial.println();
Serial.println("-----------------------");
StaticJsonDocument<256> doc; //read JSON data
deserializeJson(doc, payload, length); //deserialise it
JsonObject command = doc["command"]; //get the values of command parameter
}
void setup() {
Serial.begin(9600);
//DHT11
dht.begin();
dht.readTemperature();
dht.readHumidity();
//RK14Z
Wire.begin();
Wire.beginTransmission(Addr);
Wire.endTransmission();
setup_wifi();
client.setServer(mqttServer, 1883); //setting MQTT server
client.setCallback(callback); //defining function which will be called when message is recieved.
}
void loop() {
if (!client.connected()) { //if client is not connected
reconnect(); //try to reconnect
}
client.loop();
unsigned long currentMillis = millis(); //read current time
if (currentMillis - previousMillis >= interval) { //if current time - last time > 5 sec
previousMillis = currentMillis;
//read temp and humidity dht11
float hum1 = dht.readHumidity();
float temp1 = dht.readTemperature();
float tempd = temp1;
float humd = hum1;
String tempdh = String(tempd, 2);
String humdh = String(humd, 2);
Serial.print("Current humidity = ");
Serial.print(humdh);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(tempdh);
Serial.println("C ");
Wire.beginTransmission(Addr);
//read data from RK14Z
byte busStatus = Wire.endTransmission();
if (busStatus != 0)
{
Serial.print("Sensor is not found!");
while (1);
}
Serial.println("Sensor is found.");
byte myData[13];
byte m = Wire.requestFrom(0x51, 13);
for (int i = 0; i < m; i++)
{
myData[i] = Wire.read();
}
for (int i = 0; i < m; i++)
{
Serial.print(myData[i], HEX);
Serial.print(" ");
}
Serial.print("\n");
if (myData[0] == 0xFF) //Message Header check
{
Serial.println("Data received!");
}
if (myData[3] == 0x00) //Status check
{
Serial.println("OK");
Status = "OK";
}
else if (myData[3] == 0x01)
{
Serial.println("Heating");
Status = "Heating";
}
else if (myData[3] == 0x02)
{
Serial.println("Error");
Status = "Error";
}
uint16_t Co2 = word(myData[1], myData[2]);
Co = String (Co2, DEC);
Serial.print(Co);
Serial.println(" ppm");
uint16_t Temp = word(myData[4], myData[5]);
Te = String(Temp, DEC);
T2 = Te.toInt();
T1 = (T2 - 669) / 10;
String T3 = String(T1, 2);
Serial.print(T3);
Serial.println(" °C");
uint16_t Hum = word(myData[6], myData[7]);
Hu = String(Hum, DEC);
H2 = Hu.toInt();
H1 = (H2 - 125) / 10;
String H3 = String(H1, 2);
Serial.print(H3);
Serial.println(" %RH");
uint16_t TVOC = word(myData[8], myData[9]);
Tv = String(TVOC, DEC);
Serial.print(Tv);
Serial.println(" ug/m3");
uint16_t HCHO = word(myData[10], myData[11]);
Hc = String (HCHO, DEC);
Serial.print(Hc);
Serial.println(" ug/m3");
uint16_t sum = (myData[1] | myData[2] | myData[3] | myData[4] | myData[5] | myData[6] | myData[7] | myData[8] | myData[9] | myData[10] | myData[11]);
Ch = String(sum, DEC);
Chh = sum + 1;
Serial.print("Check code :");
Serial.println(Chh);
DynamicJsonDocument doc(1024);
doc["tempdht"] = tempdh;
doc["humdht"] = humdh;
doc["Sensor Status"] = Status;
doc["Co2"] = Co;
doc["temprk"] = T3;
doc["humrk"] = H3;
doc["TVOC"] = Tv;
doc["HCHO"] = Hc;
serializeJson(doc, msgStr);
byte arrSize = msgStr.length() + 1;
char msg[arrSize];
Serial.print("PUBLISH DATA:");
Serial.println(msgStr);
msgStr.toCharArray(msg, arrSize);
client.publish(topic, msg);
msgStr = "";
delay(50);
}
}
to split this code to mqtt , Dht and Rk14z .cpp and .h files respectively