nabto-esp32cam - Câmera remota baseada em ESP32 acessível por P2P

(Remote P2P accessible ESP32 based camera)

Created at: 2019-05-28 22:35:16
Language: C

uNabto ESP32 cam demo

Este projeto transforma o ESP32-CAM em uma câmera de vigilância remota P2P acessível. Ele usa o núcleo baseado em esp-idf FreeRTOS (em comparação com alguns outros demos que usam o núcleo do arduino). Também usa a biblioteca espressif esp32-cam com pequenas modificações (não foi possível fazer o reset funcionar).

O vídeo é MJPEG e o módulo pode transmitir remotamente (codificar para mjpeg e criptografar e verificar a integridade) um feed VGA em cerca de 10 quadros por segundo.

Você também deve ler o artigo do blog relacionado: https://www.nabto.com/esp32/

A estrutura

A estrutura do projeto é a seguinte


    +
    +-->+-------------+
    |   |    Main     |        This folder contains the initial setup
    |   +-------------+        and the application_event() function defining
    |                          the application
    +-->+-------------+
        |  Components |
        +-------------+
                      |
                      +------->+----------------+
                      |        | unabto         |    Don't edit here (link to other github rep)
                      |        +----------------+
                      |
                      +------->+----------------+
                      |        | unabto-esp-idf |    The platform integration
                      |        +----------------+
                      |
                      +------->+----------------+
                      |        | nabtotunnel    |    Nabto tunnel application
                      |        +----------------+
                      |
                      +------->+----------------+
                      |        | unabto-esp-    |    Client fingerprint database
                      |        | fingerprint    |    storage in NVS
                      |        +----------------+
                      |
                      +------->+----------------+
                               | esp32-camera   |    From the espressif github (not a link, since we adjusted)
                               +----------------+

O projeto ESP-IDF tem uma estrutura especial. Você pode ler mais sobre isso aqui: https://esp-idf.readthedocs.io/en/v1.0/build_system.html A fonte unabto e o código de integração são feitos como componentes e, portanto, residem na pasta de componentes IDF. O unabto sdk é um link de submódulo para a fonte genérica unabto.

A configuração / comissionamento inicial e o aplicativo estão localizados na pasta principal. unabto_application.c contém o aplicativo (dentro da função application_event), o main.c contém a instalação e configuração do módulo WiFi.

Como configurar

Etapa 1: configurar o ambiente de compilação ESP-IDF

Siga a configuração do conjunto de ferramentas ESP-IDF

http://esp-idf.readthedocs.io/en/stable/get-started/index.html (AVISO !!! É importante usar a versão "estável", não mais tarde .. Problemas com fcntl foram detectados em final de junho de 2019)

Etapa 2: clonar o repositório

git clone --recursive https://github.com/nabto/nabto-esp32cam.git

Etapa 3: faça menuconfig

Entre no menu "Configuração da câmera"

Edite / ajuste os seguintes itens de menu:

  • Nome do ponto de acesso wi-fi (SSID): o ponto de acesso wi-fi ao qual você deseja que o módulo seja conectado
  • Senha WIFI: a senha usada pelo ponto de acesso
  • ID da Nabto: a ID do dispositivo Nabto que você obtém da sua conta do AppMyProduct
  • Chave Nabto - 32 caracteres hexadecimais: A chave para a identificação do dispositivo específico que você inseriu no item mencionado anteriormente

Fiação da câmera! Se você tiver uma placa ESP-EYE, nada mais precisa ser configurado se você tiver uma “ESP32 Cam” da Ai Tinker, você precisa configurar isso também (também no menu “Configuração da câmera”).

Etapa 3: construir o projeto

make

Etapa 4: atualize a imagem

Possivelmente, você precisa ajustar o dispositivo serial a ser usado para flashing, que é configurado na parte menuconfig, mas principalmente a configuração padrão irá corresponder à sua plataforma.

make flash

Como testar o aplicativo

Monitore a saída da placa

