STM32+GM65二维码识别模块

前言

朋友毕设需要用到扫码模块,但是网上这方面的资源比较少,下载源码还需要收费。所以自己写了一个简单实用的,大家可以来我这下载源码。

功能介绍

本案例主要实现的功能是,GM65扫描到二维码包含的信息后,将信息通过串口传输给32单片机,32单片机再将信息使用OLED显示屏显示出来,同时可以实现扫码开灯、关灯等功能。

主要硬件

STM32F103C8T6最小系统板、GM65二维码识别模块、0.96寸4针OLED显示屏

模块接线

GM65二维码识别模块—接32的串口3
TX—PB11 RX—PB10 VCC—5V GND—GND
4针OLED显示屏
SCL—PA5 SDA–PA7 VCC—3V3 GND—GND

实验效果

当二维码的内容是字符串D1时灯亮,是D0时灯灭。OLED显示屏的第2行显示了二维码的内容。第3行显示灯的开关。
在这里插入图片描述
当二维码的内容是字符串xixihaha时,不会执行开关灯的操作,但也会显示内容在显示屏上。
在这里插入图片描述
程序中,串口3收到二维码信息后会通过串口1返发给PC,故除了可以用显示屏看到效果外,也可以用串口助手看到二维码的内容。
在这里插入图片描述

二维码及模块的一些配置

1、二维码的生成是在微信小程序的草料二维码。
在这里插入图片描述

在这里插入图片描述

2、GM65模块设置成串行通讯模式,同时设置波特率为9600
当模块发出嘀嘀嘀声响时,说明设置成功。
在这里插入图片描述
3、如果觉得模块的灯太亮,声音太大可以按下面扫码设置
在这里插入图片描述
在这里插入图片描述

代码实现

main.c文件

/*=======================main.c======================*/
#include "stm32f10x.h"
#include "usart.h"
#include "led.h"
#include "oled.h"
#include "string.h"

u8 recv_ok = 0;       //接收完成标志
u8 uart_buf[32]={
    
    0};  //用于保存串口数据
u8 uart_cnt=0;        //用于定位串口数据的位置

int main()
{
    
    
    Init_Usart();   //初始化3个串口
	led_init();      //初始化LED
	OLED_Init();     //初始化OLED
	OLED_Clear();        //OLED清屏
	
	printf("================GM65二维码模块测试=================\r\n");	
	OLED_ShowString(30,0,(u8*)"GM65 TEST!",16);
	OLED_Refresh();

    while(1)
    {
    
    
		
		if(recv_ok==1)  //接收完成
		{
    
    
			OLED_Clear();        //OLED清屏
			OLED_ShowString(30,0,(u8*)"GM65 TEST!",16); 
			//命令判断,当收到D0关灯,D1开灯 
			if(strstr((char*)uart_buf,"D0"))  
			{
    
    
				GPIO_SetBits(GPIOC,GPIO_Pin_13);   //关灯
				OLED_ShowString(0,32,(u8*)"LED OFF",16); 
			}
			else if(strstr((char*)uart_buf,"D1"))
			{
    
    
				GPIO_ResetBits(GPIOC,GPIO_Pin_13); //开灯
				OLED_ShowString(0,32,(u8*)"LED ON",16); 
			}
			OLED_ShowString(0,16,(u8*)"QRCode:",16); 
			OLED_ShowString(8*7,16,(u8*)uart_buf,16); //显示二维码内容
			OLED_Refresh();      //刷新OLED
			uart_cnt = 0;        //最后清零,重新计数
			recv_ok = 0;         //接收完成标志置0
		}
		
    }
}

//串口3中断
void USART3_IRQHandler(void)      //串口3中断服务程序
{
    
    
	uint8_t d;

	//检测标志位
	if(USART_GetITStatus(USART3, USART_IT_RXNE)==SET)
	{
    
    
		//接收数据
		d = USART_ReceiveData(USART3);
	    //将接收到的数据依次保存到数组里
		uart_buf[uart_cnt++] = d;  
		//GM65模块发完一组数据后会自动发送一个回车符,所以通过检测是否接受到回车来判断数据是否接收完成
		if(d == 0x0D) 
		{
    
    
			recv_ok = 1;  //接收完成
		}
	
		//将接收到的数据,通过串口1返发给PC
		USART_SendData(USART1, d);
	    while( USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); //等待发送完成
		USART_ClearFlag(USART1,USART_FLAG_TXE);         //清空标志位
		USART_ClearITPendingBit(USART3,USART_IT_RXNE);	//清空标志位
	}	
} 

资源下载

需要源码的可以自行下载。https://github.com/J-CHUN/STM32-GM65.git
下载操作:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/NICHUN12345/article/details/124489502
今日推荐