First commit

This commit is contained in:
2020-08-01 13:47:02 +03:00
commit ac18805ff4
142 changed files with 8325 additions and 0 deletions

72
ESP_MidRoom/src/amqtt.cpp Normal file
View File

@@ -0,0 +1,72 @@
// #include <amqtt.h>
// void connectToWifi() {
// Serial.println("Connecting to Wi-Fi...");
// WiFi.begin(ssid, password);
// }
// void connectToMqtt() {
// Serial.println("Connecting to MQTT...");
// //mqttClient.connect();
// }
// void onWifiConnect(const WiFiEventStationModeGotIP& event) {
// Serial.println("Connected to Wi-Fi.");
// Serial.print("IP: ");
// Serial.println(WiFi.localIP());
// connectToMqtt();
// }
// void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
// Serial.println("Disconnected from Wi-Fi.");
// mqttReconnectTimer.detach(); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
// wifiReconnectTimer.once(2, connectToWifi);
// }
// void onMqttConnect(bool sessionPresent) {
// Serial.println("Connected to MQTT.");
// Serial.print("Session present: ");
// Serial.println(sessionPresent);
// //uint16_t packetIdSub =
// // Serial.print("Subscribing Lamp1, packetId: ");
// // Serial.println(packetIdSub);
// //packetIdSub = mqttClient.subscribe("/home/kor/lamp2_set", 1);
// //Serial.print("Subscribing Lamp2, packetId: ");
// //Serial.println(packetIdSub);
// //Serial.println("Publishing at Lamp 1");
// //mqttClient.publish("/home/kor/lamp2", 1, false, lStat2 ? "1" : "0");
// //Serial.println("Publishing at Lamp 2");
// }
// void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
// Serial.println("Disconnected from MQTT.");
// if (WiFi.isConnected()) {
// mqttReconnectTimer.once(2, connectToMqtt);
// }
// }
// void onMqttSubscribe(uint16_t packetId, uint8_t qos) {
// // Serial.println("Subscribe acknowledged.");
// // Serial.print(" packetId: ");
// // Serial.println(packetId);
// // Serial.print(" qos: ");
// // Serial.println(qos);
// }
// void onMqttUnsubscribe(uint16_t packetId) {
// // Serial.println("Unsubscribe acknowledged.");
// // Serial.print(" packetId: ");
// // Serial.println(packetId);
// }
// void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
// if(strcmp(topic, "/home/kor/lamp1_set") == 0){
// }
// }
// void onMqttPublish(uint16_t packetId) {
// // Serial.println("Publish acknowledged.");
// // Serial.print(" packetId: ");
// // Serial.println(packetId);
// }

32
ESP_MidRoom/src/leds.cpp Normal file
View File

@@ -0,0 +1,32 @@
#include <leds.h>
leds::leds(int pinLED, int onms, bool inverse)
{
ledPin = pinLED;
inv = inverse;
onMS = onms;
state = false;
}
void leds::start()
{
curMS = millis();
state = true;
if(!inv)
analogWrite(ledPin, 100);
else
analogWrite(ledPin, 0);
//digitalWrite(ledPin, !inv);
}
void leds::tick()
{
if(state && ((curMS + onMS) < millis())){
state = false;
if(inv)
analogWrite(ledPin, 1);
else
analogWrite(ledPin, 0);
//digitalWrite(ledPin, inv);
}
}

337
ESP_MidRoom/src/main.cpp Normal file
View File