Usando o comando monitor, você deverá ver uma impressão semelhante à seguinte sempre que o ESP32-EVB for inicializado:

Procure o "conectado!" dizendo que o dispositivo sabe como se conectar ao seu WIFI. Procure também a mudança de estado do Nabto para "ATTACHED", o que significa que o dispositivo foi conectado com sucesso à infraestrutura da Nabto (registrado e online, aguardando as solicitações de conexão dos clientes). O endereço do serviço de nuvem (controlador) pode variar dependendo da região geográfica (temos 4 datacenters) e da disponibilidade.

00:00:01:457 main.c(382) connected!
00:00:01:460 main.c(388) IP Address:  192.168.2.147
00:00:01:465 main.c(389) Subnet mask: 255.255.255.0
00:00:01:470 main.c(390) Gateway:     192.168.2.1
00:00:01:475 unabto_application.c(59) In demo_init
00:00:01:479 unabto_application.c(78) Before fp_mem_init
00:00:01:495 unabto_application.c(81) Before acl_ae_init
00:00:01:495 unabto_common_main.c(110) Device id: 'jicnkjqs.ev9dbf.appmyproduct.com'
00:00:01:498 unabto_common_main.c(111) Program Release 4.4.0-alpha.0
00:00:01:505 network_adapter.c(140) Socket opened: port=5570
00:00:01:510 network_adapter.c(140) Socket opened: port=49153
00:00:01:515 unabto_stream_event.c(235) sizeof(stream__)=328
00:00:01:521 unabto_context.c(55) SECURE ATTACH: 1, DATA: 1
00:00:01:526 unabto_context.c(63) NONCE_SIZE: 32, CLEAR_TEXT: 0
00:00:01:532 unabto_common_main.c(183) Nabto was successfully initialized
00:00:01:539 unabto_context.c(55) SECURE ATTACH: 1, DATA: 1
00:00:01:543 unabto_context.c(63) NONCE_SIZE: 32, CLEAR_TEXT: 0
00:00:01:550 network_adapter.c(140) Socket opened: port=49154
00:00:01:555 unabto_attach.c(770) State change from IDLE to WAIT_DNS
00:00:01:561 unabto_attach.c(771) Resolving DNS for jicnkjqs.ev9dbf.appmyproduct.com
00:00:01:675 unabto_attach.c(790) Resolved DNS for jicnkjqs.ev9dbf.appmyproduct.com to:
00:00:01:675 unabto_attach.c(796)   Controller ip: 34.232.129.33
00:00:01:678 unabto_attach.c(802) State change from WAIT_DNS to WAIT_BS
00:00:01:887 unabto_attach.c(480) State change from WAIT_BS to WAIT_GSP
00:00:01:888 unabto_attach.c(481) GSP address: 34.194.195.231:5565
00:00:01:895 unabto_attach.c(270) ########    U_INVITE with LARGE nonce sent, version: - URL: -
00:00:02:089 unabto_attach.c(563) State change from WAIT_GSP to ATTACHED

Para testar a câmera, você pode tentar acessar: http: //: 8081 /

Que mostrará algo assim:

Baixe o aplicativo de vídeo AMP

Baixe o aplicativo para Android ou iPhone na app store

Pareie o aplicativo de vídeo com o módulo wi-fi

Configure seu telefone para ser conectado à mesma rede WIFI que o dispositivo. Isso é ultra importante, pois o aplicativo e o dispositivo farão uma descoberta de transmissão para se encontrarem. O aplicativo criará um certificado PKI anônomo e enviará a impressão digital da chave (como SSH) para o dispositivo na rede local que é considerado "seguro" (ou seja, não emparelhe na rede pública). O dispositivo adiciona essa impressão digital à lista de controle de acesso e, depois disso, o dispositivo agora aceitará que o aplicativo possa se conectar remotamente. Leia mais sobre as listas de controle de acesso da Nabto e emparelhamento aqui .

Conecte-se e veja o vídeo

Agora você deve conseguir se conectar à câmera ao clicar no logotipo da câmera.