项目后感:这个项目主要由三部分组成,dsp指纹识别模块,烧了Linux系统的树莓派2B+,显示屏。显示屏的显示效果很赞,色彩饱满,没有坏点,响应快,没有眩晕效果,值得买。然后再到指纹模块,识别的效果勉强可以。然后再到树莓派,在树莓派上跑QT可真是有点慢了。
项目回顾:
1.指纹识别模块:
指纹模块是基于DSP数字处理芯片,它已经集成了指纹录入,对比的算法,我们编程的时候,不必进行对它编程,它只是留有数据的接口,我们在上位机编程的时候通过调用这些接口,发送相应的命令,就可以进行树莓派和指纹模块之间的通信了。这个指纹模块的资料,我们购买的时候,一般卖家会提供给我们,我现在使用的是EM-EMG系列的指纹模块,人们需要了解的话,可以上网去搜索查看,我在这里就不详细的介绍了。附图一
2.树莓派
项目中最重要的莫过于树莓派的软件设计了。。第一次在树莓派上玩QT编程,真心觉得跑得慢慢慢,在这里就省略怎么给树莓派装linux和怎么装QT环境了。尝试第一次打开QT环境,发现点了之后迟迟没有响应,只是这个打开环境的时间绝对足够让我去泡壶茶再吃包饼干,而具体项目中有模拟串口发送,串口接受的环节,发现模拟串口发送数据后,接受再显示出来居然用了有两秒左右~慢得不能接受啊~。。。也许树莓派还真的只能当个教育工具,不可以在工业或者一些速度要求高的环境中受重用。。
回到正题,项目的软件设计,这个也是系统设计的关键部分了。
Linux下的串口编程,在嵌入式开发中占据着重要的地位,因为很多的嵌入式设备都是通过串***换数据的。在没有操作系统的我们可以使用UART的中断来出来数据的接受和发送,而在Linux操作系统下,我们也可以使用软中断的方式来处理数据的接受和发送,这里主要使用的是信号SIGIO,也就是异步I/O。这里也可以使用select实现异步形式的通知。 这里可以参考《UNIX 环境高级编程》中的第14章 高级I/O和第18章的I/O终端,这两章描述了串口的编程和异步I/O方面的内容。还有一本书《linux serial programminghow-to》,《Serial Programming Guide for POSIX Operating Systems》。这都是串口编程的必读和经典书籍。串口参数的设置一般包括波特率、起始位数量、数据位、停止位和流控协议。在接收端和发送端要配置成一样的参数设置。在Linux中,所有的设备文件一般都位于“/dev”下,我们可以在Linux终端查看它的内容,不难看到,有一个叫做“ttyAMA0”的文件,没错,这个就是树莓派上的一个串口,具体中断编程如下:
这部分的意思就是,当串口接受外界发来的信号,就立即会进入信号里面的函数,这就是如非系统设备的串口中断实现的异曲同工之妙。 下面讲述Qt下的多线程编程,这个系统主要由指纹的对比,指纹的录入等指纹的相关操作,多线程就在这发挥不可代替的作用。 在 Qt 系统中与线程相关的最重要的类当然是 QThread 类,线程是通过 QThread::run() 重载函数开始执行的。在 Qt 系统中,始终运行着一个GUI 主事件线程,这个主线程从窗口系统中获取事件,并将它们分发到 各个组件去处理。在 QThread 类中还有一种从非主事件线程中将事件提交给一个对象的方法,也就是 QThread::postEvent()方法,该方法提供了 Qt 中的一种 Thread-safe 的事件提交过程。提交的事件被 放进一个队列中,然后 GUI 主事件线程被唤醒并将此事件发给相应的对象,这个过程与一般的窗口系统 事件处理过程是一样的所以就免了代码了。。。然后线程实现的函数,我以指纹的对比为比例,下面列出代码
最后显示上位机的照片:
还有就是指纹识别错误之后就有一个短信报警的机制,我选用的是SIM900模块进行报警的,具体的操作也就用树莓派串口发送一些AT指令给sim900模块,就能进行短信的发送和电话的拨打,很是方便,但是该模块也经常因为信号原因到时有error、。。。项目就到这里结题了,最后还是不得不说,屏幕很赞,指纹识别模块识别效果牵强,树莓派上的qt不好玩。
|