基于STM32单片机的二维码识别物联网OneNet云仓库系统
1 系统功能介绍
本设计实现了一个基于 STM32 单片机的二维码识别物联网 OneNet 云仓库系统。该系统主要用于仓储管理,能够实现商品入库时的自动识别、数量统计、显示与上传,从而提高仓库的自动化水平,减少人工统计的误差。
系统功能如下:
-
二维码识别与商品数量统计
系统通过二维码识别模块扫描商品二维码,并将识别结果与系统数据库(或内置数据表)进行比对,若识别成功,则对应商品数量加 1,实现商品的自动计数功能。 -
OLED 显示商品数量
商品数量的变化实时显示在 OLED 屏幕上,仓库管理人员可以直观地看到库存变化情况。 -
ESP8266 物联网通信
系统通过 ESP8266 模块与 OneNet 云平台连接,将识别到的商品数量数据实时上传,仓库管理人员可通过云端平台进行远程查看和管理,实现智能化的仓库监控。 -
防止重复计数机制
针对二维码识别可能出现的连续重复识别问题,系统通过 STM32 的定时器进行防抖设计。在设定的时间间隔内,同一二维码识别只累加一次,有效防止误计数。 -
扩展性与稳定性
系统采用 STM32F103 系列单片机作为核心,具备高速处理与稳定运行的特点,同时预留扩展接口,方便后续接入更多传感器和功能模块,例如温湿度监控、RFID 管理等。
2 系统电路设计
2.1 STM32 最小系统电路
系统核心为 STM32F103C8T6 单片机,ARM Cortex-M3 内核,主频可达 72MHz,拥有丰富的串口资源,能够同时满足二维码识别模块、ESP8266 模块以及 OLED 显示的需求。
- 电源电路:通过 AMS1117-3.3 稳压模块提供 3.3V 电源;
- 时钟电路:外接 8MHz 晶振,提高系统时钟稳定性;
- 复位电路:包含上电复位和按键复位,保证系统可靠运行。
2.2 二维码识别模块电路
二维码识别模块(如 UART 通信型二维码扫描枪模块)通过串口与 STM32 连接:
- TX → STM32 RX
- RX → STM32 TX
该模块能够快速解析二维码信息,并以字符串的形式传输至 STM32 单片机。
2.3 OLED 显示模块电路
OLED 模块采用 I2C 通信,接入 STM32 的 I2C1 接口(PB6、PB7):
- 优点是功耗低、对比度高、显示清晰;
- 用于实时显示商品数量,界面简洁直观。
2.4 ESP8266 WiFi 模块电路
ESP8266 模块用于连接 OneNet 云平台:
- 采用 UART 通信(TXD、RXD);
- 供电电压 3.3V;
- STM32 通过 AT 指令配置 ESP8266,实现 WiFi 连接与 MQTT 协议通信;
- 将识别的商品数量实时上报至云端平台。
2.5 定时器电路(逻辑功能)
为了避免重复计数,系统使用 STM32 内部 定时器 TIM2:
- 在设定的时间窗口内(如 2 秒),若同一个二维码被连续识别,则只累加一次;
- 避免由于识别模块的连续输出造成数量多次累加的情况。
2.6 电源电路
整个系统统一由 5V 电源输入,经过 AMS1117 稳压芯片转换为 3.3V,分别供给 STM32、ESP8266、OLED 和二维码识别模块。并在电源部分增加了电容滤波电路,保证系统稳定运行。
3 程序设计
系统软件主要由以下几个部分组成:二维码识别处理模块、OLED 显示模块、ESP8266 云端通信模块、定时器防重复计数模块以及主程序框架。
3.1 主程序框架
#include "stm32f10x.h"
#include "oled.h"
#include "usart.h"
#include "esp8266.h"
#include "timer.h"
#include "qrcode.h"volatile uint16_t product_count = 0;int main(void)
{SystemInit();USART1_Init(9600); // 二维码模块串口USART2_Init(115200); // ESP8266 串口OLED_Init();ESP8266_Init();Timer2_Init(2000); // 2秒定时器OLED_ShowString(0,0,"Count:0");while(1){QRCode_Process(); // 处理二维码识别OLED_Display(product_count); // 显示数量ESP8266_Upload(product_count); // 上传数据}
}
3.2 二维码识别处理程序
char qr_buffer[64];
uint8_t qr_flag = 0;void QRCode_Process(void)
{if(qr_flag == 1){qr_flag = 0;if(Check_QR_Valid(qr_buffer)){if(!Is_In_Timer_Window()){product_count++;Start_Timer_Window(); // 开启防重复计时}}}
}
该函数用于处理二维码识别,当接收到有效二维码并通过防重复计数判断后,商品数量加 1。
3.3 OLED 显示程序
void OLED_Display(uint16_t count)
{char str[16];sprintf(str,"Count:%d", count);OLED_ShowString(0,0,str);
}
OLED 屏幕实时显示商品数量,便于仓库人员直接观察。
3.4 ESP8266 云平台通信程序
void ESP8266_Upload(uint16_t count)
{char data[32];sprintf(data,"{\"count\":%d}", count);ESP8266_SendToOneNet(data);
}
系统通过 MQTT 协议向 OneNet 云平台发送 JSON 格式的数据,实现商品数量的远程上报。
3.5 定时器防重复计数程序
uint8_t timer_active = 0;void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIM2, TIM_IT_Update);timer_active = 0; // 计时窗口结束}
}uint8_t Is_In_Timer_Window(void)
{return timer_active;
}void Start_Timer_Window(void)
{timer_active = 1;TIM_Cmd(TIM2, ENABLE);
}
定时器窗口确保在 2 秒时间内,同一二维码识别只计数一次,从而避免重复累加。
4 总结
本设计基于 STM32 单片机,实现了二维码识别与物联网云平台结合的仓库管理系统,主要特点如下:
- 自动化识别与统计:通过二维码识别模块自动统计商品数量,减少人工干预。
- 本地与远程结合:商品数量在 OLED 屏幕上实时显示,同时通过 ESP8266 上传至 OneNet 云平台。
- 防重复计数设计:通过定时器窗口机制,有效避免了连续识别造成的重复计数。
- 高扩展性:系统可扩展更多传感器与控制功能,如 RFID、温湿度监控、远程告警等。
- 应用前景广泛:该系统不仅适用于仓库管理,还可应用于物流、图书馆管理、门禁系统等场景。
通过本设计,仓库管理的智能化水平得以提升,系统在 自动化、信息化与物联网应用方面具有良好的参考价值。