Grove Vision AI 模块
在本节中,我们将详细介绍传感器的工作原理、如何使用 Wio Terminal 获取传感器数据以及如何通过 Wio Terminal 和 Grove - Wio-E5 发送数据。
可升级为工业传感器
通过 SenseCAP S2110 控制器 和 S2100 数据记录仪,您可以轻松将 Grove 转变为 LoRaWAN® 传感器。Seeed 不仅帮助您完成原型设计,还为您提供了通过 SenseCAP 系列的高性能工业传感器扩展项目的可能性。
IP66 外壳、蓝牙配置、与全球 LoRaWAN® 网络的兼容性、内置 19 Ah 电池以及强大的 APP 支持,使 SenseCAP S210x 成为工业应用的最佳选择。该系列包括土壤湿度、空气温湿度、光照强度、二氧化碳、电导率以及 8 合 1 气象站的传感器。尝试最新的 SenseCAP S210x,助力您的下一个成功的工业项目。
SenseCAP 工业传感器 | |||
S2100 数据记录仪 | S2101 空气温湿度 | S2102 光照强度 | S2103 空气温湿度 & CO2 |
S2104 土壤湿度 & 温度 | S2105 土壤湿度 & 温度 & 电导率 | S2110 LoRaWAN® 控制器 | S2120 8 合 1 气象站 |
传感器的工作原理
设备的实时摄像头可以通过机器学习检测环境中的物体。
摄像头的实时视频流可以用于识别物理世界中的物体。使用 ML Kit 的对象检测与跟踪 API 的“流模式”,摄像头视频流可以检测物体,并将其作为输入与我们应用程序的图像分类模型(仍在开发中)进行视觉搜索(使用图像作为输入的搜索查询)。
使用实时摄像头进行搜索可以帮助用户了解周围的物体,无论是狗还是猫。

有关 Vision AI 模块的更多信息,请参考 这里。
如果您想训练一些模型供自己使用,请参考 这里。
所需材料
![]() | ![]() | ![]() |
Wio Terminal | Grove - Wio-E5 | Grove Vision AI 模块 |
初步准备
连接
在本例中,我们需要借助 Grove - Wio-E5 连接到附近的 LoRa® 网关。我们需要将 Wio Terminal 右侧的 Grove 端口配置为软串口以接收 AT 命令。根据下图,将 Vision AI 模块连接到左侧。

软件准备
步骤 1. 您需要安装 Arduino 软件。
步骤 2. 启动 Arduino 应用程序。

步骤 3. 将 Wio Terminal 添加到 Arduino IDE。
打开 Arduino IDE,点击 File > Preferences
,并将以下 URL 复制到 Additional Boards Manager URLs:
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

点击 Tools > Board > Board Manager
并在 Boards Manager 中搜索 Wio Terminal。

步骤 4. 选择您的板子和端口
您需要在 Tools > Board
菜单中选择与您的 Arduino 对应的条目。选择 Wio Terminal。

从 Tools -> Port
菜单中选择 Wio Terminal 板的串口设备。这通常是 COM3 或更高(COM1 和 COM2 通常保留用于硬件串口)。要确认,可以断开 Wio Terminal 板并重新打开菜单;消失的条目应该是 Arduino 板。重新连接板并选择该串口。
:::提示
对于 Mac 用户,串口可能类似于 /dev/cu.usbmodem141401
。
如果您无法上传代码,通常是因为 Arduino IDE 无法将 Wio Terminal 切换到引导加载模式。(可能是 MCU 停止或您的程序正在处理 USB)解决方法是手动将 Wio Terminal 切换到引导加载模式。 :::

步骤 5. 下载 Grove - Wio-E5 库
访问 Disk91_LoRaE5 仓库并将整个仓库下载到您的本地驱动器。
步骤 6. 将库添加到 Arduino IDE
现在,可以将 3 轴数字加速度计库安装到 Arduino IDE。打开 Arduino IDE,点击 sketch -> Include Library -> Add .ZIP Library
,然后选择刚刚下载的 Disk91_LoRaE5
文件。

获取 Grove Vision AI 模块的值
步骤 1. 下载 Grove Vision AI 模块代码库
访问 Seeed-Grove-Vision-AI-Moudle 仓库,并将整个仓库下载到本地驱动器。
步骤 2. 将库添加到 Arduino IDE
现在,可以将 Vision AI 模块库安装到 Arduino IDE 中。打开 Arduino IDE,点击 sketch -> Include Library -> Add .ZIP Library
,然后选择刚刚下载的 Seeed-Grove-Vision-AI-Moudle
文件。

