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

前言

本文的主要目的是說明青石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": "//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