支援移遠EC600S的SmartDtu平臺,基於QuecPython

DanielWise發表於2021-05-05

前言

本文的主要目的是說明青石SmartDtu到底做了哪些工作?我們在移遠硬體平臺EC600S上做了哪些支援?為什麼說這套平臺是硬體開發者的福音?我們的初衷是解放廣大硬體開發者的雙手,提供一套成熟的嵌入式軟硬體解決方案,讓開發者尤其是硬體開發者專注於硬體本身。

基礎支援指我們的軟體和平臺支援移遠EC600S的基礎功能,比如定時器、溫溼度、PWM、GPIO、UART和FOTA。

資源管理是指通過軟體平臺可以通過串列埠和MQTT指令來管理EC600S系統上的資源,實現遠端資料採集和遠端控制,目前支援有遠端開啟定時器採集溫溼度,遠端控制GPIO引腳的開啟和關閉等等。

平臺支援是藉助騰訊雲平臺作為中間平臺,將EC600S硬體和青石的平臺連通起來,既可以滿足大量資料的穩定性互動能力,又可以保障資料和通訊的安全性。

1 硬體平臺

我們的程式碼執行在移遠的EC600S平臺上,開發語言是QuecPython,這是移遠官方基於MicroPython擴充套件的開發語言,專門用於移遠平臺的嵌入式開發,在功能介面定義還是目錄結構形式都與MicroPython保持高度的一致。兩者同樣應用於嵌入式場景開發,輕Python開發語言使得開發者上手更快,開發門檻大大降低。
EC600S硬體平臺
EC600S硬體平臺

2 開發環境

名稱 工具名稱 備註
visual stutio code QuecPython開發 開發
QCOM 串列埠工具 串列埠除錯
QPYcom 燒錄工具和執行環境 開發除錯

3 程式碼架構

3.1 程式碼結構圖

程式碼組織結構圖

  1. bluestone_commom.py
    這個檔案是整個專案的公共檔案,主要有一些獲取網路狀態、設定網路狀態、檢查檔案是否存在和判斷路徑是否為URL等方法。

  2. bluestone_config.py
    這個檔案主要是用於處理系統正常執行過程中用到的引數,包括從檔案中讀取引數、向檔案中寫入引數和預設引數配置項等等。

  3. bluestone_daemon.py
    守護檔案,主要目的是保證嵌入式系統在執行過程中的健康,一旦發生異常中斷或者斷線無法恢復的情況就會嘗試重啟系統,目前還在開發中。

  4. bluestone_fota.py
    主要用來管理應用程式和韌體的升級,其中應用程式支援多個檔案路徑,韌體包升級僅支援單個檔案。

  5. bluestone_gpio.py
    主要用來管理系統中所有GPIO引腳的狀態,包括讀取和寫入。

  6. bluestone_main.py
    系統的入口檔案,負責啟動網路守護執行緒、初始化配置檔案、資料檔案、初始化系統服務、MQTT服務、串列埠服務、定時器服務和看門狗服務。

  7. bluestone_mqtt.py
    MQTT客戶端管理工具,負責啟動MQTT,監聽回撥並解析回撥指令和引數,根據解析出的回撥指令和引數執行相對應的命令。

  8. bluestone_mqtt_tencent.py
    Tencent MQTT客戶端管理工具,負責啟動MQTT,監聽回撥並解析回撥指令和引數,根據解析出的回撥指令和引數執行相對應的命令。

  9. bluestone_pwm.py
    PMW控制邏輯,負責開啟和關閉PMW埠,可以模擬實現呼吸燈。

  10. bluestone_socket.py
    用於初始化TCP/IP socket,連線客戶端並接收和傳送指令,未完待續。

  11. bluestone_temperature.py
    採集板載溫溼度感測器的數值。

  12. bluestone_timer.py
    管理定時器,按照一定引數啟動或停止定時器。

  13. bluestone_uart.py
    管理串列埠,按照傳入的引數啟動串列埠,讀取串列埠引數並解析命令,如果有滿足條件的命令就去執行,包括重啟系統等。

  14. 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驅動 ,如下圖:

移遠USB驅動下載頁面

注意作業系統,目前來看是沒有找到 MacLinux 下的驅動,暫不知道是沒有提供還是根本不需要。

雙擊安裝即可。

  • 驗證是否安裝成功

