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_BigRoom/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);
// }

24
ESP_BigRoom/src/leds.cpp Normal file
View File

@@ -0,0 +1,24 @@
#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;
digitalWrite(ledPin, !inv);
}
void leds::tick()
{
if(state && ((curMS + onMS) < millis())){
state = false;
digitalWrite(ledPin, inv);
}
}

266
ESP_BigRoom/src/main.cpp Normal file
View File

@@ -0,0 +1,266 @@
#include <Arduino.h>
#include <ArduinoOTA.h>
#include <Ticker.h>
#include <AsyncMqttClient.h>
#include <leds.h>
#include "Adafruit_HTU21DF.h"
#define R_LED (0)
#define G_LED (2)
#define B_LED (14)
#define P_SENS (12)
#define MOV_SENS (13)
bool meas = false;
short minCnt;
bool send_move = false;
int old_mov = 0;
int adc = 0;
int lastADC = 0;
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
unsigned long cRun;
float temp, rel_hum;
// bool dir = true;
// int dc = 0;
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);
leds r_led(R_LED);
void setup() {
Serial.begin(9600);
Serial.println("Booting"); // "Загрузка"
WiFi.mode(WIFI_STA);
WiFi.hostname("BigRoom");
ArduinoOTA.onStart([]() {
// Serial.println("Start"); // "Начало OTA-апдейта"
});
ArduinoOTA.onEnd([]() {
// Serial.println("\nEnd"); // "Завершение OTA-апдейта"
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
// Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
// Serial.printf("Error[%u]: ", error);
// if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
// // "Ошибка при аутентификации"
// else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
// // "Ошибка при начале OTA-апдейта"
// else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
// // "Ошибка при подключении"
// else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
// // "Ошибка при получении данных"
// else if (error == OTA_END_ERROR) Serial.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);
digitalWrite(P_SENS, HIGH);
delay(200);
Serial.println("Begin HTU");
if (!htu.begin()) {
while (1);
}
Serial.println("HTU Ok");
temp = htu.readTemperature();
rel_hum = htu.readHumidity();
Serial.print("Temp: "); Serial.print(temp); Serial.print(" C");
Serial.print("\t\t");
Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
digitalWrite(R_LED, HIGH);
digitalWrite(P_SENS, LOW);
connectToWifi();
cRun = millis();
}
void loop() {
char v[11];
ArduinoOTA.handle();
g_led.tick();
if (digitalRead(MOV_SENS) != old_mov){
old_mov = digitalRead(MOV_SENS);
Serial.println("Change mov detected");
mqttClient.publish("/home/bigroom/move", 1, false, old_mov ? "1" : "0");
}
if(cRun + 999 < millis()){
cRun = millis();
//analogWrite(B_LED, dc);
/*if(dir){
dc += 64;
if(dc >= 959) dir = !dir;
}
else{
dc -= 64;
if(dc <= 64) dir = !dir;
}*/
//Serial.println(dc);
adc = analogRead(A0);
if(abs(adc - lastADC) > 20){
lastADC = adc;
itoa(adc, v, 10);
mqttClient.publish("/home/bigroom/light", 1, false, v);
}
if(meas){
Serial.println(adc);
temp += (htu.readTemperature() - temp) / 60.0f;
rel_hum += (htu.readHumidity() - rel_hum) / 60.0f;
Serial.print(cRun);
Serial.print("\t");
Serial.print(minCnt);
Serial.print("\t");
Serial.print("Temp: "); Serial.print(temp); Serial.print(" C");
Serial.print("\t\t");
Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
digitalWrite(P_SENS, LOW);
meas = false;
}
else{
if(minCnt % 5 == 0){
digitalWrite(P_SENS, HIGH);
meas = true;
}
}
if(++minCnt == 60){
minCnt = 0;
if(mqttClient.connected()){
//char s[50];
g_led.start();
Serial.println("Begin Publish");
dtostrf(temp, 5, 1,v);
mqttClient.publish("/home/bigroom/temp", 0, false, v);
Serial.println("Publish1");
dtostrf(rel_hum, 5, 1,v);
mqttClient.publish("/home/bigroom/humid", 0, false, v);
Serial.println("Publish2");
//sprintf(s, "{temperatura: %.1f, humidity: %.1f}", temp, rel_hum);
//Serial.println(s);
//mqttClient.publish("/home/bigroom/climat", 0, false, s);
}
}
else if(minCnt % 10 == 0){
if(mqttClient.connected()) mqttClient.publish("/home/bigroom/millis", 0, false, itoa(millis(), v, 10));
//b_led.start();
}
}
}
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.");
digitalWrite(B_LED, LOW);
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);
digitalWrite(B_LED, HIGH);
digitalWrite(R_LED, LOW);
//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.");
digitalWrite(B_LED, LOW);
digitalWrite(R_LED, HIGH);
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);
g_led.start();
}