4.0.1 ядро для 8266

This commit is contained in:
Dmitry Borisenko
2022-09-14 18:53:02 +02:00
parent 49dde6031a
commit 8ce79687bc
11 changed files with 208 additions and 204 deletions

View File

@@ -1,10 +0,0 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}

18
.vscode/settings.json vendored
View File

@@ -1,13 +1,15 @@
{ {
"files.associations": { "files.associations": {
"*.tcc": "cpp",
"fstream": "cpp",
"ratio": "cpp",
"system_error": "cpp", "system_error": "cpp",
"array": "cpp", "xlocale": "cpp",
"functional": "cpp", "deque": "cpp",
"tuple": "cpp", "initializer_list": "cpp",
"type_traits": "cpp", "list": "cpp",
"utility": "cpp" "vector": "cpp",
"xhash": "cpp",
"xiosbase": "cpp",
"xstring": "cpp",
"xtree": "cpp",
"xutility": "cpp"
} }
} }

View File

@@ -7,7 +7,7 @@ build_flags = -Desp8266_4mb="esp8266_4mb"
framework = arduino framework = arduino
board = nodemcuv2 board = nodemcuv2
board_build.ldscript = eagle.flash.4m1m.ld board_build.ldscript = eagle.flash.4m1m.ld
platform = espressif8266 @2.6.3 platform = espressif8266 @4.0.1
monitor_filters = esp8266_exception_decoder monitor_filters = esp8266_exception_decoder
upload_speed = 921600 upload_speed = 921600
monitor_speed = 115200 monitor_speed = 115200
@@ -27,7 +27,7 @@ lib_deps =
build_flags = -Desp32_4mb="esp32_4mb" build_flags = -Desp32_4mb="esp32_4mb"
framework = arduino framework = arduino
board = esp32dev board = esp32dev
platform = espressif32 @3.3.0 platform = espressif32
monitor_filters = esp32_exception_decoder monitor_filters = esp32_exception_decoder
upload_speed = 921600 upload_speed = 921600
monitor_speed = 115200 monitor_speed = 115200

View File

