【物聯網】esp8266+雲伺服器搭建物聯網通道

菜老越發表於2020-11-18

一 概要

接觸過一些物聯網雲平臺,如阿里雲、華為雲、騰訊雲、機智雲等,要想使一個嵌入式裝置接入物聯網平臺,一般需要一下幾個步驟:
1.通過2G、4G、NB-IOT、WIFI等手段讓你的嵌入式裝置能接入公網;
2.將物聯網雲平臺生成的裝置金鑰寫入嵌入式裝置,其中,這個金鑰相當於裝置唯一ID;
3.在雲平臺建立“資料節點”、“控制節點”等。
4.移植雲平臺的SDK程式到你的嵌入式裝置。
以上2、3、4步確實能通過雲平臺現有的功能來極大的提高裝置接入物聯網的效率。但想真正理解物聯網、雲平臺,還需要自己研究、或者說猜測一下其運作原理,從而從一定程度上搭建一個自己的物聯網雲平臺。
以我的理解,物聯網雲平臺的運作大概是這樣的:平臺其實是一個公網ip,平臺商家在這個公網ip上建立tcp伺服器(server),我們的裝置即是一個個的tcp client,通過公網來連線平臺伺服器,實現資料互動,從而實現各種資料通訊、控制。當然,在這個伺服器上加入資料庫,就實現了多個裝置的繫結,即通過平臺生成的金鑰來繫結;加入資料庫,也實現了歷史資料的儲存,以及查詢;在這個伺服器上加入一些IT技術,就生成了可方便配置的“資料節點”,以及可方便配置的web頁面。同時,有些雲平臺還支援手機繫結嵌入式裝置,從而實現在手機上遠端與裝置進行互動,其實分析一下,手機也是作為一個client連線到了雲平臺伺服器,只是在與裝置互動時,中間隔了一個伺服器,伺服器只要知道手機繫結的是那個ID的裝置就可以實現手機、裝置之間的資料轉發了。
總而言之,只要我們搭建好了這個tcp server,保證嵌入式裝置可以連線上,之後就可以做更偉大的事了,比如各大雲平臺做的物聯網雲平臺。

二 我們要做什麼

一頓理論分析之後,我們就開始試著打通這個物聯網通道吧。通過閱讀這篇文章,我們可以搭建一個物聯網平臺的最最基礎的地基,之後更偉大的工作便可由大家任意發揮。
通過此文,我們將瞭解:
1.雲伺服器的申請、設定;
2.掌握FileZilla的遠端檔案傳輸;
3.esp8266 wifi模組的上網;
4.雲伺服器的基本程式編寫。

2.1 獲得一個可用雲主機

這裡再次白嫖騰訊雲的30天免費試用的輕量應用伺服器,從這裡get【騰訊雲-輕量應用伺服器試用】,申請的時候要選擇雲主機內安裝的作業系統,我這裡選擇是linux系統的ubuntu,因為對它比較熟了。等待雲主機建立並開機後,我們就可以在控制檯中看到我們的公網IP了。在window下按win+r,輸入cmd進入命令列,ping一下這個IP,是可以ping得通的,那麼我們就可以在這個ip上建立tcp伺服器,從而實現tcp通訊了。
在這裡插入圖片描述
嘗試登陸一下,就通過web端的SSH遠端登入了我們的雲主機,又是熟悉的命令列。
在這裡插入圖片描述

2.2 在雲主機上建立tcp server

這裡還是使用我之前寫的tcp server例程,扛住了5000個clinet的併發測試。【tcp server傳送門】。一共包含三個檔案——server.c server.h Makefile。其主要內容是為每個client建立一個執行緒用於業務互動,從client收到什麼就返回什麼到client。當我開開心心的將原始碼複製、貼上到雲主機時,問題出現了,通過騰訊雲的這個命令列貼上時,總是出現一些莫名奇妙的符號,導致編譯不通過。因此需要通過其他方法來實現了。這裡我們用到大名鼎鼎的FileZilla來將windows下的三個檔案遠端扔到雲主機裡。
開啟FileZilla後建立新站點,協議選擇SFTP,主機填入你雲主機的公網IP,然後輸入linux的使用者名稱、密碼,即可連線到雲主機。
在這裡插入圖片描述
其中,ubuntu系統下的使用者名稱就是ubuntu,這個騰訊雲裡有介紹,密碼可以通過下圖進行重置。
在這裡插入圖片描述
連線成功後,FileZilla將列出本地檔案和遠端主機的檔案列表。
在這裡插入圖片描述
我們通過FileZilla將server.c server.h Makefile傳到遠端雲主機後,因為我們是用ubuntu這個使用者登陸的,而騰訊雲的遠端登陸預設使用的是Lighthouse使用者,因此我們還需要在linux下切換使用者:

su ubuntu
輸入密碼即可

之後我們來到存放伺服器原始碼的目錄,make一下,就生成了可執行的tcp_server.
在這裡插入圖片描述
如果在make時提示錯誤,是因為騰訊雲的linux預設沒有安裝完整的gcc編譯庫,輸入一下命令安裝後重試即可:

sudo apt-get install build-enssential

另外,由於程式裡開啟的時8888埠,這個埠在騰訊雲的防火牆裡預設沒有開啟,還需要我們手動開啟一下,否則無法監聽套接字。
在這裡插入圖片描述
至此,我們執行一下tcp_server,伺服器就建立了,程式開始監聽有無客戶端接入。
在這裡插入圖片描述

2.3 操作esp8266連線到伺服器

使用AT指令操作esp8266,具體指令詳見官方AT指令集。這裡我們直接開啟透傳模式。

1. 配置 WiFi 模式
AT+CWMODE=3	
2.連線路由器
AT+CWJAP="SSID","password"	   SSID是你的wifi熱點名稱,後邊是密碼
這個wifi熱點既可以是你家裡的wifi路由器,也可以是手機建立的熱點。
3.連線雲主機伺服器
AT+CIPSTART="TCP","xx.xx.xx.xx",8888
4.開啟透傳模式
AT+CIPMODE=1
5.傳送資料
 AT+CIPSEND
 之後就開啟透傳了,通過串列埠向esp8266傳送任意資料都會直接扔給伺服器,同時伺服器發給esp8266的資料也會直接通過串列埠接收。

我用的串列埠助手操作的esp8266,實驗現象如下,傳送this is a test後,收到了伺服器原封返回的this is a test:
在這裡插入圖片描述
伺服器端實驗現象如下:
在這裡插入圖片描述

三 總結

由此,物聯網平臺最基礎的部分算是打通了。裝置端不僅限於使用esp8266 wifi模組的上網方式,4G、2G等模組,只要是能建立tcp連線的都可以。
只要打好了這個基礎,即我們的伺服器可以成功與客戶端進行通訊,那我們可以在伺服器上施展拳腳,主要是程式的編寫。我們可以在伺服器上編寫資料庫、編寫業務邏輯,甚至編寫web端,甚至可以利用Qt、c#等寫伺服器上位機,視覺化的執行在雲主機上,從而做任何你想做的事。這樣,一個物聯網雲平臺就隨著你的想法而建立了。

相關文章