From 793656049c5838838f454af539f0fb23b19aa40f Mon Sep 17 00:00:00 2001 From: smartUA Date: Thu, 21 Jan 2021 17:54:46 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B9=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- M5Atom_airqa.ino | 159 +++++++++++++++++-------------- README.md | 65 +++++++++---- pdf/Документ Microsoft Word.docx | 0 pdf/Новый текстовый документ.txt | 0 pdf/Описание.docx | Bin 0 -> 39549 bytes 5 files changed, 130 insertions(+), 94 deletions(-) delete mode 100644 pdf/Документ Microsoft Word.docx delete mode 100644 pdf/Новый текстовый документ.txt create mode 100644 pdf/Описание.docx diff --git a/M5Atom_airqa.ino b/M5Atom_airqa.ino index 74f05d2..c35d808 100644 --- a/M5Atom_airqa.ino +++ b/M5Atom_airqa.ino @@ -12,28 +12,28 @@ #include //Сохранение настроек хеша прошивки #include -#include -#include "M5Atom.h" +#include //Библиотека ОТА обновлений +#include "M5Atom.h" //Библиотека атома для функции Led и Кнопки, можно упразднить и убрать -#include -#include -#include -#include -#include -#include "ClosedCube_HDC1080.h" -#include "Adafruit_CCS811.h" //The device's I2C address is 0x5A +#include //Библиотека таймера для Led +#include //Udp клиент +#include //NTP запрос времени +#include //Внутреннее время +#include //Библиотека дял I2C +#include "ClosedCube_HDC1080.h" //Температура влажность +#include "Adafruit_CCS811.h" //eco2 Tvoc -#include -#include +#include //Mtqq +#include //Упакова в JSon - удобная библиотека //Наша кнопочка при нажатии на которую произойдет вызов wifi менеджера и перезагрузка в станцию #define TRIGGER_PIN 39 -unsigned int VersionSW=14; //65536 +unsigned int VersionSW = 14; //65536 Версия прошивки WiFiManager wm; // обьект менеджера WiFiManagerParameter custom_field; -Preferences OTApreferences; +Preferences OTApreferences; //Обьект хранения настроек хеша прошивки Ticker RGBWTicker; Adafruit_CCS811 ccs; @@ -46,38 +46,39 @@ PubSubClient MqttClient(espClient); IPAddress IpMqtt; WiFiUDP ntpUDP; -NTPClient timeClient(ntpUDP, "0.ua.pool.ntp.org", 7200, 60000); +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 *mqttLogin = "login", +const PROGMEM char *mqttHostName = "cctv.automation.art"; //Хостнейм брокера +unsigned int mqttPort = 8889; //Порт брокера +const PROGMEM char *topicName = "/aastudio"; // +mac адресс девайса Префикс топика +const PROGMEM char *mqttLogin = "login", //Логин пароль - необходимо сменить код при connect() *mqttPass = "password"; -const char *mqttIPHost; +const char *mqttIPHost; //тут хранится IP хоста по хостнейму -unsigned long timingUpdate, timingReqSensor, timingSendMqtt; +unsigned long timingUpdate, timingReqSensor, timingSendMqtt; //Таймеры для millis() int PROGMEM nextM5Update = 450000; //каждые 7.5 минут запрос обновления с сервера int PROGMEM nextReqSensor = 10000; //опрос датчиков раз в 10 секунд -int PROGMEM nextMqttSend = 60000; +int PROGMEM nextMqttSend = 60000; //Отправка -//Поправочные коефициенты +//Поправочные коефициенты для датчиков //[24A160474D14, 5002919F5450, 5002918A38CC] //tcoeff[0,1,2] //hcoeff[0,1,2] -float PROGMEM tcoeff[3] = {-11.18, -9.62, -10.6}; -float PROGMEM hcoeff[3] = {13.77, 14.07, 15.56}; - +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 = ""; +String macc = ""; //Глобальное хранение мас адреса float TempAv, HumAv, Eco2Av, TvocAv; + +//Кусок кода поправить - так делать нельзя #define NUM_AVER 5 float averageT; // перем. среднего float valArrayT[NUM_AVER]; // массив byte idxT = 0; -float averageH; // перем. среднего +float averageH; // перем. среднего float valArrayH[NUM_AVER]; // массив byte idxH = 0; @@ -96,21 +97,24 @@ bool mqttSendFlag = false; int reqCounter = 0; bool flagblink = true; + +//Настройки void setup() { M5.begin(true, false, true); delay(50); - Wire.begin(25, 21); + Wire.begin(25, 21); //Пины для I2c на ATOM - pinMode(23, OUTPUT); + pinMode(23, OUTPUT); //Пин датчика для работы digitalWrite(23, LOW); WiFi.mode(WIFI_STA); Serial.begin(115200); Serial.setDebugOutput(true); delay(3000); + Serial.println("\n Starting station"); - pinMode(TRIGGER_PIN, INPUT); + pinMode(TRIGGER_PIN, INPUT); // wm.resetSettings(); // wipe settings // add a custom input field int customFieldLength = 40; @@ -147,7 +151,7 @@ void setup() bool res; // res = wm.autoConnect(); // auto generated AP name from chipid // res = wm.autoConnect("AutoConnectAP"); // anonymous ap - res = wm.autoConnect("AutoConnectAP", "password"); // password protected ap + res = wm.autoConnect("AutoConnectAP", "password"); // Подключение к анонимной точке доступа if (!res) { Serial.println("Failed to connect or hit timeout"); @@ -155,7 +159,6 @@ void setup() } else { - //if you get here you have connected to the WiFi Serial.println("connected..."); } @@ -176,9 +179,10 @@ void setup() reqNtpTime(); } +//Установка сервера и порта void setMqttServer() -{ - Serial.println("gethostbyname: "); +{ + Serial.println("Gethostbyname: "); int err = WiFi.hostByName(mqttHostName, IpMqtt); if (err == 1) { @@ -197,6 +201,7 @@ void setMqttServer() } } +//Функция получения данных из MQTT если мы подпишемся на топики void callback(char *topic, byte *payload, unsigned int length) { Serial.print("Message arrived ["); @@ -209,33 +214,32 @@ void callback(char *topic, byte *payload, unsigned int length) Serial.println(); } +//Запрос времени NTP и установка локлаьного времени void reqNtpTime() { timeClient.update(); setTime(timeClient.getEpochTime()); // Serial.println(timeClient.getEpochTime()); // Serial.println("<=ntp====now=>"); - time_t t = now(); + //time_t t = now(); // Serial.println(t); } +//Нажатие кнопки для сброса void checkButton() { Serial.println("Button Pressed"); - // delay(3000); - // if (digitalRead(TRIGGER_PIN) == LOW) { - - Serial.println("Button Held"); - Serial.println("Erasing Config, restarting"); - wm.resetSettings(); - ESP.restart(); - // } - + // delay(3000); + // if (digitalRead(TRIGGER_PIN) == LOW) { + Serial.println("Erasing Config, restarting"); + wm.resetSettings(); + ESP.restart(); + // } // start portal w delay Serial.println("Starting config portal"); wm.setConfigPortalTimeout(120); - if (!wm.startConfigPortal("AirQaPortal", "12345678")) + if (!wm.startConfigPortal("AirQaPortal", "12345678")) //Логин и пароль точки доступа { Serial.println("failed to connect or hit timeout"); delay(3000); @@ -257,17 +261,18 @@ String getParam(String name) return value; } + void saveParamCallback() { Serial.println("[CALLBACK] saveParamCallback fired"); Serial.println("PARAM customfieldid = " + getParam("customfieldid")); } +//Обновление прошивки, происходит проверка и загрузка +//Делается Get запрос на хостинг проверяется хеш, если хеш void OTAUpdate() { Serial.println("OTAUpdate()"); - //http://meteosence.s-host.net/meteosence.php?meteopas=PdF4apD4i95xR5&meteodata=gethash - bool flagOTA = false; String keyOTA; String payload; @@ -275,10 +280,10 @@ void OTAUpdate() OTApreferences.begin("ota-config"); if (WiFi.status() == WL_CONNECTED) - { + { HTTPClient http; - String getMacNow=getMacAddress(); - String serverPath = "http://meteosence.s-host.net/airqa/airquality.php?meteopas=e93gme9hAt9nSWaV&meteodata=gethash&mac="+getMacNow+""; + String getMacNow = getMacAddress(); + String serverPath = "http://meteosence.s-host.net/airqa/airquality.php?meteopas=e93gme9hAt9nSWaV&mac=" + getMacNow + "&meteodata=gethash"; http.begin(serverPath.c_str()); int httpResponseCode = http.GET(); @@ -293,7 +298,7 @@ void OTAUpdate() if (keyOTA.length() <= 0) { - OTApreferences.putString("md5HashOTA", "undifined"); + OTApreferences.putString("md5HashOTA", "undifined"); } keyOTA = OTApreferences.getString("md5HashOTA"); @@ -324,6 +329,9 @@ void OTAUpdate() Serial.println("flagOTA = false;"); t_httpUpdate_return ret = ESPhttpUpdate.update("http://meteosence.s-host.net/airqa/airatoms.bin"); + + //После update ничего не происходит, такая вот особенность. + //Если все прошло хорошо, перезагрузка на новую прошивку Serial.print("ret "); Serial.println(ret); @@ -355,6 +363,7 @@ void OTAUpdate() OTApreferences.end(); } +//Функция для индикации Led void ledset(char color, bool blink = false) { switch (color) @@ -401,6 +410,7 @@ void ledBlinkTimer() } } +//Получение мак адреса String getMacAddress() { uint8_t baseMac[6]; @@ -410,6 +420,7 @@ String getMacAddress() return String(baseMacChr); } +//Установка коефициентов калибровки void SetCallibrationCoeff() { @@ -440,6 +451,8 @@ void SetCallibrationCoeff() } } + +//Ниже отдельные функции средних арифметических для каждого параместра с историей float middleArifmT(float newVal) { // Serial.print(newVal); @@ -507,6 +520,7 @@ float middleArifmTVOC(float newVal) return averageTVOC; // возвращаем } +//Запрос данных с датчиков. void reqSensorData() { float hdc1080Temp = 0, hdc1080Hum = 0; @@ -543,45 +557,40 @@ void reqSensorData() TvocAv = middleArifmTVOC(tvoc); } +//Отправка данных по MQTT void SendMqttReq() { - Serial.println("Data in SendMqttReq()"); - Serial.print(TempAv); + Serial.print(TempAv); Serial.print(" "); - Serial.print(HumAv); + Serial.print(HumAv); Serial.print(" "); - Serial.print(Eco2Av); + Serial.print(Eco2Av); Serial.print(" "); - Serial.println(TvocAv); + Serial.println(TvocAv); - char HumidityInt[8], TemperatureInt[8]; + char HumidityInt[8], TemperatureInt[8]; + dtostrf(TempAv * 100, 4, 0, TemperatureInt); + dtostrf(HumAv * 100, 4, 0, HumidityInt); - 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(); - + 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); String finishTopic = ""; finishTopic = String(topicName) + "/" + macc; - //Serial.println(finishTopic); - if (mqttSendFlag == true) { MqttClient.publish(finishTopic.c_str(), resultString); @@ -589,6 +598,8 @@ void SendMqttReq() } } +//Переподключение при петери связи с MQTT +//10 раз проверили и вернулись в общий цикл что бы вдруг что втянуть обновления void reconnectMqtt() { @@ -634,15 +645,14 @@ void loop() M5.update(); //Если не определен IP то и не будет отправки. - // 40 секунд и происходит сброс настроек WIFI if (M5.Btn.wasReleasefor(40000)) { ledset('r', true); checkButton(); } - //По таймеру запруск обновления - проверка хеша прошивки на сервере + //По таймеру запруск обновления прошивки if (millis() - timingUpdate > nextM5Update) { reqNtpTime(); @@ -652,6 +662,7 @@ void loop() timingUpdate = millis(); } + //Таймер запроса данных с датчиков if (millis() - timingReqSensor > nextReqSensor) { reqSensorData(); @@ -662,12 +673,14 @@ void loop() timingReqSensor = millis(); } + //Таймер отправки данных в брокер if (millis() - timingSendMqtt > nextMqttSend) { SendMqttReq(); timingSendMqtt = millis(); } + //Тут же проверка подключения к MQTT if (!MqttClient.connected()) { reconnectMqtt(); diff --git a/README.md b/README.md index 01433f1..8477ed7 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,55 @@ # M5Atom_airqa - +
-1. Настройка Wifi
-2. Проверка Ота обновлений по таймеру с сервера
-3. Получение данных с датчиков формируем в Json
-4. Отправляем в mqtt по хостнейму
-5. Индикация Led
-5.1 Прикрутить реле к одному из девайсов 3А 220В
-6. На будущее забить функцию для IR управления - по времени
+1. Подключить питание в USB
+2. Зажать кнопку сверху на 40 секунд (не боковую. Боковая кнопка - это рестарт)
+3. Начнет мигать зеленый светодиод
+4. Зайти в телефона в точку доступа "AirQaPortal" c паролем "12345678"
+5. Выбрать нужную Wifi точку и ввести пароль. Нажать сохранить
+6. После перезагрузки устройство подключится к точке доступа и начнется отправка информации в топики
+7. Если данные в топики не побежали то это значит что у провайдера нет кольцевого проброса запросов из локальной сети по внешнему ip внутрь этой сети - починим другим способом.
+8. Отправка данных в топики 1 раз в минуту
+9. Запрос обновления прошивки раз в 7 минут
+10. Можно взять данные из COM порта через ttylog -b 115200 -d /dev/ttyACM*
+11. Датчик необходимо установить на не холодной (не внешней) стене, на высоте от 1.5 до 1.8
метра, от дверей и проходов не менее 30 см. Не устанавливать напротив солнечных окон, не
устанавливать над обогревающими или под охлаждающими приборами.
+

