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

Binary file not shown.

BIN
pdf/hdc1080.pdf Normal file

Binary file not shown.

View File