исправления, компиляция для 32

This commit is contained in:
Dmitry Borisenko
2022-03-15 12:56:05 +01:00
parent cbe3ee7886
commit c2bb0e17f4
6 changed files with 493 additions and 642 deletions

View File

@@ -3,8 +3,8 @@
"name": "IoTmanagerVer4", "name": "IoTmanagerVer4",
"apssid": "IoTmanager", "apssid": "IoTmanager",
"appass": "", "appass": "",
"routerssid": "rise", "routerssid": "MercureSpeedZone",
"routerpass": "hostel3333", "routerpass": "",
"timezone": 1, "timezone": 1,
"ntp": "pool.ntp.org", "ntp": "pool.ntp.org",
"weblogin": "admin", "weblogin": "admin",

View File

@@ -1,6 +1,8 @@
#pragma once #pragma once
#include "Global.h" #include "Global.h"
#ifdef ESP8266 #ifdef ESP8266
//эта библиотека встроена в ядро
#include "ESPAsyncUDP.h" #include "ESPAsyncUDP.h"
#else #else
#include "AsyncUDP.h" #include "AsyncUDP.h"

View File

@@ -31,12 +31,13 @@ data_dir = data_svelte
[common_env_data] [common_env_data]
lib_deps_external = lib_deps_external =
bblanchon/ArduinoJson @6.18.0 bblanchon/ArduinoJson @6.18.0
me-no-dev/ESP Async WebServer ;me-no-dev/ESP Async WebServer
Links2004/WebSockets Links2004/WebSockets
knolleary/PubSubClient knolleary/PubSubClient
[env:esp8266_4mb_fromitems] [env:esp8266_4mb_fromitems]
lib_deps = lib_deps =
ESPAsyncUDP
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2 adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
adafruit/Adafruit ADS1X15 @ ^2.3.0 adafruit/Adafruit ADS1X15 @ ^2.3.0
Adafruit AHTX0 Adafruit AHTX0
@@ -52,6 +53,7 @@ lib_deps =
[env:esp32_4mb_fromitems] [env:esp32_4mb_fromitems]
lib_deps = lib_deps =
plerup/EspSoftwareSerial
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2 adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
adafruit/Adafruit ADS1X15 @ ^2.3.0 adafruit/Adafruit ADS1X15 @ ^2.3.0
Adafruit AHTX0 Adafruit AHTX0

View File

