SetPf
Я к слову не нашел внятного описания ивентов, и не знаю UART_DATA может быть как и ивентом на каждый байт, либо ивентом когда в пустой буфер попало ЧТО ЛИБО
SetPf
Другие ивенты прилетают.
Мне они нафиг не нужны, но отключить то их нельзя.
Andy
Так я и не понял, зачем выходить из ожидания :( Или у вас task не только очередь uart обрабатывает?
SetPf
Так я и не понял, зачем выходить из ожидания :( Или у вас task не только очередь uart обрабатывает?
Эммм ну вот таск сидит в ожидании. В уарт прилетает байт (не паттерн) Таск вынужден выйти из ожидания, т.к. появился ивент в очереди.
SetPf
Это понятно если время ожидания не истекло. А если истекло?
Вот сейчас я не понял, истекло, ну он в while сидит, еще раз поставится на ожидание.
SetPf
Зачем? Пусть RTOS этим рулит - (portTickType) portMAX_DELAY)
Я не знал такого макроса =). Но это сути не меняет - оно будет выходить каждый раз, когда происходит событие с уартом.
SetPf
Не зависимо от того нужно ли оно или нет.
romanetz
Соответственно, импульсы со счётчика воды входного перестанут идти, концевик с задвижки придёт...
romanetz
Если физические концевики - геморно, магнит и дискретные датчики Холла
Andy
Я не знал такого макроса =). Но это сути не меняет - оно будет выходить каждый раз, когда происходит событие с уартом.
Не каждый раз, а когда в очереди что-нибудь появится. А вот условие "что-нибудь" можно настроить при инициализации драйвера.
SetPf
Ткните. Потому что моем чтонибудь это UART_DATA и оно часто прилетает.
SetPf
вот же
ох пля...
SetPf
У меня не ладится что то с еспшными доками
Василий
а я просто - складываю в очередь - одной - строкой - а потом парсер разбирает очередь
SetPf
а я просто - складываю в очередь - одной - строкой - а потом парсер разбирает очередь
Я так сначала и сделал, потом сказал - ВЕЛОСПИЕДЫ ПЛОХО и угробил 2 дня на паттерн детект =)
Василий
какой детект ?
SetPf
какой детект ?
IDF библиоченый функционал, на обнаружение последовательностей в потоке UART
Василий
а зачем это делать в приёме данных? это прекрасно работает в парсере очереди
Василий
задача приёма - положить байт/много байт в очередь
Василий
ну вообщем у меня так сделано, - тоже работает
SetPf
а зачем это делать в приёме данных? это прекрасно работает в парсере очереди
Не хочу парсер выносить за пределы таска приема. Лишняя прослойка, из него тоже придется делать очередь. Тем более там весь парсинг это просто разрезание входящего потока на строки.
Василий
это когда парсер маленький, а когда патернов пару сотен - тогда уже напряжно
SetPf
А вот это уже дальше =)
SetPf
вот же
Нет это не оно. Это именно для интерраптов железных.
SetPf
Все так же приходят UART_DATA евенты, даже после отключения прерываний RX
SetPf
PATTERN_IRQ видимо потому что зынь хуан хай джу
SetPf
И он интерраптом не является, хотя функция его называется именно так
Andy
Нет это не оно. Это именно для интерраптов железных.
Честно сказать я уже запутался в отношении целей вашего изыскания. Но кажется вы хотите отлавливать команды на "железном" уровне. Для этого есть прерывание UART_AT_CMD_CHAR_DET_INT и одно из решений с его использованием https://esp32.com/viewtopic.php?t=1805
Viktor
Доброго дня.Может кто подскажет как решить проблему. Есть проблема небольшая. На ESP8266 крутится веб сервер. На нем размещена страница с кнопкой, которая по нажатию меняет состояние либо 0, либо 1. Есть три клиента, которые раз в минуту должны опросить это состояние и включить моторчик, если 1. Суть проблемы - при работе с одним клиентом все нормально. Как только запускается второй клиент, то оба начинают работать не стабильно, то получают состояние, то не получают. То делают это не раз в минуту, а вообще не понятно как. Веб сервер, который использую: MDNS.begin(host); httpUpdater.setup(&server); server.on("/", HTTP_handleRoot); server.onNotFound(HTTP_handleRoot); server.begin(); MDNS.addService("http", "tcp", 80); Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host); delay(100); Serial.println("HTTP server started"); delay(20);
AntikillerVova 🇷🇺
Господа, есть bme-280 SPI возможно его подключить по I2C ?
AntikillerVova 🇷🇺
Может кто пробовал
Andy
Господа, есть bme-280 SPI возможно его подключить по I2C ?
https://303421.selcdn.ru/soel-upload/clouds/1/iblock/8ee/8ee4ef32d00d7f41bd6f670f96abe051/200802042.pdf
AntikillerVova 🇷🇺
Что это?
Andy
Василий
Господа, есть bme-280 SPI возможно его подключить по I2C ?
bme280 - сам по себе имеет интерфейс и SPI и I2C -ненадо изобретать никаих переходников - просто надо правильно подключить
Василий
в документации приведены обе схемы подключения
Ivansuper
Да, только у него существуют разные платы распаянные -- на одних 4 контакта только для i2c, а на других больше для spi
Василий
и что - это высшая материя сделать несколько перемычек ?
Ivansuper
и что - это высшая материя сделать несколько перемычек ?
Если ты знаешь что сделать и как -- скидывай, а не рассказывай, какие мы глупые, пожалуйста
Василий
скинуть документацию?
Василий
Василий
AntikillerVova 🇷🇺
Спс )))
AntikillerVova 🇷🇺
А что за VDDio?
Ivansuper
А что за VDDio?
Скачай все таки даташит на bme280. Там должны быть описаны понятия такого рода
Ivansuper
Или у тебя с английским не очень?
Василий
А что за VDDio?
отдельное питание - цифровой части, но в нашем/вашем случае - оно общее, т.е. Vdd и VDDio - запитаны в одной точке
Ivansuper
Судя по всему можно пользоваться шиной питания esp и не заморачиваться
Ivansuper
(только заметил, что мне подсунули даташит на bme180, но у 280 тоже 3.6В максимум)
Василий
по сути 280 продолжение 180 +- все одинаково
AntikillerVova 🇷🇺
Спасибо господа за помощь
AntikillerVova 🇷🇺
👍
AntikillerVova 🇷🇺
Что можно подключить по i2c это очень хорошо
Viktor
Народ, а может кто-то помочь написать ассинхронный веб сервер. У меня esp12 и чет вообще ничего не собирается, даже примеры
Viktor
https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/index.html
спасибо, но проблемка чуть в другом. Берем пример - /********* Руи Сантос Более подробно о проекте на: https://randomnerdtutorials.com *********/ // Импортируем необходимые библиотеки: #include "WiFi.h" #include "ESPAsyncWebServer.h" #include "FS.h" // Вставьте ниже SSID и пароль для своей WiFi-сети: const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; // Задаем GPIO-контакт, к которому подключен светодиод: const int ledPin = 2; // Создаем экземпляр класса «AsyncWebServer» // под названием «server» и задаем ему номер порта «80»: AsyncWebServer server(80); // Меняем заглушку на текущее состояние светодиода: String processor(const String& var){ // Создаем переменную для хранения состояния светодиода: String ledState; Serial.println(var); if(var == "STATE"){ if(digitalRead(ledPin)){ ledState = "ON"; } else{ ledState = "OFF"; } Serial.print(ledState); return ledState; } return String(); } void setup(){ // Включаем последовательную коммуникацию (для отладки): Serial.begin(115200); pinMode(ledPin, OUTPUT); // Инициализируем SPIFFS: if(!SPIFFS.begin(true)){ Serial.println("An Error has occurred while mounting SPIFFS"); // "При монтировании SPIFFS произошла ошибка" return; } // Подключаемся к WiFi: WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); // "Подключаемся к WiFi..." } // Печатаем в мониторе порта локальный IP-адрес ESP32: Serial.println(WiFi.localIP()); // URL для корневой страницы веб-сервера: server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(SPIFFS, "/index.html", String(), false, processor); }); // URL для файла «style.css»: server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(SPIFFS, "/style.css", "text/css"); }); // URL для переключения GPIO-контакта на «HIGH»: server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request){ digitalWrite(ledPin, HIGH); request->send(SPIFFS, "/index.html", String(), false, processor); }); // URL для переключения GPIO-контакта на «LOW»: server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request){ digitalWrite(ledPin, LOW); request->send(SPIFFS, "/index.html", String(), false, processor); }); // Запускаем сервер: server.begin(); } void loop(){ }
Viktor
и проверяем его. В ответ получаем - Arduino: 1.8.13 (Windows 10), Плата:"Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200" C:\111\sketch_jul21b\sketch_jul21b.ino: In function 'void setup()': sketch_jul21b:47:24: error: no matching function for call to 'fs::FS::begin(bool)' if(!SPIFFS.begin(true)){ ^ C:\111\sketch_jul21b\sketch_jul21b.ino:47:24: note: candidate is: In file included from C:\Users\User\Documents\Arduino\libraries\ESPAsyncWebServer\src/ESPAsyncWebServer.h:27:0, from C:\111\sketch_jul21b\sketch_jul21b.ino:8: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.1\cores\esp8266/FS.h:204:10: note: bool fs::FS::begin() bool begin(); ^ C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.1\cores\esp8266/FS.h:204:10: note: candidate expects 0 arguments, 1 provided sketch_jul21b:54:28: error: invalid conversion from 'const char*' to 'char*' [-fpermissive] WiFi.begin(ssid, password); ^ In file included from C:\111\sketch_jul21b\sketch_jul21b.ino:7:0: C:\Program Files (x86)\Arduino\libraries\WiFi\src/WiFi.h:79:9: error: initializing argument 1 of 'int WiFiClass::begin(char*, const char*)' [-fpermissive] int begin(char* ssid, const char *passphrase); ^ exit status 1 no matching function for call to 'fs::FS::begin(bool)'
Viktor
библиотека есть - #include "FS.h". Чего ему еще надо то?
Viktor
если - #include "SPIFFS.h", тогда -SPIFFS.h: No such file or directory
Andy
вот же "sketch_jul21b:54:28: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]"
Andy
и вот 9: error: initializing argument 1 of 'int WiFiClass::begin(char*, const char*)'
romanetz
В 8266 есть SPIFFS?
romanetz
...
Andy
В 8266 есть SPIFFS?
Есть, недавно запускал
Andy
это потом, до этого ошибка еще. С этим понятно
Тогда фиг его знает, с арудино дело не имел
Viktor
вообще феерия, поправил все. Результат - collect2.exe: error: ld returned 1 exit status exit status 1 Ошибка компиляции для платы Generic ESP8266 Module.
Viktor
Нужен ассинхронный веб сервер
вопрос - а зачем нужен асинхронный сервер если клиентов всего два?Синхронный сервер должен же справиться с такой сумашедшей нагрузкой
Slava
вопрос - а зачем нужен асинхронный сервер если клиентов всего два?Синхронный сервер должен же справиться с такой сумашедшей нагрузкой
скорее всего, я согласен, нужно ревизию кода провести, гдето в лупе есть долгое выполнение кода.
Может кому то интересно будет. Язык RU #book
Марко Шварц - Интернет вещей с ESP8266 (+file) - 2018
Andrew