meteoBack/src/backend.ino

156 lines
3.9 KiB
Arduino
Raw Normal View History

2018-05-07 21:10:20 +03:00
#include <BH1750.h>
#include <BMP280.h>
#include <Wire.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
// #include <ESP8266mDNS.h>
2018-05-07 21:10:20 +03:00
#include "DHTesp.h"
#include <DallasTemperature.h>
#include <OneWire.h>
2018-05-08 10:55:15 +03:00
#include "wifi.h"
2018-05-07 21:10:20 +03:00
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
float inTemp,humid,extTemp;
double bmpTemp,pressure,altitude,lux;
const short ds18pin = 12, bmpsda = 5, bmpscl = 4, dhtpin = 14;
2018-05-07 21:10:20 +03:00
BMP280 bmp;
DHTesp dht;
2018-05-08 10:55:15 +03:00
OneWire oneWire(ds18pin);
2018-05-07 21:10:20 +03:00
DallasTemperature DS18B20(&oneWire);
WiFiClient client;
2018-05-29 12:56:24 +03:00
Adafruit_MQTT_Client mqtt(&client, "192.168.100.100", 1883);
2018-05-07 21:10:20 +03:00
Adafruit_MQTT_Publish extTempMQTT = Adafruit_MQTT_Publish(&mqtt, "externalTemp");
Adafruit_MQTT_Publish inTempMQTT = Adafruit_MQTT_Publish(&mqtt, "inTemp");
Adafruit_MQTT_Publish humidMQTT = Adafruit_MQTT_Publish(&mqtt, "humid");
Adafruit_MQTT_Publish bmpTempMQTT = Adafruit_MQTT_Publish(&mqtt, "bmpTemp");
Adafruit_MQTT_Publish pressureMQTT = Adafruit_MQTT_Publish(&mqtt, "pressure");
2018-05-29 12:56:24 +03:00
Adafruit_MQTT_Publish lightMQTT = Adafruit_MQTT_Publish(&mqtt, "light");
2018-05-07 21:10:20 +03:00
BH1750 lightMeter(0x23);
2018-05-07 21:10:20 +03:00
void setup(){
Serial.begin(115200);
Serial.setTimeout(2000);
2018-05-07 21:10:20 +03:00
//==WIFI CONNECT==
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println("Connected to " + String(ssid) + "; IP address: " + WiFi.localIP());
// MDNS.begin("esp8266-backend");
//Sensors init
//we need remember that bmp and bh1750 are on one i2c line, bmp does wire.begin, bh1750 seems not
if(!bmp.begin(bmpsda, bmpscl)){
2018-05-08 10:55:15 +03:00
Serial.println("BMP init failed!\n Reset in 10 seconds");
delay(10000);
ESP.reset();
2018-05-07 21:10:20 +03:00
}
else {
Serial.println("BMP init success!");
bmp.setOversampling(4);
}
if (!lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE))
2018-05-07 21:10:20 +03:00
Serial.println("lightMeter error!");
dht.setup(dhtpin);
// Serial.println("lets sleep for 30e6 us or 30 seconds");
// ESP.deepSleep(30e6);
2018-05-07 21:10:20 +03:00
}
void loop(){
getDS18();
getBMP();
getLight();
getAccurateDHT();
MQTT_loop();
serialPrint();
2018-05-08 10:55:15 +03:00
}
2018-05-08 10:55:15 +03:00
void getBMP(){
char result = bmp.startMeasurment();
if(result!=0){
delay(result);
bmp.getTemperatureAndPressure(bmpTemp,pressure);
}
}
void getDS18(){
do {
DS18B20.requestTemperatures();
extTemp = DS18B20.getTempCByIndex(0);
} while (extTemp == 85.0 || extTemp == (-127.0));
}
void getLight(){
lux = lightMeter.readLightLevel();
}
void serialPrint() {
2018-05-29 12:56:24 +03:00
Serial.println("====");
2018-05-08 10:55:15 +03:00
Serial.println("BMP280 Temperature: " + String(bmpTemp) + "degC");
Serial.println("Pressure: " + String(pressure) + "mBar");
Serial.println("DS18B20 Temperature: " + String(extTemp) + "degC");
Serial.println("DHT11 Temperature: " + String(inTemp) + "degC");
Serial.println("Humidity: " + String(humid) + "%");
2018-05-29 12:56:24 +03:00
Serial.println("Light:" + String(lux)+"lux");
2018-05-08 10:55:15 +03:00
}
void getAccurateDHT(){
humid = (dht.getHumidity());
inTemp = (dht.getTemperature());
2018-05-08 10:55:15 +03:00
}
2018-05-07 21:10:20 +03:00
void MQTT_loop() {
MQTT_connect();
if (! extTempMQTT.publish(extTemp))
2018-05-07 21:10:20 +03:00
Serial.println(F("Failed"));
if (! inTempMQTT.publish(inTemp))
2018-05-07 21:10:20 +03:00
Serial.println(F("Failed"));
if (! humidMQTT.publish(humid))
2018-05-07 21:10:20 +03:00
Serial.println(F("Failed"));
if (! bmpTempMQTT.publish(bmpTemp))
2018-05-07 21:10:20 +03:00
Serial.println(F("Failed"));
if (! pressureMQTT.publish(pressure))
2018-05-07 21:10:20 +03:00
Serial.println(F("Failed"));
if (! lightMQTT.publish(lux))
2018-05-29 12:56:24 +03:00
Serial.println(F("Failed"));
2018-05-07 21:10:20 +03:00
if(! mqtt.ping())
2018-05-07 21:10:20 +03:00
mqtt.disconnect();
}
void MQTT_connect() {
int8_t ret;
if (mqtt.connected()) {
return;
}
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0)
while (1);
}
2018-05-07 21:10:20 +03:00
Serial.println("MQTT Connected!");
}