1@page rfid_demo HaaS100实现RFID读卡器信息上报云端示例 2 3[更正文档](https://gitee.com/alios-things/rfid_demo/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html) 4 5# 1. 案例简介 6 7 8无线射频识别即射频识别技术(Radio Frequency Identification,RFID)是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对电子标签或射频卡进行读写,从而达到识别目标和数据交换的目的。 9 10 11RFID技术具有抗干扰性强以及无需人工识别的特点,所以常常被应用在一些需要采集信息的领域上,例如物流,仓储,防伪,身份识别等领域。 12 13 14接下来我们学习下怎么基于HaaS100 搭建RFID读卡器,读取卡片信息,并且上传到阿里云IOT平台上。 15 16<img src="https://img.alicdn.com/imgextra/i2/O1CN012j7oiV1PpfERjfefk_!!6000000001890-2-tps-349-401.png" style="max-width:800px;" /> 17 18实验效果展示: 19 20<img src="https://img.alicdn.com/imgextra/i4/O1CN01duVVEO1J7LCrbrpHm_!!6000000000981-2-tps-1704-860.png" style="max-width:800px;" /> 21 22# 2. 基础知识 23RFID射频识别系统的工作原理: 24电子标签进入天线磁场后,若接收到读写器发出的特殊射频信号,就能凭借感应电流所获得的能量发送出存储在芯片中的产品信息(无源标签),或者主动发送某一频率的信号(有源标签),读写器读取信息并解码后,送至中央信息系统进行有关数据处理。 25 26典型的RFID系统主要由应用系统软件,RFID读写器,电子标签3部分构成。 27 28<img src="https://img.alicdn.com/imgextra/i1/O1CN01dQNJ2x24FO6j8gfXW_!!6000000007361-2-tps-462-280.png" style="max-width:800px;" /> 29 30# 3. 物料清单 31 32## 3.1 HaaS100 硬件 33 34[HaaS100 硬件简介](https://help.aliyun.com/document_detail/184426.html) 35 36<img src="https://img.alicdn.com/imgextra/i4/O1CN01XxD6Xo217CB3FZnEU_!!6000000006937-2-tps-746-497.png" style="max-width:800px;" /> 37 38## 3.2 RFID读写器 39 40<img src="https://img.alicdn.com/imgextra/i4/O1CN015zTuPa1ipduhDVCPY_!!6000000004462-2-tps-720-364.png" style="max-width:800px;" /> 41 42TX522 是一款基于13.56MHz频率的Mifare卡读写模块,可以支持多种类型卡,TX522 Mifare卡读写模块具有天线一体化,识别距离达到80mm。可以通过UART接口跟HaaS100进行通信。 43 44 45刷卡: 46当检测到 RFID卡片靠近的时候;红色指示灯闪烁,并通过串口发送出卡片序列号相关的指令. 47 48 49指令协议说明 50数据通信以一帧为单位进行,格式如下: 51数据通信帧结构: 52 53 54第1字节:起始符; 55第2字节:包号,默认:0x00; 56第3字节:命令—上位机发送给IC卡读写器; 57第4字节:此帧有效数据的长度。从紧接着的第1个字节开始,到倒数第3个字节结束,为有效字节。 58第5字节 到 倒数第3字节: 有效数据。 59倒数第2字节:校验和; 60倒数第1字节:结束符; 61 62 63刷卡。模块上的指示灯会亮,并且通过串口主动发送卡片序列号给上位机,此时上位机就会接收到卡片序列号的相关指令。指令:20 00 01 08 04 00 00 00 A6 40 FE E4 0E 03。 6420:起始符 6500:包号 6601:命令字节,模块主动输出卡片序列号时,该字节为0x00;其他指令为命令字 6708:表示后面8个字节为有效数据位 6804 00:表示卡片属性为S50卡 6900 00:此2个字节无实际意义。 70A6 40 FE E4 :表示卡片序列号。刷不同卡片,此4个字节会变。 710E:校验和。从包号(SEQNR)开始到数据(DATA)的最后一字节异或,然后再取反 得到。 7203:帧结束符。 73 74卡片序列号是我们关注的重要信息,我们通过串口读取卡片序列号信息后将其发送给阿里云IOT平台。 75 76 77 78# 4. 案例实现 79 80## 4.1 硬件连接 81 82 83RFID模块通过UART接口跟HaaS100进行通信。 84 85 86这个是HaaS100 硬件接口定义: 87 88<img src="https://img.alicdn.com/imgextra/i1/O1CN01rvpScH1kBSOWmRDhj_!!6000000004645-2-tps-1066-1422.png" style="max-width:800px;" /> 89 90红框部分是串口2的引脚。 91 92 93将RFID模块电源线,地线,串口RX,串口TX 4根线接到HaaS板子串口2上。 94 95 96 97| HaaS板引脚编号 | HaaS板引脚说明 | RFID模块 | 98| -------------- | -------------- | -------- | 99| 5 | 5V | VCC | 100| 3 | GND | GND | 101| 10 | UART2_RXD | TX | 102| 12 | UART2_TXD | RX | 103 104 105 106<img src="https://img.alicdn.com/imgextra/i4/O1CN01n9cATi1c9brz4RRVl_!!6000000003558-0-tps-2048-1536.jpg" style="max-width:800px;" /> 107 108 109## 4.2 接入阿里云IOT平台 110 111首先登陆[阿里云IOT平台](https://iot.console.aliyun.com/product)。 112 113选择产品标签页,点击创建产品按钮,新建产品,填写产品信息。 114 115<img src="https://img.alicdn.com/imgextra/i3/O1CN01DAuLhk1fEb1qOeI7n_!!6000000003975-2-tps-976-1406.png" style="max-width:800px;" /> 116 117选择添加功能 118 119<img src="https://img.alicdn.com/imgextra/i2/O1CN01MAjlRL1Cyk4t3RcMC_!!6000000000150-2-tps-2138-1264.png" style="max-width:800px;" /> 120 121点击编辑草稿按钮,编辑自定义功能,记录下标识符信息后面代码中会用到。 122 123<img src="https://img.alicdn.com/imgextra/i4/O1CN01ZGA4bi1T1yjDtlKTV_!!6000000002323-2-tps-940-1370.png" style="max-width:800px;" /> 124 125编辑完成后点击左下角发布上线。 126 127<img src="https://img.alicdn.com/imgextra/i1/O1CN01T8sQFc1Wggmc5YR0C_!!6000000002818-0-tps-1513-830.jpg" style="max-width:800px;" /> 128 129开始添加设备,选择设备标签页,点击添加设备按钮。 130<img src="https://img.alicdn.com/imgextra/i2/O1CN01hrEJd92431PsCejIV_!!6000000007334-2-tps-910-802.png" alt="add.png" style="max-width:800px;" /> 131 132查看设备三元组信息: 133记录下设备的三元组信息: product key/device name/device secret ,这些信息后面要填写到代码中。 134 135<img src="https://img.alicdn.com/imgextra/i1/O1CN01KFOGt21DY0ZfJh7f6_!!6000000000227-2-tps-1684-970.png" style="max-width:800px;" /> 136 137## 4.3 软件实现 138接下来我们开始编写HaaS 上的软件代码,读取串口数据,从中提取出卡片序列号,通过linkkit SDK接口将序列号发送给阿里云IOT平台。 139 140 141### 4.3.1 软件流程图 142RFID相关代码在solutions/rfid_demo目录下。 143<img src="https://img.alicdn.com/imgextra/i1/O1CN01SxtDtq1Cv4uV1PQdO_!!6000000000142-2-tps-638-1110.png" alt="image.png" style="max-width:800px;" /> 144 145### 4.3.2 HaaS100 串口通信部分 146 147UART串口操作代码可以参考这个文件:solutions/rfid_demo/rfid_app.c 148UART串口操作相关代码: 149 150```c 151int rfid_uart_init(void) 152{ 153 int port_id = 2; 154 int ret = 0; 155 char dev_name[16] = {0}; 156 157 snprintf(dev_name, sizeof(dev_name), "/dev/ttyUART%d", port_id); 158 fd = open(dev_name, 0); 159 if(ret != 0) { 160 printf("open uart error\r\n"); 161 return ret; 162 } 163 ret = ioctl(fd, IOC_UART_SET_CFLAG, B9600 | CS8); 164 if(ret != 0) { 165 close(fd); 166 printf("ioctl uart error\r\n"); 167 return ret; 168 } 169} 170static void task_recvdata_entry(void *arg) 171{ 172 int i = 0; 173 int ret = 0; 174 char rfid_data_buf[50] = {0}; 175 int rev_length = 0; 176 char params[30]; 177 char rfid_deviceid[12]; 178 179 while (1) { 180 ret = read(fd, rfid_data_buf, sizeof(rfid_data_buf)); 181 if (ret > 0) { 182 printf("read length:%d\r\n", ret); 183 for (i = 0; i < ret; i++) { 184 printf("%02x ", rfid_data_buf[i]); 185 } 186 } 187} 188``` 189 190 191### 4.3.3 往阿里云IOT平台发送数据 192 193 194我们使用send_property_post接口将读取的卡片序列号DeviceID发送给阿里云IOT平台。 195 196 197```c 198//card_id 这个字符串是之前在阿里云IOT平台添加自定义功能时的标志符。 199//rfid_deviceid 里存储的是通过串口读到的RFID序列号。 200 201snprintf(params, sizeof(params), "{\"card_id\": \"%s\"}", rfid_deviceid); 202send_property_post(params); 203``` 204 205 206## 4.4 端云联调 207### 4.4.1 下载软件版本 208 209开发环境的搭建请参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),其中详细的介绍了AliOS Things 3.3的IDE集成开发环境的搭建流程。 210 211RFID的代码下载请参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html), 212 213*> 选择解决方案: “rfid使用示例”或者“rfid demo”* 214 215*> 选择开发板: Haas100 board configure* 216 217源码下载完成后将在阿里云IOT平台获取的设备信息填写到文件solutions//rfid_demo/rfid_demo.c中。 218 219```c 220 char *product_key = ""; 221 char *device_name = ""; 222 char *device_secret = ""; 223``` 224 225-- 编译固件可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)。 226 227-- 烧录固件可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)。 228 229### 4.4.2 设备配网 230HaaS启动后通过串口命令行配网,输入如下指令可完成配网: 231``` 232netmgr -t wifi -c {ssid} {password} 233``` 234ssid, password 替换成你自己的网络热点信息。 235 236### 4.4.3 演示效果图片 237当有RFID卡片靠近读卡器时,我们会在串口log里看到RFID卡片数据信息: 238 239<img src="https://img.alicdn.com/imgextra/i1/O1CN01c8wrDo1YXBnUbLawp_!!6000000003068-2-tps-632-136.png" style="max-width:800px;" /> 240 241在IOT平台上可以看到卡片的序列号。 242 243<img src="https://img.alicdn.com/imgextra/i1/O1CN01DXv7B91z2xHBbdeNm_!!6000000006657-2-tps-1724-964.png" style="max-width:800px;" /> 244 245 246# 5. 总结 247 248本文档介绍了如何基于HaaS100 搭建RFID读卡器,读取卡片信息,并且上传到阿里云IOT平台上,其中涉及到了HaaS 串口操作和给阿里云IOT发送数据。 249RFID模块除了可以读卡上的数据外还可以给卡写入数据,还有更多的功能大家可以一起挖掘和探索。 250HaaS除了串口外还可以通过i2c,spi 等接口链接外面的传感器或者其他设备。 251通过本文档介绍的这个流程,大家可以打造更多的应用场景,一起行动起来,打造一套属于自己的智能设备吧。 252