@@ -0,0 +1,337 @@
#include <main.h>
#include <ArduinoOTA.h>
#include <Ticker.h>
#include <AsyncMqttClient.h>
#include <leds.h>
#define R_LED (13)
#define G_LED (12)
#define B_LED (0)
#define MOV_SENS (16)
#define P_SENS (14)
bool meas = false;
short minCnt;
bool send_move = false;
int old_mov = 0;
int adc = 0;
int lastADC = 0;
unsigned long cRun;
const char* ssid = "wf-home";
const char* password = "0ndthnrf";
const char* mqtt_server = "192.168.1.250";
AsyncMqttClient mqttClient;
Ticker mqttReconnectTimer;
WiFiEventHandler wifiConnectHandler;
WiFiEventHandler wifiDisconnectHandler;
Ticker wifiReconnectTimer;
void connectToWifi();
void connectToMqtt();
void onWifiConnect(const WiFiEventStationModeGotIP& event);
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event);
void onMqttConnect(bool sessionPresent);
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason);
void onMqttSubscribe(uint16_t packetId, uint8_t qos);
void onMqttUnsubscribe(uint16_t packetId);
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total);
void onMqttPublish(uint16_t packetId);
//leds b_led(B_LED);
leds g_led(G_LED, 100);
//leds r_led(R_LED, 100);
void setup() {
Serial.begin(9600, SERIAL_8N1);
Serial1.begin(9600);
Serial1.println("Booting"); // "Загрузка"
WiFi.mode(WIFI_STA);
WiFi.hostname("MidRoom");
ArduinoOTA.onStart([]() {
//Serial1.println("Start Update"); // "Начало OTA-апдейта"
});
ArduinoOTA.onEnd([]() {
//Serial1.println("\nEnd Update"); // "Завершение OTA-апдейта"
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
////Serial1.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
// //Serial1.printf("Error[%u]: ", error);
// if (error == OTA_AUTH_ERROR) //Serial1.println("Auth Failed");
// // "Ошибка при аутентификации"
// else if (error == OTA_BEGIN_ERROR) //Serial1.println("Begin Failed");
// // "Ошибка при начале OTA-апдейта"
// else if (error == OTA_CONNECT_ERROR) //Serial1.println("Connect Failed");
// // "Ошибка при подключении"
// else if (error == OTA_RECEIVE_ERROR) //Serial1.println("Receive Failed");
// // "Ошибка при получении данных"
// else if (error == OTA_END_ERROR) //Serial1.println("End Failed");
// // "Ошибка при завершении OTA-апдейта"
});
ArduinoOTA.begin();
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect);
mqttClient.onSubscribe(onMqttSubscribe);
mqttClient.onUnsubscribe(onMqttUnsubscribe);
mqttClient.onMessage(onMqttMessage);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(mqtt_server, 1883);
pinMode(MOV_SENS, INPUT_PULLUP);
pinMode(P_SENS, OUTPUT);
pinMode(R_LED, OUTPUT);
pinMode(G_LED, OUTPUT);
pinMode(B_LED, OUTPUT);
//analogWriteRange(100);
digitalWrite(P_SENS, HIGH);
digitalWrite(B_LED, HIGH);
digitalWrite(R_LED, HIGH);
Serial1.println(F("Begin MH-Z19"));
for(int i = 0; i < 5; i++){
Serial1.print('.');
delay(1000);
}
Serial1.println();
mhz19.begin(Serial);
//char myVersion[4];
//mhz19.getVersion(myVersion);
// //Serial1.print("\nFirmware Version: ");
// for(byte i = 0; i < 4; i++)
// {
// //Serial1.print(myVersion[i]);
// if(i == 1)
// //Serial1.print(".");
// }
// //Serial1.println("");
// //Serial1.print("Range: ");
// //Serial1.println(mhz19.getRange());
// //Serial1.print("Background CO2: ");
// //Serial1.println(mhz19.getBackgroundCO2());
// //Serial1.print("Temperature Cal: ");
// //Serial1.println(mhz19.getTempAdjustment());
// //Serial1.print("ABC Status: "); mhz19.getABC() ? //Serial1.println("ON") : //Serial1.println("OFF");
//Serial1.println(F("End Begin MH-Z19"));
Wire.begin();
Serial1.println(F("Begin BME"));
bool status = bme.begin(BME280_ADDRESS_ALTERNATE);
if (!status) {
Serial1.println(F("Could not find a valid BME280 sensor, check wiring, address, sensor ID!"));
}
else{
delay(100);
p = bme.readPressure();
t = bme.readTemperature();
h = bme.readHumidity();
Serial1.print(F("T: "));
Serial1.print(t);
Serial1.print(F("\tH: "));
Serial1.print(h);
Serial1.print(F("\tP: "));
Serial1.println(p);
}
connectToWifi();
cRun = millis();
Serial1.println(F("Start Loop"));
//(R_LED, HIGH);
}
void loop() {
float pt, tt, ht;
char v[11];
static int stDelay = 0;
ArduinoOTA.handle();
g_led.tick();
//r_led.tick();
if (digitalRead(MOV_SENS) != old_mov){
old_mov = digitalRead(MOV_SENS);
Serial1.println(F("Change mov detected"));
mqttClient.publish("/home/midroom/move", 1, false, old_mov ? "1" : "0");
}
if(cRun + 999 < millis()){
cRun = millis();
//if(mqttClient.connected()) digitalWrite(R_LED, LOW); else digitalWrite(R_LED, HIGH);
adc = analogRead(A0);
Serial1.print(F("ADC: "));Serial1.println(adc);
Serial1.print(F("MQTT: "));Serial1.println(mqttClient.connected());
if(abs(adc - lastADC) > 50){
lastADC = adc;
itoa(adc, v, 10);
mqttClient.publish("/home/midroom/light", 1, false, v);
}
if(meas){
//Serial1.println(adc);
Serial1.println("Measure");
pt = bme.readPressure();
tt = bme.readTemperature();
ht = bme.readHumidity();
Serial1.print(F("T: "));
Serial1.print(tt);
Serial1.print(F("\tH: "));
Serial1.print(ht);
Serial1.print(F("\tP: "));
Serial1.println(pt);
if(!isnan(pt))
p += (pt - p) / 60.0f ;
else
{
Serial1.println(F("Error BME"));
}
if(!isnan(tt))
t += (tt - t) / 30.0f ;
if(!isnan(ht))
h += (ht - h) / 30.0f ;
digitalWrite(P_SENS, LOW);
meas = false;
}
else{
if(minCnt % 5 == 0){
co2 = mhz19.getCO2();
Serial1.print("CO2: ");
Serial1.println(co2);
digitalWrite(P_SENS, HIGH);
bme.begin(BME280_ADDRESS_ALTERNATE);
meas = true;
}
}
if(++minCnt == 60){
minCnt = 0;
if(mqttClient.connected()){
g_led.start();
//r_led.start();
//Serial1.println("Begin Publish");
dtostrf(t, 5, 1,v);
mqttClient.publish("/home/midroom/temp", 0, false, v);
//Serial1.println("Publish1");
dtostrf(h, 5, 1,v);
mqttClient.publish("/home/midroom/humid", 0, false, v);
//Serial1.println("Publish2");
if(firstRun){
stDelay++;
if(stDelay > 3) firstRun = false;
}
if(!firstRun && (mhz19.errorCode == RESULT_OK)){
itoa(co2, v, 10);
mqttClient.publish("/home/midroom/co2", 0, false, v);
//Serial1.println("Publish3");
}
}
}
else if(minCnt % 10 == 0){
itoa(millis(), v, 10);
if(mqttClient.connected()){
mqttClient.publish("/home/midroom/millis", 0, false, v);
dtostrf(t, 5, 1,v);
mqttClient.publish("/home/midroom/temp", 0, false, v);
//Serial1.println("Publish1");
dtostrf(h, 5, 1,v);
mqttClient.publish("/home/midroom/humid", 0, false, v);
g_led.start();
}
}
}
}
void connectToWifi() {
Serial1.println(F("Connecting to Wi-Fi..."));
//Serial1.flush();
WiFi.begin(ssid, password);
}
void connectToMqtt() {
Serial1.println(F("Connecting to MQTT..."));
//Serial1.flush();
mqttClient.connect();
}
void onWifiConnect(const WiFiEventStationModeGotIP& event) {
Serial1.println(F("Connected to Wi-Fi."));
Serial1.print(F("IP: "));
//Serial1.flush();
Serial1.println(WiFi.localIP());
digitalWrite(R_LED, LOW);
connectToMqtt();
}
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
Serial1.println(F("Disconnected from Wi-Fi."));
//Serial1.flush();
mqttReconnectTimer.detach(); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
wifiReconnectTimer.once(2, connectToWifi);
digitalWrite(R_LED, HIGH);
}
void onMqttConnect(bool sessionPresent) {
Serial1.println(F("Connected to MQTT."));
Serial1.print(F("Session present: "));
//Serial1.flush();
Serial1.println(sessionPresent);
//digitalWrite(B_LED, HIGH);
//digitalWrite(R_LED, LOW);
//uint16_t packetIdSub =
// //Serial1.print("Subscribing Lamp1, packetId: ");
// //Serial1.println(packetIdSub);
//packetIdSub = mqttClient.subscribe("/home/kor/lamp2_set", 1);
////Serial1.print("Subscribing Lamp2, packetId: ");
////Serial1.println(packetIdSub);
////Serial1.println("Publishing at Lamp 1");
//mqttClient.publish("/home/kor/lamp2", 1, false, lStat2 ? "1" : "0");
////Serial1.println("Publishing at Lamp 2");
digitalWrite(B_LED, LOW);
}
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
Serial1.println("Disconnected from MQTT.");
//digitalWrite(B_LED, LOW);
//digitalWrite(R_LED, HIGH);
if (WiFi.isConnected()) {
mqttReconnectTimer.once(2, connectToMqtt);
}
digitalWrite(B_LED, HIGH);
}
void onMqttSubscribe(uint16_t packetId, uint8_t qos) {
// //Serial1.println("Subscribe acknowledged.");
// //Serial1.print(" packetId: ");
// //Serial1.println(packetId);
// //Serial1.print(" qos: ");
// //Serial1.println(qos);
}
void onMqttUnsubscribe(uint16_t packetId) {
// //Serial1.println("Unsubscribe acknowledged.");
// //Serial1.print(" packetId: ");
// //Serial1.println(packetId);
}
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
if(strcmp(topic, "/home/kor/lamp1_set") == 0){
}
}
void onMqttPublish(uint16_t packetId) {
//Serial1.println("Publish acknowledged.");
//Serial1.print(" packetId: ");
//Serial1.println(packetId);
//g_led.start();
}