@@ -67,7 +67,7 @@ void setup() {
// IoTItems.push_back((IoTItem*)new externalVariable("{\"id\":\"rel4\",\"val\":34,\"int\":30}")); // IoTItems.push_back((IoTItem*)new externalVariable("{\"id\":\"rel4\",\"val\":34,\"int\":30}"));
// пример получения JSON всех Items // пример получения JSON всех Items
Serial.println(getParamsJson()); // Serial.println(getParamsJson());
//чтение одного параметра //чтение одного параметра
// Serial.println(findIoTItem("t1")->getValue()); // Serial.println(findIoTItem("t1")->getValue());

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
should also work with other Sds sensors. should also work with other Sds sensors.
https://github.com/lewapek/sds-dust-sensors-arduino-library https://github.com/lewapek/sds-dust-sensors-arduino-library
adapted for version 4 @cmche adapted for version 4 @cmche
******************************************************************/ ******************************************************************/
@@ -14,9 +14,19 @@ extern IoTGpio IoTgpio;
#include "SdsDustSensor.h" #include "SdsDustSensor.h"
int rxPinSDS = 13; // D7 подключаем к Tx сенсора //встроена в ядро для 8266, для 32 по этому же имени обращаемся к другой библиотеке plerup/EspSoftwareSerial
int txPinSDS = 12; // D6 подключаем к Rx сенсора #include <SoftwareSerial.h>
#ifdef ESP8266
int rxPinSDS = 13; // D7 подключаем к Tx сенсора
int txPinSDS = 12; // D6 подключаем к Rx сенсора
SdsDustSensor sds(rxPinSDS, txPinSDS); SdsDustSensor sds(rxPinSDS, txPinSDS);
#endif
#ifdef ESP32
#include <HardwareSerial.h>
HardwareSerial sdsSerial(2);
SdsDustSensor sds(sdsSerial);
#endif
unsigned int warmUp; unsigned int warmUp;
unsigned int period; unsigned int period;
@@ -29,29 +39,29 @@ float Sds011request(int sensorID);
//для добавления сенсора вам нужно скопировать этот файл и заменить в нем текст AnalogAdc на название вашего сенсора //для добавления сенсора вам нужно скопировать этот файл и заменить в нем текст AnalogAdc на название вашего сенсора
//Название должно быть уникальным, коротким и отражать суть сенсора. //Название должно быть уникальным, коротким и отражать суть сенсора.
class Sds011_25 : public IoTItem class Sds011_25 : public IoTItem {
{ private:
private:
//======================================================================================================= //=======================================================================================================
// Секция переменных. // Секция переменных.
//Это секция где Вы можете объявлять переменные и объекты arduino библиотек, что бы //Это секция где Вы можете объявлять переменные и объекты arduino библиотек, что бы
//впоследствии использовать их в loop и setup //впоследствии использовать их в loop и setup
// unsigned int _pin; // unsigned int _pin;
public: public:
//======================================================================================================= //=======================================================================================================
// setup() // setup()
//это аналог setup из arduino. Здесь вы можете выполнять методы инициализации сенсора. //это аналог setup из arduino. Здесь вы можете выполнять методы инициализации сенсора.
//Такие как ...begin и подставлять в них параметры полученные из web интерфейса. //Такие как ...begin и подставлять в них параметры полученные из web интерфейса.
//Все параметры хранятся в перемененной parameters, вы можете прочитать любой параметр используя jsonRead функции: //Все параметры хранятся в перемененной parameters, вы можете прочитать любой параметр используя jsonRead функции:
// jsonReadStr, jsonReadBool, jsonReadInt // jsonReadStr, jsonReadBool, jsonReadInt
Sds011_25(String parameters) : IoTItem(parameters) Sds011_25(String parameters) : IoTItem(parameters) {
{
// _pin = jsonReadInt(parameters, "pin"); // _pin = jsonReadInt(parameters, "pin");
#ifdef ESP8266
rxPinSDS = jsonReadInt(parameters, "rxPin"); rxPinSDS = jsonReadInt(parameters, "rxPin");
txPinSDS = jsonReadInt(parameters, "txPin"); txPinSDS = jsonReadInt(parameters, "txPin");
warmUp = jsonReadInt(parameters, "warmUp"); // сек. пробужнение должен быть больше #endif
period = jsonReadInt(parameters, "period"); // сек. время зарогрева/продувки, затем идут замеры warmUp = jsonReadInt(parameters, "warmUp"); // сек. пробужнение должен быть больше
period = jsonReadInt(parameters, "period"); // сек. время зарогрева/продувки, затем идут замеры
} }
//======================================================================================================= //=======================================================================================================
// doByInterval() // doByInterval()
@@ -61,42 +71,41 @@ public:
//если у сенсора несколько величин то делайте несколько regEvent //если у сенсора несколько величин то делайте несколько regEvent
//не используйте delay - помните, что данный loop общий для всех модулей. Если у вас планируется длительная операция, постарайтесь разбить ее на порции //не используйте delay - помните, что данный loop общий для всех модулей. Если у вас планируется длительная операция, постарайтесь разбить ее на порции
//и выполнить за несколько тактов //и выполнить за несколько тактов
void doByInterval() void doByInterval() {
{
SDS011_init(); SDS011_init();
Serial.println("request from 25"); Serial.println("request from 25");
value.valD = Sds011request(25); value.valD = Sds011request(25);
regEvent(value.valD, "Sds011_25"); //обязательный вызов хотяб один regEvent(value.valD, "Sds011_25"); //обязательный вызов хотяб один
} }
~Sds011_25() {}; ~Sds011_25(){};
}; };
//////////////////////////////////// for PM 10//= //////////////////////////////////// for PM 10//=
class Sds011_10 : public IoTItem class Sds011_10 : public IoTItem {
{ private:
private:
//======================================================================================================= //=======================================================================================================
// Секция переменных. // Секция переменных.
//Это секция где Вы можете объявлять переменные и объекты arduino библиотек, что бы //Это секция где Вы можете объявлять переменные и объекты arduino библиотек, что бы
//впоследствии использовать их в loop и setup //впоследствии использовать их в loop и setup
public: public:
//======================================================================================================= //=======================================================================================================
// setup() // setup()
//это аналог setup из arduino. Здесь вы можете выполнять методы инициализации сенсора. //это аналог setup из arduino. Здесь вы можете выполнять методы инициализации сенсора.
//Такие как ...begin и подставлять в них параметры полученные из web интерфейса. //Такие как ...begin и подставлять в них параметры полученные из web интерфейса.
//Все параметры хранятся в перемененной parameters, вы можете прочитать любой параметр используя jsonRead функции: //Все параметры хранятся в перемененной parameters, вы можете прочитать любой параметр используя jsonRead функции:
// jsonReadStr, jsonReadBool, jsonReadInt // jsonReadStr, jsonReadBool, jsonReadInt
Sds011_10(String parameters) : IoTItem(parameters) Sds011_10(String parameters) : IoTItem(parameters) {
{ // _pin = jsonReadInt(parameters, "pin");
// _pin = jsonReadInt(parameters, "pin"); #ifdef ESP8266
rxPinSDS = jsonReadInt(parameters, "rxPin"); rxPinSDS = jsonReadInt(parameters, "rxPin");
txPinSDS = jsonReadInt(parameters, "txPin"); txPinSDS = jsonReadInt(parameters, "txPin");
warmUp = jsonReadInt(parameters, "warmUp"); // сек. пробужнение должен быть больше #endif
period = jsonReadInt(parameters, "period"); // сек. время зарогрева/продувки, затем идут замеры warmUp = jsonReadInt(parameters, "warmUp"); // сек. пробужнение должен быть больше
period = jsonReadInt(parameters, "period"); // сек. время зарогрева/продувки, затем идут замеры
} }
//======================================================================================================= //=======================================================================================================
// doByInterval() // doByInterval()
@@ -107,46 +116,37 @@ public:
//не используйте delay - помните, что данный loop общий для всех модулей. Если у вас планируется длительная операция, постарайтесь разбить ее на порции //не используйте delay - помните, что данный loop общий для всех модулей. Если у вас планируется длительная операция, постарайтесь разбить ее на порции
//и выполнить за несколько тактов //и выполнить за несколько тактов
void doByInterval() void doByInterval() {
{
SDS011_init(); SDS011_init();
Serial.println("request from 10"); Serial.println("request from 10");
value.valD = Sds011request(10); value.valD = Sds011request(10);
regEvent(value.valD, "Sds011_10"); //обязательный вызов хотяб один regEvent(value.valD, "Sds011_10"); //обязательный вызов хотяб один
} }
~Sds011_10() {}; ~Sds011_10(){};
}; };
//после замены названия сенсора, на функцию можно не обращать внимания //после замены названия сенсора, на функцию можно не обращать внимания
//если сенсор предполагает использование общего объекта библиотеки для нескольких экземпляров сенсора, то в данной функции необходимо предусмотреть //если сенсор предполагает использование общего объекта библиотеки для нескольких экземпляров сенсора, то в данной функции необходимо предусмотреть
//создание и контроль соответствующих глобальных переменных //создание и контроль соответствующих глобальных переменных
void *getAPI_Sds011(String subtype, String param) void* getAPI_Sds011(String subtype, String param) {
{ if (subtype == F("Sds011_25")) {
if (subtype == F("Sds011_25"))
{
return new Sds011_25(param); return new Sds011_25(param);
} } else if (subtype == F("Sds011_10")) {
else if (subtype == F("Sds011_10"))
{
return new Sds011_10(param); return new Sds011_10(param);
} } else {
else
{
return nullptr; return nullptr;
} }
} }
float Sds011request(int sensorID) float Sds011request(int sensorID) {
{
float reply = 0; float reply = 0;
static int a = 0; static int a = 0;
static float pm25 = 0; static float pm25 = 0;
static float pm10 = 0; static float pm10 = 0;
static int startMillis = millis(); static int startMillis = millis();
if (a == 0) if (a == 0) {
{
Serial.print("SDS011 ... warmUp = "); Serial.print("SDS011 ... warmUp = ");
Serial.print(warmUp); Serial.print(warmUp);
Serial.print(" period = "); Serial.print(" period = ");
@@ -155,11 +155,9 @@ float Sds011request(int sensorID)
startMillis = millis(); startMillis = millis();
a = a + 1; a = a + 1;
} }
if (a == 1 && millis() >= (startMillis + warmUp * 1000)) if (a == 1 && millis() >= (startMillis + warmUp * 1000)) {
{
PmResult pm = sds.readPm(); PmResult pm = sds.readPm();
if (pm.isOk()) if (pm.isOk()) {
{
pm25 = pm.pm25; pm25 = pm.pm25;
pm10 = pm.pm10; pm10 = pm.pm10;
Serial.print("PM2.5 = "); Serial.print("PM2.5 = ");
@@ -168,41 +166,33 @@ float Sds011request(int sensorID)
Serial.println(pm10); Serial.println(pm10);
a = a + 1; a = a + 1;
sds.sleep(); sds.sleep();
} } else {
else
{
Serial.print("Could not read values from sensor 25, reason: "); Serial.print("Could not read values from sensor 25, reason: ");
Serial.println(pm.statusToString()); Serial.println(pm.statusToString());
a = a + 1; a = a + 1;
} }
} }
if (a > 1 && millis() >= (startMillis + period * 1000)) if (a > 1 && millis() >= (startMillis + period * 1000)) {
{
Serial.println("end of period for pm25"); Serial.println("end of period for pm25");
a = 0; a = 0;
} }
if (sensorID == 25) if (sensorID == 25) {
{
reply = pm25; reply = pm25;
} }
if (sensorID == 10) if (sensorID == 10) {
{
reply = pm10; reply = pm10;
} }
return reply; return reply;
} }
void SDS011_init() void SDS011_init() {
{ if (SDS011_init_flag) {
if (SDS011_init_flag)
{
sds.begin(); sds.begin();
Serial.println(sds.queryFirmwareVersion().toString()); // prints firmware version Serial.println(sds.queryFirmwareVersion().toString()); // prints firmware version
// Serial.println(sds.setActiveReportingMode().toString()); // // Serial.println(sds.setActiveReportingMode().toString()); //
String ReportingMode = sds.setActiveReportingMode().toString(); String ReportingMode = sds.setActiveReportingMode().toString();
Serial.println(ReportingMode); Serial.println(ReportingMode);
if (ReportingMode == "Mode: active") if (ReportingMode == "Mode: active") {
{
SDS011_init_flag = false; SDS011_init_flag = false;
} }
} }