基于RT-Thread与GD32F527I-EVAL的多媒体门禁系统 | 技术集结

描述

兆易创新本月正式推出GD32F503/505高性能系列32位通用微控制器,新品将全面支持RT-Thread平台。GD32F503/505高性能系列显著扩大了基于Arm Cortex-M33内核的产品阵容,为GD32 MCU高性能产品线再添新锐。该系列基于Armv8-M架构,主频高达280MHz,具备灵活的存储配置、高集成度、内置多种安全功能,为高性能计算提供坚实基础,可广泛应用于数字电源、工业自动化、电机控制、扫地机、BMS、人形机器人等多元化场景。

GD32F503/505系列MCU现已开放样品及开发板申请,感兴趣的小伙伴可以微信联系RT-Thread小师弟(rtthread2020)。

目录

 

嵌入式项目介绍


 

硬件连接


 

设计流程


 

项目源码

1 嵌入式项目介绍

1.1介绍

基于GD32F527I-EVAL的多媒体门禁系统,主控GD32F527I-EVAL,具备摄像头采集图像(DMA直接到SDRAM),保存照片,查看照片。DCI数字图像接口、TLI接口驱动TFT-LCD屏幕,ESP01S(MQTT协议)联网上传数据,语音识别控制开门、开灯等,RFID门禁卡识别,手机APP远程监控与控制(HTTP协议)。

门禁系统

 

链接:【基于 GD32F527I-EVAL 的多媒体智能门禁系统-哔哩哔哩】 https://b23.tv/hOGykGD

1.2硬件需要:

语音识别模块、MFRC522、SG90舵机、TFTLCD、OV2640摄像头、ESP01S、LED灯、调试串口、按键输入。

1.3主要功能:

语音识别开门、打开灯光、打开摄像头、拍照、查看照片进行对应工作。RFID门禁卡刷去在TFT-LCD屏幕上显示序列号,同时还会语音播报主人几,在手机app上显示灯、门、序列号等信息,还可以进行远程控制。

2 硬件连接

2.1 OV2640摄像头模块

通过DCI(数字相机接口)连接到GD32:

DCI_PIXCLK (PA6)

DCI_VSYNC (PG9)

DCI_HSYNC (PA4)

DCI_D0 (PC6)

DCI_D1 (PC7)

DCI_D2 (PC8)

DCI_D3 (PC9)

DCI_D4 (PC11)

DCI_D5 (PD3)

DCI_D6 (PB8)

DCI_D7 (PB9)

SCCB_SCL (PA4) - 用于配置摄像头

SCCB_SDA (PC6) - 用于配置摄像头

2.2 TFTLCD显示屏

通过TLI(LCD-TFT控制器)连接:

LCD_R7 (PG6)

LCD_R6 (PH12)

LCD_R5 (PH11)

LCD_R4 (PH10)

LCD_R3 (PH9)

LCD_R2 (PH8)

LCD_R1 (PH3)

LCD_R0 (PH2)

LCD_G7 (PI2)

LCD_G6 (PI1)

LCD_G5 (PI0)

LCD_G4 (PH15)

LCD_G3 (PH14)

LCD_G2 (PH13)

LCD_G1 (PE6)

LCD_G0 (PE5)

LCD_B7 (PI7)

LCD_B6 (PI6)

LCD_B5 (PI5)

LCD_B4 (PI4)

LCD_B3 (PG11)

LCD_B2 (PG10)

LCD_B1 (PG12)

LCD_B0 (PE4)

LCD_HSYNC (PI10)

LCD_VSYNC (PI9)

LCD_PCLK (PG7)

LCD_PWM_BackLight (PB15)

2.3 MFRC522 RFID读卡器模块

通过软件模拟SPI接口连接:

SDA (PA15) - 片选信号

SCK (PB3) - 时钟信号

MOSI (PB5) - 主机输出从机输入

MISO (PB4) - 主机输入从机输出

RST (PA8) - 复位信号

