Skip to main content

reCamera 通过 HTTP 连接到 XIAO

本文档演示如何通过 HTTP 实现 reCamera 和 XIAO 之间的通信,将数据传输到 XIAO,以便将 reCamera 集成到您的项目中。

准备工作

reCamera

HTTP API 和网络连接

首先,准备好 reCamera 的 C++ supervisor 项目和运行环境。

其次,reCamera 和 XIAO 必须在同一个 2.4GHz 局域网(LAN)中才能通信。reCamera 内置无线网卡,可以连接到 WiFi。通常,您可以通过相机的 Node-RED 网页 连接到 WiFi。但是,当运行自定义 C++ 项目时,必须禁用 Node-RED 并重新启动 reCamera。(参考:Seeed Studio Wiki。)因此,我们需要通过 Linux 终端建立 WiFi 连接。

cd /etc/
ls

您可以看到 wpa_supplicant.conf 文件:

您也可以在左侧文件目录中查看:

将文件拖到桌面并用记事本打开。按照图片所示添加网络,并更改为您的 SSID 和密码。

删除 reCamera 终端中的原始文件:/etc/。

sudo rm wpa_supplicant.conf

打开 PC 的 Windows PowerShell 并将文件复制到 reCamera 终端:/home/recamera/

scp "C:\Users\{your username}\Desktop\wpa_supplicant.conf" [email protected]:/home/recamera

将文件从 /home/recamera/ 复制到:/etc/

sudo scp wpa_supplicant.conf /etc/

重启 reCamera。然后运行程序。

sudo ./Supervisor_add_detection_http

确保您的 reCamera 已连接到 WiFi 网络。

XIAO

网络连接和发送 HTTP 请求

需要下载 Arduino 来为 XIAO(ESP32-C3)烧录程序。

步骤 1. 根据您的操作系统下载并安装最新版本的 Arduino IDE。启动 Arduino 应用程序。

步骤 2. 将 ESP32 板包添加到 Arduino IDE
导航到 文件 > 首选项,在 "附加开发板管理器网址" 中填写以下 URL:
https://jihulab.com/esp-mirror/espressif/arduino-esp32.git

导航到 工具 > 开发板 > 开发板管理器...,在搜索框中输入关键字 "esp32",选择最新版本的 esp32 并安装。

步骤 3. 选择您的开发板和端口

开发板
导航到 工具 > 开发板 > ESP32 Arduino 并选择 "XIAO_ESP32C3"。开发板列表较长,您需要滚动到最底部才能找到。

端口
导航到 工具 > 端口 并选择连接的 XIAO ESP32C3 的串口名称。通常是 COM3 或更高(COM1COM2 通常保留给硬件串口)。

步骤 4. 编写以下程序并点击上传按钮进行编译和上传。reCamera 和 XIAO 必须在同一个 2.4GHz 局域网(LAN)中才能通信。

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

const char* ssid = "{Your wifi name}";
const char* password = "{Your wifi password}";
const char* apiUrl = "http://{Your reCamera wlan0 IP}/modeldetector"; // 您可以将 "modeldetector" 替换为您的项目接口。
// 您可以通过在终端中运行 'ifconfig' 检查 reCamera 的 wlan0 IP 地址。

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");
}

void loop() {
if (WiFi.status() == WL_CONNECTED) {
// 发送 HTTP 请求
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); // 根据实际 JSON 大小调整缓冲区大小。
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("JSON 反序列化失败: ");
Serial.println(error.c_str());
}
// 根据实际 JSON 内容调整键值。
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");

} else {
Serial.print("HTTP Get 失败: ");
Serial.println(httpCode);
}
http.end();
} else {
Serial.println("WiFi 断开连接");
}

delay(5000);
}

注意: 修改为您的 WiFi 名称 (SSID)、密码,以及 reCamera 的 wlan0 IP 地址。

等待上传完成后,您可以在 串口监视器 中看到 XIAO 已成功连接到 WiFi。

运行

确保您的 reCamera 正在运行 Supervisor 项目并已成功连接到 WiFi。

sudo ./Supervisor_add_detection_http

您可以在 XIAO 的 串口监视器 中看到 HTTP 服务的 Json 结果。

技术支持与产品讨论

感谢您选择我们的产品!我们将为您提供多种支持,确保您使用我们的产品时体验顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...