天天看點

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

作者:Tronlong創龍科技

前 言

本文檔主要介紹基于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和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

評估闆接口資源豐富,引出雙路網口、雙路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接口,如下圖所示。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 1

SDIO WIFI子產品支援STA和AP模式,具體說明如下:

  1. STA模式:在STA工作模式下,WIFI子產品可接收來自無線路由器發出的信号,實作通過路由器連接配接網際網路。
  2. 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

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 2

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 3

執行如下指令關閉其他網絡和wpa_supplicant程序,僅保留WIFI網絡。

Target# ifconfig eth0 down

Target# ifconfig eth1 down

Target# killall -9 wpa_supplicant

Target# ifconfig wlan0 up

Target# ifconfig

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 4

在wifi_setup.sh檔案所在路徑下執行如下指令,将評估闆通過WIFI子產品連接配接至路由器。"-i"指定WIFI名稱,"-p"指定WIFI密碼,請根據實際情況修改。

Target# ./wifi_setup.sh -i Tronlong-test -p omapl138

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 5

執行如下指令檢視擷取的IP位址,并通過ping指令測試評估闆與PC機通信是否正常。192.168.1.100為PC機實際IP位址,請確定評估闆與PC機在同一區域網路内。

Target# ifconfig

Target# ping 192.168.1.100

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 6

在評估闆檔案系統執行如下指令,檢視評估闆IP位址,使用Iperf3工具測試評估闆與PC機的網絡通信帶寬。

Target# ifconfig

Target# iperf3 -s

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 7

在Ubuntu系統執行如下指令測試網絡通信帶寬,192.168.1.103為評估闆實際IP位址。測試完成後,Ubuntu和評估闆均會列印測試結果。測試結果受網絡環境影響,僅供參考。

Host# iperf3 -c 192.168.1.103 -i 1

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 8

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 9

AP模式測試

請重新開機評估闆系統,在SDIO WIFI子產品驅動8189fs.ko所在路徑下執行如下指令加載驅動。

Target# insmod 8189fs.ko

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 10

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 11

執行如下指令關閉其他網絡和wpa_supplicant程序,僅保留WIFI網絡。

Target# ifconfig eth0 down

Target# ifconfig eth1 down

Target# killall -9 wpa_supplicant

Target# ifconfig wlan0 up

Target# ifconfig

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 12

在ap_setup.sh檔案所在路徑下執行如下指令,将SDIO WIFI子產品設定為AP模式。

Target# ./ap_setup.sh

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 13

如啟動AP功能過程中,出現如下問題,是由于random熵不夠引起,需重新開機評估闆,執行如下指令更換熵池,再重新測試。

Target# mv /dev/random /dev/random_ori

Target# ln -s /dev/urandom /dev/random

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 14

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 15

程式預設設定的WIFI名稱為:rtl8188fs,密碼為:88888888,可在rtl_hostapd_2G.conf配置檔案内進行修改。

将具有WIFI功能的PC機(比如筆記本電腦或裝有USB WIFI的台式電腦)連接配接至此無線區域網路熱點,并斷開已有的有線網絡連接配接。連接配接成功後,序列槽調試終端将會列印如下資訊,顯示Ubuntu已配置設定的IP位址。如使用虛拟機 + Ubuntu的開發方式,将會擷取到兩個IP位址,其中一個為Windows端IP位址,一個為Ubuntu端IP位址。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 16

執行如下指令測試無線區域網路裝置之間網絡連接配接是否正常。若出現連接配接逾時或失敗,可嘗試關閉PC機防火牆後再次連接配接。

Target# ping 192.168.0.21 //192.168.0.21為Ubuntu端IP位址

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 17

在評估闆檔案系統執行如下指令,檢視評估闆IP位址并等待PC機連接配接。

Target# ifconfig

Target# iperf3 -s

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 18

在Ubuntu系統執行如下指令測試網絡通信帶寬,192.168.0.1為評估闆實際IP位址。測試完成後,Ubuntu和評估闆均會列印測試結果。測試結果受網絡環境影響,僅供參考。

Host# iperf3 -c 192.168.0.1 -i 1

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 19

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 20

測試完成,請将評估闆斷電,拔出SDIO WIFI子產品,将Linux系統啟動卡插入Micro SD卡槽,啟動方式選擇撥碼開關撥為010100(1~6) SD啟動模式。

SDIO WIFI驅動編譯

請将案例src目錄下的驅動源碼rtl8189FS.tar.gz拷貝至Ubuntu工作目錄下,執行如下指令将源碼壓縮包解壓至該目錄下。

Host# tar -xf rtl8189FS.tar.gz

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 21

執行如下指令,進入驅動源碼目錄,修改頂層Makefile檔案

Host# cd rtl8189FS/

Host# vim Makefile

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 22

Makefile檔案内容請按如下說明進行修改。

KSRC = /home/tronlong/IMX6/Kernel/Linux-5.4.70 //指定核心源碼實際路徑

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 23

在驅動源碼所在路徑執行如下指令,使能SDK環境變量并編譯SDIO WIFI驅動。

Host# source /home/tronlong/SDK/environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi

Host# make

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 24

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 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子產品連接配接至評估闆。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 26

擷取IMEI和IMSI

進入評估闆檔案系統,執行如下指令指定序列槽背景運作,用于接收子產品資訊。

