Documentacao
ESP32-CAM
Conecte uma camera ESP32-CAM ao IoTsys usando WebSocket autenticado, frames JPEG binarios e viewer protegido no navegador.
Fluxo de streaming
1. Camera
Crie um dispositivo do tipo Camera no painel para gerar usuario e senha do publisher.
2. Socket
O ESP abre wss://api.iotsys.com.br/camera_socket e autentica com JSON.
3. Frames
Apos receber ready, envia cada JPEG como mensagem WebSocket binaria.
4. Viewer
O navegador autentica com token temporario e recebe os mesmos frames em tempo real.
Endpoint e autenticacao
A primeira mensagem do ESP deve ser texto JSON. Credenciais nunca devem ir na URL.
wss://api.iotsys.com.br/camera_socket
{
"role": "publisher",
"device_id": {device_id},
"username": "USUARIO_DO_DISPOSITIVO",
"password": "SENHA_DO_DISPOSITIVO"
}
Resposta esperada:
{"type":"ready","role":"publisher"}
Firmware base
O repositorio inclui um firmware pronto em firmware/esp32-cam. Configure o arquivo iotsys_camera_config.h a partir do exemplo e grave com Arduino CLI.
cp firmware/esp32-cam/src/iotsys_camera_config.example.h \\
firmware/esp32-cam/src/iotsys_camera_config.h
arduino-cli compile --fqbn esp32:esp32:esp32cam firmware/esp32-cam/src
arduino-cli upload -p /dev/cu.usbserial-XXXX --fqbn esp32:esp32:esp32cam firmware/esp32-cam/src
%>
Config recomendada
Comece com QVGA e 5 fps. Suba para VGA somente se a rede e a fonte de energia estiverem estaveis.
#define IOTSYS_WS_HOST "api.iotsys.com.br"
#define IOTSYS_WS_PORT 443
#define IOTSYS_DEVICE_ID {device_id}
#define IOTSYS_DEVICE_USERNAME "USUARIO_DO_DISPOSITIVO"
#define IOTSYS_DEVICE_PASSWORD "SENHA_DO_DISPOSITIVO"
#define IOTSYS_CAMERA_FRAME_SIZE FRAMESIZE_QVGA
#define IOTSYS_CAMERA_JPEG_QUALITY 12
#define IOTSYS_FRAME_INTERVAL_MS 200
%>
Trecho principal de envio
void sendFrame() {
if (!authenticated || WiFi.status() != WL_CONNECTED) return;
if (millis() - lastFrameAt < IOTSYS_FRAME_INTERVAL_MS) return;
camera_fb_t *frame = esp_camera_fb_get();
if (!frame) return;
bool sent = webSocket.sendBIN(frame->buf, frame->len);
esp_camera_fb_return(frame);
lastFrameAt = millis();
if (!sent) Serial.println("Falha ao enviar frame");
}
%>
Viewer autenticado
No painel do dispositivo Camera, clique em Abrir streaming. O IoTsys gera um token assinado temporario e o navegador se conecta ao mesmo /camera_socket como viewer. URLs de frame e MJPEG continuam disponiveis como fallback autenticado.
Ajustes de qualidade
| Cenario | Frame size | JPEG | Intervalo |
|---|---|---|---|
| Rede instavel | FRAMESIZE_QQVGA | 16-20 | 500-1000ms |
| Uso padrao | FRAMESIZE_QVGA | 10-14 | 200-300ms |
| Maior nitidez | FRAMESIZE_VGA | 10-12 | 400-800ms |