Здрав будь бояре! чело разбил о земь непонимания. есть ардуино, к которой прикручен по i2c bme280 и по прерыванию датчик холла который считает скорость ветра. esp питается от шилда на которой отдельный вывод 3.3В (свой ams 1117 3.3). как схемы рисовать на форуме не знаю, чтобы понятно выложить всю схему подключения. сообщения между дунькой и есп перекресное через Rx Tx (Txардуино к Rx есп) на участке Rx есп -> TX ардуино установлены резисторы по принципу: Rx esp -> 1K -> Tx arduinu а так же от туда же 2K и на общую землю. вообщем схема из инета, легко гуглится.
со стороны есп код:
#########- это я свой идентификатор затер
со стороны ардуино
смысл всего это передавать сведения с датчиков на запрос в телеграмм там будет прикручены далее и доп функции но это не об этом сейчас.
код телеграмм бота взят с просторов инета, парсинг со страниц уроков по парсингу на сайте гайвера.
Клиника: после включения питания на ардуино очень активно начинает мигать передача данных, если подключить все это и открыть монитор порта, то можно увидеть что данные с ардуино льются непрерывным потоком, при этом есп должна запрашивать данные только если есть новое сообщение. и через 3-15 сек ардуино зависает. есп продолжает отвечать в телеге с теми же данными (я так понимаю теми что накидала ардуино в буфер до того как зависла) а потом пустыми сообщениями (данные перестали после зависания ардуино поступать)
по всей видимости ардуино и виснет от того что бесконечно льет данные а тут еще и прерывания. мне не понятно почему она так делает ведь должна отправить 1 пакет по запросу
со стороны есп код:
участок парсинга на esp:
void Bot_EchoMessages() {
for (int i = 1; i < bot.message[0][0].toInt() + 1; i++) {
if (bot.message[i][4]=="##########") {
Otvet="Запросов: " + String (EEPROM.read(0)) +" "+ parsing();
bot.sendMessage(bot.message[i][4], Otvet, "");
}
else {bot.sendMessage(bot.message[i][4], parsing(), "");}
if (bot.message[i][5] == "start") {
String wellcome = "Добро пожаловать к боту моей метеостанции";
bot.sendMessage(bot.message[i][4], wellcome, "");
Start = true;
}
zapros++;
EEPROM.write(0, zapros);
EEPROM.commit();
}
bot.message[0][0] = ""; // All messages have been replied - reset new messages
}
String parsing() {
String atvet="";
char d='1';
Serial.write(d);
delay(30);
while (Serial.available() > 0) {
char incomingByte = Serial.read(); // обязательно ЧИТАЕМ входящий символ
if (incomingByte == '$') { // если это $
getStarted = true; // поднимаем флаг, что можно парсить
} else if (incomingByte != ';' && getStarted) { // пока это не ;
// в общем происходит всякая магия, парсинг осуществляется функцией strtok_r
inputData[inde] = incomingByte;
inde++;
inputData[inde] = NULL;
} else {
if (getStarted) {
char *p = inputData;
char *str;
inde = 0;
String value = "";
while ((str = strtok_r(p, " ", & p)) != NULL) {
string_convert = str;
intData[inde] = string_convert.toInt();
inde++;
}
inde = 0;
}
}
if (incomingByte == ';') { // если таки приняли ; - конец парсинга
getStarted = false;
recievedFlag = true;
atvet="\xF0\x9F\x8C\xA1\xEF\xB8\x8F " + String (float (intData[0])/10, 1) + "\xE2\x84\x83 \xF0\x9F\x92\xA7 " + String (intData[1]) + "% Давление: " + String (intData[2]) + "mmHg напряжение: " + String (float (intData[3]/10), 1)+ " Скорость ветра: "+ String (float (intData[4]/10))+ "м/с" ;
return atvet;
}
}
}
со стороны ардуино
C++:
void loop() {
ok.tick();
if (ok.isHolded()) { //вход в меню при удержании кнопки ок
menu();
}
skorvetr();
printTime(); //вывод инфы на дисплей
provBudil(); //проверка исполнения таймеров
saveAccum(); //проверка сохранения жизни аккумулятора панели и переключение при низком заряде на сеть 220В
peredacha (); //отправка данных на esp
}
void peredacha () { //передача данных в ESP8266
if (Serial.available() > 0) {
char incomingByte = Serial.read();
String dacha="$" + String(int (bme.readTemperature()*10)) + " " + String(int (bme.readHumidity())) + " " + String(int(pressureToMmHg((bme.readPressure())))) + " " + String(int(analogRead(1) / 4.092)) + " " + String(int(speed*10))+";";
Serial.print(dacha);
}
}
код телеграмм бота взят с просторов инета, парсинг со страниц уроков по парсингу на сайте гайвера.
Клиника: после включения питания на ардуино очень активно начинает мигать передача данных, если подключить все это и открыть монитор порта, то можно увидеть что данные с ардуино льются непрерывным потоком, при этом есп должна запрашивать данные только если есть новое сообщение. и через 3-15 сек ардуино зависает. есп продолжает отвечать в телеге с теми же данными (я так понимаю теми что накидала ардуино в буфер до того как зависла) а потом пустыми сообщениями (данные перестали после зависания ардуино поступать)
по всей видимости ардуино и виснет от того что бесконечно льет данные а тут еще и прерывания. мне не понятно почему она так делает ведь должна отправить 1 пакет по запросу