本篇内容主要讲解“怎么用Arduino+ESP8266透传方式实现POST访问”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Arduino+ESP8266透传方式实现POST访问”吧!
摘要:对ESP8266以透传方式访问网络的过程中遇到的大大小小的坑,以及解决办法进行了记录和说明,并以Arduino作为主控板进行POST方式访问OneNET平台。
硬件:
Alientek的ATK-ESP8266模块,带UART-WiFi,官方固件带AT指令,波特率默认115200(8位数据位,1位停止位,无校验)
Arduino UNO
PC机
USB转TTL模块
杜邦线若干
软件:
串口软件:xcomV2.0或USR-TCP232-Test,前者能保存多条AT命令但无网络功能,后者只能发送单条AT命令但有网络功能
ArduinoIDEv1.8.0
一、使用USB转TTL模块连接ATK-ESP8266和PC机进行调试(非必须)
这个步骤可以使用串口工具下发AT指令对ESP8266进行手工配置,或进行调试以验证模块功能是否正常。
ATK-ESP8266模块是这样的,有6个引脚,使用其中的4个:VCC(3.3V~5V),GND,TXD,RXD
连接方式如下表,注意:其他厂家的ESP8266模块可能接USB-TTL的3.3V才能正常,否则会出现乱码或其他异常错误,这个供电问题值得注意。
USB-TTL | ESP8266 |
5V | VCC |
GND | GND |
RX | TX |
TX | RX |
然后将USB-TTL插入PC机USB,部分PC机(主要指win10以下)需要安装CH340驱动才能识别该串口工具。
接下来打开串口工具,这里是xcom,如下图。
注意几点:
串口选择,需对应到正确的串口;
波特率默认115200,其他如图红框所示;
勾选发送新行;
发送指令时,不需要敲回车换行,点击发送就行(前提是满足3);
因PC机通过串口与ESP8266通信,ESP8266连接AP,所以PC机是否联网无所谓(ESP8266作为AP,PC机去连接这个AP的模式除外) ;
若发送最简单的AT指令,都得不到应答(正确的应答是OK,异常如乱码或无响应等),可能原因主要有
RX,TX接错,如ESP8266的RX接了USB-TTL的RX
不是纯英文字符AT,或者没有按照上图红框几个关键点设置串口工具
波特率错误,核实下ESP8266模块的默认波特率(这里所购ATK-ESP8266模块的默认波特率是115200)
电压问题,该问题比较隐蔽不易发现,因不同厂商生产原因,即使都是以ESP8266作为核心部件,最终暴露出来的电源引脚电压要求都存在差异。还有,你用的USB-TTL模块也可能是个坑爹货,若质量不过关,电压不稳的话也无法得到正确应答。怎么排查呢?其实这是我碰到的一个大坑,我只能说下我怎么发现的。我用的ATK-ESP8266模块同时支持3.3v和5v供电,我发现仅在5v时能被PC机发现串口连接,3.3v时根本发现不了。后来找了正点原子的技术支持,说他们家的模块在3.3v供电下也能连接串口,我马上明白是我的USB-TTL问题。
固件问题,如果是的话,就恭喜你中奖了,要么放弃该模块,要么老老实实按照教程重刷。但重刷能解决问题的关键是确认是固件问题,否则刷了也白刷。至于如何确认,还是需要点经验和专业工具的,搞不定的话想办法找人求助吧。
二、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
三、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观察数据流了,如下图所示数据已成功上云。
到此,相信大家对“怎么用Arduino+ESP8266透传方式实现POST访问”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。