1. 程式人生 > >Wi-Fi無線控制器開發例程(升級篇)

Wi-Fi無線控制器開發例程(升級篇)

pre 優化 測試 硬件 過程 color 路線 執行 定義

我的這個升級篇的代碼適用於自己所有的帶WIFI模塊的開發板,升級功能實質上是通過MQTT把數據發給WIFI模塊,然後模塊進行保存和運行.

這個升級程序是當時自己花了兩個星期的時間寫的,當時自己寫的時候給自己定了很多要求.

1,可以方便每個人升級自己的設備

2,不能讓用戶自己去搭建服務器

3,保證每個人不能沖突

4,要在現有的遠程通信的基礎上,不能夠再去走其它通信的路線

5,考慮以上條件,想到用戶要在自己電腦上運行一個上位機軟件(MQTT通信),設備是訪問上位機的數據實現升級

6,那麽上位機必須產生一個唯一碼用做通信的主題

7,為了以後的GPRS模塊,這個上位機也必須同時支持GPRS模塊升級程序,而且操作步驟要和WIFI一樣

8,由此通信主題中加入了 "設備的型號"(也是為了不同型號的設備升級程序,實質WIFI和GPRS也相當於不同的型號而已)

9,可以區域性的升級(升級一個型號的設備,升級用戶自定義的一些設備,升級某一個設備)

10,加入程序版本控制(有的用戶希望設備自動升級,用版本來控制)

11,上位機和用戶手機APP都可以可以控制升級設備,但是APP只是通知設備升級(APP只是有選擇權,上位機才具有控制權)

12,如果用來做產品,上位機提供給設備商,APP是用戶使用

13,可擴展性,為以後升級單片機做準備

14,底層硬件程序有兩部分,升級時不斷的切換保存,保證底層硬件程序必須保留上一次的,升級出錯後自動運行以前的備份

15,為避免意外情況,有一個按鍵可以用來切換程序,還可以清除除升級程序意外的程序

16,升級完先運行一下,如果沒有錯誤才切換執行哪一部分程序的標誌

17,由於MQTT最大傳輸的字節是1024(WIFI底層硬件設置的),所以要把每一個文件進行分段傳輸

18,為避免上位機用任務(任務的困難程度太高,設備多了不好控),所以采用一問一答

19,後期可以對底層的升級程序做修改(已經去掉,發現一直沒用到)

20,後期又優化了一些細節的地方....

21,目前測試同時升級47個WIFI設備.(由於路由器連接個數的限制,無法測試更多)

目前升級程序 徐工 幫我優化了一版(主要目的是省內存)

這是徐工給的方案(徐工已經優化好了,並運行在自己的設備上,聽徐工說,他的方案徹底解決了內存問題)

很佩服徐工,前天晚上給我說優化方案,隔了一天他就優化好了,徐工底下肯定下了很大的功夫.

楊工,有關遠程升級的考慮:
1、目前的困惑點是因為內存不夠引起的,我的想法是這樣來考慮,你看是否可行:
2、把升級哪部分程序進行剝離單獨出來,具體這樣:
init.lua程序:按鍵處理和根據標識選擇運行程序,(1)選擇運行A程序,就是Aupdata1~7;
(2)運行升級程序,進行升級;(3)運行Bupdata1~7;
主要修改mqttconfig.lua程序,把其中有關升級的程序全部剝離出來。就是分成兩部分程序:
分別是是mqttconfig.lua和mqttupdata.lua。
3、我嘗試一下,把mqttconfig.lua中的升級部分註釋後,再運行A部分程序就沒有內存問題了。


這樣可能解決內存的困惑,也完成升級:
出廠開機默認運行以下程序:
1、init.lua mqttconfig.lua A部分程序;升級前的運行程序

運行過程中,如果收到mqtt服務器的升級請求,置升級標誌,重新復位運行。

復位運行,檢測到升級標誌,運行以下程序
2、init.lua mqttconfig.lua mqttupdata.lua;為升級的運行程序

如果升級成功,置成功標誌,復位運行以下程序,
3、init.lua mqttconfig.lua B部分程序;升級成功後的運行程序

咱們的教程還是使用徐工優化前的哈,因為程序確實挺復雜的,當然大家也可以不需要管程序,會用也可以.

等弄懂了優化前的,咱再用徐工優化後的.

Wi-Fi無線控制器開發例程(升級篇)