ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение 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 строки.

Прошу помочь. Спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение aidar_i »

AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение AndrejK »

Тему глянул. В проектах отсутствуют прерывания. В случае с RCSwitch, сигнал приходит на ножку МК, что вызывает прерывания, а attachInterrupt в ESP32 Cam, наверное конфликтует с другими, используемыми алгоритмом камеры, прерываниями.

Отправлено спустя 15 минут 21 секунду:
Сижу играюсь с настройками. Подозревал, что не выдает камера UXGA (1600x1200) по качеству. И на самом деле, фото получаются 1280х960. А если заменить на FRAMESIZE_SXGA (1280x1024), то фото 1280x1024, т.е. даже лучше. Не пойму. PSRAM Enabled.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение aidar_i »

Выложите хотя бы скетч свой, который грузите, если нет проекта в флпроге.
Зачем именно рссвитч?
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение aidar_i »

AndrejK писал(а): 10 ноя 2021, 23:32 После компиляции скетча, камера уходит в panic rebut.
Где скетч?
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение AndrejK »

aidar_i писал(а): 11 ноя 2021, 11:13Где скетч?
:smile37: Вложение "Передача фото сон Прерывания.flp" под схемой ESP32 Cam.
Anydy

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение Anydy »

Вот честно....то же самое что и с ЕСП8266 -- модуль кое как справляется с видео и ВиФи ....а вы навешиваете на него еще что то.....
У меня два ESP32CAM и то постоянно висли от компутерного блока питания......
Мораль такова - поиграться пойдет...а для надежного видео наблюденения не думаете что лучше использовать специальные контроллеры .....а не платку за 300р?
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение AndrejK »

Anydy писал(а): 11 ноя 2021, 20:13 У меня два ESP32CAM и то постоянно висли от компутерного блока питания......
Потому я разбиваю работу видео и ВиФи по разным ядрам и, все ОК. :smile198:
Anydy

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение Anydy »

[ref]AndrejK[/ref], Так давайте скетчи.....именно работа по RTSP никак иначе.....библиотеку я грузил....глюк был сплошной...а отправка фоток --что то мне думается это побаловаться.....
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение 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() {

}
Anydy

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение Anydy »

у нас принято писать какую библиотеку используем....и конечно ссылку на гитхаб этой библиотеки.......
Куски кода что вы выложили ничего не дадут....
Ну и конечно проект в FLprog

Отправлено спустя 56 секунд:
AndrejK писал(а): 11 ноя 2021, 21:25 //А так выглядит void loop
void loop() {

}
:smile427: :smile453:
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение AndrejK »

AndrejK писал(а): 11 ноя 2021, 21:25 Сюда пишем все остальное.
... из void loop()
Функции оставляем за рамками void loop()
Anydy

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение Anydy »

Может я что то не понимаю? Но Loop это основной цикл в работе......как МК запустился....выполняется ТОЛЬКО LOOP и ничего больше
А воз из Loop можно уже запускать другие функции!
У вас же Loop пустой....тоесть проинициализировали МК и он как бы на паузе...
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение AndrejK »

Anydy писал(а): 11 ноя 2021, 21:39 Куски кода что вы выложили ничего не дадут....
Ну и конечно проект в FLprog
По ядрам я раскидывал не в FLprog. Я об этом писал, показывал, и после этого на сайте появились блоки по рассредотачиванию задач по двум ядрам.

В void loop() идет сначала вифи, ОТА. Кидаете в задачи Task1, а остальное из void loop() в задачи Task2. Переменные ядра видят. Т.е. если в первом ядре булевая xxxx приняла 1, то действие на нулевом ядре, как пример, в цикле if (xxxx == 1) {выполнится}.
Anydy

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение Anydy »

Ну молодец что соображаешь! Создай отдельную тему и подробно опиши как это сделать на Flprog!
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение AndrejK »

Anydy писал(а): 11 ноя 2021, 21:46 Но Loop это основной цикл в работе
Loop по умолчанию выполняется либо на первом, либо на нулевом ядре. Не помню. А Task1 и Task2 - это Loop для каждого ядра по отдельности. Потому стандартный Loop на уже ничему.

Отправлено спустя 8 минут 3 секунды:
Anydy писал(а): 11 ноя 2021, 21:55 Ну молодец что соображаешь! Создай отдельную тему и подробно опиши как это сделать на Flprog!
Я с этими блоками еще не ознакомился. У меня на повестке, в выходные, подключение китайского инфракрасного фонаря и проверка качества ночного фото и видео.
Скиньте свой скетч, раскидаю по ядрам как пример.
Anydy

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение Anydy »

Интересно.....то есть МК запустился....периферия зависла...и нам Loop ни к чему....пусть МК крутится хоть и все остальное висит? Так?

Отправлено спустя 2 минуты 34 секунды:
AndrejK писал(а): 11 ноя 2021, 22:04 Скиньте свой скетч, раскидаю по ядрам как пример.
Не моё -- https://github.com/geeksville/Micro-RTSP
AndrejK
Сержант
Сообщения: 120
Зарегистрирован: 20 фев 2020, 13:16
Откуда: Вильнюс
Имя: Андрей

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение 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;
Anydy

ESP32 Cam, датчики-сенсоры 433МГц, RCSwitch

Сообщение 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);
Ответить

Вернуться в «Помогите, а то я "нимагу"»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей