一、项目介绍
使用图像分类AI技术实现水果分类识别,并且将识别结果通过WiFi传输给另一块esp32控制LCD1602屏幕显示出来。
二、硬件介绍
1.Seeed Studio XIAO ESP32S3 Sense
Seeed Studio XIAO 系列是迷你型开发板,具有类似的硬件结构,尺寸仅为拇指大小。代码名称 "XIAO" 代表其特点之一“微小”,而另一特点则是“强大”。Seeed Studio XIAO ESP32S3 Sense 集成了摄像头传感器、数字麦克风和支持 SD 卡的功能。结合嵌入式机器学习计算能力和摄影功能,这款开发板是入门智能语音和视觉 AI 的绝佳工具。
它的特性包括:①强大的 MCU 板:集成 ESP32S3 32 位双核 Xtensa 处理器芯片,最高运行频率达 240 MHz,配备多个开发端口,支持 Arduino / MicroPython②高级功能(针对 Sense):可拆卸的 OV2640 摄像头传感器,支持 1600*1200 分辨率,兼容 OV5640 摄像头传感器,集成额外的数字麦克风③精心设计的电源管理:具备锂电池充电管理功能,提供 4 种功耗模式,深度睡眠模式功耗低至 14μA④强大的内存,更多可能性:提供 8MB PSRAM 和 8MB FLASH(Plus 版本为 16MB),支持 SD 卡插槽,外部存储容量最高可达 32GB FAT(仅适用于 XIAO ESP32S3)⑤卓越的射频性能:支持 2.4GHz Wi-Fi 和 BLE 双无线通信,连接 U.FL 天线时支持 100m+ 远程通信⑥拇指大小的紧凑设计:尺寸为 21 x 17.8mm,采用经典的 XIAO 外形设计,适用于空间受限的项目,如可穿戴设备。
2.ESP32-DevKitC
ESP32-DevKitC 是乐鑫一款基于 ESP32 的小型开发板,板上模组的绝大部分管脚均已引出,开发人员可根据实际需求,轻松通过跳线连接多种外围器件,或将开发板插在面包板上使用。开发板使用了ESP32-WROOM-32模组,ESP32-WROOM-32 模组集成了 ESP32 SoC,flash,精密离散元件和 PCB 板载天线,在空间受限的应用中具有出色的射频性能。
3.带有IIC接口的LCD1602液晶屏
LCD1602液晶显示屏,简称1602 LCD,是一种广泛应用于各种电子项目中的字符液晶显示器。它能够同时显示16列、2行的字符信息,因此得名。
三、框图和设计思路
1.项目框图
2.设计思路
1. 系统架构:
- 设备1:XIAO ESP32S3 Sense(带摄像头)
- 负责图像采集
- 运行图像识别模型(例如TensorFlow Lite Micro模型)
- 通过WiFi将识别结果发送给设备2
- 设备2:ESP32-WROOM(连接LCD1602)
- 通过WiFi接收设备1发送的识别结果
- 控制LCD1602显示识别结果
2. 工作流程:
a. 设备1(XIAO ESP32S3 Sense)初始化摄像头和WiFi连接,并加载预训练的模型。
b. 设备1循环进行以下操作:
- 通过摄像头捕获一帧图像。
- 对图像进行预处理(如调整大小、归一化等)以适应模型输入。
- 运行模型进行推理(图像识别)。
- 获取模型的输出(识别结果,例如物体类别或标签)。
- 通过WiFi将识别结果发送到设备2(ESP32-WROOM)的IP地址和端口。
c. 设备2(ESP32-WROOM)初始化WiFi(连接到同一局域网)和LCD1602,并启动一个UDP服务器监听来自设备1的消息。
d. 设备2循环进行以下操作:
- 检查是否有来自设备1的数据。
- 接收到数据后,解析识别结果。
- 将识别结果显示在LCD1602上(显示类别)。
3. 通信协议:
- 使用UDP进行通信。考虑到实时性要求不高,且数据量小,选择UDP更简单。
- 设备1作为客户端,设备2作为服务器。两者连接到同一个WiFi网络。
- 消息格式:简单的字符串
4. 图像识别模型:
- 预训练模型转换为适用于ESP32的量化模型。
- 模型选择:根据识别任务选择合适的轻量级模型。
- 模型部署:使用arduino自带的导入库功能。
5. 硬件连接:
- 设备1:XIAO ESP32S3 Sense自带摄像头,无需额外连接。
- 设备2:ESP32-WROOM连接LCD1602(I2C接口,节省IO口):
- SDA -> GPIO21 (默认)
- SCL -> GPIO22 (默认)
- VCC -> 5V
- GND -> GND
6. 软件实现要点: 设备1(XIAO ESP32S3 Sense)代码框架:
- 包含必要的库:摄像头驱动、WiFi库、模型库等。
- 初始化摄像头:设置分辨率(如QVGA 320x240)和像素格式(如RGB565,根据模型输入要求)。
- 连接WiFi网络。
- 加载模型。
- 循环:
1. 捕获一帧图像。
2. 预处理图像(可能包括裁剪、缩放、归一化等)。
3. 将图像数据输入到模型。
4. 运行推理。
5. 解析输出,得到识别结果(如类别标签和置信度)。
6. 将结果格式化为字符串。
7. 通过UDP发送给设备2的IP和端口。
设备2(ESP32-WROOM)代码框架:
- 包含必要的库:WiFi库、LCD1602库。
- 初始化LCD1602(设置地址、列数、行数)。
- 连接WiFi(或设置为AP模式,让设备1连接)。
- 创建UDP或TCP服务器,绑定端口。
- 循环:
1. 检查网络接收缓冲区是否有数据。
2. 读取数据。
3. 解析数据(如果是UDP,直接读取字符串;如果是TCP,需要接受连接后再读取)。
4. 在LCD1602上显示字符串。
5. 清屏并显示新内容。
四、软件流程图和关键代码
1.软件流程图
2.关键代码
//主要增加了根据识别结果增加的判断语句
//当识别结果超过0.8时,将识别结果发送
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(" %s: %.5f\n", result.classification[ix].label,
result.classification[ix].value);
if(result.classification[ix].value>0.8&&temp==1)
{
sendData(result.classification[ix].label);
//发送识别结果
//break;
}
else
{
sendData("nothing");
}
}
#endif
//以及WiFi连接通信的模块。
//定义了wifi连接初始化的代码和套接字通信的代码
void setup()
{
// put your setup code here, to run once:
Serial.begin(115200);
//comment out the below line to start inference immediately after upload
while (!Serial);
Serial.println("Edge Impulse Inferencing Demo");
if (ei_camera_init() == false) {
ei_printf("Failed to initialize Camera!\r\n");
}
else {
ei_printf("Camera initialized\r\n");
}
ei_printf("\nStarting continious inference in 2 seconds...\n");
ei_sleep(2000);
//Serial.begin(115200);
// 将 WiFi 设置为站点模式,并断开之前连接的 AP
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
initWiFi();
}
void sendData(const char* message) {
udp.beginPacket(host, port);
udp.print(message);
udp.endPacket();
Serial.print("已发送UDP: ");
Serial.println(message);
}//发送数据的函数
五、功能展示图
使用图像分类AI技术实现水果分类识别,并且将识别结果通过WiFi传输给另一块esp32控制LCD1602屏幕显示出来
整体设备的连接图片如下(XIAO ESP32S3 Sense上的摄像头采集图片信息,再调用部署的模型识别图像,然后通过WiFi将识别结果传输到esp32WROOM上并控制lcd1602显示识别结果):
实物运行结果截图(主要是看液晶屏显示的图像识别结果):
六、难题和解决方法
因为我的单片机实践经验几乎为零,所以上手难度很大,但是经过多次浏览Seeed Studio官方档案以及在bilibili上的学习,我最终完成了这个项目。
不过我用edge impulse训练并部署了很多模型到XIAO ESP32S3上,但是模型的实际运行效果并不好。
七、心得和体会
总的来说还是学习到了很多之前想学习的单片机知识和机器学习知识,尝试了很多未曾涉及的新领域,自己很开心这一次的项目经历,感谢丝递科技和硬禾科技给予的机会。