這塊ESP8266買回來也放了挺久了,這兩天突然想拿起來玩玩,簡單的本地操作玩過之後,就想試試連接配接伺服器,一開始是選擇了阿裡雲的物聯網平台,然後。。沒搞出來。用了樂鑫原廠的DEMO,裝linux虛拟機一套操作猛如虎,搞了兩天之後倒是成功連上了平台,但是用不了AT指令,而且平台和子產品之間一直瘋傳一堆東西,我也沒看懂(笑。
然後被人推薦了移動的OneNet平台直接用透傳接入。倒騰了一下午終于是成功連上了,中間遇到了許多問題,是以寫上來和大家分享一下。
我一開始的配置是參考了這篇文章:中國移動OnetNet雲平台 使用WIFI子產品ESP8266 TCP透傳模式傳輸資料流步驟
在此也是感謝作者。
下面是我的調試過程。
環境準備
- 我使用了UartAssist序列槽調試助手,大家可以選用自己習慣的調試助手,應該都沒什麼問題。
- 注冊OneNet賬号,建立産品,添加裝置,具體方法可以參考官方平台提供的開發文檔(這裡很簡單,一步一步來就行)
子產品準備
我是刷入了安信可提供的AT固件。具體的方法不再贅述,可以參考安信可官網wiki:https://wiki.ai-thinker.com/esp8266
開始接入
下面是直接引用的 https://www.cnblogs.com/Mysterious/p/4816482.html?tdsourcetag=s_pctim_aiomsg 這篇文章的内容,為了讀者閱讀友善就直接貼在下面了。第一次寫文章不知道怎麼引用或者其他什麼操作,如果有侵權或者其他問題請原作者或者管理者私信我。
發送指令順序:
AT
這個指令要看到有AT OK說明你的供電和TTL和wifi子產品通訊正常
AT+CWMODE=3
設定模式3,STA+AP,其實我們隻用了STA
AT+RST
讓子產品複位,能在接收資訊最下面看到 ready,說明子產品複位成功。複位後就是STA+AP模式了
AT+CWJAP=“your ssid”,“password”
輸入你無線路由器的使用者名和密碼,一定要寫正确,注意大小寫
AT+CIFSR
查詢IP,因為有STA和AP兩個模式,是以有兩組MAC和IP,常見的是192.168.x.x區域網路IP
AT+CIPMUX=0
設定單連結,透傳隻能在單連接配接模式下進行,是以在建立連接配接之前一定要用(AT+CIPMUX=0 設定單連接配接)
AT+CIPMODE=1
設定透傳模式
AT+CIPSTART=“TCP”,“183.230.40.33”,80
連接配接OneNet伺服器
AT+CIPSEND
啟動透傳發送
我按照原文章操作到這裡沒有任何問題,但是接下來的步驟會出錯,無法正确連接配接到平台,以下是原内容:
POST /devices/79146/datapoints HTTP/1.1
api-key: pmWLtnkDBSreKfvg7GsClUXdXa4A
Host:api.heclouds.com
Connection:close
Content-Length:59
{"datastreams":[{"id":"TEMP","datapoints":[{"value":50}]}]}
發送JSON資料流,格式一定要正确,大多數人失敗都是在這裡格式不對
其中79146修改為你自己的裝置ID
api-key後面的内容修改為自己的API-KEY
"TEMP"這個是我的資料流名稱,修改為自己想要的
“value”後面的50就是資料,輸入想要的。
然後回過頭看下Content-Length:59
Connection:colse這一條如果加了,伺服器接收到一次資料後會斷開,如果不加可以連續發送資料。如果長時間不發送,也同樣會關閉連結的。
這個59是後面的整個資料流的長度
一個小技巧,可以用Notepad++軟體直接選中看這個長度是多少,别自己數,數錯了就悲劇了!
這裡困擾了我很久,我嘗試用TCP助手連接配接平台,是沒有問題的
最後的解決方案是,在序列槽調試助手中,所有應該輸入回車的地方用\n代替,我一開始試過用shift+回車,但是沒有用,序列槽助手隻是在螢幕顯示時完成了換行,這樣傳送給子產品的代碼就沒有回車
是以修改後的代碼是:
POST /devices/79146/datapoints HTTP/1.1\n
api-key: pmWLtnkDBSreKfvg7GsClUXdXa4A\nHost:api.heclouds.com\n
Connection:close\nContent-Length:59\n\n
{"datastreams":[{"id":"TEMP","datapoints":[{"value":50}]}]}
注意!!代碼中的\n表示傳輸給子產品的換行指令,然後為了閱讀的友善,我用shift+回車将代碼換行了
shift+回車隻是在序列槽助手中顯示換行,實際上并不會将換行指令傳輸給子產品
成功後,子產品傳回資料如下:
{“errno”:0,“error”:“succ”}HTTP/1.1 200 OK Date: Tue, 04 Dec 2018
16:11:47 GMT Content-Type: application/json Content-Length: 26
Connection: keep-alive Server: Apache-Coyote/1.1 Pragma: no-cache
{“errno”:0,“error”:“succ”}
然後登陸自己的平台賬戶,裝置資料那裡就可以看到自己剛剛上傳的資料了
至此,就完成了ESP8266子產品通過透傳與OneNet平台的通信。
尾記
使用AT指令加透傳連接配接平台很友善,基于此可以将WIFI子產品連接配接MCU,進而完成更複雜的操作。
我後期還是會嘗試直接通過TCP協定連接配接阿裡雲平台,成功後也會寫上來和大家分享,不過又懶又菜的我,做出來也不知道是什麼時候了(笑。