@@ -299,7 +299,8 @@ void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) {
//посылка данных из файла в бинарном виде //посылка данных из файла в бинарном виде
void sendFileToWs(const char* filename, uint8_t num, size_t frameSize) { void sendFileToWs(const char* filename, uint8_t num, size_t frameSize) {
standWebSocket.sendTXT(num, "/st" + String(filename)); String st = "/st" + String(filename);
standWebSocket.sendTXT(num, st);
String path = filepath(filename); String path = filepath(filename);
auto file = FileFS.open(path, "r"); auto file = FileFS.open(path, "r");
if (!file) { if (!file) {
@@ -315,17 +316,20 @@ void sendFileToWs(const char* filename, uint8_t num, size_t frameSize) {
countRead = file.read(payload, sizeof(payload)); countRead = file.read(payload, sizeof(payload));
} }
file.close(); file.close();
standWebSocket.sendTXT(num, "/end" + String(filename)); String end = "/end" + String(filename);
standWebSocket.sendTXT(num, end);
} }
//посылка данных из string //посылка данных из string
void sendStringToWs(const String& msg, uint8_t num, String name) { void sendStringToWs(const String& msg, uint8_t num, String name) {
standWebSocket.sendTXT(num, "/st" + String(name)); String st = "/st" + String(name);
standWebSocket.sendTXT(num, st);
size_t size = msg.length(); size_t size = msg.length();
char dataArray[size]; char dataArray[size];
msg.toCharArray(dataArray, size); msg.toCharArray(dataArray, size);
standWebSocket.sendBIN(num, (uint8_t*)dataArray, size); standWebSocket.sendBIN(num, (uint8_t*)dataArray, size);
standWebSocket.sendTXT(num, "/end" + String(name)); String end = "/end" + String(name);
standWebSocket.sendTXT(num, end);
} }
// void sendMark(const char* filename, const char* mark, uint8_t num) { // void sendMark(const char* filename, const char* mark, uint8_t num) {

View File

@@ -5,7 +5,6 @@
#include "utils/FileUtils.h" #include "utils/FileUtils.h"
#include "NTP.h" #include "NTP.h"
bool isIotScenException = false; // признак исключения и попытки прекратить выполнение сценария заранее bool isIotScenException = false; // признак исключения и попытки прекратить выполнение сценария заранее
// Лексический анализатор возвращает токены [0-255], если это неизвестны, // Лексический анализатор возвращает токены [0-255], если это неизвестны,
@@ -470,7 +469,7 @@ class SysCallExprAST : public ExprAST {
} }
IoTValue *exec() { IoTValue *exec() {
//Serial.printf("Call from SysCallExprAST exec %d\n", operation); // Serial.printf("Call from SysCallExprAST exec %d\n", operation);
if (isIotScenException) return nullptr; // если прерывание, то сразу выходим if (isIotScenException) return nullptr; // если прерывание, то сразу выходим
@@ -594,17 +593,20 @@ int IoTScenario::getLastChar() {
LastChar = file.read(); LastChar = file.read();
if (LastChar == 10) curLine++; if (LastChar == 10) curLine++;
return LastChar; return LastChar;
} else return EOF; } else
return EOF;
} else if (mode == 1) { } else if (mode == 1) {
if (charCount < strFromFile.length()) { if (charCount < strFromFile.length()) {
LastChar = strFromFile.charAt(charCount); LastChar = strFromFile.charAt(charCount);
//Serial.printf("%d, ", LastChar); // Serial.printf("%d, ", LastChar);
if (LastChar == 10) curLine++; if (LastChar == 10) curLine++;
charCount++; charCount++;
return LastChar; return LastChar;
} else return EOF; } else
return EOF;
} else {
return 0;
} }
} }
/// gettok - Возвращает следующий токен из стандартного потока ввода. /// gettok - Возвращает следующий токен из стандартного потока ввода.
@@ -627,12 +629,13 @@ int IoTScenario::gettok() {
return tok_identifier; return tok_identifier;
} }
NumStr=""; NumStr = "";
if (LastChar == '-') { if (LastChar == '-') {
LastChar = getLastChar(); LastChar = getLastChar();
if (isdigit(LastChar)) NumStr = "-"; if (isdigit(LastChar))
else return '-'; NumStr = "-";
else
return '-';
} }
if (isdigit(LastChar)) { // Число: [0-9.]+ if (isdigit(LastChar)) { // Число: [0-9.]+
do { do {
@@ -776,8 +779,7 @@ ExprAST *IoTScenario::ParseIdentifierExpr(String *IDNames, bool callFromConditio
if (CurTok == ')') break; if (CurTok == ')') break;
if (CurTok != ','){ if (CurTok != ',') {
return Error("Expected ')' or ',' in argument list"); return Error("Expected ')' or ',' in argument list");
} }
getNextToken(); getNextToken();
@@ -810,7 +812,7 @@ ExprAST *IoTScenario::ParseParenExpr(String *IDNames, bool callFromCondition) {
if (CurTok != ')') if (CurTok != ')')
return Error("expected ')'"); return Error("expected ')'");
//getNextToken(); // получаем ). // getNextToken(); // получаем ).
return V; return V;
} }
@@ -821,25 +823,23 @@ ExprAST *IoTScenario::ParseBracketsExpr(String *IDNames, bool callFromCondition)
getNextToken(); // получаем {. getNextToken(); // получаем {.
std::vector<ExprAST *> bracketsList; std::vector<ExprAST *> bracketsList;
while (CurTok != '}') { while (CurTok != '}') {
ExprAST *Expr = ParseExpression(IDNames, callFromCondition); ExprAST *Expr = ParseExpression(IDNames, callFromCondition);
if (!Expr) return nullptr; if (!Expr) return nullptr;
bracketsList.push_back(Expr); bracketsList.push_back(Expr);
//if (CurTok == '}') break; // if (CurTok == '}') break;
//Serial.printf("ParseBracketsExpr CurTok = %d \n", CurTok); // Serial.printf("ParseBracketsExpr CurTok = %d \n", CurTok);
// if (CurTok != ';')
// return Error("Expected ';' in operation list");
// int ttok = getNextToken();
//if (CurTok != ';') if (CurTok == tok_eof) {
// return Error("Expected ';' in operation list"); return Error("Expected '}'");
//int ttok = getNextToken();
if (CurTok == tok_eof) {
return Error("Expected '}'");
}
} }
}
getNextToken(); // получаем }. getNextToken(); // получаем }.
return new BracketsExprAST(bracketsList); return new BracketsExprAST(bracketsList);
@@ -957,7 +957,6 @@ ExprAST *IoTScenario::ParseExpression(String *IDNames, bool callFromCondition) {
return ParseBinOpRHS(0, LHS, IDNames, callFromCondition); return ParseBinOpRHS(0, LHS, IDNames, callFromCondition);
} }
void IoTScenario::loadScenario(String fileName) { // подготавливаем контекст для чтения и интерпретации файла void IoTScenario::loadScenario(String fileName) { // подготавливаем контекст для чтения и интерпретации файла
isIotScenException = false; isIotScenException = false;
@@ -992,7 +991,7 @@ void IoTScenario::exec(String eventIdName) { // посимвольно счит
if (mode < 2) { if (mode < 2) {
while (CurTok != EOF) { while (CurTok != EOF) {
switch (CurTok) { switch (CurTok) {
case tok_if: { case tok_if: {
IDNames = ""; // сбрасываем накопитель встречающихся идентификаторов в условии IDNames = ""; // сбрасываем накопитель встречающихся идентификаторов в условии
ExprAST *tmpAST = ParseIfExpr(&IDNames); ExprAST *tmpAST = ParseIfExpr(&IDNames);
@@ -1001,15 +1000,18 @@ void IoTScenario::exec(String eventIdName) { // посимвольно счит
tmpAST->exec(); tmpAST->exec();
} }
delete tmpAST; delete tmpAST;
} else getNextToken(); } else
break;} getNextToken();
default: getNextToken(); break; break;
}
default:
getNextToken();
break;
} }
} }
} }
} }
IoTScenario::IoTScenario() { IoTScenario::IoTScenario() {
// Задаём стандартные бинарные операторы. // Задаём стандартные бинарные операторы.
// 1 - наименьший приоритет. // 1 - наименьший приоритет.

View File

@@ -29,7 +29,7 @@ class Bme280t : public IoTItem {
SerialPrint("E", "Sensor Bme280t", "Error"); SerialPrint("E", "Sensor Bme280t", "Error");
} }
~Bme280t() {}; ~Bme280t(){};
}; };
class Bme280h : public IoTItem { class Bme280h : public IoTItem {
@@ -49,7 +49,7 @@ class Bme280h : public IoTItem {
SerialPrint("E", "Sensor Bme280h", "Error"); SerialPrint("E", "Sensor Bme280h", "Error");
} }
~Bme280h() {}; ~Bme280h(){};
}; };
class Bme280p : public IoTItem { class Bme280p : public IoTItem {
@@ -70,28 +70,27 @@ class Bme280p : public IoTItem {
SerialPrint("E", "Sensor Bme280p", "Error"); SerialPrint("E", "Sensor Bme280p", "Error");
} }
~Bme280p() {}; ~Bme280p(){};
}; };
void* getAPI_Bme280(String subtype, String param) { void* getAPI_Bme280(String subtype, String param) {
if (subtype == F("Bme280t") || subtype == F("Bme280h") || subtype == F("Bme280p")) { // if (subtype == F("Bme280t") || subtype == F("Bme280h") || subtype == F("Bme280p")) {
String addr; // String addr;
jsonRead(param, "addr", addr); // jsonRead(param, "addr", addr);
//
if (bmes.find(addr) == bmes.end()) { // if (bmes.find(addr) == bmes.end()) {
bmes[addr] = new Adafruit_BME280(); // bmes[addr] = new Adafruit_BME280();
bmes[addr]->begin(hexStringToUint8(addr)); // bmes[addr]->begin(hexStringToUint8(addr));
} // }
//
if (subtype == F("Bme280t")) { // if (subtype == F("Bme280t")) {
return new Bme280t(bmes[addr], param); // return new Bme280t(bmes[addr], param);
} else if (subtype == F("Bme280h")) { // } else if (subtype == F("Bme280h")) {
return new Bme280h(bmes[addr], param); // return new Bme280h(bmes[addr], param);
} else if (subtype == F("Bme280p")) { // } else if (subtype == F("Bme280p")) {
return new Bme280p(bmes[addr], param); // return new Bme280p(bmes[addr], param);
} // }
} else { //} else {
return nullptr; return nullptr;
} //}
} }

