STMCU小助手
发布时间:2022-8-15 19:57
|
一、项目背景 在消费升级渗透在各个领域的今天,国民消费发生着巨大的变化,与每个人息息相关的家居行业也是如此。现今,越来越多的智能家居产品出现在普通老百姓的生活中,智能照明、智能窗帘、智能扫地机器人等各种智能产品都给人们的生活带来了极大的便利。智能门锁作为智能家居中重要的一环,也成为消费者家居智能化的重要选择。智能相比市面的机械门锁更加安全、更智能、更人性化而得到市场的认可,在智能门锁行业里,不少世界500强企业也在智能门锁上进行产品布局,像中国小米公司就生产智能门锁,致力打造智慧家庭,市场智能门锁能够支持五种解锁方式,支持指纹、手机、门禁门、按键密码、钥匙解锁功能。可以说是智能家庭必不可少的成员。
二、项目功能要求 1、可通过指纹模块增删查改家庭成员的指纹信息,增删查改是否成功的相关信息显示在OLED屏幕上 2、在指纹匹配过程中,如果采集的指纹与指纹模块库相匹配,OLED显示匹配成功,并转动步进电机一圈 3、可通过按键设定智能门锁密码,密码可设置为两个(密码六位),如果匹配两个中的一个成功,即可开锁,也可通过按键修改密码,所有的操作过程显示于OLED中 4、实现RFID与手机解锁(蓝牙解锁) 5、扩展:虚位密码解锁(虚位密码:自己百度) 项目所用到的主要技术: 1、IIC协议、SPI协议、串口协议 2、外部flash驱动、SD卡驱动 3、FTAFS文件系统 4、RTC实时时钟 三、元件准备 1、步进电机(带驱动模块) 型号:28BYJ4+ULN2003
2、4X4矩阵按键
3、指纹模块AS608(串口控制) 4、0.96寸OLED显示屏(IIC) 型号:7针
5、蓝牙模块HC-05
6、主控芯片STM32F407ZGT6 型号:普中最小系统板
7、RFID RC522 射频模块(带一张卡片)
8、杜邦线 四、项目设计 (一)原理图设计
(二)硬件设计 根据原理图连接好硬件电路
(三)程序设计 由于代码过长只展示部分代码:
五、上机调试 把硬件连接好之后还需要做一些准备工作: 录入指纹: (1)程序下载之前需要给门禁一个解锁方式,门锁一共有4种解锁方式:指纹、蓝牙、卡片、密码。其中卡片需要录入过系统的才可以解锁,密码一开始保存在stm32内部flash中,内部flash做eeprom需要先初始化,解锁后在设置中更改密码或者在代码中进行初始化密码,不然密码是乱码。 (2)串口录入指纹:将串口转TTL CH340模块连接好指纹模块,用配套上位机录入自己的一个指纹。详细连接方法参考指纹模块资料 (3)解锁后就可以进行设置密码和录入卡片等操作
移植汉字库:(如果没有SD卡接口可以自己汉字取模显示) (1)准备一个sd卡,一个读卡器,用来存储汉字库,显示到OLED (2)找到开发资料下的SYSTEM文件夹
(3)把SYSTEM文件夹复制到SD卡根目录下(一定要是根目录下)
(4)复制好之后吧SD卡插到开发板 (5)下载程序到开发板启动,如果可以显示汉字说已经移植成功。(注意:开始的化作尘&指纹锁界面是显示的图片,并不是汉字字体) 一般遇到的问题: 如果进去只显示“化作尘指纹锁”然后黑屏,那么是字库的问题 如果因为不知道密码进不去主界面,那么打开代码,将密码打印出来,然后就可以用密码解锁了,一共两个密码,任意一个都可以解锁:
因为没有考虑到字符不全是’0’- '9’的关系,密码打印出来不是数字,所以查看密码不成功 正确打开方式 步骤一:直接给密码赋值操作,然后编译下载,下载完成后输入密码“123456”是肯定可以进主界面的,然后点击修改密码,密码修改为你想要的密码“000111”,这个密码会保存到内部eeprom ,密码初始化就完成了 1、在127行加入如下代码编译下载
2、输入密码“123456”解锁
3、进入解锁后界面,选择修改密码
密码修改为“123456”后保存,会保存到内部eeprom
步骤二:把刚刚写的代码注释,重新下载进去,代码就可以正常运行了,输入刚刚设置的密码“000111”就可以解锁
蓝牙调试 1、首先下载“蓝牙串口”APP 2、连接蓝牙后发送密码“123456::” 蓝牙发送密码不解锁? 1、可能是波特率不对 ①可以通过AT指令修改蓝牙模块的波特率与单片机一样(9600),使得蓝牙模块能连接单片机(单片机代码初始化蓝牙模块的波特率一般为9600) ②可以用usb转ttl将蓝牙模块与电脑相连,打开串口助手后,用手机连接蓝牙发送数据,调节串口助手的波特率,接收到正常数据后记录波特率,这个就是蓝牙模块现在的波特率,随后将代码中初始化蓝牙模块的波特率改成这个波特率,单片机就可以正常与蓝牙模块通信 2、可能是蓝牙模块接线不对,吧tx rx对调 3、可能蓝牙模块已经损坏 开机图片取模显示 取模软件合集.rar 1、先画一张黑白的128*64分辨率的 .bmp图片
2、打开Image2Lcd软件,先打开图片,按照如下配置,点击保存,会生成取模代码
六、知识扫盲 (一)汉字的显示 (具体代码参考正点原子“汉字显示实验”) 1、汉字的显示原理 1)学习过屏幕驱动的应该都知道,屏幕的显示无非就是在屏幕上打相应颜色的点,比如要显示一个字符 ‘A’ 那么我只需要知道 ‘A’ 相应的点阵数据就可以把它显示出来,汉字也一样。 2、汉字库 1)汉字库文件在正点原子的开发板资料->“SD卡根目录文件”中,可以到正点原子官网论坛下载
2)汉字库有两类文件,.FON与.BIN文件,.FON代表汉字库点阵文件,.BIN表示的是编码表,与点阵一一对应,比如GBK编码的第一个字就对应着点阵里的第一个点阵数据,映射关系如下: UNIGBK->GBK12.FON UNIGBK->GBK24.FON UNIGBK->GBK32.FON 有兴趣可以百度一下查看GBK编码表:
2、汉字库的存储位置 2)汉字与字符不同的是,汉字有1万多个,ASCII码字符却只有100多个,并且汉字的显示明显比字符的点阵复杂程度高,比如说字体是12的字符占用点阵是12x6,每个字符需要12x6/8=9个字节的存储空间。字体是12 的汉字占用12x12的点阵,每个汉字需要12x12/8=18个字节存储空间,这还是最小字体,大的字体所需要的存储空间只会成倍增加 3)一般12号字体的汉字库需要500K字节、16号字体700K、24号字体1.6M、32号字体3M,这对于单片机来说数据量太大了,内部FLASH512K~1M表示压力很大
4)需要把汉字库保存到SD卡,再将SD卡中的汉字库数据保存到外部FILASH才行,w25q128无疑是个好选择,它拥有16M的存储空间,SPI通信协议,读写速度也是相当快。 (二)把汉字库里的点阵数据读取出来显示到MCU屏 1、数据编码格式的问题 1)有关显示汉字就必然会涉及编码格式的问题,不同的编码格式对应的汉字编码是不同的,比如UTF-8编码的文件用GB2312编码打开就会乱码。 同理,比如文档的格式是UTF-8编码,但是我的字库是GBK编码,读出来的数据直接显示到屏幕就必然会乱码 2)所以显示汉字如果乱码首先需要检查的就是编辑器的编码,保证编码一致。 |
STM32串口自动识别波特率的原理
STM32应用过程中与电源相关的案例分享
【经验分享】STM32F4 CAN2只能发送无法接收问题解决
F429I-DISC1体验报告(3) 画板线条绘制和调色功能的实现丨国庆开发板测评活动
F429I-DISC1体验报告(2) 按钮和弹窗GUI的简单交互设计丨国庆开发板测评活动
STM32固件库分享,超全系列整理
STM32系列芯片之间相互移植注意事项
使用 U 盘更新 STM32F4DISCOVERY 板固件
STM32如何成为现代科技的隐形引擎
STM32--STM32 微控制器详解
微信公众号
手机版