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": {
"*.tcc": "cpp",
"fstream": "cpp",
"ratio": "cpp",
"system_error": "cpp",
"array": "cpp",
"functional": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp"
"xlocale": "cpp",
"deque": "cpp",
"initializer_list": "cpp",
"list": "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
board = nodemcuv2
board_build.ldscript = eagle.flash.4m1m.ld
platform = espressif8266 @2.6.3
platform = espressif8266 @4.0.1
monitor_filters = esp8266_exception_decoder
upload_speed = 921600
monitor_speed = 115200
@@ -27,7 +27,7 @@ lib_deps =
build_flags = -Desp32_4mb="esp32_4mb"
framework = arduino
board = esp32dev
platform = espressif32 @3.3.0
platform = espressif32
monitor_filters = esp32_exception_decoder
upload_speed = 921600
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) {
standWebSocket.sendTXT(num, "/st" + String(filename));
String st = "/st" + String(filename);
standWebSocket.sendTXT(num, st);
String path = filepath(filename);
auto file = FileFS.open(path, "r");
if (!file) {
@@ -315,17 +316,20 @@ void sendFileToWs(const char* filename, uint8_t num, size_t frameSize) {
countRead = file.read(payload, sizeof(payload));
}
file.close();
standWebSocket.sendTXT(num, "/end" + String(filename));
String end = "/end" + String(filename);
standWebSocket.sendTXT(num, end);
}
//посылка данных из string
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();
char dataArray[size];
msg.toCharArray(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) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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