这里使用的是SMT32F103RCT6核心板

二维码扫描模块使用的是窜口通信,可以使用USB转TTL配合微信小程序(二维码生成器)生成二维码,模块RXD,TXD一定要跟TTL的RXD,TXD反接,使用窜口调休助手就可以观察二维码扫描模块的的效果

STM32搭配二模块扫描模块实现门禁

二维码启动C文件

#include <string.h>
#include "QR_Scaner.h"
#include "usart.h"
#include "systick.h"

uint8_t        TmpBuf[1];
uint8_t        QRScanerRxBuf[1024];
__IO uint32_t    QR_Scaner_RxIdx = 0;

uint8_t complete_flag = 0;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART2)
    {
        if(TmpBuf[0] != 0x00)
            QRScanerRxBuf[QR_Scaner_RxIdx++] = TmpBuf[0];
        
        //HAL_UART_Transmit(&huart1, (uint8_t *)TmpBuf, 1, 0xffff);
        
        if(QR_Scaner_RxIdx >= sizeof(QRScanerRxBuf))
        {
            memset(QRScanerRxBuf, 0x00, sizeof(QRScanerRxBuf));
            QR_Scaner_RxIdx = 0;
            printf("QRScanerRxBuf 已满\r\n");
        }
        
        HAL_UART_Receive_IT(&huart2, TmpBuf, 1);
    }
}

char multip_scaner_cmd[] = "AT+SCAN=0\r\n";    //全速扫码
char single_scaner_cmd[] = "AT+SCAN=1\r\n";    //单次扫码

