大數據

基於HaaS100搭建雲端一體RFID讀卡器

在這裡插入圖片描述

1. 案例簡介

無線射頻識別即射頻識別技術(Radio Frequency Identification,RFID)是自動識別技術的一種,通過無線射頻方式進行非接觸雙向數據通信,利用無線射頻方式對電子標籤或射頻卡進行讀寫,從而達到識別目標和數據交換的目的。

RFID技術具有抗干擾性強以及無需人工識別的特點,所以常常被應用在一些需要採集信息的領域上,例如物流,倉儲,防偽,身份識別等領域。

接下來我們學習下怎麼基於HaaS100 搭建RFID讀卡器,讀取卡片信息,並且上傳到阿里雲IOT平臺上。

O1CN012j7oiV1PpfERjfefk_!!6000000001890-2-tps-349-401.png

實驗效果展示:

O1CN01duVVEO1J7LCrbrpHm_!!6000000000981-2-tps-1704-860.png

2. 基礎知識

RFID射頻識別系統的工作原理:
電子標籤進入天線磁場後,若接收到讀寫器發出的特殊射頻信號,就能憑藉感應電流所獲得的能量發送出存儲在芯片中的產品信息(無源標籤),或者主動發送某一頻率的信號(有源標籤),讀寫器讀取信息並解碼後,送至中央信息系統進行有關數據處理。

典型的RFID系統主要由應用系統軟件,RFID讀寫器,電子標籤3部分構成。

O1CN01dQNJ2x24FO6j8gfXW_!!6000000007361-2-tps-462-280.png

3. 物料清單

3.1 HaaS100 硬件

HaaS100 硬件簡介

O1CN01XxD6Xo217CB3FZnEU_!!6000000006937-2-tps-746-497.png

3.2 RFID讀寫器

O1CN015zTuPa1ipduhDVCPY_!!6000000004462-2-tps-720-364.png

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:幀結束符。

卡片序列號是我們關注的重要信息,我們通過串口讀取卡片序列號信息後將其發送給阿里雲IOT平臺。

4. 案例實現

4.1 硬件連接

RFID模塊通過UART接口跟HaaS100進行通信。

這個是HaaS100 硬件接口定義:

O1CN01rvpScH1kBSOWmRDhj_!!6000000004645-2-tps-1066-1422.png

紅框部分是串口2的引腳。

將RFID模塊電源線,地線,串口RX,串口TX 4根線接到HaaS板子串口2上。

HaaS板引腳編號 HaaS板引腳說明 RFID模塊
5 5V VCC
3 GND GND
10 UART2_RXD TX
12 UART2_TXD RX

O1CN01n9cATi1c9brz4RRVl_!!6000000003558-0-tps-2048-1536.jpg

4.2 接入阿里雲IOT平臺

首先登陸阿里雲IOT平臺

選擇產品標籤頁,點擊創建產品按鈕,新建產品,填寫產品信息。

O1CN01DAuLhk1fEb1qOeI7n_!!6000000003975-2-tps-976-1406.png

選擇添加功能

O1CN01MAjlRL1Cyk4t3RcMC_!!6000000000150-2-tps-2138-1264.png

點擊編輯草稿按鈕,編輯自定義功能,記錄下標識符信息後面代碼中會用到。

O1CN01ZGA4bi1T1yjDtlKTV_!!6000000002323-2-tps-940-1370.png

編輯完成後點擊左下角發佈上線。

O1CN01T8sQFc1Wggmc5YR0C_!!6000000002818-0-tps-1513-830.jpg

開始添加設備,選擇設備標籤頁,點擊添加設備按鈕。
add.png

查看設備三元組信息:
記錄下設備的三元組信息: product key/device name/device secret ,這些信息後面要填寫到代碼中。

O1CN01KFOGt21DY0ZfJh7f6_!!6000000000227-2-tps-1684-970.png

4.3 軟件實現

接下來我們開始編寫HaaS 上的軟件代碼,讀取串口數據,從中提取出卡片序列號,通過linkkit SDK接口將序列號發送給阿里雲IOT平臺。

4.3.1 軟件流程圖

