Новая библиотека, новые базовые линии, синхронизация с локального сервера одроида, новые лайфхаки для датчика твок
parent
08fa5d9b1b
commit
ff694bab1d
198
M5Atom_airqa.ino
198
M5Atom_airqa.ino
|
@ -17,7 +17,7 @@
|
|||
24A160474D14
|
||||
24A160542B80
|
||||
|
||||
|
||||
|
||||
Белая 2B80
|
||||
Шумная 38CC
|
||||
У вас 23AC
|
||||
|
@ -40,8 +40,9 @@
|
|||
#include <TimeLib.h> //Внутреннее время
|
||||
#include <Wire.h> //Библиотека дял I2C
|
||||
#include "ClosedCube_HDC1080.h" //Температура влажность
|
||||
#include "Adafruit_CCS811.h" //eco2 Tvoc
|
||||
//#include "Adafruit_CCS811.h" //eco2 Tvoc
|
||||
//#include "SparkFunCCS811.h"
|
||||
#include "ccs811.h"
|
||||
|
||||
#include <PubSubClient.h> //Mtqq
|
||||
#include <ArduinoJson.h> //Упакова в JSon - удобная библиотека
|
||||
|
@ -55,16 +56,16 @@
|
|||
#define CCS811_ADDR 0x5B //Default I2C Address
|
||||
//#define CCS811_ADDR 0x5A //Alternate I2C Address
|
||||
|
||||
unsigned int VersionSW = 43; //65536 Версия прошивки
|
||||
unsigned int VersionSW = 46; //65536 Версия прошивки
|
||||
|
||||
//15 - добавлено то, се, забыл вообще дописать что добавленоSerial
|
||||
//15 - добавлено то, се, забыл вообще дописать что добавлено Serial
|
||||
//19 - вывод в консоль всех действий, ошибки с обновлнеием - починил, прияногое мигание светодиодом, тест для поиска metrics.
|
||||
//21 - убран мак из вывода в топике
|
||||
//22 - поправлено поиск сервера по metrics local.
|
||||
//23 - добавленн BSID
|
||||
//24 - полный передел всего
|
||||
//25 - новые топики, спящий режим и куча иземенний связанных со спящим режимом.
|
||||
//26 - тест обновления сука - работает
|
||||
//26 - тест обновления да сук - работает
|
||||
//27 - таймаут станции без wifi 40 сек
|
||||
//28 - калибровка вернулась
|
||||
//29 - baseline выведен из 24х часов и отключен
|
||||
|
@ -75,18 +76,22 @@ unsigned int VersionSW = 43; //65536 Версия прошивки
|
|||
//34 - правка с опросом, бесконечный цикл
|
||||
//35 - закоменчен вывод ошибок available
|
||||
//36 - настройка mqtt по ip и режимы датчика - неудачная загрузка 27.03
|
||||
//37-38 - сохранение ip metrics, и чтение из памяти, убрана базовая линия. Логин пароль.
|
||||
// Фиксим получение временя 29.03
|
||||
//39 новая функция преобразования строку в ip.
|
||||
//41 уменьшил код на 7%. Перезалив. Отвалились 3 из 5, но не отвалились, ходят за обновлениями, все успешно
|
||||
//42 Новая функция получения данных с CO2. Что-то не вяжется с либой.
|
||||
//43 Больше задержек для чтения i2c
|
||||
//37-38 - сохранение ip metrics, и чтение из памяти, убрана базовая линия. Логин пароль. Фиксим получение временя 29.03
|
||||
//39 - новая функция преобразования строку в ip объект.
|
||||
//41 - уменьшил код на 7%. Перезалив. Пропали 3 из 5, но не отвалились, ходят за обновлениями, все успешно
|
||||
//42 - Новая функция получения данных с CO2. Что-то не вяжется с либой.
|
||||
//43 - Больше задержек для чтения i2c
|
||||
//44 - Новая либа твок "maarten-pennings" Спаркфан и Адафрут суки - с ошибками изначально пишут на всех форумах.
|
||||
//46 - Смена локального сервера времени, хрони на одроиде. Установка базовых линий по новой.
|
||||
|
||||
WiFiManager wm; // обьект менеджера
|
||||
WiFiManagerParameter custom_field;
|
||||
Preferences OTApreferences; //Обьект хранения настроек хеша прошивки
|
||||
|
||||
Adafruit_CCS811 ccs;
|
||||
//Adafruit_CCS811 ccs;
|
||||
|
||||
CCS811 ccs811(23);
|
||||
|
||||
ClosedCube_HDC1080 hdc1080;
|
||||
StaticJsonDocument<200> doc;
|
||||
|
||||
|
@ -96,7 +101,7 @@ PubSubClient MqttClient(espClient);
|
|||
//IPAddress IpMqtt(192,168,89,210);
|
||||
|
||||
WiFiUDP ntpUDP;
|
||||
NTPClient timeClient(ntpUDP, "0.ua.pool.ntp.org", 0, 60000); //Собственно сервер времени смещение и частоат запроса, но он вручную
|
||||
NTPClient timeClient(ntpUDP, "192.168.89.210", 0, 20000); //Собственно сервер времени смещение и частоат запроса, но он вручную
|
||||
const PROGMEM char *willmess = "{\"conn\":\"err\"}";
|
||||
const char *mqttHostName = "metrics"; //Хостнейм брокера metrics.local cctv.automation.art //192.168.89.210
|
||||
unsigned int mqttPort = 1883; //Порт брокера 1883 8889
|
||||
|
@ -116,6 +121,7 @@ char bufWillTopic[150];
|
|||
const char *mqttIPHost;
|
||||
|
||||
RTC_DATA_ATTR byte countOta = 0;
|
||||
// RTC_DATA_ATTR wakPinSet=LOW;
|
||||
|
||||
float TempAv, HumAv, Eco2Av, TvocAv;
|
||||
unsigned int BaselineTvoc = 0;
|
||||
|
@ -232,33 +238,26 @@ int setMqttServer(const char *mqttHostNameF, unsigned int mqttPortF)
|
|||
//Настройки
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.setDebugOutput(true);
|
||||
|
||||
M5.begin(true, false, true);
|
||||
Wire.begin(25, 21); //Пины для I2c на ATOM
|
||||
|
||||
pinMode(GPIO_WAK, OUTPUT); //Пин датчика для работы
|
||||
digitalWrite(GPIO_WAK, LOW);
|
||||
digitalWrite(GPIO_WAK, LOW);
|
||||
delay(10);
|
||||
|
||||
Serial.begin(115200);
|
||||
Serial.setDebugOutput(true);
|
||||
|
||||
M5.begin(true, false, true);
|
||||
Wire.begin(25, 21); //Пины для I2c на ATOM
|
||||
|
||||
pinMode(TRIGGER_PIN, INPUT);
|
||||
|
||||
hdc1080.begin(0x40);
|
||||
hdc1080.setResolution(HDC1080_RESOLUTION_11BIT, HDC1080_RESOLUTION_11BIT);
|
||||
|
||||
for (int t = 0; t <= cntWhile; t++)
|
||||
{
|
||||
if (ccs.begin())
|
||||
{
|
||||
break;
|
||||
}
|
||||
ledset(1, false);
|
||||
}
|
||||
startCcs811(macc);
|
||||
|
||||
//ccs.setTempOffset(8.6);
|
||||
//ccs.setBaseline(25725);
|
||||
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.mode(WIFI_STA);
|
||||
|
||||
topicTemp.toCharArray(bufTopic, topicTemp.length() + 1);
|
||||
willTopicTemp.toCharArray(bufWillTopic, willTopicTemp.length() + 1);
|
||||
|
@ -430,6 +429,65 @@ String getMacAddress()
|
|||
return String(baseMacChr);
|
||||
}
|
||||
|
||||
int startCcs811(String MacThat)
|
||||
{
|
||||
|
||||
unsigned int coefBaseline = 0;
|
||||
|
||||
ccs811.set_i2cdelay(50);
|
||||
bool ok = ccs811.begin();
|
||||
if (!ok)
|
||||
{
|
||||
Serial.println("setup: CCS811 begin FAILED");
|
||||
return 1;
|
||||
}
|
||||
Serial.print("setup: hardware version: ");
|
||||
Serial.println(ccs811.hardware_version(), HEX);
|
||||
Serial.print("setup: bootloader version: ");
|
||||
Serial.println(ccs811.bootloader_version(), HEX);
|
||||
Serial.print("setup: application version: ");
|
||||
Serial.println(ccs811.application_version(), HEX);
|
||||
|
||||
ok = ccs811.start(CCS811_MODE_1SEC);
|
||||
if (!ok)
|
||||
{
|
||||
Serial.println("setup: CCS811 start FAILED");
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (MacThat == "24A1605423AC")
|
||||
{
|
||||
coefBaseline = 25725;
|
||||
}
|
||||
|
||||
if (MacThat == "5002918A38CC")
|
||||
{
|
||||
coefBaseline = 29814;
|
||||
}
|
||||
|
||||
if (MacThat == "5002919F5450")
|
||||
{
|
||||
coefBaseline = 13431;
|
||||
}
|
||||
|
||||
if (MacThat == "24A160474D14")
|
||||
{
|
||||
coefBaseline = 21632;
|
||||
}
|
||||
|
||||
if (MacThat == "24A160542B80")
|
||||
{
|
||||
coefBaseline = 13440;
|
||||
}
|
||||
|
||||
if (coefBaseline != 0)
|
||||
{
|
||||
ccs811.set_baseline(coefBaseline);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetCallibrationCoeff(String MacThat)
|
||||
{
|
||||
|
||||
|
@ -476,11 +534,10 @@ int SetCallibrationCoeff(String MacThat)
|
|||
void reqSensorData()
|
||||
{
|
||||
float hdc1080Temp = 0, hdc1080Hum = 0;
|
||||
int eco2 = 0, tvoc = 0;
|
||||
|
||||
hdc1080Temp = hdc1080.readTemperature();
|
||||
hdc1080Hum = hdc1080.readHumidity();
|
||||
delay(50);
|
||||
delay(50);
|
||||
char outstr[6];
|
||||
dtostrf(hdc1080Temp, 5, 2, outstr);
|
||||
TempAv = atof(outstr);
|
||||
|
@ -488,55 +545,65 @@ void reqSensorData()
|
|||
HumAv = atof(outstr);
|
||||
|
||||
int counAvail = 0;
|
||||
byte countRead = 0;
|
||||
ledset(4, false);
|
||||
|
||||
bool ccsflag = true;
|
||||
uint16_t eco2N, etvocN, errstat, raw, baseline;
|
||||
|
||||
while (ccsflag)
|
||||
while (ccsflag)
|
||||
{
|
||||
if (ccs.available())
|
||||
{
|
||||
ccs.setEnvironmentalData(hdc1080Hum - 55, hdc1080Temp - 25);
|
||||
delay(1100);
|
||||
ccs811.read(&eco2N, &etvocN, &errstat, &raw);
|
||||
ccs811.get_baseline(&baseline);
|
||||
|
||||
if (ccs.readData() == 0)
|
||||
{
|
||||
countRead++;
|
||||
if (countRead >= 7)
|
||||
{
|
||||
ccsflag = false;
|
||||
Serial.println(counAvail);
|
||||
}
|
||||
delay(1050);
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("=======ECO TVOC NONE READ");
|
||||
}
|
||||
// Print measurement results based on status
|
||||
if (errstat == CCS811_ERRSTAT_OK)
|
||||
{
|
||||
Serial.print("CCS811: ");
|
||||
Serial.print("eco2=");
|
||||
Serial.print(eco2N);
|
||||
Serial.print(" ppm ");
|
||||
Serial.print("etvoc=");
|
||||
Serial.print(etvocN);
|
||||
Serial.print(" ppb ");
|
||||
|
||||
Serial.print(" baseline= ");
|
||||
Serial.print(baseline);
|
||||
|
||||
//Serial.print("raw6="); Serial.print(raw/1024); Serial.print(" uA ");
|
||||
//Serial.print("raw10="); Serial.print(raw%1024); Serial.print(" ADC ");
|
||||
//Serial.print("R="); Serial.print((1650*1000L/1023)*(raw%1024)/(raw/1024)); Serial.print(" ohm");
|
||||
Serial.println();
|
||||
}
|
||||
else if (errstat == CCS811_ERRSTAT_OK_NODATA)
|
||||
{
|
||||
Serial.println("CCS811: waiting for (new) data");
|
||||
}
|
||||
else if (errstat & CCS811_ERRSTAT_I2CFAIL)
|
||||
{
|
||||
Serial.println("CCS811: I2C error");
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.print("CCS811: errstat=");
|
||||
Serial.print(errstat, HEX);
|
||||
Serial.print("=");
|
||||
Serial.println(ccs811.errstat_str(errstat));
|
||||
}
|
||||
|
||||
counAvail++;
|
||||
if (counAvail >= 6000)
|
||||
if (counAvail >= 10)
|
||||
{
|
||||
ccsflag = false;
|
||||
}
|
||||
}
|
||||
|
||||
Serial.print("counAvail: ");
|
||||
Serial.println(counAvail);
|
||||
|
||||
ledset(2, false);
|
||||
|
||||
Eco2Av = ccs.geteCO2();
|
||||
TvocAv = ccs.getTVOC();
|
||||
BaselineTvoc = ccs.getBaseline();
|
||||
Eco2Av = eco2N;
|
||||
TvocAv = etvocN;
|
||||
BaselineTvoc = baseline;
|
||||
|
||||
Serial.print(eco2);
|
||||
Serial.print(" ");
|
||||
Serial.print(tvoc);
|
||||
Serial.print(" ");
|
||||
Serial.println(BaselineTvoc);
|
||||
|
||||
rssi = WiFi.RSSI();
|
||||
}
|
||||
|
||||
|
@ -615,7 +682,7 @@ int SendMqttReq(bool sendVal = true, bool sendStatus = true, byte statusConn = 1
|
|||
doc["rssi"] = rssi;
|
||||
doc["bsid"] = WiFi.BSSIDstr();
|
||||
doc["ts"] = timeNow;
|
||||
doc["tsexp"] = timeNow + 60 + 11;
|
||||
doc["exp"] = timeNow + 60 + 17;
|
||||
doc["sv"] = VersionSW;
|
||||
|
||||
JsonData = "";
|
||||
|
@ -710,6 +777,7 @@ void loop()
|
|||
}
|
||||
countOta++;
|
||||
|
||||
startCcs811(macc);
|
||||
goToSleep();
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue