摘要:對ESP8266以透傳方式訪問網絡的過程當中遇到的大大小小的坑,以及解決辦法進行了記錄和說明,並以Arduino做爲主控板進行POST方式訪問OneNET平臺。html
硬件:api
軟件:網絡
1、使用USB轉TTL模塊鏈接ATK-ESP8266和PC機進行調試(非必須)工具
這個步驟可使用串口工具下發AT指令對ESP8266進行手工配置,或進行調試以驗證模塊功能是否正常。oop
ATK-ESP8266模塊是這樣的,有6個引腳,使用其中的4個:VCC(3.3V~5V),GND,TXD,RXDpost
鏈接方式以下表,注意:其餘廠家的ESP8266模塊可能接USB-TTL的3.3V才能正常,不然會出現亂碼或其餘異常錯誤,這個供電問題值得注意。ui
USB-TTL | ESP8266 |
5V | VCC |
GND | GND |
RX | TX |
TXspa |
RX |
而後將USB-TTL插入PC機USB,部分PC機(主要指win10如下)須要安裝CH340驅動才能識別該串口工具。3d
接下來打開串口工具,這裏是xcom,以下圖。調試
注意幾點:
2、Arduino+ESP8266透傳(無USB-TTL)
使用Arduino的軟串口方式鏈接ESP8266。關於軟串口,下面連接裏這位哥們寫的很清楚。
《軟件模擬串口通訊——SoftwareSerial庫的使用》
https://www.arduino.cn/thread-47262-1-1.html
鏈接方式以下,相似USB-TTL鏈接方式,需一樣注意其餘廠家的ESP8266模塊可能接3.3V才能正常,不然會出現亂碼或其餘異常錯誤。
Arduino UNO | ESP8266 |
5V | VCC |
GND | GND |
RX | TX |
TX |
RX |
C代碼以下,用ArduinoIDE下載到主控板,這段代碼表示主控板以透傳方式與ESP8266交互,配置需經過串口工具手動下發AT指令給ESP8266模塊。故需在下載完代碼後,不要打開Arduino的串口監控,而是使用串口工具下發命令至主控板。注意:這裏Arduino硬件串口波特率爲9600,軟串口Arduino-ESP8266爲115200(板子默認的值)。
#include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX void setup() { // put your setup code here, to run once: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.println("hardware serial!"); mySerial.begin(115200); mySerial.println("software serial!"); } void loop() { // put your main code here, to run repeatedly: if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { mySerial.write(Serial.read()); } }
程序下載完成後,打開串口工具xcom,軟件設置同前一節,但波特率爲9600(也能夠是其餘值,與下載程序保持一致)。
只要xcom對於下發的AT指令返回了OK,就說明一切正常。其餘指令或者剛上電時會有亂碼出現,這個問題不用管,因ESP8266固件初始波特率爲74880,與串口工具設置的不一致形成。
若出現亂碼或不響應,繼續回頭參考前一節總結的幾點緣由。
接下來就可使用AT指令對ESP8266進行配置了,經常使用指令舉例以下,完整的自行查找資料吧,很好找。
AT
AT+RST,重啓
AT+GMR,查看版本號
AT+CWMODE=3,設置爲AP+STA模式
AT+CWJAP="wifi名稱","密碼",鏈接WiFi
AT+CIFSR,查看獲取的IP
3、Arduino+ESP8266透傳模式POST數據到OneNET
關於OneNET部分的操做,不是本文重點,這裏不進行說明。
POST部分的關鍵代碼以下,其中your_device_id和your_api_key須要換成本身的,type=3必不可少,表示datapoint的數據格式。
void post(){ mySerial.println("AT+CIPSEND"); delay(3000); echo(); mySerial.println("POST /devices/your_device_id/datapoints?type=3 HTTP/1.1"); mySerial.println("Host: api.heclouds.com"); mySerial.println("api-key: your_api_key"); mySerial.println("Content-Length: 20"); mySerial.println(""); mySerial.println("{\"http\":15}"); //value of datapoints delay(3000); echo(); mySerial.println("+++"); delay(3000); echo(); Serial.println("over"); }
程序下載後,經過串口工具能夠觀察到HTTP 200 OK,即代表POST成功。過程可能會出現個別400 ERROR,估計是模塊某些命令未執行完成形成。出現HTTP 200 OK,便可去OneNET觀察數據流了,以下圖所示數據已成功上雲。
至此,完成了ESP8266的數據上報,其餘網絡應用就能夠觸類旁通了。文中部分未詳細說明的,還有不少大咖寫的比較清楚,請各位自行參考。