973浏览
查看: 973|回复: 1

树莓派餐厅自助点餐系统(二)

[复制链接]
本帖最后由 淄博杨广峰 于 2020-5-17 07:32 编辑

树莓派餐厅自助点餐系统是基于古德微树莓派设计的一个图形化编程应用。该程序使用RFID-RC522射频卡​读取和存储用户余额,管理员可随时充值,用户消费实时扣款。借助古德微控件控制,实时传输用户点餐数据。用户通过扫二维码获得点餐界面,可以点选菜品,程序下方的文本框实时给出用户的选择。点餐结束后,可在文本框中输入大写字母Y打印交易内容。文本框中会实时显示用户本次消费的明细,消费总金额和账户余额,同时借助热敏打印机打印用户消费小票。
阅读本文前,请参照DF论坛或四五创客公众号上一篇文章,树莓派餐厅自助点餐系统(一)RFID-RC522射频卡应用基础。

第二部分 射频卡读写操作

在上一篇文章中,我们已经初步了解了RFID-RC522射频卡与树莓派的连接方法,也学会了开启树莓派的SPI接口,从而为树莓派与射频卡的之间数据传递奠定了基础,本文将进一步讲解如何从射频卡中读写数据。
一、再谈RFID-RC522射频卡
看了上一篇文章,很多朋友说,案例很感兴趣,但是对于射频卡非常陌生,那我们就再谈谈射频卡。
(一)什么是射频卡
一句话,射频卡也叫感应卡,电子标签。
射频卡采用的是无线射频技术,无线射频识别即射频识别技术(Radio Frequency Identification,RFID),是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对记录媒体(电子标签或射频卡)进行读写,从而达到识别目标和数据交换的目的,其被认为是21世纪最具发展潜力的信息技术之一。
(二)射频卡有什么用处
一句话,利用射频卡和射频识别技术,可以实现信息的存储和读写。
射频卡的应用场景有很多,可以应用于物流仓储的货物追踪、信息自动采集,可以应用于交通运输中的车辆管理、车辆识别,可以应用于电子证件的身份识别,可以应用于贵重物品的防伪识别,可以应用于水果食品保质管理,可以应用于文本档案的数据信息和统计管理,还可以实现文物档案的安全防护,本例,我们用它来存储用户的余额信息。
(三)射频卡的组成部分:
射频卡有两部分组成,第一部分是发射部分,向外发射电磁信号,我们也可以把它叫做发射卡。如下图:
202005177493..png
                              
