1. 程式人生 > >ESP8266移植MQTT連線中移ONENET

ESP8266移植MQTT連線中移ONENET

一、開發環境準備

a)         安裝安可信IDE和cygwin, eclipse一套開發環境,說白了就是為eclipse配置了一套引數。確實方便。

b)        下載ESP8266 RTOS SDK,有安可信版本,可以在eclipse上按教程直接匯入。

c)         自己的檔案在APP目錄下。編譯時會編譯APP目錄下所有檔案和目錄。增加目錄時需要在目錄下複製一個MAKEFILE。

d)        按照文件在user_main.c裡增加自己的初始化程式碼和建立任務。基本上用串列埠進行除錯。作業系統相關呼叫需要參考FreeRTOS相關文件。

二、移植MQTT

a)         把MQTT Packet一個檔案也不需要改整個目錄複製到APP中,注意增加MAKEFILE。

b)        將MQTT C版本的 mqttclient.c,和.h以及兩個RTOS相關的檔案複製過來。

c)         Mqttclient需要的RTOS介面主要有建立任務,定時器,MUTEX。另外還有兩個TCP連線,斷開,讀,寫等傳輸的操作。

d)        先除錯的是TCP傳輸,這部分還用不到MQTT協議。ESP8266移植的是LWIP,但接收介面都是阻塞接收。由於LWIP任務優先順序高,阻塞接收讓MQTT用於計算超時的作業系統呼叫都失去了作用,所以改成了非阻塞,非阻塞時沒有接收成功只能從errno裡體現,所以只能把errno extern過來。


e)        

f)          前面還有一系列設為station模式,聯網等操作,RTOS SDK文件裡都可以查到。

三、修改MQTT適應ONENET

a)         ONENET註冊賬號後可以新增專案和產品。專案和產品都有ID,協議選擇公開協議,MQTT。

b)        產品在MQTT Connect時會用到這些ID。按ONENET要求版本要填4。

c)         連線成功後可subscribe和publish. 系統有保留的比如$creq是系統命令,不能訂閱成功,但下發的命令都可以收到。因此就手動加了一個訂閱函式,不向伺服器訂閱,只在本地增加一個個過濾器$creq/#,就可以用回撥函式處理命令了。

d)        

e)        資料上傳用publish到$dp的主題即可。格式可以參考文件。選擇了json的格式,ESP8266 SDK裡已經集成了現在的cjson可用。按格式上傳後就能在網站上看到相應的資料了。

f)          用MQTT的協議不用ONENET網站的控制命令下發。但是看到了有通過HTTP下發命令的介面。看來想省事直接用ONENET的APP來控制是不行的了。後面考慮在Android上實現。