Страница 1 из 2
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 09 ноя 2021, 16:03
AndrejK
Появилась идея, от ESP32 Cam, получать фото либо видео в момент, когда срабатывает датчик движения (картинка 1) либо датчик открытия. Но, возникла проблема. Если использовать скетч (
https://github.com/sui77/rc-switch/tree ... emo_Simple) не инициализируя камеру, то все прекрасно работает (картинка 2). А если камеру инициализировать, то контроллер уходит в постоянный ребут.
Решение проблемы было найдено в интернете
https://github.com/espressif/esp-who/is ... -518142982 . T.e. attachInterrupt не дружит с камерой. Я пробовал лезть в библиотеку RCSwitch и править ее, но у меня не получилось.
В RCSwitch.cpp, методом тыка, правил 562, добавив 565-573 и 685 заменил 686 строкой. Так же в RCSwitch.h убрал/добавил 159/160 строки.
Прошу помочь. Спасибо.
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 10 ноя 2021, 05:28
aidar_i
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 10 ноя 2021, 10:50
AndrejK
Тему глянул. В проектах отсутствуют прерывания. В случае с RCSwitch, сигнал приходит на ножку МК, что вызывает прерывания, а attachInterrupt в ESP32 Cam, наверное конфликтует с другими, используемыми алгоритмом камеры, прерываниями.
Отправлено спустя 15 минут 21 секунду:
Сижу играюсь с настройками. Подозревал, что не выдает камера UXGA (1600x1200) по качеству. И на самом деле, фото получаются 1280х960. А если заменить на FRAMESIZE_SXGA (1280x1024), то фото 1280x1024, т.е. даже лучше. Не пойму. PSRAM Enabled.
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 10 ноя 2021, 15:24
aidar_i
Выложите хотя бы скетч свой, который грузите, если нет проекта в флпроге.
Зачем именно рссвитч?
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 10 ноя 2021, 23:32
AndrejK
На основании вашего проекта, сымитировал обозначенную выше проблему. После компиляции скетча, камера уходит в panic rebut. Если же закомментировать 67 и 226-229 строчки в скетче (прерывания и обработчик), то камера работает.
Зачем рссвитч. Ставлю несколько камер на участке, где то внутри... Каждый датчик-сенсор имеет свой посылаемый код...
Прием в работе.PNG
На всякий случай, шлет несколько раз.
Камера получает двоичный сигнал, дешифрует, а дальше
if (Sensor == 15556553 || Sensor == xxxxxxxx || Sensor == xxxxxxxx ...) {
SendPhoto....;
}
Другая камера отсылает фото с задержкой (майл, телеграмм, чтобы не гневить), ну и так далее... Таким образом я избавлюсь от оплаты за симку в китайской сигнализации, которая при срабатывании сенсоров, звонит мне на телефон, а вместо звонка, я сразу буду видеть, что творится. Китайская сигнализация "Ввести войска для обороны", так она говорит
Отправлено спустя 2 часа 14 минут 16 секунд:
... 33 PIN на ESP32 Cam, он OUTPUT, это LED маленький красненький. В своих проектах я его выпаивал под другие дела, чтобы освободить ПИН под INPUT.
Схема ESP32 Cam PIN33.jpg
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 11:13
aidar_i
AndrejK писал(а): 10 ноя 2021, 23:32
После компиляции скетча, камера уходит в panic rebut.
Где скетч?
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 15:07
AndrejK
aidar_i писал(а): 11 ноя 2021, 11:13Где скетч?

Вложение "Передача фото сон Прерывания.flp" под схемой ESP32 Cam.
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 20:13
Anydy
Вот честно....то же самое что и с ЕСП8266 -- модуль кое как справляется с видео и ВиФи ....а вы навешиваете на него еще что то.....
У меня два ESP32CAM и то постоянно висли от компутерного блока питания......
Мораль такова - поиграться пойдет...а для надежного видео наблюденения не думаете что лучше использовать специальные контроллеры .....а не платку за 300р?
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 20:49
AndrejK
Anydy писал(а): 11 ноя 2021, 20:13
У меня два ESP32CAM и то постоянно висли от компутерного блока питания......
Потому я разбиваю работу видео и ВиФи по разным ядрам и, все ОК.

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 20:57
Anydy
[ref]AndrejK[/ref], Так давайте скетчи.....именно работа по RTSP никак иначе.....библиотеку я грузил....глюк был сплошной...а отправка фоток --что то мне думается это побаловаться.....
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 21:25
AndrejK
Я совсем не программист!
... тут как обычно
заканчиваем этим...
TaskHandle_t Task1;
TaskHandle_t Task2;
...
void setup() {...
... стандартно
добавляем...
//создаем задачу, которая будет выполняться на ядре 0 с максимальным приоритетом (1)
xTaskCreatePinnedToCore(
Task1code, /* Функция задачи. */
"Task1", /* Ее имя. */
10000, /* Размер стека функции */
NULL, /* Параметры */
1, /* Приоритет */
&Task1, /* Дескриптор задачи для отслеживания */
0); /* Указываем пин для данного ядра */
delay(500);
//Создаем задачу, которая будет выполняться на ядре 1 с наивысшим приоритетом (1)
xTaskCreatePinnedToCore(
Task2code, /* Функция задачи. */
"Task2", /* Имя задачи. */
10000, /* Размер стека */
NULL, /* Параметры задачи */
1, /* Приоритет */
&Task2, /* Дескриптор задачи для отслеживания */
1); /* Указываем пин для этой задачи */
delay(500);
} // закрыли void setup()
void Task1code( void * pvParameters ) {
for (;;) {
//...............................ota
if (ESPControllerWifiClient_IsNeedReconect)
{
_esp32WifiModuleClientReconnect();
ESPControllerWifiClient_IsNeedReconect = 0;
}
ESPControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (_otaUpadterStatus)
{
ArduinoOTA.handle();
}
else
{
if (ESPControllerWifiClient_status)
{
ArduinoOTA.setHostname ("xxxxxxxxxxx");
ArduinoOTA.setPassword((const char *)"xxxxxxxxxx");
ArduinoOTA.begin();
_otaUpadterStatus = 1;
}
}
if (ESPControllerWifiClient_status)
{
if (! ESPControllerWifiClient_HRD)
{
ESPControllerWifiClient_ip = WiFi.localIP();
ESPControllerWifiClient_subnet = WiFi.subnetMask();
ESPControllerWifiClient_gateway = WiFi.gatewayIP();
ESPControllerWifiClient_dns = WiFi.dnsIP();
ESPControllerWifiClient_HRD = 1;
}
}
else
{
ESPControllerWifiClient_HRD = 0;
}
//......................................ota
// -----------------reshenie problemy s WD--------------
TIMERG0.wdt_wprotect = TIMG_WDT_WKEY_VALUE;
TIMERG0.wdt_feed = 1;
TIMERG0.wdt_wprotect = 0;
// -----------------reshenie problemy s WD--------------
}
}
//--------------------------------------End Task1-------------
void Task2code( void * pvParameters ) {
for (;;) {
Сюда пишем все остальное.
}
}
//А так выглядит void loop
void loop() {
}
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 21:39
Anydy
у нас принято писать какую библиотеку используем....и конечно ссылку на гитхаб этой библиотеки.......
Куски кода что вы выложили ничего не дадут....
Ну и конечно проект в FLprog
Отправлено спустя 56 секунд:
AndrejK писал(а): 11 ноя 2021, 21:25
//А так выглядит void loop
void loop() {
}

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 21:39
AndrejK
AndrejK писал(а): 11 ноя 2021, 21:25
Сюда пишем все остальное.
... из void loop()
Функции оставляем за рамками void loop()
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 21:46
Anydy
Может я что то не понимаю? Но Loop это основной цикл в работе......как МК запустился....выполняется ТОЛЬКО LOOP и ничего больше
А воз из Loop можно уже запускать другие функции!
У вас же Loop пустой....тоесть проинициализировали МК и он как бы на паузе...
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 21:52
AndrejK
Anydy писал(а): 11 ноя 2021, 21:39
Куски кода что вы выложили ничего не дадут....
Ну и конечно проект в FLprog
По ядрам я раскидывал не в FLprog. Я об этом писал, показывал, и после этого на сайте появились блоки по рассредотачиванию задач по двум ядрам.
В void loop() идет сначала вифи, ОТА. Кидаете в задачи Task1, а остальное из void loop() в задачи Task2. Переменные ядра видят. Т.е. если в первом ядре булевая xxxx приняла 1, то действие на нулевом ядре, как пример, в цикле if (xxxx == 1) {выполнится}.
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 21:55
Anydy
Ну молодец что соображаешь! Создай отдельную тему и подробно опиши как это сделать на Flprog!
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 22:04
AndrejK
Anydy писал(а): 11 ноя 2021, 21:46
Но Loop это основной цикл в работе
Loop по умолчанию выполняется либо на первом, либо на нулевом ядре. Не помню. А Task1 и Task2 - это Loop для каждого ядра по отдельности. Потому стандартный Loop на уже ничему.
Отправлено спустя 8 минут 3 секунды:
Anydy писал(а): 11 ноя 2021, 21:55
Ну молодец что соображаешь! Создай отдельную тему и подробно опиши как это сделать на Flprog!
Я с этими блоками еще не ознакомился. У меня на повестке, в выходные, подключение китайского инфракрасного фонаря и проверка качества ночного фото и видео.
Скиньте свой скетч, раскидаю по ядрам как пример.
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 22:07
Anydy
Интересно.....то есть МК запустился....периферия зависла...и нам Loop ни к чему....пусть МК крутится хоть и все остальное висит? Так?
Отправлено спустя 2 минуты 34 секунды:
AndrejK писал(а): 11 ноя 2021, 22:04
Скиньте свой скетч, раскидаю по ядрам как пример.
Не моё --
https://github.com/geeksville/Micro-RTSP
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 22:18
AndrejK
Не. Такое, что выделено я не знаю.
--------------------------------------
void loop()
{
#ifdef ENABLE_WEBSERVER
server.handleClient();
#endif
#ifdef ENABLE_RTSPSERVER
uint32_t msecPerFrame = 100;
static uint32_t lastimage = millis();
--------------------------------------
Давайте скетч из FLprog. Где нам знакомо...
if (ESPControllerWifiClient_IsNeedReconect)
{
_esp32WifiModuleClientReconnect();
ESPControllerWifiClient_IsNeedReconect = 0;
}
ESPControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch
Добавлено: 11 ноя 2021, 22:52
Anydy
// я и сам далеко не программист.....но вроде по логике должно быть понятно ---
#ifdef ENABLE_WEBSERVER
server.handleClient();
//-- если сервер по умолчанию подключен -- #ifdef ENABLE_WEBSERVER---вот этот -- server.handleClient(); // конечно он должен быть прописан раньше ...
#endif
//Значит перестаем делать проверку
Ну вроде и дальше в таком же стиле!
Отправлено спустя 14 минут 58 секунд:
AndrejK писал(а): 11 ноя 2021, 22:18
Давайте скетч из FLprog. Где нам знакомо...
if (ESPControllerWifiClient_IsNeedReconect)
{
_esp32WifiModuleClientReconnect();
ESPControllerWifiClient_IsNeedReconect = 0;
}
ESPControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
Нее раз уж взялись писать на С++ то элементарные конструкции языка С++ вам должны быть знакомы.....например для mqtt
ЗЫ.. это кусок кода для датчика температуры
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
dtostrf(temp, 3, 2, tempchar);//преобразуем float - char
String payload = "{\"data\":";
payload += tempchar;
payload += ",\"write\":true";
//payload += counter;
payload += "}";
вот это тут мало кто знает --- dtostrf(temp, 3, 2, tempchar);