2.4 ESP01S WiFi模块

通过UART2串口连接:

TX (PB10) - 发送数据到ESP01S

RX (PB11) - 从ESP01S接收数据

2.5 语音识别模块

通过UART1串口连接:

TX (PA2) - 发送数据到语音识别模块

RX (PA3) - 从语音识别模块接收数据

2.6 SG90舵机

通过TIMER0_CH3 PWM信号控制:

PWM信号 (PA11) - 控制舵机角度

2.7 指示LED灯

通过GPIO控制:

LED1 (PF8) - 一个指示灯

LED2 (PE3) - 另一个指示灯

2.8 调试串口

通过UART3连接(用于printf调试输出):

TX (PC10) - 调试信息输出

RX (PC11) - 接收调试命令

2.9 按键输入

通过外部中断连接:

WAKEUP按键 (PA0) - 外部中断0

TAMPER按键 (PC13) - 外部中断13

USER按键 (PB14) - 外部中断14

3 设计流程

3.1针对MRCF522模块采用SPI通信,对数据进行读取

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

// 功    能:防冲突检测读取选中卡片的卡序列号// 参数说明: pSnr[OUT]:卡片序列号,4字节// 返    回: 成功返回MI_OKcharMFRC522_Anticoll(unsignedchar *pSnr){    char status;    unsignedchar i, snr_check = 0;    unsignedint unLen;    unsignedchar ucComMF522Buf[MAXRLEN];    ClearBitMask(Status2Reg, 0x08);    Write_MFRC522(BitFramingReg, 0x00);    ClearBitMask(CollReg, 0x80);    ucComMF522Buf[0] = PICC_ANTICOLL1;    ucComMF522Buf[1] = 0x20;    status = MFRC522_ToCard(PCD_TRANSCEIVE, ucComMF522Buf, 2, ucComMF522Buf, &unLen);    if (status == MI_OK)    {        for (i = 0; i < 4; i++)        {            *(pSnr + i) = ucComMF522Buf[i];            snr_check ^= ucComMF522Buf[i];        }        if (snr_check != ucComMF522Buf[i])        {            status = MI_ERR;        }    }    SetBitMask(CollReg, 0x80);    return status;}

读取到的数据因为要显示在LCD屏幕上通过下列代码进行数据转换,4字节卡号转换为8个字符 + 1结束符

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

voidbyte_array_to_hex_string(unsignedchar *byte_array, int len, char *hex_string){constchar hex_chars[] = "0123456789ABCDEF";int i;for (i = 0; i < len; i++)    {        hex_string[i * 2] = hex_chars[(byte_array[i] >> 4) & 0x0F];        hex_string[i * 2 + 1] = hex_chars[byte_array[i] & 0x0F];    }    hex_string[len * 2] = '\0'; // 添加字符串结束符}

3.2联网功能是通过AT指令控制esp01s进行mqtt协议发送数据以及解包

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

voidESP8266_Init(void){    ESP8266_Clear();    printf("1. AT\r\n");    // OLED_Clear(); OLED_ShowString(0,0,"1.AT...",8);    while (ESP8266_SendCmd("AT\r\n", "OK"))        delay_1ms(500);    printf("2. CWMODE\r\n");    // OLED_ShowString(0,2,"2.CWMODE...",8);    while (ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))        delay_1ms(500);    printf("3. AT+CWDHCP\r\n");    // OLED_ShowString(0,4,"3.AT+CWDHCP...",8);    while (ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))        delay_1ms(500);    printf("4. CWJAP\r\n");    // OLED_ShowString(0,6,"4.CWJAP...",8);    while (ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))        delay_1ms(500);    printf("5. ESP8266 Init OK\r\n");    // OLED_Clear(); OLED_ShowString(0,0,"ESP8266 Init OK",16); delay_ms(500);}

3.3语音识别功能通过天问语音模块进行多线程控制

门禁系统

3.4灯光、用户识别标志灯通过rt_device进行控制,手机APP为通过Vue2结构进行设计