摘要:对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的数据上报,其余网络应用就能够触类旁通了。文中部分未详细说明的,还有不少大咖写的比较清楚,请各位自行参考。