Промежуток V14

master
smartUA 2021-01-20 21:27:05 +02:00
parent b2b2047f1e
commit 7d9f8d01d2
5 changed files with 119 additions and 56 deletions

View File

@ -16,7 +16,9 @@
#include "M5Atom.h" #include "M5Atom.h"
#include <Ticker.h> #include <Ticker.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <TimeLib.h>
#include <Wire.h> #include <Wire.h>
#include "ClosedCube_HDC1080.h" #include "ClosedCube_HDC1080.h"
#include "Adafruit_CCS811.h" //The device's I2C address is 0x5A #include "Adafruit_CCS811.h" //The device's I2C address is 0x5A
@ -27,6 +29,8 @@
//Наша кнопочка при нажатии на которую произойдет вызов wifi менеджера и перезагрузка в станцию //Наша кнопочка при нажатии на которую произойдет вызов wifi менеджера и перезагрузка в станцию
#define TRIGGER_PIN 39 #define TRIGGER_PIN 39
unsigned int VersionSW=14; //65536
WiFiManager wm; // обьект менеджера WiFiManager wm; // обьект менеджера
WiFiManagerParameter custom_field; WiFiManagerParameter custom_field;
Preferences OTApreferences; Preferences OTApreferences;
@ -41,6 +45,9 @@ WiFiClient espClient;
PubSubClient MqttClient(espClient); PubSubClient MqttClient(espClient);
IPAddress IpMqtt; IPAddress IpMqtt;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "0.ua.pool.ntp.org", 7200, 60000);
const PROGMEM char *mqttHostName = "cctv.automation.art"; const PROGMEM char *mqttHostName = "cctv.automation.art";
unsigned int mqttPort = 8889; unsigned int mqttPort = 8889;
const PROGMEM char *topicName = "/aastudio"; // +mac адресс девайса const PROGMEM char *topicName = "/aastudio"; // +mac адресс девайса
@ -58,14 +65,14 @@ int PROGMEM nextMqttSend = 60000;
//tcoeff[0,1,2] //tcoeff[0,1,2]
//hcoeff[0,1,2] //hcoeff[0,1,2]
float PROGMEM tcoeff[3] = {-11.22, -9.62, -11.03}; float PROGMEM tcoeff[3] = {-11.18, -9.62, -10.6};
float PROGMEM hcoeff[3] = {12.30, 13.34, 15.18}; float PROGMEM hcoeff[3] = {13.77, 14.07, 15.56};
float callibrationT = 0, callibrationH = 0; float callibrationT = 0, callibrationH = 0;
String macc = ""; String macc = "";
float TempAv, HumAv, Eco2Av, TvocAv; float TempAv, HumAv, Eco2Av, TvocAv;
#define NUM_AVER 6 #define NUM_AVER 5
float averageT; // перем. среднего float averageT; // перем. среднего
float valArrayT[NUM_AVER]; // массив float valArrayT[NUM_AVER]; // массив
byte idxT = 0; byte idxT = 0;
@ -166,6 +173,7 @@ void setup()
SetCallibrationCoeff(); SetCallibrationCoeff();
//Запрос IP сервера MQTT и установка сервера //Запрос IP сервера MQTT и установка сервера
setMqttServer(); setMqttServer();
reqNtpTime();
} }
void setMqttServer() void setMqttServer()
@ -181,7 +189,6 @@ void setMqttServer()
MqttClient.setServer(IpMqtt, mqttPort); MqttClient.setServer(IpMqtt, mqttPort);
MqttClient.setCallback(callback); MqttClient.setCallback(callback);
} }
else else
{ {
@ -202,17 +209,27 @@ void callback(char *topic, byte *payload, unsigned int length)
Serial.println(); Serial.println();
} }
void reqNtpTime()
{
timeClient.update();
setTime(timeClient.getEpochTime());
// Serial.println(timeClient.getEpochTime());
// Serial.println("<=ntp====now=>");
time_t t = now();
// Serial.println(t);
}
void checkButton() void checkButton()
{ {
Serial.println("Button Pressed"); Serial.println("Button Pressed");
delay(3000); // delay(3000);
if (digitalRead(TRIGGER_PIN) == LOW) // if (digitalRead(TRIGGER_PIN) == LOW) {
{
Serial.println("Button Held"); Serial.println("Button Held");
Serial.println("Erasing Config, restarting"); Serial.println("Erasing Config, restarting");
wm.resetSettings(); wm.resetSettings();
ESP.restart(); ESP.restart();
} // }
// start portal w delay // start portal w delay
Serial.println("Starting config portal"); Serial.println("Starting config portal");
@ -248,7 +265,6 @@ void saveParamCallback()
void OTAUpdate() void OTAUpdate()
{ {
Serial.println("OTAUpdate()"); Serial.println("OTAUpdate()");
//http://meteosence.s-host.net/meteosence.php?meteopas=PdF4apD4i95xR5&meteodata=gethash //http://meteosence.s-host.net/meteosence.php?meteopas=PdF4apD4i95xR5&meteodata=gethash
@ -261,7 +277,8 @@ void OTAUpdate()
if (WiFi.status() == WL_CONNECTED) if (WiFi.status() == WL_CONNECTED)
{ {
HTTPClient http; HTTPClient http;
String serverPath = "http://meteosence.s-host.net/airqa/airquality.php?meteopas=e93gme9hAt9nSWaV&meteodata=gethash"; String getMacNow=getMacAddress();
String serverPath = "http://meteosence.s-host.net/airqa/airquality.php?meteopas=e93gme9hAt9nSWaV&meteodata=gethash&mac="+getMacNow+"";
http.begin(serverPath.c_str()); http.begin(serverPath.c_str());
int httpResponseCode = http.GET(); int httpResponseCode = http.GET();
@ -276,7 +293,7 @@ void OTAUpdate()
if (keyOTA.length() <= 0) if (keyOTA.length() <= 0)
{ {
OTApreferences.putString("md5HashOTA", "asshole"); OTApreferences.putString("md5HashOTA", "undifined");
} }
keyOTA = OTApreferences.getString("md5HashOTA"); keyOTA = OTApreferences.getString("md5HashOTA");
@ -424,8 +441,17 @@ void SetCallibrationCoeff()
} }
float middleArifmT(float newVal) float middleArifmT(float newVal)
{ // принимает новое значение {
// Serial.print(newVal);
// Serial.print(" ");
// принимает новое значение
valArrayT[idxT] = newVal; // пишем каждый раз в новую ячейку valArrayT[idxT] = newVal; // пишем каждый раз в новую ячейку
// for (int t = 0; t <= 6; t++)
// {
// Serial.print(valArrayT[t]);
// Serial.print(" ");
// }
if (++idxT >= NUM_AVER) if (++idxT >= NUM_AVER)
idxT = 0; // перезаписывая самое старое значение idxT = 0; // перезаписывая самое старое значение
averageT = 0; // обнуляем среднее averageT = 0; // обнуляем среднее
@ -434,6 +460,8 @@ float middleArifmT(float newVal)
averageT += valArrayT[i]; // суммируем averageT += valArrayT[i]; // суммируем
} }
averageT /= NUM_AVER; // делим averageT /= NUM_AVER; // делим
// Serial.println(averageT);
return averageT; // возвращаем return averageT; // возвращаем
} }
@ -500,6 +528,15 @@ void reqSensorData()
hdc1080Temp = hdc1080.readTemperature() + callibrationT; hdc1080Temp = hdc1080.readTemperature() + callibrationT;
hdc1080Hum = hdc1080.readHumidity() + callibrationH; hdc1080Hum = hdc1080.readHumidity() + callibrationH;
// Serial.println("Original: ");
// Serial.println(hdc1080.readTemperature());
// Serial.println(hdc1080.readHumidity());
Serial.println("+calibration: ");
Serial.print(hdc1080Temp);
Serial.println(" ");
Serial.println(hdc1080Hum);
TempAv = middleArifmT(hdc1080Temp); TempAv = middleArifmT(hdc1080Temp);
HumAv = middleArifmH(hdc1080Hum); HumAv = middleArifmH(hdc1080Hum);
Eco2Av = middleArifmECO(eco2); Eco2Av = middleArifmECO(eco2);
@ -508,20 +545,34 @@ void reqSensorData()
void SendMqttReq() void SendMqttReq()
{ {
char HumInt[8], TempInt[8];
dtostrf(HumAv * 100, 4, 0, HumInt); Serial.println("Data in SendMqttReq()");
dtostrf(TempAv * 100, 4, 0, TempInt); Serial.print(TempAv);
Serial.print(" ");
Serial.print(HumAv);
Serial.print(" ");
Serial.print(Eco2Av);
Serial.print(" ");
Serial.println(TvocAv);
char HumidityInt[8], TemperatureInt[8];
dtostrf(TempAv * 100, 4, 0, TemperatureInt);
dtostrf(HumAv * 100, 4, 0, HumidityInt);
doc["mac"] = String(getMacAddress()); doc["mac"] = String(getMacAddress());
doc["t"] = String(TempInt); doc["swver"] = VersionSW;
doc["h"] = String(HumInt); doc["t"] = atoi(TemperatureInt);
doc["h"] = atoi(HumidityInt);
doc["eco"] = (int)Eco2Av; doc["eco"] = (int)Eco2Av;
doc["tvoc"] = (int)TvocAv; doc["tvoc"] = (int)TvocAv;
doc["time"]=millis(); doc["time"] = now();
char resultString[200]; char resultString[200];
String JsonData = ""; String JsonData = "";
serializeJson(doc, JsonData); serializeJson(doc, JsonData);
Serial.println(JsonData); //Вывод JSON строки в консоль Serial.println(JsonData); //Вывод JSON строки в консоль
JsonData.toCharArray(resultString, JsonData.length() + 1); JsonData.toCharArray(resultString, JsonData.length() + 1);
@ -529,30 +580,40 @@ void SendMqttReq()
String finishTopic = ""; String finishTopic = "";
finishTopic = String(topicName) + "/" + macc; finishTopic = String(topicName) + "/" + macc;
Serial.println(finishTopic); //Serial.println(finishTopic);
if (mqttSendFlag == true) if (mqttSendFlag == true)
{ {
MqttClient.publish(finishTopic.c_str(), resultString); MqttClient.publish(finishTopic.c_str(), resultString);
Serial.println("SentToTopic - ok"); //Serial.println("SentToTopic - ok");
} }
} }
void reconnectMqtt() void reconnectMqtt()
{ {
Serial.print("Attempting MQTT connection...");
//clientId += String(random(0xffff), HEX); //clientId += String(random(0xffff), HEX);
//clientId.c_str() //clientId.c_str()
//MqttClient.connect(macc.c_str(), mqttLogin, mqttPass //MqttClient.connect(macc.c_str(), mqttLogin, mqttPass
byte circle = 0;
while (!MqttClient.connected())
{
Serial.print("MQTT reconnect...");
circle++;
if (circle == 10)
{
break;
}
const char *clientId = macc.c_str(); const char *clientId = macc.c_str();
//macc += String(random(0xffff), HEX); //macc += String(random(0xffff), HEX);
if (MqttClient.connect("AtomClient")) if (MqttClient.connect(clientId))
{ {
String finishTopic = ""; String finishTopic = "";
finishTopic = String(topicName) + "/" + macc; finishTopic = String(topicName) + "/" + macc;
// MqttClient.publish(finishTopic.c_str(), "Reconnect NOW"); MqttClient.publish(finishTopic.c_str(), "Reconnect NOW");
Serial.print("Connect MQTT OK"); Serial.print("Connect MQTT OK");
// client.subscribe("inTopic"); // client.subscribe("inTopic");
mqttSendFlag = true; mqttSendFlag = true;
@ -562,6 +623,8 @@ void reconnectMqtt()
Serial.print("failed, rc="); Serial.print("failed, rc=");
Serial.print(MqttClient.state()); Serial.print(MqttClient.state());
mqttSendFlag = false; mqttSendFlag = false;
delay(1000);
}
} }
} }
@ -569,13 +632,8 @@ void loop()
{ {
//Проверка старта сервера //Проверка старта сервера
M5.update(); M5.update();
MqttClient.loop();
//Если не определен IP то и не будет отправки.
if (!MqttClient.connected()) //Если не определен IP то и не будет отправки.
{ //Если клиент отключился, переподключение
reconnectMqtt();
}
// 40 секунд и происходит сброс настроек WIFI // 40 секунд и происходит сброс настроек WIFI
if (M5.Btn.wasReleasefor(40000)) if (M5.Btn.wasReleasefor(40000))
@ -587,11 +645,10 @@ void loop()
if (millis() - timingUpdate > nextM5Update) if (millis() - timingUpdate > nextM5Update)
{ {
reqNtpTime();
OTAUpdate(); OTAUpdate();
// Serial.print("OTAUpdate() - "); // Serial.print("OTAUpdate() - ");
// Serial.println(millis()); // Serial.println(millis());
timingUpdate = millis(); timingUpdate = millis();
} }
@ -610,4 +667,10 @@ void loop()
SendMqttReq(); SendMqttReq();
timingSendMqtt = millis(); timingSendMqtt = millis();
} }
if (!MqttClient.connected())
{
reconnectMqtt();
}
MqttClient.loop();
} }

Binary file not shown.

BIN
pdf/hdc1080.pdf Normal file

Binary file not shown.

View File