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位元組:起始符;
第2位元組:包号,預設:0x00;
第3位元組:指令—上位機發送給IC卡讀寫器;
第4位元組:此幀有效資料的長度。從緊接着的第1個位元組開始,到倒數第3個位元組結束,為有效位元組。
第5位元組 到 倒數第3位元組: 有效資料。
倒數第2位元組:校驗和;
倒數第1位元組:結束符;
刷卡。子產品上的訓示燈會亮,并且通過序列槽主動發送卡片序列号給上位機,此時上位機就會接收到卡片序列号的相關指令。
例如指令:20 00 01 08 04 00 00 00 A6 40 FE E4 0E 03。
20:起始符
00:包号
01:指令位元組,子產品主動輸出卡片序列号時,該位元組為0x00;其他指令為指令字
08:表示後面8個位元組為有效資料位
04 00:表示卡片屬性為S50卡
00 00:此2個位元組無實際意義。
A6 40 FE E4 :表示卡片序列号。刷不同卡片,此4個位元組會變。
0E:校驗和。從包号(SEQNR)開始到資料(DATA)的最後一位元組異或,然後再取反 得到。
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
int application_start(int argc, char *argv[])
{
printf("uart sample application started...\n");
uart_dev_t uart_demo;
uart_demo.port = 2;
uart_demo.config.baud_rate = 9600;
uart_demo.config.mode = MODE_TX_RX;
uart_demo.config.flow_control = FLOW_CONTROL_DISABLED;
uart_demo.config.stop_bits = STOP_BITS_1;
uart_demo.config.parity = NO_PARITY;
uart_demo.config.data_width = DATA_WIDTH_8BIT;
ret = hal_uart_init(&uart_demo);
int i;
int ret;
char rev_buf[1];
int rev_length;
while (1) {
ret = hal_uart_recv_II(&uart_demo, rev_buf, sizeof(rev_buf), &rev_length, AOS_WAIT_FOREVER);
if (ret != 0) {
printf("recv data from uart error\r\n");
break;
}
for(i = 0; i < rev_length; i++) {
printf("%02x ", rev_buf[i]&0xff);
}
printf("\r\n");
}
return 0;
6.3、往阿裡雲IoT平台發送資料
我們使用linkkit 元件中的IoT_Linkkit_Report接口将讀取的卡片序列号DeviceID發送給阿裡雲IoT平台。
linkkit_event.c
void user_post_data(uint8_t value)
int res = 0;
char property_payload[30] = {0};
HAL_Snprintf(property_payload, sizeof(property_payload), "{\"DeviceID\": %s}", "123987");
res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,
(unsigned char *)property_payload, strlen(property_payload));
linkkit_main:
user_post_data();
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首頁