Статья

Прошивка ESP32 Cam на основе ESP-HomeKit

Всем привет!) Продолжаю разбираться с непосредственной разработкой и прошивкой модулей 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 поток в сеть может отдавать?

просто ни у кого про это не написано, все сосредоточены исключительно на подключении ее к ХК.

Не готов ответить на этот счет. Беглый поиск в исходниках прошивки нашел пару мест, где фигурирует название этого протокола. Так что нужно садиться и изучать это. Либо задать этот вопрос разработчику прошивки в issues на гитхабе)

сканером портов посмотри, что открыто.

554 должен быть для ртсп

Хк вроде бы этот протокол использует

У меня есть статья про это 

Вопрос, если такую камеру в хк прокинуть, хк будет хранить с неё данные в облаке? Я прост помню что на презе эпл что-то такое говорила, но у меня камер нет.

Скорее всего это также зависит от прошивки, нужно изучать исходники. Скорее всего, в данной реализации нет такой поддержки. В самом Home новых опций настройки не появилось при добавлении этой камеры с этой прошивкой

Разумеется нет, это лишь для сертифицированных камер

Нет, в облаке будут храниться данные только с официально сертефицированных камер

Пытаюсь собрать по статье. У автора уже весьма заряженная макось и так просто не получится )


В инструкцию следует добавить:


— Недостаточно скопировать код через git clone. Потом обязательно надо 


git submodule update --init --recursive

— PATH для zsh (которая шелл по умолчанию в каталине) прописывается в ~/.zshenv


— До установки тулчейна:


pip install nose --user
pip install tornado --user

— До make menuconfig надо установить консольные утилиты Xcode:


xcode-select --install

В итоге у меня все собралось, запустилось и добавилось, но камера показывает лишь картинку (фоточку), которая обновляется раз в секунд 20. При попытке "зайти" в камеру и посмотреть видео ничего не происходит, "камера не отвечает".


В логах ничего подозрительного кроме того что камера ребутится при попытке просмотра видео =) Ну и красненьким только это:

E (2499) gpio: gpio_install_isr_service(410): GPIO isr service already installed

Ошибка не гуглится, что делать хз, видать не судьба )

тема интересная , а как прошить 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">эту статью, в них рассказаны некоторые основы, с которыми также желательно ознакомиться.

文章非常棒,帮助我解决了问题,感谢!

Вы очень много упустили в настройках esp32-homekit-camera, как минимум:

  • Partition Table
    • Partition Table = Custom partition table CSV
    • Custom partition CSV file = partitions.csv
  • Component config
    • ESP32-specific
      • Support for external, SPI-connected RAM = check
      • SPI RAM config
        • Initialize SPI RAM when booting the ESP32 = check
        • SPI RAM access method = Make RAM allocatable using malloc() as well
    • Camera configuration
      • OV2640 Support = check
    • HomeKit
      • SPI flash address for storing HomeKit data = 0x3A0000
  • ESP32 HomeKit Camera
    • WiFi SSID and WiFi Password
    • Camera Pins
      • Select Camera Pinout = your variant of module


Друзья помогите. Запарол камень?

вот что пишет терминал :

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
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

https://sprut.ai/static/media/cache/00/58/76/5/4188536/61175/1000x_image.png?1592867198" alt="1000x_image.png?1592867198" />

А нет планов перевыпустить статью с последними изменениями и основываясь на комментариях под статьей? Попытался реализовать но ничего не получилось, какая-то ссылка битая, ругается 🙄


Вернуться назад

Устройства


Espressif Systems

ESP8266

(1 отзыв)

Espressif Systems

ESP32 Cam

(3 отзыва)

Вернуться назад