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

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#1

Сообщение AndrejK » 09.11.2021{, 16:03}

Появилась идея, от 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 строки.

Прошу помочь. Спасибо.
Вложения
Log.txt
Log
(73.68 КБ) 10 скачиваний
Не получилось.PNG
Не получилось
RCSwitch.h
Правленый файл
(6.58 КБ) 9 скачиваний
RCSwitch.cpp
Правленый файл
(23.99 КБ) 10 скачиваний
PIR sensor.jpg
картинка 1
Прием в работе.PNG
картинка 2

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#2

Сообщение aidar_i » 10.11.2021{, 05:28}


AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#3

Сообщение AndrejK » 10.11.2021{, 10:35}

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

Отправлено спустя 15 минут 21 секунду:
Сижу играюсь с настройками. Подозревал, что не выдает камера UXGA (1600x1200) по качеству. И на самом деле, фото получаются 1280х960. А если заменить на FRAMESIZE_SXGA (1280x1024), то фото 1280x1024, т.е. даже лучше. Не пойму. PSRAM Enabled.

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#4

Сообщение aidar_i » 10.11.2021{, 15:24}

Выложите хотя бы скетч свой, который грузите, если нет проекта в флпроге.
Зачем именно рссвитч?

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#5

Сообщение AndrejK » 10.11.2021{, 21:18}

На основании вашего проекта, сымитировал обозначенную выше проблему. После компиляции скетча, камера уходит в 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 PIN33.jpg (58.94 КБ) 463 просмотра
Вложения
Передача фото сон Прерывания .flp
(349.68 КБ) 25 скачиваний

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#6

Сообщение aidar_i » 11.11.2021{, 11:13}

AndrejK писал(а):
10.11.2021{, 23:32}
После компиляции скетча, камера уходит в panic rebut.
Где скетч?

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#7

Сообщение AndrejK » 11.11.2021{, 15:07}

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

Anydy

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

#8

Сообщение Anydy » 11.11.2021{, 20:13}

Вот честно....то же самое что и с ЕСП8266 -- модуль кое как справляется с видео и ВиФи ....а вы навешиваете на него еще что то.....
У меня два ESP32CAM и то постоянно висли от компутерного блока питания......
Мораль такова - поиграться пойдет...а для надежного видео наблюденения не думаете что лучше использовать специальные контроллеры .....а не платку за 300р?

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#9

Сообщение AndrejK » 11.11.2021{, 20:49}

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

Anydy

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

#10

Сообщение Anydy » 11.11.2021{, 20:57}

AndrejK, Так давайте скетчи.....именно работа по RTSP никак иначе.....библиотеку я грузил....глюк был сплошной...а отправка фоток --что то мне думается это побаловаться.....

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#11

Сообщение AndrejK » 11.11.2021{, 21:25}

Я совсем не программист!

... тут как обычно

заканчиваем этим...
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

#12

Сообщение Anydy » 11.11.2021{, 21:38}

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

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

}
:smile427: :smile453:

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#13

Сообщение AndrejK » 11.11.2021{, 21:39}

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

Anydy

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

#14

Сообщение Anydy » 11.11.2021{, 21:46}

Может я что то не понимаю? Но Loop это основной цикл в работе......как МК запустился....выполняется ТОЛЬКО LOOP и ничего больше
А воз из Loop можно уже запускать другие функции!
У вас же Loop пустой....тоесть проинициализировали МК и он как бы на паузе...

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#15

Сообщение AndrejK » 11.11.2021{, 21:52}

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

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

Anydy

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

#16

Сообщение Anydy » 11.11.2021{, 21:55}

Ну молодец что соображаешь! Создай отдельную тему и подробно опиши как это сделать на Flprog!

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#17

Сообщение AndrejK » 11.11.2021{, 21:56}

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

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

Anydy

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

#18

Сообщение Anydy » 11.11.2021{, 22:04}

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

Отправлено спустя 2 минуты 34 секунды:
AndrejK писал(а):
11.11.2021{, 22:04}
Скиньте свой скетч, раскидаю по ядрам как пример.
Не моё -- https://github.com/geeksville/Micro-RTSP

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

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

#19

Сообщение AndrejK » 11.11.2021{, 22:18}

Не. Такое, что выделено я не знаю.
--------------------------------------
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

#20

Сообщение Anydy » 11.11.2021{, 22:37}

// я и сам далеко не программист.....но вроде по логике должно быть понятно ---
#ifdef ENABLE_WEBSERVER
server.handleClient();
//-- если сервер по умолчанию подключен -- #ifdef ENABLE_WEBSERVER---вот этот -- server.handleClient(); // конечно он должен быть прописан раньше ...
#endif
//Значит перестаем делать проверку

Ну вроде и дальше в таком же стиле!

Отправлено спустя 14 минут 58 секунд:
AndrejK писал(а):
11.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);

Ответить

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