-17:31:54.570 -> HDC1080 Configuration Register -17:31:54.615 -> ------------------------------ -17:31:54.615 -> Software reset bit: 0 (0=Normal Operation, 1=Software Reset) -17:31:54.705 -> Heater: 0 (0=Disabled, 1=Enabled) -17:31:54.750 -> Mode of Acquisition: 0 (0=T or RH is acquired, 1=T and RH are acquired in sequence, T first) -17:31:54.841 -> Battery Status: 0 (0=Battery voltage > 2.8V, 1=Battery voltage < 2.8V) -17:31:54.930 -> T Measurement Resolution: 0 (0=14 bit, 1=11 bit) -17:31:54.975 -> RH Measurement Resolution: 0 (00=14 bit, 01=11 bit, 10=8 bit) +17:31:54.570 -> HDC1080 Configuration Register
+17:31:54.615 -> ------------------------------
+17:31:54.615 -> Software reset bit: 0 (0=Normal Operation, 1=Software Reset)
+17:31:54.705 -> Heater: 0 (0=Disabled, 1=Enabled)
+17:31:54.750 -> Mode of Acquisition: 0 (0=T or RH is acquired, 1=T and RH are acquired in sequence, T first)
+17:31:54.841 -> Battery Status: 0 (0=Battery voltage > 2.8V, 1=Battery voltage < 2.8V)
+17:31:54.930 -> T Measurement Resolution: 0 (0=14 bit, 1=11 bit)
+17:31:54.975 -> RH Measurement Resolution: 0 (00=14 bit, 01=11 bit, 10=8 bit)
+

+Если устройство находится в рекомендуемом рабочем диапазоне (относительная влажность от 10% до 70% и температура от -20 до 70 ° C), то не нужно часто калибровать (длительный дрейф составляет ± 0,25% относительной влажности / год). Датчик CCS811 не может измерять концентрацию СО2 непосредственно и выдает рассчитанные "эквивалентные" значения СО2, которые при высокой концентрации ЛОВ оказываются сильно завышенными. +Датчики настроены на точность 14 бит. +

+Характеристики HDC1080:
+• Робоча температура: -20 ° C ~ 70 ° C
+• Діапазон вимірювання датчика вологості: 0 ~ 100% RH
+• Точність датчика вологості: похибка 14 біт ± 2% відносної вологості
+• Точність повторюваності вологості: ± 0.1% RH
+• Час відгуку датчика вологості: 15с
+• Час вимірювання вологості: 8 біт 2,5 мс, 11 біт 3,85 мс, 14 біт 6,5 ms
+• Точність датчика температури: ± 0,4 ° C (температура навколишнього середовища Температура 5 ° C ~ 60 ° C)
+• Повторюваність вимірювання температури: ± 0,1 ° C
+• Час вимірювання температури: 11 біт 3,85 мс, 14 біт 6,5 мс
+• Напруга живлення: рекомендується 3,3 В
+Характеристики CCS811:
+• Напруга живлення: рекомендується 3,3 V
+• Робоча частота інтерфейсу I2C: 400 кГц
+• Діапазон виявлення eTVOC: 0 ~ 32768ppb
+• Діапазон виявлення eCO2: 400 ~ 32768ppm
+• Автоматичний час корекції вихідних умов для чутливого шару оксиду металу: 24 години
+• Можливість налаштування і зчитування часу датчика після включення: не менше 20 хвилин
-Если устройство находится в рекомендуемом рабочем диапазоне (относительная влажность от 10% до 70% и температура от -20 до 70 ° C), вашему заказчику не нужно часто калибровать его (длительный дрейф составляет ± 0,25% относительной влажности / год). - - - -датчик CCS811 не может измерять концентрацию СО2 непосредственно и выдает рассчитанные "эквивалентные" значения СО2, которые при высокой концентрации ЛОВ оказываются сильно завышенными. +

Информация для датчика 1080 https://www.terraelectronica.ru/news/5287 diff --git a/pdf/Документ Microsoft Word.docx b/pdf/Документ Microsoft Word.docx deleted file mode 100644 index e69de29..0000000 diff --git a/pdf/Новый текстовый документ.txt b/pdf/Новый текстовый документ.txt deleted file mode 100644 index e69de29..0000000 diff --git a/pdf/Описание.docx b/pdf/Описание.docx new file mode 100644 index 0000000000000000000000000000000000000000..afb2645390320a3a5944c54f4ce8f29454c69810 GIT binary patch literal 39549 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 u{aO9L?Nt6L|L+UWFKGyfGSJ_u|8p67FYyBC