前 言
本文檔主要介紹基于iMX6ULL開發闆分享物聯網子產品開發案例,其中内容包括SDIO WIFI子產品測試、STA模式測試、NB-IoT子產品測試、Zigbee子產品測試、LoRa子產品測試和4G子產品測試由于篇幅過長,案例分為上下兩部分,歡迎各位感興趣的使用者檢視更多。
适用開發環境:
Windows開發環境:Windows 7 64bit、Windows 10 64bit
虛拟機:VMware15.1.0
Linux開發環境:Ubuntu18.04.4 64bit
U-Boot:U-Boot-2020.04
Kernel:Linux-5.4.70
Linux SDK:5.4.70_2.3.0
本案例測試闆卡為創龍科技的TLIMX6U-EVM,它是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗處理器設計的評估闆,由核心闆和評估底闆組成。核心闆經過專業的PCB Layout和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。
評估闆接口資源豐富,引出雙路網口、雙路RS485、雙路CAN、三路USB、多路DI/DO、LCD等接口,闆載WIFI、Bluetooth子產品,支援LoRa、NB-IoT、Zigbee、4G子產品,可選配外殼直接應用于工業現場。
無特殊說明情況下,預設使用USB TO UART1作為調試序列槽,使用Linux系統啟動卡(SD啟動模式)啟動系統,通過路由器與PC機進行網絡連接配接。
創龍科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗處理器設計的評估闆,由核心闆和評估底闆組成。核心闆經過專業的PCB Layout和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。
評估闆接口資源豐富,引出雙路網口、雙路RS485、雙路CAN、三路USB、多路DI/DO、LCD等接口,闆載WIFI、Bluetooth子產品,支援LoRa、NB-IoT、Zigbee、4G子產品,可選配外殼直接應用于工業現場,友善使用者快速進行産品方案評估與技術預研。
SDIO WIFI子產品測試
本案例使用SDIO WIFI子產品型号為:RTL8189,請将SDIO WIFI子產品插至評估闆SDIO接口,如下圖所示。
圖 1
SDIO WIFI子產品支援STA和AP模式,具體說明如下:
- STA模式:在STA工作模式下,WIFI子產品可接收來自無線路由器發出的信号,實作通過路由器連接配接網際網路。
- AP模式:在AP工作模式下,WIFI子產品會建立一個無線區域網路熱點,手機、電腦等裝置可通過此熱點組建區域網路。
本案例測試程式位于産品資料“4-軟體資料\Demo\module-demos\sdio_wifi_test\”目錄下,具體說明如下。
表 1
bin | 測試腳本、程式配置檔案 |
driver | SDIO WIFI子產品驅動 |
src | SDIO WIFI子產品驅動源碼 |
請将bin目錄下所有檔案和driver目錄下8189fs.ko驅動檔案拷貝至評估闆檔案系統任意相同路徑下,并将SDIO WIFI子產品正确連接配接至評估闆SDIO接口。由于SDIO接口與Micro SD接口存在引腳複用關系,是以請務必将Linux系統啟動卡從評估闆Micro SD卡槽中取出。将評估闆啟動方式選擇撥碼開關撥為011000(1~6),此檔位為NAND FLASH啟動模式。
STA模式測試
進入評估闆檔案系統,在SDIO WIFI子產品驅動8189fs.ko所在路徑下,執行如下指令加載驅動。
Target# insmod 8189fs.ko
圖 2
圖 3
執行如下指令關閉其他網絡和wpa_supplicant程序,僅保留WIFI網絡。
Target# ifconfig eth0 down
Target# ifconfig eth1 down
Target# killall -9 wpa_supplicant
Target# ifconfig wlan0 up
Target# ifconfig
圖 4
在wifi_setup.sh檔案所在路徑下執行如下指令,将評估闆通過WIFI子產品連接配接至路由器。"-i"指定WIFI名稱,"-p"指定WIFI密碼,請根據實際情況修改。
Target# ./wifi_setup.sh -i Tronlong-test -p omapl138
圖 5
執行如下指令檢視擷取的IP位址,并通過ping指令測試評估闆與PC機通信是否正常。192.168.1.100為PC機實際IP位址,請確定評估闆與PC機在同一區域網路内。
Target# ifconfig
Target# ping 192.168.1.100
圖 6
在評估闆檔案系統執行如下指令,檢視評估闆IP位址,使用Iperf3工具測試評估闆與PC機的網絡通信帶寬。
Target# ifconfig
Target# iperf3 -s
圖 7
在Ubuntu系統執行如下指令測試網絡通信帶寬,192.168.1.103為評估闆實際IP位址。測試完成後,Ubuntu和評估闆均會列印測試結果。測試結果受網絡環境影響,僅供參考。
Host# iperf3 -c 192.168.1.103 -i 1
圖 8
圖 9
AP模式測試
請重新開機評估闆系統,在SDIO WIFI子產品驅動8189fs.ko所在路徑下執行如下指令加載驅動。
Target# insmod 8189fs.ko
圖 10
圖 11
執行如下指令關閉其他網絡和wpa_supplicant程序,僅保留WIFI網絡。
Target# ifconfig eth0 down
Target# ifconfig eth1 down
Target# killall -9 wpa_supplicant
Target# ifconfig wlan0 up
Target# ifconfig
圖 12
在ap_setup.sh檔案所在路徑下執行如下指令,将SDIO WIFI子產品設定為AP模式。
Target# ./ap_setup.sh
圖 13
如啟動AP功能過程中,出現如下問題,是由于random熵不夠引起,需重新開機評估闆,執行如下指令更換熵池,再重新測試。
Target# mv /dev/random /dev/random_ori
Target# ln -s /dev/urandom /dev/random
圖 14
圖 15
程式預設設定的WIFI名稱為:rtl8188fs,密碼為:88888888,可在rtl_hostapd_2G.conf配置檔案内進行修改。
将具有WIFI功能的PC機(比如筆記本電腦或裝有USB WIFI的台式電腦)連接配接至此無線區域網路熱點,并斷開已有的有線網絡連接配接。連接配接成功後,序列槽調試終端将會列印如下資訊,顯示Ubuntu已配置設定的IP位址。如使用虛拟機 + Ubuntu的開發方式,将會擷取到兩個IP位址,其中一個為Windows端IP位址,一個為Ubuntu端IP位址。
圖 16
執行如下指令測試無線區域網路裝置之間網絡連接配接是否正常。若出現連接配接逾時或失敗,可嘗試關閉PC機防火牆後再次連接配接。
Target# ping 192.168.0.21 //192.168.0.21為Ubuntu端IP位址
圖 17
在評估闆檔案系統執行如下指令,檢視評估闆IP位址并等待PC機連接配接。
Target# ifconfig
Target# iperf3 -s
圖 18
在Ubuntu系統執行如下指令測試網絡通信帶寬,192.168.0.1為評估闆實際IP位址。測試完成後,Ubuntu和評估闆均會列印測試結果。測試結果受網絡環境影響,僅供參考。
Host# iperf3 -c 192.168.0.1 -i 1
圖 19
圖 20
測試完成,請将評估闆斷電,拔出SDIO WIFI子產品,将Linux系統啟動卡插入Micro SD卡槽,啟動方式選擇撥碼開關撥為010100(1~6) SD啟動模式。
SDIO WIFI驅動編譯
請将案例src目錄下的驅動源碼rtl8189FS.tar.gz拷貝至Ubuntu工作目錄下,執行如下指令将源碼壓縮包解壓至該目錄下。
Host# tar -xf rtl8189FS.tar.gz
圖 21
執行如下指令,進入驅動源碼目錄,修改頂層Makefile檔案
Host# cd rtl8189FS/
Host# vim Makefile
圖 22
Makefile檔案内容請按如下說明進行修改。
KSRC = /home/tronlong/IMX6/Kernel/Linux-5.4.70 //指定核心源碼實際路徑
圖 23
在驅動源碼所在路徑執行如下指令,使能SDK環境變量并編譯SDIO WIFI驅動。
Host# source /home/tronlong/SDK/environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi
Host# make
圖 24
圖 25
編譯完成後,即可在目前路徑下生成驅動鏡像。
NB-IoT子產品測試
本案例使用的NB-IoT子產品型号為:億佰特EA01-D,詳細參考資料請檢視産品資料“1-開箱必讀\産品規格書\拓展子產品規格書\”目錄下的《EA01-D_Usermanual_CN_v1.1》檔案。請将NB-IoT物聯網卡插至NB-IoT子產品Micro SIM卡槽,然後将子產品插至評估闆NB-IoT接口,将2.4G天線連接配接至子產品天線接口,如下圖所示。
備注:由于存在引腳複用關系,請勿同時将Zigbee、LoRa子產品連接配接至評估闆。
圖 26
擷取IMEI和IMSI
進入評估闆檔案系統,執行如下指令指定序列槽背景運作,用于接收子產品資訊。
Target# cat /dev/ttymxc5 &
Target# stty -F /dev/ttymxc5 -echo
圖 27
執行如下指令,擷取IMEI碼和IMSI碼。
Target# echo "AT+CGSN=1" > /dev/ttymxc5 //擷取IMEI碼
Target# echo "AT+CIMI" > /dev/ttymxc5 //擷取IMSI碼
圖 28
本次擷取的IMEI碼為"864624050017021",擷取的IMSI碼為"460082267401907"。
建立雲端NB-IoT裝置
本次測試以中國移動NB-IoT物聯網解決方案OneNET為例進行示範。請登入官方網站:open.iot.10086.cn,通過手機号進行新增賬號并登入。
賬号登入成功,進入如下界面,點選右上角“控制台”。
圖 29
進入如下界面,點選左上角“切換至舊版”。
圖 30
進入如下界面,進入“NB-IoT物聯網套件”。
圖 31
進入如下界面,點選“添加産品”。
圖 32
進入如下界面,根據實際情況依次輸入産品資訊:産品名稱、産品行業、産品類别,以及技術參數:聯網方式選擇"NB-IoT"、裝置接入協定選擇"LWM2M"、作業系統選擇"Linux"、網絡營運商選擇“移動”。
圖 33
産品添加完成後,彈出如下視窗,點選“立即添加裝置”。
圖 34
進入如下界面,點選“添加裝置”。
圖 35
進入如下界面,依次輸入裝置類型、裝置名稱、IMEI碼和IMSI碼,并開啟自動訂閱功能。
圖 36
裝置添加成功後,将會彈出如下視窗,請将裝置ID:969146269和PSK碼:8NKXxti2IS5WaDjW記錄儲存,用于後續測試,然後點選“知道了”按鈕關閉視窗。
圖 37
進入如下界面,可觀察到目前裝置處于離線狀态,點選“詳細”。
圖 38
進入如下界面,點選“編輯”,在彈出的視窗輸入自定義Auth_Code:Tronlong,然後點選确認關閉視窗。至此,雲端NB-IoT裝置建立完成。
圖 39
圖 40
圖 41
建立通信套件執行個體
本章節主要示範NB-IoT子產品的通信執行個體,詳細參考資料請檢視産品資料“6-開發參考資料\其他參考文檔\”目錄下的《EA01-S+3GPP和營運商雲平台标準指令手冊》檔案。
生成配置參數
将産品資料“4-軟體資料\Tools\Windows\”目錄下的cfg_tool.zip和Sublime-Text-Build-3211_x64.zip壓縮包拷貝至Windows非中文目錄下并解壓。
圖 42
進入Sublime-Text-Build-3211_x64目錄,輕按兩下sublime_text.exe程式進行安裝。
圖 43
進入cfg_tool目錄,使用文本工具打開test.xml檔案,
圖 44
根據前面步驟擷取的資訊,修改AuthCode為Tronlong,修改PSK為8NKXxti2IS5WaDjW,如下圖所示。
圖 45
打開Windows指令行CMD,輸入如下指令進入ctg_tool目錄,生成配置檔案。
CMD# cd /d E:\tools\cfg_tool\
CMD# cis_cgtool.exe test.xml out.bin
圖 46
執行完成後,将會在ctg_tool目錄下生成out.bin檔案。
圖 47
打開Sublime Text軟體,将生成的out.bin檔案拖入該軟體打開,可看到裝置配置參數以16進制顯示。同時滑鼠右擊點選out.bin檔案可檢視該檔案大小為93Byte。
圖 48
圖 49
建立執行個體
建立OneNET通信套件執行個體
測試指令為:echo AT+MIPLCREATE=<total size>,<config>,<index>,<currentsize>,<flag> > /dev/ttymxc5
參數解析:
<total size>:配置檔案的總長度。即out.bin檔案大小,本次測試檔案為93Byte。
<config>:配置檔案内容,16進制數的形式。
<index>:配置檔案的序号。考慮到AT指令長度有限,一個完整的配置檔案未必能在一條AT指令中發送完成,可将内容切分成多段。比如分為N段,則從前到後按照降序依次配置設定序号為N-1~0,按照從大到小序号的順序每段調用一次AT指令。如當index為0時,意味着該條指令為最後一條配置消息。
<currentsize>:目前指令所包含的配置檔案長度。本次測試為93Byte。
<flag>:消息辨別,1:第一條消息,2:中間消息,0:最後一條消息。
進入評估闆檔案系統,在可執行程式所在目錄下執行如下指令,傳回OK表示建立成功。
Target# echo "AT+MIPLCREATE=93,13005df10003f2004f040011800005434d494f540000000000123138332e3233302e34302e33393a35363833002741757468436f64653a54726f6e6c6f6e673b50534b3a384e4b58787469324953355761446a573bf30008e400c80000,0,93,0" > /dev/ttymxc5
圖 50
建立LwM2M協定執行個體
測試指令為:echo AT+MIPLADDOBJ=<ref>,<objectid>,<instancecount>,<instancebitmap>,<attributecount>,<actioncount> > /dev/ttymxc5
參數解析:
<ref>:基礎通信套件的一個執行個體辨別,類型為一個無符号整數。
<objectid>:對象ID。
<instancecount>:執行個體個數。
<instancebitmap>:執行個體位圖,字元串格式,每一個字元表示為一個執行個體,其中1表示可用,0表示不可用。例如添加的Object有5個執行個體,其中1、3可用,則執行個體位圖為00101。
<attributecount>:屬性個數。
<actioncount>:操作個數。
在可執行程式所在目錄下執行如下指令。
Target# echo AT+MIPLADDOBJ=0,3311,2,11,4,3 > /dev/ttymxc5
圖 51
發送注冊請求
測試指令為:ehco AT+MIPLOPEN=<ref>,<lifetime>,<timeout> > /dev/ttymxc5
<ref>:基礎通信套件的一個執行個體辨別,類型為一個無符号整數。
<lifetime>:生命周期,機關為秒。
<timeout>:注冊的逾時時長,機關為秒。
在可執行程式所在目錄下執行如下指令。當通信無誤時,将會傳回OK,子產品接下來開始上報狀态事件,如下圖所示。
Target# echo AT+MIPLOPEN=0,3000,30 > /dev/ttymxc5
圖 52
狀态事件資訊說明如下。
+MIPLEVENT:0,1 //bootstrap啟動
+MIPLEVENT:0,2 //bootstrap啟動成功
+MIPLEVENT:0,4 //連接配接成功
+MIPLEVENT:0,6 //注冊成功
- 驗證Observe請求
執行個體注冊成功後,NB-IoT子產品将會上報Observe請求,其中上報請求中第二個參數為消息的ID,如下圖所示。
圖 53
每當子產品上報一次Observe請求,請務必在5秒内執行如下指令進行驗證,驗證成功後,将會傳回OK。如子產品繼續上報Observe請求,需繼續執行指令驗證,直至執行個體訂閱成功,如下圖所示。
Target# echo AT+MIPLOBSERVERSP=0,104148,1 > /dev/ttymxc5 //驗證第一條請求
Target# echo AT+MIPLOBSERVERSP=0,169685,1 > /dev/ttymxc5 //驗證第二條請求
圖 54
同時,在雲端裝置管理界面,可觀察到對應裝置呈現自動訂閱成功狀态,至此,建立執行個體完成。
圖 55 圖 55