Страница 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);