Промежуток V14
parent
b2b2047f1e
commit
7d9f8d01d2
175
M5Atom_airqa.ino
175
M5Atom_airqa.ino
|
@ -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.
Binary file not shown.
Loading…
Reference in New Issue