前言
本文的主要目的是說明青石SmartDtu到底做了哪些工作?我們在移遠硬體平臺EC600S上做了哪些支援?為什麼說這套平臺是硬體開發者的福音?我們的初衷是解放廣大硬體開發者的雙手,提供一套成熟的嵌入式軟硬體解決方案,讓開發者尤其是硬體開發者專注於硬體本身。
基礎支援指我們的軟體和平臺支援移遠EC600S的基礎功能,比如定時器、溫溼度、PWM、GPIO、UART和FOTA。
資源管理是指通過軟體平臺可以通過串列埠和MQTT指令來管理EC600S系統上的資源,實現遠端資料採集和遠端控制,目前支援有遠端開啟定時器採集溫溼度,遠端控制GPIO引腳的開啟和關閉等等。
平臺支援是藉助騰訊雲平臺作為中間平臺,將EC600S硬體和青石的平臺連通起來,既可以滿足大量資料的穩定性互動能力,又可以保障資料和通訊的安全性。
1 硬體平臺
我們的程式碼執行在移遠的EC600S平臺上,開發語言是QuecPython,這是移遠官方基於MicroPython擴充套件的開發語言,專門用於移遠平臺的嵌入式開發,在功能介面定義還是目錄結構形式都與MicroPython保持高度的一致。兩者同樣應用於嵌入式場景開發,輕Python開發語言使得開發者上手更快,開發門檻大大降低。
2 開發環境
名稱 | 工具名稱 | 備註 |
---|---|---|
visual stutio code | QuecPython開發 | 開發 |
QCOM | 串列埠工具 | 串列埠除錯 |
QPYcom | 燒錄工具和執行環境 | 開發除錯 |
3 程式碼架構
3.1 程式碼結構圖
-
bluestone_commom.py
這個檔案是整個專案的公共檔案,主要有一些獲取網路狀態、設定網路狀態、檢查檔案是否存在和判斷路徑是否為URL等方法。 -
bluestone_config.py
這個檔案主要是用於處理系統正常執行過程中用到的引數,包括從檔案中讀取引數、向檔案中寫入引數和預設引數配置項等等。 -
bluestone_daemon.py
守護檔案,主要目的是保證嵌入式系統在執行過程中的健康,一旦發生異常中斷或者斷線無法恢復的情況就會嘗試重啟系統,目前還在開發中。 -
bluestone_fota.py
主要用來管理應用程式和韌體的升級,其中應用程式支援多個檔案路徑,韌體包升級僅支援單個檔案。 -
bluestone_gpio.py
主要用來管理系統中所有GPIO引腳的狀態,包括讀取和寫入。 -
bluestone_main.py
系統的入口檔案,負責啟動網路守護執行緒、初始化配置檔案、資料檔案、初始化系統服務、MQTT服務、串列埠服務、定時器服務和看門狗服務。 -
bluestone_mqtt.py
MQTT客戶端管理工具,負責啟動MQTT,監聽回撥並解析回撥指令和引數,根據解析出的回撥指令和引數執行相對應的命令。 -
bluestone_mqtt_tencent.py
Tencent MQTT客戶端管理工具,負責啟動MQTT,監聽回撥並解析回撥指令和引數,根據解析出的回撥指令和引數執行相對應的命令。 -
bluestone_pwm.py
PMW控制邏輯,負責開啟和關閉PMW埠,可以模擬實現呼吸燈。 -
bluestone_socket.py
用於初始化TCP/IP socket,連線客戶端並接收和傳送指令,未完待續。 -
bluestone_temperature.py
採集板載溫溼度感測器的數值。 -
bluestone_timer.py
管理定時器,按照一定引數啟動或停止定時器。 -
bluestone_uart.py
管理串列埠,按照傳入的引數啟動串列埠,讀取串列埠引數並解析命令,如果有滿足條件的命令就去執行,包括重啟系統等。 -
bluestone_config.json
預設配置檔案,檔案內有關於UART0~2的配置引數和Tencent MQTT的啟動引數,使用者可以按照自己的實際情況進行修改。
{
"uart2": {
"parity": 0,
"baud_rate": 115200,
"flow_control": 0,
"stop_bits": 1,
"data_bits": 8
},
"mqtt_tencent": {
"product_id": "輸入你在騰訊雲上的產品編號",
"pub_topic": "event",
"product_secret": "輸入你在騰訊雲上的產品金鑰",
"sub_topic": "control"
},
"uart1": {
"parity": 0,
"flow_control": 0,
"baud_rate": 115200,
"stop_bits": 1,
"data_bits": 8
},
"uart0": {
"baud_rate": 115200,
"parity": 0,
"flow_control": 0,
"stop_bits": 1,
"data_bits": 8
}
}
4 定時器
傳入指令如下:
{
"timer1": {
"status": 1,
"period": 5000,
"mode": 1,
"callback": "aht10"
}
}
- timer1: EC600S有四個定時器,分別是timer0,timer1,timer2,timer3,其中timer0被系統佔用,僅可以使用timer1~timer3;
- status: 定時器任務的狀態;0表示關閉,1表示啟動;
- period: 定時器執行週期,單位是毫秒;服務端支援的週期是5000~30000毫秒;
- mode: 定時器執行模式,0表示僅執行一次,1表示週期執行;
- callback: 定時器每迴圈一次要執行的函式名稱,目前僅支援"aht10"和"gpio",分別表示採集溫溼度和讀取GPIO引腳狀態;多個回撥函式之間用逗號分隔。
注:定時器引數配置成功後系統會自動重啟。
5 溫溼度
溫溼度的採集是通過定時器執行的,按照如上配置,只要在callback中填寫"aht10"即可。
6 GPIO
控制指令如下:
{
"gpio": {
"gpio1": 1,
"gpio2": 1,
"gpio3": 0,
"gpio4": 1,
"gpio5": 1,
"gpio6": 1,
"gpio7": 1,
"gpio8": 1,
"gpio9": 0,
"gpio10": 1,
"gpio11": 0,
"gpio12": 1,
"gpio13": 1,
"gpio14": 1
}
}
- gpio: 表示當前指令是用於控制GPIO的;
- gpio1: 表示控制GPIO1號引腳,0表示低電平,1表示高電平,以此類推;
7 UART
{
"uart1": {
"baud_rate": 115200,
"data_bits": 8,
"flow_control": 0,
"parity": 0,
"stop_bits": 1
}
}
- uart1: 表示當前串列埠編號,支援uart0,uart1,uart2;
- baud_rate: 串列埠波特率;
- data_bits: 串列埠資料位;
- flow_control: 流量控制;
- parity: 校驗位;
- stop_bits: 停止位;
注:串列埠引數配置成功後系統會自動重啟。
8 FOTA
{
"fota": {
"mode": 0,
"url": "http://app.com/download"
}
}
- fota: 表示升級配置引數;
- mode: 0表示升級應用程式,在這種模式下url可以支援多個,不同url之間以逗號分隔;1表示升級韌體包,在這種模式下僅支援一個url地址;
- url: 應用程式或韌體包的地址,不支援https;
注:升級成功後系統會自動重啟。
9 系統使用
下面將從新建產品到裝置資料等8個環節來演示系統使用方法。
青石SmartDtu平臺,登入賬號:dtu, 登陸密碼:d123qwe
9.1 新建產品
1.點選左側選單欄進入產品列表頁
2.點選新建開啟新建產品視窗,填寫產品資訊
3.產品建立成功
9.2 裝置硬體配置
9.2.1 驅動安裝
進入移遠官方下載頁面,下載 USB驅動
,如下圖:
注意作業系統,目前來看是沒有找到 Mac
和 Linux
下的驅動,暫不知道是沒有提供還是根本不需要。
雙擊安裝即可。
- 驗證是否安裝成功
將電腦與開發板連線,會發現電源狀態燈亮起(為紅色),之後長按開機按鈕,大約 5秒
後鬆手,稍等 5秒
左右,發現NET狀態燈開始閃爍(移遠COM埠驅動,間隔大約2秒),進入電腦的 裝置管理器
,檢視 埠(COM 和 LPT)
項,發現如下圖所示裝置即表示安裝成功!
溫馨提示: 在官方文件中,這裡寫的比較簡陋,只說了將開發板與電腦連線後就能看到裝置,實際發現如果不開機,是看不到裝置的!還有,官方文件中的配圖顯示有三個裝置,實際發現只有兩個,並沒有配圖中提到的指令互動串列埠,產生這個現象的原因是裝置在出廠的時候燒錄的韌體不是
Python
韌體,在燒錄完Python
韌體後就能看到
9.2.2 QPYcom圖形化工具安裝
進入移遠官方下載頁面,下載 QPYcom 圖形化工具
,如下圖:
這個下載完成後是一個壓縮包,解壓後雙擊 QPYcom.exe
可執行檔案即可。
溫馨提示:這個軟體執行完成後會在相同路徑下生成一些其他檔案,如:
Config.ini
等,建議將其按照習慣整理到一個空資料夾下。
QPYcom
軟體執行結果如下所示:
9.2.3 裝置配置
選擇串列埠為圖中串列埠
開啟下載頁,點選建立按鈕新建專案
進入移遠官方下載頁面,下載 韌體包
,
下載後解壓為QPY_V0004_EC600S_FW.zip
檔案,選擇韌體
點選下載韌體,將韌體包下載至開發板
進入控制程式下載頁面,下載 控制程式
,解壓,
將bluestone_config.json檔案中的product_id和product_secret替換為新建產品的產品id與金鑰(從產品列表頁獲取)
匯入圖中所選程式碼檔案
點選下載指令碼,將控制程式下載至開發板
點選檔案,關閉串列埠後重新開啟,如圖所示啟動裝置
9.3 新建裝置
本系統採用動態註冊邏輯,配置好裝置引數之後,只要裝置上線,即可註冊至系統,無需手動建立或匯入裝置
9.4 裝置管理
點選左側選單欄中裝置列表
,進入裝置列表頁面後點選裝置行內管理
按鈕即可管理裝置
9.4.1 編輯裝置
如圖,點選編輯按鈕即可編輯裝置,目前僅支援修改裝置備註
9.4.2 刪除裝置
點選刪除按鈕,即可刪除裝置
注:由於使用動態註冊,若刪除後裝置仍然存在,收到裝置訊號後裝置將會重新註冊,所以刪除裝置前請確保裝置已物理刪除
9.4.3 狀態重置
點選狀態重置按鈕,可將裝置狀態重置為未啟用狀態
9.4.4 裝置禁用
點選裝置啟用禁用的滑塊開關,可更改裝置的啟用狀態,裝置禁用後,將不再收取該裝置的訊息
9.5 裝置溫溼度管理
點選左側選單欄中裝置列表
,進入裝置列表頁面後點選裝置行內溫溼度
按鈕即可進行裝置溫溼度管理
注:裝置狀態為離線或未啟用時無法進行溫溼度管理
9.5.1 檢視裝置溫溼度資料
9.5.2 檢視溫溼度變化趨勢
點選左上資料圖表按鈕,可切換至圖表顯示,檢視裝置溫溼度變化趨勢
9.5.3 溫溼度採集配置
更改採集相關引數後同步設定,可調整裝置是否上報或裝置上報週期(最小60s,最大15min)
9.6 裝置GPIO管理
點選左側選單欄中裝置列表
,進入裝置列表頁面後點選裝置行內GPIO
按鈕即可進行裝置GPIO管理
注:裝置狀態為離線或未啟用時無法進行GPIO管理
點選單個GPIO滑塊開關或者點選一鍵開啟、一鍵關閉按鈕,即可更改裝置GPIO狀態
9.7 裝置UART管理
點選左側選單欄中裝置列表
,進入裝置列表頁面後點選裝置行內UART
按鈕即可進行裝置UART管理
注:裝置狀態為離線或未啟用時無法進行UART管理
注:使用UART功能需要UART與TTL轉USB模組連線,詳細內容參照 官方文件
9.7.1 裝置UART資料
9.7.2 裝置UART串列埠配置
如圖所示,進入UART引數設定
選擇串列埠更改引數儲存後,可實現裝置UART串列埠配置的修改
9.7.3 裝置UART下發自定義json資料
進入移遠官方下載頁面,下載 QCOM 串列埠除錯工具
,如下圖:
解壓後雙擊 QCOM_V1.6.exe
可執行檔案即可,下圖為初始頁面:
接下來按照官方文件測試一下
在 裝置管理器
--> 埠(COM 和 LPT)
中找到 Quectel USB AT Port
的埠值,並在 QCOM
中選擇埠,開啟,傳送傳送測試指令: AT+GMR
,注意先不要修改其他配置。如下所示:
溫馨提示:如果開啟的時候開啟失敗,按一下復位按鈕,帶復位後再嘗試連線。拿到全新開發板後未做其他修改,實測連不上,需要復位。
測試結果
如上所示,能夠返回韌體版本號即表示測試成功!
接下來通過UART下發自定義json資料在 裝置管理器
--> 埠(COM 和 LPT)
中找到 USB-SERIAL CH340
的埠值,並在 QCOM
中選擇埠開啟,
回到UART引數設定頁面,輸入隨機json資料,點選傳送,
自定義資料下發成功
9.8 裝置資料
9.8.1 裝置歷史資料
點選左側選單欄中裝置資料
,可檢視裝置所有歷史訊息資料
9.8.2 首頁統計
數量概況
數量變化趨勢
排行榜