Всем привет!) Продолжаю разбираться с непосредственной разработкой и прошивкой модулей ESP8266 и ESP32, и сегодня речь пойдет о прошивке ESP32 Cam. Ранее уже была статья (крайне рекомендую с ней ознакомиться, во избежании вопросов), которая описывала процесс прошивки и интеграции камеры в приложение Home, но этот процесс оказался не самым простым. Но @bj_tracer скинул варианты, где, при установленном esp-idf, прошивку можно собрать и залить за пару минут.
Настройка будет выполняться на macos Catalina. Windows и Linux - сорян, но думаю, что процесс аналогичен.
Также рекомендую посмотреть эту и эту статью, в них рассказаны некоторые основы, с которыми также желательно ознакомиться.
Начнем. Для начала выкачиваем репозиторий с исходным кодом прошивки. Прошивку можно сохранить в любое удобное место.
Далее нам необходимо установить ESP-IDF. Оригинальная статья.
Первый шаг – установка тулчейна, я разберу процесс установки для Mac. В статье выше есть примеры для Win/Linux.
1. Установка pip
sudo easy_install pip
Далее скачиваем архив с тулчейном.
Открываем терминал, создаем новую директорию esp32 в $HOME. Далее мы переходим и выполняем процесс распаковки архива. Обратите внимание, что эти команды нужно выполнить от имени админа с помощью sudo. В результате, тулчейн будет распакован в директорию ~/esp32/xtensa-esp32-elf/.
mkdir -p ~/esp32 cd ~/esp32 tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
Далее нам нужно прописать путь к тулчейну в $PATH. Это нужно для того, чтобы те прошивки, которые мы будем скачивать, в момент сборки "видели", где находится тулчейн и его исходники. Для этого открываем ~/.bash_profile и в конце дописываем экспорт путей. Последний экспорт нам понадобится чуть позже, просто пропишем его сейчас, чтобы позже не возвращаться.
... export PATH=$PATH:$HOME/esp32/xtensa-esp32-elf/bin export IDF_PATH=$HOME/esp32/esp-idf
На следующем этапе нам нужно скачать сам esp-idf (Espressif IoT Development Framework). Для этого возвращаемся в папку ~/esp32 и выкачиваем с гита фреймворк:
cd ~/esp32 git clone -b v3.3.1 --recursive https://github.com/espressif/esp-idf.git
Далее нам нужно установить необходимые инструменты для заливки прошивки. Они описаны в файле requirements.txt.
Если у вас возникнут какие-либо проблемы, в место $IDF_PATH вы можете указать путь самостоятельно, например, он будет ~/esp32/esp-idf/requirements.txt
На этом процесс подготовки закончен.
python -m pip install --user -r $IDF_PATH/requirements.txt
Подготовка к сборке
Переходим в каталог со скаченным esp32-homekit-camera и заходим в окно конфигурации (команда ниже). Если до этого все было сделано правильно, то вы увидите следующее окно:
cd /Documents/Home/esp32-homekit-camera make menuconfig
Нам необходимо указать Serial-порт. Для этого переходим в Serial flasher config -> Default serial port. Здесь указываем порт, по которому подключена камера к Mac. У меня это /dev/tty.usbserial-1460. Устанавливаем Bound rate на 115200. Flash SPI Mode -> DIO. Flash SPI speed -> 40 MHz. Ставим галку напротив Detect flash size when flashing bootloader.
Возвращаемся в корневое меню и переходим в раздел ESP32 HomeKit Camera. Здесь вы должны указать параметры WiFi сети: SSID и пароль. После переходим в Camera Pins –> Select camera pinout. В меню выбираем тип вашей камеры. У меня это ESP32-CAM by AI-Thinker. Если в результате прошивки и добавления девайса в Home, стрим не заведется, тогда перепроверьте этот параметр и поменяйте на другой.
Возвращаемся в корневое меню, переходим в Partition table –> Partition table и выбираем Custom partition table CSV. Файл с разметкой памяти находится в ранее скаченной прошивке ESP32-Cam, так что по поводу, где взять файлик, не переживаем. Если этого не сделать, то прошивка не будет работать как следует, в логах будет соответствующая информация.
На этом конфигурация окончена, нажимаем "Save", после сохранения CTRL C для выхода из меню.
Сборка прошивки
После выхода из меню конфигурации, вы должны остаться в той же папке, где были изначально, если нет - возвращаемся в папку с esp32-homekit-camera, в моем случае - это /Documents/Home/esp32-homekit-camera. Подключаем девайс в режиме Flash к Mac.
# Выполняем очистку модуля make erase_flash # После выполнения очитики нажимаем на RST на плате, выполняем сборку и заливку прошивки make flash # Убираем перемычку, еще раз прожимаем RST, и по необходимости, открываем serial-монитор make monitor
После анонса mDNS, камера будет доступна для обнаружения. Открываем Home –> Добавить новый аксессуар. Вводим код и видим нашу камеру. По умолчанию в прошивке установлен код 111-11-111. Если вам необходимо изменить этот код, открываем папку с прошивкой –> main –> app_main.c. В самом низу исходника вы сможете найти этот код, либо воспользоваться поиском по файлу. После изменения, нужно выполнить перекомпиляцию и заливку с помощью make flash.
В результате, мы добавили камеру в Home. Для чего ее использовать - решать только вам. Надеюсь, статья оказалась полезной для вас.
Рекомендации
Если вы хотите заново добавить устройство, то сначала удалите его из Home, после чего можно выполнить очистку памяти и выполнить процесс заливки.
Не стесняйтесь оставлять свои вопросы и пожелания разработчику фреймворка: https://github.com/maximkulkin/esp-homekit. На этой страничке также вы сможете найти необходимую информацию по mDNS анонсу, если вдруг Home не обнаруживает ваш девайс.
Спасибо за статью, неплохо было бы увидеть качество картинки и задержку
Если можно добавьте скрины с камеры, качество хочется увидеть, говорят что не очень, но есть надежда на лучшее :)
так качество от самой камеры зависит.
там модуль 2МП с матрицей
OV2640 (опционально можно
OV7670 заказать).
думаю, что полюбому надо ИК-подсветку прикручивать ибо внутри квартиры или на лестничной клетке у большинства недостаточная освещенность для камер ;)))
могу судить по имеющимся у меня р2р-камерам - одна так вообще круглосуточно в режиме ночной съемки живет (у них автопереключение фильтра и подсветки).
вопрос тут возник - камера просто rtsp поток в сеть может отдавать?
просто ни у кого про это не написано, все сосредоточены исключительно на подключении ее к ХК.
сканером портов посмотри, что открыто.
554 должен быть для ртсп
Хк вроде бы этот протокол использует
У меня есть статья про это
Вопрос, если такую камеру в хк прокинуть, хк будет хранить с неё данные в облаке? Я прост помню что на презе эпл что-то такое говорила, но у меня камер нет.
Скорее всего это также зависит от прошивки, нужно изучать исходники. Скорее всего, в данной реализации нет такой поддержки. В самом Home новых опций настройки не появилось при добавлении этой камеры с этой прошивкой
Разумеется нет, это лишь для сертифицированных камер
Нет, в облаке будут храниться данные только с официально сертефицированных камер
Пытаюсь собрать по статье. У автора уже весьма заряженная макось и так просто не получится )
В инструкцию следует добавить:
— Недостаточно скопировать код через git clone. Потом обязательно надо
— PATH для zsh (которая шелл по умолчанию в каталине) прописывается в ~/.zshenv
— До установки тулчейна:
— До make menuconfig надо установить консольные утилиты Xcode:
В итоге у меня все собралось, запустилось и добавилось, но камера показывает лишь картинку (фоточку), которая обновляется раз в секунд 20. При попытке "зайти" в камеру и посмотреть видео ничего не происходит, "камера не отвечает".
В логах ничего подозрительного кроме того что камера ребутится при попытке просмотра видео =) Ну и красненьким только это:
Ошибка не гуглится, что делать хз, видать не судьба )
тема интересная , а как прошить esp8622 ?можно поподробней,,,,
Я ранее рассказывал об этом, можно чекнуть другие мои посты https://sprut.ai/client/content/article/1255">раз https://sprut.ai/client/content/article/1252">два
Доброго дня .Ваши ссылки в начале статьи не работают . Возможно ли подправить .
Также рекомендую посмотреть https://sprut.ai/client/content/article/1252">эту и https://sprut.ai/client/content/article/1255">эту статью, в них рассказаны некоторые основы, с которыми также желательно ознакомиться.
文章非常棒,帮助我解决了问题,感谢!
Друзья помогите. Запарол камень?
вот что пишет терминал :
MacBook-Pro-Niko-663:esp32-homekit-camera power$ make erase_flash
Toolchain path: /Users/power/esp32/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Toolchain version: crosstool-ng-1.22.0-80-g6c4433a
Compiler version: 5.2.0
Python requirements from /Users/power/esp32/esp-idf/requirements.txt are satisfied.
Erasing entire flash...
esptool.py v2.8
Serial port /dev/cu.SLAB_USBtoUART
Connecting........_____....._____....._____....._____....._____.....__
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:62:ab:f8:56:f8
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
A fatal error occurred: Timed out waiting for packet content
make: *** [erase_flash] Error 2
и вот что пишет Visual Studio:
Building in release mode
https://sprut.ai/static/media/cache/00/58/76/5/4188536/61175/1000x_image.png?1592867198" alt="1000x_image.png?1592867198" />Compiling .pio/build/m5stack-core-esp32/src/ESP32-devcam.ino.cpp.o
Retrieving maximum program size .pio/build/m5stack-core-esp32/firmware.elf
Checking size .pio/build/m5stack-core-esp32/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [== ] 21.9% (used 71696 bytes from 327680 bytes)
Flash: [====== ] 61.8% (used 809874 bytes from 1310720 bytes)
Configuring upload protocol...
AVAILABLE: esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port...
Auto-detected: /dev/cu.SLAB_USBtoUART
Uploading .pio/build/m5stack-core-esp32/firmware.bin
esptool.py v2.6
Serial port /dev/cu.SLAB_USBtoUART
Connecting........_____....._
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 24:62:ab:f8:56:f8
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Warning: Could not auto-detect Flash size (FlashID=0x0, SizeID=0x0), defaulting to 4MB
Compressed 15872 bytes to 10319...
Wrote 15872 bytes (10319 compressed) at 0x00001000 in 0.3 seconds (effective 487.4 kbit/s)...
A fatal error occurred: Timed out waiting for packet header
*** [upload] Error 2
А нет планов перевыпустить статью с последними изменениями и основываясь на комментариях под статьей? Попытался реализовать но ничего не получилось, какая-то ссылка битая, ругается 🙄