怎么用Arduino+ESP8266透传方式实现POST访问

发布时间:2021-09-04 15:37:33 作者:chen
来源:亿速云 阅读:661

本篇内容主要讲解“怎么用Arduino+ESP8266透传方式实现POST访问”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Arduino+ESP8266透传方式实现POST访问”吧!

摘要:对ESP8266以透传方式访问网络的过程中遇到的大大小小的坑,以及解决办法进行了记录和说明,并以Arduino作为主控板进行POST方式访问OneNET平台。

硬件:

  1. Alientek的ATK-ESP8266模块,带UART-WiFi,官方固件带AT指令,波特率默认115200(8位数据位,1位停止位,无校验)

  2. Arduino UNO

  3. PC机

  4. USB转TTL模块

  5. 杜邦线若干

软件:

  1.     串口软件:xcomV2.0或USR-TCP232-Test,前者能保存多条AT命令但无网络功能,后者只能发送单条AT命令但有网络功能

  2.     ArduinoIDEv1.8.0

一、使用USB转TTL模块连接ATK-ESP8266和PC机进行调试(非必须)

    这个步骤可以使用串口工具下发AT指令对ESP8266进行手工配置,或进行调试以验证模块功能是否正常。

ATK-ESP8266模块是这样的,有6个引脚,使用其中的4个:VCC(3.3V~5V),GND,TXD,RXD

怎么用Arduino+ESP8266透传方式实现POST访问

连接方式如下表,注意:其他厂家的ESP8266模块可能接USB-TTL的3.3V才能正常,否则会出现乱码或其他异常错误,这个供电问题值得注意。

USB-TTLESP8266
5VVCC
GNDGND
RXTX

TX

RX

然后将USB-TTL插入PC机USB,部分PC机(主要指win10以下)需要安装CH340驱动才能识别该串口工具。

接下来打开串口工具,这里是xcom,如下图。

怎么用Arduino+ESP8266透传方式实现POST访问

注意几点:

  1. 串口选择,需对应到正确的串口;

  2. 波特率默认115200,其他如图红框所示;

  3. 勾选发送新行;

  4. 发送指令时,不需要敲回车换行,点击发送就行(前提是满足3);

  5. 因PC机通过串口与ESP8266通信,ESP8266连接AP,所以PC机是否联网无所谓(ESP8266作为AP,PC机去连接这个AP的模式除外) ;

  6. 若发送最简单的AT指令,都得不到应答(正确的应答是OK,异常如乱码或无响应等),可能原因主要有

    1. RX,TX接错,如ESP8266的RX接了USB-TTL的RX

    2. 不是纯英文字符AT,或者没有按照上图红框几个关键点设置串口工具

    3. 波特率错误,核实下ESP8266模块的默认波特率(这里所购ATK-ESP8266模块的默认波特率是115200)

    4. 电压问题,该问题比较隐蔽不易发现,因不同厂商生产原因,即使都是以ESP8266作为核心部件,最终暴露出来的电源引脚电压要求都存在差异。还有,你用的USB-TTL模块也可能是个坑爹货,若质量不过关,电压不稳的话也无法得到正确应答。怎么排查呢?其实这是我碰到的一个大坑,我只能说下我怎么发现的。我用的ATK-ESP8266模块同时支持3.3v和5v供电,我发现仅在5v时能被PC机发现串口连接,3.3v时根本发现不了。后来找了正点原子的技术支持,说他们家的模块在3.3v供电下也能连接串口,我马上明白是我的USB-TTL问题。

    5. 固件问题,如果是的话,就恭喜你中奖了,要么放弃该模块,要么老老实实按照教程重刷。但重刷能解决问题的关键是确认是固件问题,否则刷了也白刷。至于如何确认,还是需要点经验和专业工具的,搞不定的话想办法找人求助吧。

二、Arduino+ESP8266透传(无USB-TTL)

使用Arduino的软串口方式连接ESP8266。关于软串口,下面链接里这位哥们写的很清楚。

软件模拟串口通信——SoftwareSerial库的使用

https://www.arduino.cn/thread-47262-1-1.html

连接方式如下,类似USB-TTL连接方式,需同样注意其他厂家的ESP8266模块可能接3.3V才能正常,否则会出现乱码或其他异常错误。

Arduino UNOESP8266
5VVCC
GNDGND
RXTX

TX

RX

怎么用Arduino+ESP8266透传方式实现POST访问

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(也可以是其他值,与下载程序保持一致)。

怎么用Arduino+ESP8266透传方式实现POST访问

只要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访问

 

到此,相信大家对“怎么用Arduino+ESP8266透传方式实现POST访问”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. xshell 隧道透传
  2. centos6.8 开启透传

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

arduino

上一篇:Python怎么执行Linux操作系统的命令

下一篇:MySQL中的隐藏列的具体查看方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》