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

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
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.

View File

@ -19,7 +19,7 @@
// 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