Target# cat /dev/ttymxc5 &

Target# stty -F /dev/ttymxc5 -echo

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 27

執行如下指令,擷取IMEI碼和IMSI碼。

Target# echo "AT+CGSN=1" > /dev/ttymxc5 //擷取IMEI碼

Target# echo "AT+CIMI" > /dev/ttymxc5 //擷取IMSI碼

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 28

本次擷取的IMEI碼為"864624050017021",擷取的IMSI碼為"460082267401907"。

建立雲端NB-IoT裝置

本次測試以中國移動NB-IoT物聯網解決方案OneNET為例進行示範。請登入官方網站:open.iot.10086.cn,通過手機号進行新增賬號并登入。

賬号登入成功,進入如下界面,點選右上角“控制台”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 29

進入如下界面,點選左上角“切換至舊版”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 30

進入如下界面,進入“NB-IoT物聯網套件”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 31

進入如下界面,點選“添加産品”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 32

進入如下界面,根據實際情況依次輸入産品資訊:産品名稱、産品行業、産品類别,以及技術參數:聯網方式選擇"NB-IoT"、裝置接入協定選擇"LWM2M"、作業系統選擇"Linux"、網絡營運商選擇“移動”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 33

産品添加完成後,彈出如下視窗,點選“立即添加裝置”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 34

進入如下界面,點選“添加裝置”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 35

進入如下界面,依次輸入裝置類型、裝置名稱、IMEI碼和IMSI碼,并開啟自動訂閱功能。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 36

裝置添加成功後,将會彈出如下視窗,請将裝置ID:969146269和PSK碼:8NKXxti2IS5WaDjW記錄儲存,用于後續測試,然後點選“知道了”按鈕關閉視窗。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 37

進入如下界面,可觀察到目前裝置處于離線狀态,點選“詳細”。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 38

進入如下界面,點選“編輯”,在彈出的視窗輸入自定義Auth_Code:Tronlong,然後點選确認關閉視窗。至此,雲端NB-IoT裝置建立完成。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 39

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 40

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 41

建立通信套件執行個體

本章節主要示範NB-IoT子產品的通信執行個體,詳細參考資料請檢視産品資料“6-開發參考資料\其他參考文檔\”目錄下的《EA01-S+3GPP和營運商雲平台标準指令手冊》檔案。

生成配置參數

将産品資料“4-軟體資料\Tools\Windows\”目錄下的cfg_tool.zip和Sublime-Text-Build-3211_x64.zip壓縮包拷貝至Windows非中文目錄下并解壓。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 42

進入Sublime-Text-Build-3211_x64目錄,輕按兩下sublime_text.exe程式進行安裝。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 43

進入cfg_tool目錄,使用文本工具打開test.xml檔案,

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 44

根據前面步驟擷取的資訊,修改AuthCode為Tronlong,修改PSK為8NKXxti2IS5WaDjW,如下圖所示。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 45

打開Windows指令行CMD,輸入如下指令進入ctg_tool目錄,生成配置檔案。

CMD# cd /d E:\tools\cfg_tool\

CMD# cis_cgtool.exe test.xml out.bin

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 46

執行完成後,将會在ctg_tool目錄下生成out.bin檔案。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 47

打開Sublime Text軟體,将生成的out.bin檔案拖入該軟體打開,可看到裝置配置參數以16進制顯示。同時滑鼠右擊點選out.bin檔案可檢視該檔案大小為93Byte。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 48

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 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

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 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

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 51

發送注冊請求

測試指令為:ehco AT+MIPLOPEN=<ref>,<lifetime>,<timeout> > /dev/ttymxc5

<ref>:基礎通信套件的一個執行個體辨別,類型為一個無符号整數。

<lifetime>:生命周期,機關為秒。

<timeout>:注冊的逾時時長,機關為秒。

在可執行程式所在目錄下執行如下指令。當通信無誤時,将會傳回OK,子產品接下來開始上報狀态事件,如下圖所示。

Target# echo AT+MIPLOPEN=0,3000,30 > /dev/ttymxc5

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 52

狀态事件資訊說明如下。

+MIPLEVENT:0,1 //bootstrap啟動

+MIPLEVENT:0,2 //bootstrap啟動成功

+MIPLEVENT:0,4 //連接配接成功

+MIPLEVENT:0,6 //注冊成功

  1. 驗證Observe請求

執行個體注冊成功後,NB-IoT子產品将會上報Observe請求,其中上報請求中第二個參數為消息的ID,如下圖所示。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 53

每當子產品上報一次Observe請求,請務必在5秒内執行如下指令進行驗證,驗證成功後,将會傳回OK。如子產品繼續上報Observe請求,需繼續執行指令驗證,直至執行個體訂閱成功,如下圖所示。

Target# echo AT+MIPLOBSERVERSP=0,104148,1 > /dev/ttymxc5 //驗證第一條請求

Target# echo AT+MIPLOBSERVERSP=0,169685,1 > /dev/ttymxc5 //驗證第二條請求

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 54

同時,在雲端裝置管理界面,可觀察到對應裝置呈現自動訂閱成功狀态,至此,建立執行個體完成。

iMX6ULL開發闆物聯網子產品開發案例,WIFI/NB-IoT/STA(上)

圖 55 圖 55

繼續閱讀