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:
while (1) {
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首頁https://iot.aliyun.com/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236662.html
標籤:其他