View File

@@ -54,21 +54,21 @@ class Bmp280p : public IoTItem {
}; };
void* getAPI_Bmp280(String subtype, String param) { void* getAPI_Bmp280(String subtype, String param) {
if (subtype == F("Bmp280t") || subtype == F("Bmp280p")) { // if (subtype == F("Bmp280t") || subtype == F("Bmp280p")) {
String addr; // String addr;
jsonRead(param, "addr", addr); // jsonRead(param, "addr", addr);
//
if (bmps.find(addr) == bmps.end()) { // if (bmps.find(addr) == bmps.end()) {
bmps[addr] = new Adafruit_BMP280(); // bmps[addr] = new Adafruit_BMP280();
bmps[addr]->begin(hexStringToUint8(addr)); // bmps[addr]->begin(hexStringToUint8(addr));
} // }
//
if (subtype == F("Bmp280t")) { // if (subtype == F("Bmp280t")) {
return new Bmp280t(bmps[addr], param); // return new Bmp280t(bmps[addr], param);
} else if (subtype == F("Bmp280p")) { // } else if (subtype == F("Bmp280p")) {
return new Bmp280p(bmps[addr], param); // return new Bmp280p(bmps[addr], param);
} // }
} else { //} else {
return nullptr; return nullptr;
} //}
} }

