reCamera conecta ao XIAO via HTTP
Este documento demonstra como habilitar a comunicação entre a reCamera e o XIAO via HTTP, transmitindo dados para o XIAO para que você possa integrar a reCamera em seus próprios projetos.

Preparação
reCamera
HTTP API e conexão de rede
Primeiro, prepare o projeto supervisor em C++ da sua reCamera e o ambiente de execução.
-
Passo 1. Baixe o projeto Supervisor_add_detection_http, compile-o e copie o arquivo .exe para o diretório de terminal da reCamera. (Para instruções detalhadas, consulte o wiki: Real-time YOLO object detection using reCamera based on Cpp / Environment Preparation / Pre-compilation.) Este é um projeto supervisor, usaremos apenas a interface de detecção de fotos do YOLO para fins de demonstração. Se você tiver seu próprio projeto, pode adicionar novas HTTP APIs e código do projeto dentro deste projeto.
-
Passo 2. Conecte a reCamera ao PC usando um cabo USB, use o MobaXterm para acessar o terminal da reCamera (192.168.42.1) e navegue até /etc/init.d/ para remover os três programas de inicialização automática: S93sscma-supervisor, S03node-red e S91sscma-node. (Para instruções detalhadas, consulte o wiki: Real-time YOLO object detection using reCamera based on Cpp / Environment Preparation / reCamera Preparation.)
Em segundo lugar, a reCamera e o XIAO devem estar na mesma rede local (LAN) de 2,4 GHz para se comunicarem. A reCamera possui uma placa de rede sem fio interna que pode se conectar ao WiFi. Normalmente, você pode se conectar ao WiFi através do Node-RED web da câmera. No entanto, ao executar um projeto C++ personalizado, você deve desativar o Node-RED e reiniciar a reCamera. (Referência: Seeed Studio Wiki). Portanto, precisamos estabelecer a conexão WiFi via terminal Linux.
cd /etc/
ls
Você pode ver o wpa_supplicant.conf :

Você também pode visualizá-lo no diretório de arquivos à esquerda:

Arraste o(s) arquivo(s) para a área de trabalho e abra-o(s) com o Notepad. Adicione a rede como mostrado na imagem e altere para o seu SSID e senha. Observação : Não inclua espaços extras em nenhum dos lados do sinal de igual.

Exclua o arquivo original no terminal da reCamera: /etc/.
sudo rm wpa_supplicant.conf
Abra o Windows PowerShell do seu PC e copie o arquivo para o terminal da reCamera : /home/recamera/:
scp "C:\Users\{your username}\Desktop\wpa_supplicant.conf" [email protected]:/home/recamera
Copie o arquivo de /home/recamera/ para : /etc/:
sudo scp wpa_supplicant.conf /etc/
Reinicie a reCamera. Em seguida, execute o programa.
sudo ./Supervisor_add_detection_http
Certifique-se de que sua reCamera esteja conectada à sua rede WiFi.

XIAO
Conexão de rede e envio de solicitações HTTP
É necessário baixar o Arduino para gravar o programa no XIAO (ESP32-C3).
Passo 1. Baixe e instale a versão mais recente da Arduino IDE de acordo com o seu sistema operacional. Inicie o aplicativo Arduino.
Passo 2. Adicione o pacote da placa ESP32 à sua Arduino IDE Navegue até File > Preferences e preencha "Additional Boards Manager URLs" com a URL abaixo: https://jihulab.com/esp-mirror/espressif/arduino-esp32.git

Navegue até Tools > Board > Boards Manager..., digite a palavra-chave "esp32" na caixa de pesquisa, selecione a versão mais recente de esp32 e instale-a.

Passo 3. Selecione sua placa e porta
Board Navegue até Tools > Board > ESP32 Arduino e selecione "XIAO_ESP32C3". A lista de placas é um pouco longa e você precisa rolar até o final para encontrá-la.

Port Navegue até Tools > Port e selecione o nome da porta serial do XIAO ESP32C3 conectado. Provavelmente será COM3 ou superior (COM1 e COM2 geralmente são reservadas para portas seriais de hardware).
Passo 4. Escreva o seguinte programa e clique no botão de upload para compilar e enviar. A reCamera e o XIAO devem estar na mesma rede local (LAN) de 2,4 GHz para se comunicarem.
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN A0 // On Trinket or Gemma, suggest changing this to 1
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 60 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500
const char* ssid = {"your wifi name"};
const char* password = {"your wifi password"};
const char* apiUrl = "http://{"your wifi ip"}/modeldetector";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
pixels.begin();
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(apiUrl);
http.addHeader("Content-Type", "application/json");
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.println("HTTP Response:");
// Serial.println(payload);
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("JSON read failed: ");
Serial.println(error.c_str());
}
else {
Serial.print("Code: ");
Serial.println(doc["Code"].as<String>());
Serial.print("Msg: ");
Serial.println(doc["Msg"].as<String>());
Serial.print("Target: ");
Serial.println(doc["Target"].as<String>());
Serial.print("Score: ");
Serial.println(doc["Score"].as<String>());
Serial.print("Release_duration: ");
Serial.print(doc["Release_duration"].as<String>());
Serial.println("ms");
Serial.print("Capture_duration: ");
Serial.print(doc["Capture_duration"].as<String>());
Serial.println("ms");
Serial.print("Image_preprocessing_duration: ");
Serial.print(doc["Image_preprocessing_duration"].as<String>());
Serial.println("ms");
Serial.print("Detection_duration: ");
Serial.print(doc["Detection_duration"].as<String>());
Serial.println("ms");
Serial.print("Total Duration: ");
Serial.print(doc["Duration"].as<String>());
Serial.println("ms");
if (doc["Target"].as<String>().indexOf("person") != -1){
pixels.clear();
pixels.show();
int smileyLEDs[] = {21,26,29,32,35,39};
int numLEDs = sizeof(smileyLEDs) / sizeof(smileyLEDs[0]);
for (int i = 0; i < numLEDs; i++) {
pixels.setPixelColor(smileyLEDs[i], pixels.Color(2, 2, 0)); // yellow
}
pixels.show();
printf("Target contains 'person'\n");
} else {
pixels.clear();
pixels.show();
printf("Target does not contain 'person'\n");
}
}
} else {
pixels.clear();
pixels.show();
Serial.print("HTTP get failed: ");
Serial.println(httpCode);
}
http.end();
} else {
pixels.clear();
pixels.show();
Serial.println("WiFi disconnected");
}
delay(5000);
}
Observação: Modifique para o nome da sua rede WiFi (SSID), senha e endereço IP wlan0 da reCamera.

Aguarde a conclusão do upload e você poderá ver que o XIAO se conectou com sucesso ao WiFi no serial monitor.


Execução
Certifique-se de que sua reCamera esteja executando o projeto Supervisor e tenha se conectado ao WiFi com sucesso.
sudo ./Supervisor_add_detection_http

Você pode ver os resultados Json do serviço HTTP no serial monitor do XIAO.

Quando a pessoa fica em frente à câmera, o XIAO exibe um rosto sorridente, realizando assim uma câmera sorridente que você pode fazer DIY.

Para mais detalhes, consulte nosso repositório GitHub.
Suporte Técnico e Discussão sobre o Produto
Obrigado por escolher nossos produtos! Estamos aqui para lhe oferecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.