int scan_mode_set(uint8_t mode)
{
    memset(QRScanerRxBuf, 0x00, sizeof(QRScanerRxBuf));
    QR_Scaner_RxIdx = 0;    
    
    switch(mode)
    {
        case 0:
            HAL_UART_Transmit(&huart2, (uint8_t *)multip_scaner_cmd, strlen(multip_scaner_cmd), 100);
            break;
        case 1:
            HAL_UART_Transmit(&huart2, (uint8_t *)single_scaner_cmd, strlen(single_scaner_cmd), 100);
            break;
        default:
            return -1;
    }    
        
    delayms(20);

if(strstr((char *)QRScanerRxBuf, "[AT]OK\r\n"))
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

#define QR_SCANER_RESET_RETURN        "OK! - [QBoard][A very outstanding Bar Code Scanner]\r\n"

#define PASS_WORD    "1234567890"            // 默认的门禁密码,修改成自己的密码,也就是二维码的内容。

void QR_Door_Control(void)
{    
    uint32_t tick_start = 0;
    
    printf("---欢迎使用二维码门禁系统---\r\n");
    
    memset(QRScanerRxBuf, 0x00, sizeof(QRScanerRxBuf));
    QR_Scaner_RxIdx = 0;

// 启动串口接收
    HAL_UART_Receive_IT(&huart2, TmpBuf, 1);
    
    // 等待二维码扫描模块启动
    tick_start = get_systicks();
    while(1)
    { 
        if(QR_Scaner_RxIdx==0)
        {
            printf("\r\n .二维码扫描模块已启动...\r\n");
            break;
        }
        if(query_time(tick_start, 5000))
        {
            goto exit;
        }
    }
    printf("\r\n .已进入扫码识别模式,请扫码开门--->\r\n");

memset(QRScanerRxBuf, 0x00, sizeof(QRScanerRxBuf));
    QR_Scaner_RxIdx = 0;    
    while(1)
    {
        if(QR_Scaner_RxIdx==0)
        {        
            /* 等待数据收完 */
            delayms(100);
            
            /* 对比收到的数据和密码 */
            if(strcmp((char *)QRScanerRxBuf, PASS_WORD"\r\n") == 0)
            {
                //printf("密码是:%s", (char *)QRScanerRxBuf);
                printf("\r\n .门禁密码正确 <---\r\n");
                delayms(1000);
            }
            else
            {
                printf("\r\n .门禁密码错误!\r\n");
                delayms(1000);
            }
            
            // 门已关闭,重新开始扫码开门
            if(scan_mode_set(1) != 0)
            {
                printf("设置单次扫码模式失败2\r\n");
                break;
            }    
            
            memset(QRScanerRxBuf, 0x00, sizeof(QRScanerRxBuf));
            QR_Scaner_RxIdx = 0;                
        }    
    }
    
exit:
    
    printf("进入扫码识别模式失败,请检查硬件连接。\r\n");
    printf("QRScanerRxBuf:%s", QRScanerRxBuf);
}

#ifndef __QR_SCANER_H__
#define __QR_SCANER_H__

void QR_Door_Control(void);

#endif

主函数

int main(void)
{
  /* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
  SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  
  QR_Door_Control();    
  LED_Control();
  /* USER CODE END 2 */

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
    printf("rest\n");
  while (1)
  {
   LED_R_ON;
  /* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}
  /* USER CODE END 3 */

}

STM32+二维码扫描模块(QR_Scaner)实现门禁系统相关推荐

  1. win10 vs2022 .net6 opencvsharp 4.5.5自己编译wecharts 微信二维码扫描模块。

    文章主要介绍如何自己编译opencvsharp源码,因为需要.net 6 ,所以介绍vs2022 的编译. https://github.com/shimat/opencvsharp 首先在githu ...

  2. iOS原生实现二维码扫描

    iOS原生实现二维码扫描 最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时 ...

  3. html5调用设备摄像头,实现二维码扫描

    html5调用设备摄像头,实现二维码扫描 最近在做一个签到系统,由于我直接使用了纯网页,因此调用摄像头进行扫码成了大问题.经过几番费力的百度终于找到解决方法. 主要用到MediaDevices.get ...

  4. 微光互联QT660二维码扫描android配置

    微光互联QT660二维码扫描android配置 1.首先对android系统进行root adb root 2.然后对usb提升权限 adb shell chmod -R 777 /dev/bus/u ...

  5. GM65条形码二维码扫描识别模块与STM32学习

    目录 模块介绍: 简介: 原理介绍: 工作流程: 技术参数: 修改配置: 代码介绍: 串口函数: 主函数: 模块介绍: 简介: GM65 条形码二维码扫描识别模块是一种基于激光扫描头的识别设备 原理介 ...

  6. Ionic—二维码扫描与关于模块的开发

    一.二维码扫描功能布局开发 1.开发设计 功能需求:布局二维码扫描页面 二维码扫描在Ionic Native中为QS Scanner插件,安装如下 sudo ionic cordova plugin ...

  7. 基于MUI框架的HTML5+的二维码扫描实现

    Barcode的一个实现案例 一.简介         Barcode模块管理条码扫描,提供常见的条码(二维码及一维码)的扫描识别功能,可调用设备的摄像头对条码图片扫描进行数据输入.通过plus.ba ...

  8. 二维码扫描开源库ZXing定制化【转】

    转自:http://www.cnblogs.com/sickworm/p/4562081.html 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. ...

  9. 基于MUI框架的使用HTML5+实现的二维码扫描功能

                                                                               Barcode的一个实现案例 一.简介 Barco ...

  10. iOS二维码扫描/识别

    一直以为二维码功能比较简单,  从来没有放在心上过,  由于公司项目需要这个功能,  也算是第一次真正去做二维码的东西.  从网上看别人的博客很多都是写的比较碎片, 没有一个能做的比较完整的,  今天 ...

最新文章

  1. wpf+xml实现的一个随机生成早晚餐的小demo
  2. 牧小熊:Adobe Illustrator 在科研作图中的应用!
  3. 高并发的核心技术 - 幂等的实现方案
  4. 软件疑难杂症解决办法汇总
  5. wcf ria中主从表绑定treeview
  6. Pidgin下使用Gtalk问题
  7. Python 利用pickle库查看pkl文件实例演示,pkl是什么类型的文件?怎么来打开它?
  8. 23_传智播客iOS视频教程_类的对象的创建
  9. python的*args与**kwargs
  10. oracle语法_PG数据库sql语法总结,与Oracle有什么不同?
  11. 结对作业_代码复审= =
  12. opera pms 数据库 MySQL_2020年最新版Opera PMS常用报表总结
  13. 如何在 Windows 10 上完全禁用 UAC
  14. krpano使用gyro2.js自定义陀螺仪
  15. 中国远程医疗行业发展前景预测和投资规划分析报告2022-2027年
  16. python 实现QQ邮箱发送邮件
  17. 用于视觉识别的深度卷积网络空间金字塔池化方法
  18. 计算机打字不盲打可以吗,能盲打了,为什么打字速度还不快?现在才40左右,怎样才能达到60以上呢?...
  19. 关于主从复制的超详细解析(全)
  20. 博客(blog.m1kh.com)

热门文章

  1. 我们上语文英语音乐计算机和美术英语,“制作课程表”教学设计.ppt
  2. celeste第二章_『第二章』 蔚蓝的剑
  3. js禁止苹果页面底部滚动_js禁止页面滚动
  4. 如何将flac文件转换为mp3文件?
  5. 【清华大学陈渝】 第十一章_死锁
  6. win10自带计算机应用恢复,win10重置电脑后怎么恢复应用_win10重置后恢复软件的方法...
  7. 基金投资入门 4:指数基金
  8. 华为无线2020春招一面二面主管面-3.25
  9. 亚马逊结算一览(C#项目)
  10. 用python画太阳花过程_有几个问题一直弄不出来求大神 python(python太阳花教程)