View File

@@ -4,14 +4,12 @@
https://github.com/beegee-tokyo/arduino-DHTesp https://github.com/beegee-tokyo/arduino-DHTesp
******************************************************************/ ******************************************************************/
#include "Global.h" #include "Global.h"
#include "classes/IoTItem.h" #include "classes/IoTItem.h"
#include "DHTesp.h" #include "DHTesp.h"
#include <map> #include <map>
std::map<int, DHTesp*> dhts; std::map<int, DHTesp*> dhts;
class Dht1122t : public IoTItem { class Dht1122t : public IoTItem {
@@ -19,62 +17,64 @@ class Dht1122t : public IoTItem {
DHTesp* _dht; DHTesp* _dht;
public: public:
Dht1122t(DHTesp* dht, String parameters): IoTItem(parameters) { Dht1122t(DHTesp* dht, String parameters) : IoTItem(parameters) {
_dht = dht; _dht = dht;
} }
void doByInterval() { void doByInterval() {
value.valD = _dht->getTemperature(); value.valD = _dht->getTemperature();
if (String(value.valD) != "nan") regEvent(value.valD, "Dht1122t"); if (String(value.valD) != "nan")
else SerialPrint("E", "Sensor DHTt", "Error"); regEvent(value.valD, "Dht1122t");
else
SerialPrint("E", "Sensor DHTt", "Error");
} }
~Dht1122t() {}; ~Dht1122t(){};
}; };
class Dht1122h : public IoTItem { class Dht1122h : public IoTItem {
private: private:
DHTesp* _dht; DHTesp* _dht;
public: public:
Dht1122h(DHTesp* dht, String parameters): IoTItem(parameters) { Dht1122h(DHTesp* dht, String parameters) : IoTItem(parameters) {
_dht = dht; _dht = dht;
} }
void doByInterval() { void doByInterval() {
value.valD = _dht->getHumidity(); value.valD = _dht->getHumidity();
if (String(value.valD) != "nan") regEvent(value.valD, "Dht1122h"); if (String(value.valD) != "nan")
else SerialPrint("E", "Sensor DHTh", "Error"); regEvent(value.valD, "Dht1122h");
else
SerialPrint("E", "Sensor DHTh", "Error");
} }
~Dht1122h() {}; ~Dht1122h(){};
}; };
void* getAPI_Dht1122(String subtype, String param) { void* getAPI_Dht1122(String subtype, String param) {
if (subtype == F("Dht1122t") || subtype == F("Dht1122h")) { // if (subtype == F("Dht1122t") || subtype == F("Dht1122h")) {
int pin; // int pin;
String senstype; // String senstype;
jsonRead(param, "pin", pin); // jsonRead(param, "pin", pin);
jsonRead(param, "senstype", senstype); // jsonRead(param, "senstype", senstype);
//
if (dhts.find(pin) == dhts.end()) { // if (dhts.find(pin) == dhts.end()) {
dhts[pin] = new DHTesp(); // dhts[pin] = new DHTesp();
//
if (senstype == "dht11") { // if (senstype == "dht11") {
dhts[pin]->setup(pin, DHTesp::DHT11); // dhts[pin]->setup(pin, DHTesp::DHT11);
} else if (senstype == "dht22") { // } else if (senstype == "dht22") {
dhts[pin]->setup(pin, DHTesp::DHT22); // dhts[pin]->setup(pin, DHTesp::DHT22);
} // }
} // }
//
if (subtype == F("Dht1122t")) { // if (subtype == F("Dht1122t")) {
return new Dht1122t(dhts[pin], param); // return new Dht1122t(dhts[pin], param);
} else if (subtype == F("Dht1122h")) { // } else if (subtype == F("Dht1122h")) {
return new Dht1122h(dhts[pin], param); // return new Dht1122h(dhts[pin], param);
} // }
} else { //} else {
return nullptr; return nullptr;
} //}
} }

View File

@@ -15,45 +15,49 @@ GY21* sensor = nullptr;
class GY21t : public IoTItem { class GY21t : public IoTItem {
public: public:
GY21t(String parameters): IoTItem(parameters) { } GY21t(String parameters) : IoTItem(parameters) {}
void doByInterval() { void doByInterval() {
//wire->read(); // wire->read();
value.valD = sensor->GY21_Temperature(); value.valD = sensor->GY21_Temperature();
if (value.valD < 300) regEvent(value.valD, "GY21"); // TODO: найти способ понимания ошибки получения данных if (value.valD < 300)
else SerialPrint("E", "Sensor GY21t", "Error"); regEvent(value.valD, "GY21"); // TODO: найти способ понимания ошибки получения данных
else
SerialPrint("E", "Sensor GY21t", "Error");
} }
~GY21t() {}; ~GY21t(){};
}; };
class GY21h : public IoTItem { class GY21h : public IoTItem {
public: public:
GY21h(String parameters): IoTItem(parameters) { } GY21h(String parameters) : IoTItem(parameters) {}
void doByInterval() { void doByInterval() {
//sht->read(); // sht->read();
value.valD = sensor->GY21_Humidity(); value.valD = sensor->GY21_Humidity();
if (value.valD != 0) regEvent(value.valD, "GY21h"); // TODO: найти способ понимания ошибки получения данных if (value.valD != 0)
else SerialPrint("E", "Sensor GY21h", "Error"); regEvent(value.valD, "GY21h"); // TODO: найти способ понимания ошибки получения данных
else
SerialPrint("E", "Sensor GY21h", "Error");
} }
~GY21h() {}; ~GY21h(){};
}; };
void* getAPI_GY21(String subtype, String param) { void* getAPI_GY21(String subtype, String param) {
if (subtype == F("GY21t") || subtype == F("GY21h")) { // if (subtype == F("GY21t") || subtype == F("GY21h")) {
if (!sensor) { // if (!sensor) {
sensor = new GY21; // sensor = new GY21;
if (sensor) Wire.begin(SDA, SCL); // if (sensor) Wire.begin(SDA, SCL);
} // }
//
if (subtype == F("GY21t")) { // if (subtype == F("GY21t")) {
return new GY21t(param); // return new GY21t(param);
} else if (subtype == F("GY21h")) { // } else if (subtype == F("GY21h")) {
return new GY21h(param); // return new GY21h(param);
} // }
} else { //} else {
return nullptr; return nullptr;
} //}
} }

View File

@@ -4,51 +4,53 @@
#include "Wire.h" #include "Wire.h"
#include "SHT2x.h" #include "SHT2x.h"
SHT2x* sht = nullptr; SHT2x* sht = nullptr;
class Sht20t : public IoTItem { class Sht20t : public IoTItem {
public: public:
Sht20t(String parameters): IoTItem(parameters) { } Sht20t(String parameters) : IoTItem(parameters) {}
void doByInterval() { void doByInterval() {
sht->read(); sht->read();
value.valD = sht->getTemperature(); value.valD = sht->getTemperature();
if (value.valD > -46.85F) regEvent(value.valD, "Sht20t"); if (value.valD > -46.85F)
else SerialPrint("E", "Sensor Sht20t", "Error"); regEvent(value.valD, "Sht20t");
else
SerialPrint("E", "Sensor Sht20t", "Error");
} }
~Sht20t() {}; ~Sht20t(){};
}; };
class Sht20h : public IoTItem { class Sht20h : public IoTItem {
public: public:
Sht20h(String parameters): IoTItem(parameters) { } Sht20h(String parameters) : IoTItem(parameters) {}
void doByInterval() { void doByInterval() {
sht->read(); sht->read();
value.valD = sht->getHumidity(); value.valD = sht->getHumidity();
if (value.valD != -6) regEvent(value.valD, "Sht20h"); if (value.valD != -6)
else SerialPrint("E", "Sensor Sht20h", "Error"); regEvent(value.valD, "Sht20h");
else
SerialPrint("E", "Sensor Sht20h", "Error");
} }
~Sht20h() {}; ~Sht20h(){};
}; };
void* getAPI_Sht20(String subtype, String param) { void* getAPI_Sht20(String subtype, String param) {
if (subtype == F("Sht20t") || subtype == F("Sht20h")) { // if (subtype == F("Sht20t") || subtype == F("Sht20h")) {
if (!sht) { // if (!sht) {
sht = new SHT2x; // sht = new SHT2x;
if (sht) sht->begin(); // if (sht) sht->begin();
} // }
//
if (subtype == F("Sht20t")) { // if (subtype == F("Sht20t")) {
return new Sht20t(param); // return new Sht20t(param);
} else if (subtype == F("Sht20h")) { // } else if (subtype == F("Sht20h")) {
return new Sht20h(param); // return new Sht20h(param);
} // }
} else { //} else {
return nullptr; return nullptr;
} //}
} }

View File

@@ -12,7 +12,8 @@ void SerialPrint(String errorLevel, String module, String msg) {
if (isNetworkActive()) { if (isNetworkActive()) {
if (jsonReadInt(settingsFlashJson, F("log")) != 0) { if (jsonReadInt(settingsFlashJson, F("log")) != 0) {
standWebSocket.broadcastTXT("/log|" + tosend); String pl = "/log|" + tosend;
standWebSocket.broadcastTXT(pl);
} }
} }
//} //}