飞道的博客

基于HaaS100搭建云端一体RFID读卡器

438人阅读  评论(0)

1、前言

无线射频识别即射频识别技术(Radio Frequency Identification,RFID)是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对电子标签或射频卡进行读写,从而达到识别目标和数据交换的目的。

 

RFID技术具有抗干扰性强以及无需人工识别的特点,所以常常被应用在一些需要采集信息的领域上,例如物流,仓储,防伪,身份识别等领域。

 

接下来我们学习下怎么基于HaaS100 搭建RFID读卡器,读取卡片信息,并且通过阿里云平台将其传到我们的手机上。

2、RFID射频识别系统的工作原理

电子标签进入天线磁场后,若接收到读写器发出的特殊射频信号,就能凭借感应电流所获得的能量发送出存储在芯片中的产品信息(无源标签),或者主动发送某一频率的信号(有源标签),读写器读取信息并解码后,送至中央信息系统进行有关数据处理。

 

典型的RFID系统主要由应用系统软件,RFID读写器,电子标签3部分构成。

 

 

3、RFID读写器介绍

 

TX522 是一款基于13.56MHz频率的Mifare卡读写模块,可以支持多种类型卡,TX522 Mifare卡读写模块具有天线一体化,识别距离达到80mm。可以通过UART接口跟HaaS100进行通信。

 

刷卡:

当检测到 RFID卡片靠近的时候;红色指示灯闪烁,并通过串口发送出卡片序列号相关的指令.

 

指令协议说明

数据通信以一帧为单位进行,格式如下:

数据通信帧结构:


  
  1. 第1字节:起始符;
  2. 第2字节:包号,默认:0x00;
  3. 第3字节:命令—上位机发送给IC卡读写器;
  4. 第4字节:此帧有效数据的长度。从紧接着的第1个字节开始,到倒数第3个字节结束,为有效字节。
  5. 第5字节 到  倒数第3字节: 有效数据。
  6. 倒数第2字节:校验和;
  7. 倒数第1字节:结束符;

 

刷卡。模块上的指示灯会亮,并且通过串口主动发送卡片序列号给上位机,此时上位机就会接收到卡片序列号的相关指令。

例如指令:20 00 01 08 04 00 00 00 A6 40 FE E4 0E 03。


  
  1. 20:起始符
  2. 00:包号
  3. 01:命令字节,模块主动输出卡片序列号时,该字节为 0x 00;其他指令为命令字
  4. 08:表示后面 8个字节为有效数据位
  5. 04 00:表示卡片属性为S 50
  6. 00 00:此 2个字节无实际意义。
  7. A6 40 FE E 4 :表示卡片序列号。刷不同卡片,此 4个字节会变。
  8. 0E:校验和。从包号(SEQNR)开始到数据(DATA)的最后一字节异或,然后再取反 得到。
  9. 03:帧结束符。

 

卡片序列号是我们关注的重要信息,我们通过串口读取卡片序列号信息后将其发送给阿里云,云端再将这个信息发送到我们的手机APP上。

 

4、硬件连接

RFID模块通过UART接口跟HaaS100进行通信。

这个是HaaS100 硬件接口定义:

 

将电源线,地线,串口RX,串口TX  4根线接到HaaS板子上。

 

5、接入阿里云IoT平台

 

请参考基于HaaS 100搭建智能家居应用创建自己的应用。

基于HaaS100快速搭建智能家居应用

 

需要注意的是在功能定义页面添加自定义功能:卡片序列号  CardID

在产品面板页面选择设备ID用于在手机上显示读取到的RFID卡片序列号。

 

6、HaaS 软件代码

接下来我们开始编写HaaS 上的软件代码,读取串口数据,从中提取出卡片序列号,通过linkkit SDK接口将序列号发送给阿里云IoT平台。

 

6.1、软件流程图

6.2、HaaS100 串口通信部分

UART串口操作说明:

https://help.aliyun.com/document_detail/161062.html?spm=a2c4g.11186623.6.574.73d4c806uT1bKl

具体代码可以参考这个文件:application/example/example_legacy/uart/uart.c


  
  1. int application_start(int argc, char *argv[])
  2. {
  3. printf( "uart sample application started...\n");
  4. uart_dev_t uart_demo;
  5. uart_demo.port = 2;
  6. uart_demo.config.baud_rate = 9600;
  7. uart_demo.config.mode = MODE_TX_RX;
  8. uart_demo.config.flow_control = FLOW_CONTROL_DISABLED;
  9. uart_demo.config.stop_bits = STOP_BITS_1;
  10. uart_demo.config.parity = NO_PARITY;
  11. uart_demo.config.data_width = DATA_WIDTH_8BIT;
  12. ret = hal_uart_init(&uart_demo);
  13. int i;
  14. int ret;
  15. char rev_buf[ 1];
  16. int rev_length;
  17. while ( 1) {
  18. ret = hal_uart_recv_II(&uart_demo, rev_buf, sizeof(rev_buf), &rev_length, AOS_WAIT_FOREVER);
  19. if (ret != 0) {
  20. printf( "recv data from uart error\r\n");
  21. break;
  22. }
  23. for(i = 0; i < rev_length; i++) {
  24. printf( "%02x ", rev_buf[i]& 0xff);
  25. }
  26. printf( "\r\n");
  27. }
  28. return 0;
  29. }

6.3、往阿里云IoT平台发送数据

我们使用linkkit 组件中的IOT_Linkkit_Report接口将读取的卡片序列号DeviceID发送给阿里云IoT平台。


  
  1. linkkit_event. c
  2. void user_post_data (uint8_t value)
  3. {
  4. int res = 0;
  5. char property_payload[ 30] = { 0};
  6. HAL_Snprintf(property_payload, sizeof(property_payload), "{\"DeviceID\": %s}", "123987");
  7. res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,
  8. ( unsigned char *)property_payload, strlen(property_payload));
  9. }
  10. linkkit_main:
  11. while ( 1) {
  12. user_post_data();
  13. }

7、端云联调

7.1、下载软件版本

编译,烧写步骤可以参考 HaaS100快速开始

7.2、设备配网

通过命令行配网,串口输入如下指令可完成配网:

netmgr -t wifi -c {ssid} {password}

7.3、设备与云智能APP绑定

安装的云智能APP,保证手机更设备连接同一个APP.点击右上角红色标注"+" 按钮,开始设备查找。

约数秒钟后找到设备,如下图,点击完成。

 

至此绑定完成。

7.4、演示效果图片

当有RFID卡片靠近读卡器时,我们会在手机上看到卡片的序列号。

 

8、总结

本文档介绍了如何基于HaaS100 搭建RFID读卡器,读取卡片信息,并且通过阿里云物联网平台将数据传到我们的手机上,其中涉及到了HaaS 串口操作和给阿里云IOT发送数据。

RFID模块除了可以读卡上的数据外还可以给卡写入数据,还有更多的功能大家可以一起挖掘和探索。

HaaS100除了串口外还可以通过i2c、spi 等接口链接外面的传感器或者其他设备。

通过本文档介绍的这个流程,大家可以打造更多的应用场景,一起可以行动起来,亲手制作一套属于自己的智能设备吧!

9、开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/


转载:https://blog.csdn.net/HaaSTech/article/details/111307770
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场