將電腦與開發板連線,會發現電源狀態燈亮起(為紅色),之後長按開機按鈕,大約 5秒 後鬆手,稍等 5秒 左右,發現NET狀態燈開始閃爍(移遠COM埠驅動,間隔大約2秒),進入電腦的 裝置管理器 ,檢視 埠(COM 和 LPT) 項,發現如下圖所示裝置即表示安裝成功!

移遠COM埠驅動

溫馨提示: 在官方文件中,這裡寫的比較簡陋,只說了將開發板與電腦連線後就能看到裝置,實際發現如果不開機,是看不到裝置的!還有,官方文件中的配圖顯示有三個裝置,實際發現只有兩個,並沒有配圖中提到的指令互動串列埠,產生這個現象的原因是裝置在出廠的時候燒錄的韌體不是 Python 韌體,在燒錄完 Python 韌體後就能看到

9.2.2 QPYcom圖形化工具安裝

進入移遠官方下載頁面,下載 QPYcom 圖形化工具 ,如下圖:
QPYcom圖形化工具下載頁面
這個下載完成後是一個壓縮包,解壓後雙擊 QPYcom.exe 可執行檔案即可。

溫馨提示:這個軟體執行完成後會在相同路徑下生成一些其他檔案,如: Config.ini 等,建議將其按照習慣整理到一個空資料夾下。

QPYcom 軟體執行結果如下所示:

QPYcom軟體截圖

9.2.3 裝置配置

選擇串列埠為圖中串列埠

選擇串列埠

開啟下載頁,點選建立按鈕新建專案

新建專案

進入移遠官方下載頁面,下載 韌體包

韌體包下載

下載後解壓為QPY_V0004_EC600S_FW.zip檔案,選擇韌體

選擇韌體
選擇韌體完成

點選下載韌體,將韌體包下載至開發板

下載韌體

進入控制程式下載頁面,下載 控制程式 ,解壓,

控制程式下載

將bluestone_config.json檔案中的product_id和product_secret替換為新建產品的產品id與金鑰(從產品列表頁獲取)

產品id金鑰
產品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滑塊開關或者點選一鍵開啟、一鍵關閉按鈕,即可更改裝置GPIO狀態

GPIO開關

9.7 裝置UART管理

點選左側選單欄中裝置列表,進入裝置列表頁面後點選裝置行內UART按鈕即可進行裝置UART管理

裝置UART管理

注:裝置狀態為離線或未啟用時無法進行UART管理

注:使用UART功能需要UART與TTL轉USB模組連線,詳細內容參照 官方文件

9.7.1 裝置UART資料

裝置UART資料

9.7.2 裝置UART串列埠配置

如圖所示,進入UART引數設定

進入UART引數設定

選擇串列埠更改引數儲存後,可實現裝置UART串列埠配置的修改

UART串列埠配置

9.7.3 裝置UART下發自定義json資料

進入移遠官方下載頁面,下載 QCOM 串列埠除錯工具 ,如下圖:

解壓後雙擊 QCOM_V1.6.exe 可執行檔案即可,下圖為初始頁面:

接下來按照官方文件測試一下

裝置管理器 --> 埠(COM 和 LPT) 中找到 Quectel USB AT Port 的埠值,並在 QCOM 中選擇埠,開啟,傳送傳送測試指令: AT+GMR,注意先不要修改其他配置。如下所示:

QCOM開啟埠

溫馨提示:如果開啟的時候開啟失敗,按一下復位按鈕,帶復位後再嘗試連線。拿到全新開發板後未做其他修改,實測連不上,需要復位。

測試結果

測試結果

如上所示,能夠返回韌體版本號即表示測試成功!

接下來通過UART下發自定義json資料在 裝置管理器 --> 埠(COM 和 LPT) 中找到 USB-SERIAL CH340 的埠值,並在 QCOM 中選擇埠開啟,

下發引數顯示頁

回到UART引數設定頁面,輸入隨機json資料,點選傳送,

傳送json資料
傳送成功

自定義資料下發成功

9.8 裝置資料

9.8.1 裝置歷史資料

點選左側選單欄中裝置資料,可檢視裝置所有歷史訊息資料

裝置歷史資料

9.8.2 首頁統計

數量概況

數量概況

數量變化趨勢

數量變化趨勢

排行榜

排行榜

10 版權資訊

MIT

相關文章