步骤 3. 获取 Grove Vision AI 模块数据
此仓库能够获取摄像头识别的模型数量及其置信度。这些数据是无符号整数,且不超过 8 位。
#include "Seeed_Arduino_GroveAI.h"
#include <Wire.h>
GroveAI ai(Wire);
uint8_t state = 0;
void setup()
{
Wire.begin();
Serial.begin(115200);
Serial.println("begin");
if (ai.begin(ALGO_OBJECT_DETECTION, MODEL_EXT_INDEX_1)) // 目标检测和预训练模型 1
{
Serial.print("Version: ");
Serial.println(ai.version());
Serial.print("ID: ");
Serial.println( ai.id());
Serial.print("Algo: ");
Serial.println( ai.algo());
Serial.print("Model: ");
Serial.println(ai.model());
Serial.print("Confidence: ");
Serial.println(ai.confidence());
state = 1;
}
else
{
Serial.println("Algo begin failed.");
}
}
void loop()
{
if (state == 1)
{
uint32_t tick = millis();
if (ai.invoke()) // 开始调用
{
while (1) // 等待调用完成
{
CMD_STATE_T ret = ai.state();
if (ret == CMD_STATE_IDLE)
{
break;
}
delay(20);
}
uint8_t len = ai.get_result_len(); // 接收检测到的人数
if(len)
{
int time1 = millis() - tick;
Serial.print("Time consuming: ");
Serial.println(time1);
Serial.print("Number of people: ");
Serial.println(len);
object_detection_t data; // 获取数据
for (int i = 0; i < len; i++)
{
Serial.println("result:detected");
Serial.print("Detecting and calculating: ");
Serial.println(i+1);
ai.get_result(i, (uint8_t*)&data, sizeof(object_detection_t)); // 获取结果
Serial.print("confidence:");
Serial.print(data.confidence);
Serial.println();
}
}
else
{
Serial.println("No identification");
}
}
else
{
delay(1000);
Serial.println("Invoke Failed.");
}
}
else
{
state == 0;
}
}
打开 Arduino IDE 的串口监视器,选择波特率为 115200,并观察结果。

通过 Grove - Wio-E5 发送数据
我们将之前 Grove - Wio-E5 的代码与 LoRa® 网络连接结合起来。通过使用 AT 命令,可以将 Grove Vision AI 模块的值发送到 LoRa® 网络。
在上一节的代码中,我们知道输出——检测到的对象数量和置信度级别——都是正整数,且均不超过 8 位。
因此,我们确定了通过 AT 命令发送的数据内容、大小和格式。我们可以设置一个足够大的数组,将需要发送的字符串存储到数组中,最后使用 send_sync() 函数将数组发送出去。
上述思路的伪代码大致如下:
......
static uint8_t data_val[4] = { 0x00 }; // 使用 data[] 存储传感器的值
if (state == 1)
{
if (ai.invoke()) // 开始调用
{
while (1) // 等待调用完成
{
CMD_STATE_T ret = ai.state();
if (ret == CMD_STATE_IDLE)
{
break;
}
delay(20);
}
uint8_t len = ai.get_result_len(); // 接收检测到的人数
if(len)
{
Serial.print("Number of people: "); Serial.println(len);
object_detection_t data; // 获取数据
for (int i = 0; i < len; i++)
{
Serial.println("result:detected");
Serial.print("Detecting and calculating: ");
Serial.println(i+1);
ai.get_result(i, (uint8_t*)&data, sizeof(object_detection_t)); // 获取结果
Serial.print("confidence:"); Serial.println(data.confidence);
data_decord(len, data.confidence, data_val);
if ( lorae5.send_sync( // 发送传感器值
8, // LoRaWan 端口
data_val, // 数据数组
sizeof(data_val), // 数据大小
false, // 不需要确认
7, // 扩频因子
14 // 发射功率(dBm)
)
)
......
接下来我们需要做的是使用 begin()
函数初始化 Grove - Wio-E5,并使用 setup()
函数配置 Grove - Wio-E5 的三元组信息。当我们使用 send_sync()
函数发送数据消息时,将尝试加入 LoRaWAN® 网络,一旦成功,数据将被发送,并返回信号强度、地址等信息。
完整的代码示例可以在 这里 找到。
我们不建议您现在上传代码查看结果,因为此时您尚未配置 Helium/TTN,将会得到 "Join failed" 的结果。建议您在完成 连接到 Helium 或 连接到 TTN 章节后再上传此代码,以完成完整的数据发送过程。
在您体验并理解了 Grove Vision AI 模块的工作原理和数据格式后,请继续下一步教程,加入 LoRaWAN®。
Helium 部分 | |
Helium 介绍 在本章中,我们将介绍 Helium 控制台的操作,以便对 Helium 控制台有一个初步的了解。 跳转到章节 > | |
连接到 Helium 本节描述如何配置 Helium,以便传感器数据能够成功上传并显示在 Helium 中。 跳转到章节 > | |
TTN 部分 | |
TTN 介绍 在本章中,我们将介绍 TTN 控制台的操作,以便对 TTN 控制台有一个初步的了解。 跳转到章节 > | |
连接到 TTN 本节描述如何配置 TTN,以便传感器数据能够成功上传并显示在 TTN 中。 跳转到章节 > |
技术支持与产品讨论
感谢您选择我们的产品!我们致力于为您提供多种支持,以确保您使用我们的产品时能够获得尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同的偏好和需求。
声明
- LoRa® 标志是 Semtech Corporation 或其子公司的商标。
- LoRaWAN® 是根据 LoRa Alliance® 授权使用的标志。