RFID相關代碼在solutions/rfid_demo目錄下。
image.png

4.3.2 HaaS100 串口通信部分

UART串口操作代碼可以參考這個文件:solutions/rfid_demo/rfid_app.c
UART串口操作相關代碼:


int rfid_uart_init(void)
{
int port_id = 2;
int ret = 0;
char dev_name[16] = {0};
snprintf(dev_name, sizeof(dev_name), "/dev/ttyUART%d", port_id);
fd = open(dev_name, 0);
if(ret != 0) {
printf("open uart error\r\n");
return ret;
}
ret = ioctl(fd, IOC_UART_SET_CFLAG, B9600 | CS8);
if(ret != 0) {
close(fd);
printf("ioctl uart error\r\n");
return ret;
}
}
static void task_recvdata_entry(void *arg)
{
int i = 0;
int ret = 0;
char rfid_data_buf[50] = {0};
int rev_length = 0;
char params[30];
char rfid_deviceid[12];
while (1) {
ret = read(fd, rfid_data_buf, sizeof(rfid_data_buf));
if (ret > 0) {
printf("read length:%d\r\n", ret);
for (i = 0; i < ret; i++) {
printf("%02x ", rfid_data_buf[i]);
}
}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

4.3.3 往阿里雲IOT平臺發送數據

我們使用send_property_post接口將讀取的卡片序列號DeviceID發送給阿里雲IOT平臺。


//card_id 這個字符串是之前在阿里雲IOT平臺添加自定義功能時的標誌符。
//rfid_deviceid 裡存儲的是通過串口讀到的RFID序列號。
snprintf(params, sizeof(params), "{\"card_id\": \"%s\"}", rfid_deviceid);
send_property_post(params);

  • 1
  • 2
  • 3
  • 4
  • 5

4.4 端雲聯調

4.4.1 下載軟件版本

開發環境的搭建請參考《aos-studio使用說明之搭建開發環境》,其中詳細的介紹了AliOS Things 3.3的IDE集成開發環境的搭建流程。

RFID的代碼下載請參考《aos-studio使用說明之創建工程》

> 選擇解決方案: “rfid使用示例”或者“rfid demo”

> 選擇開發板: Haas100 board configure

源碼下載完成後將在阿里雲IOT平臺獲取的設備信息填寫到文件solutions//rfid_demo/rfid_demo.c中。


char *product_key = "";
char *device_name = "";
char *device_secret = "";

  • 1
  • 2
  • 3

– 編譯固件可參考《aos-studio使用說明之編譯固件》

– 燒錄固件可參考《aos-studio使用說明之燒錄固件》

4.4.2 設備配網

HaaS啟動後通過串口命令行配網,輸入如下指令可完成配網:


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

  • 1

ssid, password 替換成你自己的網絡熱點信息。

4.4.3 演示效果圖片

當有RFID卡片靠近讀卡器時,我們會在串口log裡看到RFID卡片數據信息:

O1CN01c8wrDo1YXBnUbLawp_!!6000000003068-2-tps-632-136.png

在IOT平臺上可以看到卡片的序列號。

O1CN01DXv7B91z2xHBbdeNm_!!6000000006657-2-tps-1724-964.png

5. 總結

本文檔介紹瞭如何基於HaaS100 搭建RFID讀卡器,讀取卡片信息,並且上傳到阿里雲IOT平臺上,其中涉及到了HaaS 串口操作和給阿里雲IOT發送數據。
RFID模塊除了可以讀卡上的數據外還可以給卡寫入數據,還有更多的功能大家可以一起挖掘和探索。
HaaS除了串口外還可以通過i2c,spi 等接口鏈接外面的傳感器或者其他設備。
通過本文檔介紹的這個流程,大家可以打造更多的應用場景,一起行動起來,打造一套屬於自己的智能設備吧。

開發者支持

HaaS官方:https://haas.iot.aliyun.com/
HaaS技術社區:https://blog.csdn.net/HaaSTech
開發者釘釘群和公眾號見下圖,開發者釘釘群每天都有技術支持同學值班。
在這裡插入圖片描述

Leave a Reply

Your email address will not be published. Required fields are marked *