Новая библиотека, новые базовые линии, синхронизация с локального сервера одроида, новые лайфхаки для датчика твок

master
SmartUaWIn 2021-03-31 17:25:22 +03:00
parent 08fa5d9b1b
commit ff694bab1d
5 changed files with 134 additions and 66 deletions

BIN
44.bin Normal file

Binary file not shown.

BIN
45.bin Normal file

Binary file not shown.

View File

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

Binary file not shown.

View File

@ -19,7 +19,7 @@
// If you do not want that, make the PRINT macros in ccs811.cpp empty. // If you do not want that, make the PRINT macros in ccs811.cpp empty.
#include <stdint.h> #include <stdint.h>
// Version of this CCS811 driver // Version of this CCS811 driver