射频卡的第二部分是接收部分,有圆形的,也有方形的,我们可以把它叫做接收卡,如下图:
202005173588..png 202005175212..png
在我们的树莓派餐厅自助点餐系统中,发射卡与树莓派连接在一起放在餐厅,而方形的或者是圆形的接收卡,由用户自己携带。在进行点餐时,用户将接收卡靠近发射卡,当然这个距离与射频卡发射部分的发射功率有关。
二、射频卡的写操作:
向射频卡中写入数据称之为射频卡的写操作。
1、初始化射频模块,reset引脚设为22。Reset引脚可以参照上文中的引脚对照表。
2、把数字100写入到射频卡中,并将其赋值为写入的数据变量。
3、判断是否写入成功
判断的依据是列表写入的数据的最后一项是否为空。
4、如果列表写入的数据的最后一项不为空,说明写入成功,输出写入成功。
5、如果列表写入的数据的最后一项为空,说明写入失败,输出写入失败。
特别说明,射频卡写入完成后,会生成一个列表,列表的第一部分,是射频卡的标识,第二部分是数据的真正写入内容,本例中对应的是100。后面,我们还有专门的实验来进行测试。
202005171015..png
程序测试结果:
202005179784..png
三、重复写操作直到成功
看完第一篇文章后,有朋友问,我的写操作程序有时候显示成功,有时候又显示失败,这是为什么?我们知道,写操作程序执行的不稳定一定会影响后续程序的运行,怎么办?很简单,一次写操作可能不成功,我们可以进行多次写操作。如:
202005177421..png
貌似解决了原来的问题,但是新问题又来了,每一次写操作都会将原来的数据覆盖掉。有时候,第一次,第二次都是成功的,但是第三次不成功,如果第三次执行不成功,上面的程序最终结果可能会不成功。解决这个问题,就是创建一个循环,重复多次执行,但是只要成功写入,就要立即停掉循环。大家可以参考下面的写法:
202005176172..png
程序测试结果:
202005171630..png
特殊情况处理如果采用了重复写操作直到成功的程序,仍然不能写入成功,你可以考虑以下几种情况,一是检查射频卡接收部分与发射部分有没有放在一起,通俗的说就是你的卡片有没有放在读卡器上。二是检查射频卡发射部分的接线。三是检查树莓派SPI接口有没有开启。
当然还有一种情况,检查你的发射部分是否是一块完整的电路板。有时候,新近入手的射频卡,电路板可能没有进行焊接,所以需要我们把电路板焊接牢固,这样才能正常使用,很多朋友的射频卡读写不成功可能就是这个原因。
四、射频卡写入的数据分析
上面一步,我们已经进行了重复写入的操作,数据已经成功写入射频卡,那么写入的数据是一个什么样呢?运行下面的一段程序,测试一下吧!
202005177010..png
分别输出写入的数据、写入的数据的第一部分和写入数据的第二部分。
程序运行结果:
202005177935..png
我们发现,写入的数据是一个列表,该列表有两项内容,第一项内容是24793281400,第二项内容是313030,这些数据什么意思?搞不清楚!
再来做一个测试,将上面程序中的数据100,改为数据200,程序运行结果为:
202005178182..png
同样是一个列表的两部分,第一部分内容相同,第二部分内容不同。
没有对比就没有伤害!现在我们找出规律了。第一部分代表设备的一个编号,两次都是相同的。第二部分才是我们真正写入的数据。在树莓派餐厅的案例中,我们反复读写的数据其实就是第二项内容,也就是本人账户的余额。
但是,我们一定会有疑问,在这个程序中我们写入的真实数据明明是100和200,为什么得到的数据不是100和200呢?其实我们得到的数据就是100和200,只不过它是用ASCII码表示的100和200。为什么这样说?
202005174966..png
仔细对照上边的数据,我们发现100对应的十六进制数据就是313030,200所对应的十六进制数据就是323030。如果是其他的字符,也可以采用类似的编码,大家可以参照下面的编码对照表。
202005177829..png
关于ASCII码的知识大家可以自行百度,这里需要确定一点,我们已经成功写入数据100。
五、射频卡的读操作
从射频卡中读取已经存储的数据叫做射频卡的读操作。在读取之前,先运行写操作,确保射频卡中已经存储了数据。
1、初始化射频模块,reset引脚设为22。Reset引脚可以参照上文中的引脚对照表。
2、从射频卡中读取数据,并将其赋值为读取的数据变量
3、取出列表读取的数据中最后一项
这一项是我们真正存储的有用信息,本例中对应的是100。
4、输出读取的真正的有用数据
202005177934..png
六、重复读操作直到成功
与重复写操作类似,有的时候,一次读操作也可能不成功,我们可以多次进行读操作。我们可以进行多次读操作。如下图:
同样,多次读取的操作也会出现,这一次覆盖上一次的问题。解决这个问题,就是创建一个循环,重复多次执行,但是只要成功读取,就要停掉循环。大家可以用下面的写法:
202005179129..png
这一次,我们换用了另外一种重复循环方式,将重复次数设定为1000次,其实它与重复当真效果相当,只要读取到了非空的数据,程序就会中断。当然,如果1000次也没有读取成功,这个程序就会失败。实际操作中这种情况几乎没有!
到这里,我们已经学会了射频卡的读写操作,在我们的树莓派自助点餐程序中,对于射频卡的操作是重点,用户点餐前,要读取用户射频卡的数据,得到用户可以消费的金额,用户每一次点选菜品,都要根据菜品的价格实时扣除相应的费用,把最后的余额重新写入射频卡。所以每次读写都要确保成功,否则程序一定会失败!
第一篇文章发出后,阅读量很快过百,大家都非常认可这个小作品,不少朋友还亲自做了尝试,普遍反映的问题是射频卡不能正常读写,要知道,射频卡的读写是树莓派餐厅自助点餐系统的重要技术手段,为此,今天详细讲解了射频卡的读写操作。感谢各位朋友的关注,能得到朋友们的认可,本人心里也有一些小激动!大家常说,树莓派是一个坑,坑的是你的时间和金钱,我的体会是,对于玩树莓派的坑里人,每当挖出一点土来,自然是欣喜若狂,但是,你有没有想到,你挖出的土越多,你就会陷得越深!!!只不过,每一个坑里人,都乐在其中,这也许就是树莓派的魅力吧!

DFrJ5KYVQaH  中级技匠

发表于 2020-5-17 09:22:37

太好,老师的文章
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail