基于OpenMV与STM32的数据通信项目(代码开源)
在当今的智能硬件开发领域,计算机视觉和微控制器的结合应用日益广泛。OpenMV作为一款集成了多种视觉算法的模块,与STM32这类高性能微控制器的结合,可以产生强大的协同效应。本文将详细介绍如何通过UART串口实现OpenMV与STM32的数据通信,并展示一个简单的数字识别和显示的项目实例。
一、项目概述
本项目使用OpenMV进行图像处理和数字识别,通过UART将识别结果发送到STM32微控制器。STM32接收到数据后,将其传输给0.96寸OLED显示屏,从而实现数字的可视化展示。项目硬件包括OpenMV、STM32F103C8T6、OLED显示屏以及必要的连接线。
二、硬件准备
- OpenMV开发板
- STM32F103C8T6微控制器
- 0.96寸OLED显示屏
- 杜邦线若干
三、系统设计
3.1 OpenMV配置
OpenMV需要配置为灰度图像输入,并设置合适的窗口大小以匹配识别需求。在本项目中,使用MNIST数据集进行数字识别。
3.2 STM32配置
STM32需要配置UART串口以接收OpenMV发送的数据,并配置I2C接口以驱动OLED显示屏。
四、通信协议设计
为了确保数据的准确性和完整性,设计了简单的通信协议,包括帧头、数据内容、帧尾和校验码。
- 帧头:0xFE
- 数据内容:识别的数字
- 帧尾:0xEF
- 校验码:数据内容的ASCII码和
五、代码实现
5.1 OpenMV端代码
OpenMV端的代码主要负责图像的采集和数字的识别,并将结果通过UART发送出去。
import sensor, image, time, os, tf
from pyb import UARTsensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((240, 240))
sensor.skip_frames(time=2000)# 初始化UART
uart = UART(3, 115200)def send_data(num):# 构造数据包data_packet = bytearray([0xFE, num, 0xEF])# 发送数据包uart.write(data_packet)while(True):img = sensor.snapshot()result = img.find_features(image.TEMPLATE_FIND_METHOD_LBP)for r in result:if r.max_val > 0.8:num = r.id()send_data(num)
5.2 STM32端代码
STM32端的代码负责接收UART数据,并解析出数字信息,然后通过I2C发送给OLED显示屏。
#include "stm32f1xx_hal.h"
#include "usart.h"
#include "i2c.h"
#include "oled.h"// 接收缓冲区
uint8_t rxBuffer[10];
uint8_t index = 0;// UART接收完成回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {if (huart->Instance == USART1) {// 解析接收到的数据parse_data(rxBuffer, huart->RxXferSize);// 重新启动接收中断HAL_UART_Receive_IT(huart, rxBuffer, sizeof(rxBuffer));}
}// 数据解析函数
void parse_data(uint8_t *data, uint16_t size) {for (int i = 0; i < size; i++) {if (data[i] == 0xFE) {index = 0;} else if (data[i] == 0xEF && index == 1) {display_number(data[index]);index = 0;} else {rxBuffer[index++] = data[i];}}
}// 显示数字的函数
void display_number(uint8_t num) {// 将数字转换为OLED可以显示的格式char num_str[10] = {0};sprintf(num_str, "%d", num);OLED_ShowString(0, 0, num_str, 16, 1);
}
六、项目测试
在完成硬件连接和代码编写后,需要对整个系统进行测试。首先测试OpenMV的图像识别功能,确保其能够准确识别数字。然后测试STM32的UART接收和OLED显示功能,确保数字能够被正确显示。
七、总结
本文详细介绍了基于OpenMV和STM32的UART通信项目,从硬件选择到软件编程,再到通信协议的设计和代码实现,最后进行项目测试。这种结合了计算机视觉和微控制器的项目结构,可以广泛应用于智能硬件领域,如智能监控、机器人导航等。
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇
点击领取更多详细资料