用Arduino使用esp8266的Wi-Fi TCP透传和POST请求-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 28148|回复: 18

用Arduino使用esp8266的Wi-Fi TCP透传和POST请求

[复制链接]
发表于 2017-9-20 10:19 | 显示全部楼层 |阅读模式
用过Arduino的朋友,用esp8266的时候,会比较倾向于使用纯ArduinoIDE的esp8266单个板子的开发,毕竟简单,而且库文件的用法比较熟悉,但是这种也会出现很多问题,比如有些引脚不够用,有些库还没完全移植到esp8266的Arduino版上,甚至性能不够用的情况。
这时候最好的方案就是让esp8266只做Wi-Fi的事情,Arduino板子来做其他的收集数据,运算之类的事情,相得益彰,相辅相成。


使用透传一般需要用AT指令来控制esp8266,AT指令第一次用会不理解,会了之后会觉得很简单,稍微有些坑,我也被卡住了挺久。

相关的文档资料可以在乐鑫官网下载到http://espressif.com/zh-hans/products/hardware/esp8266ex/resources

这篇帖子就说一下连接服务器并发送post请求的例子。

[mw_shl_code=cpp,true]#include <SoftwareSerial.h>

SoftwareSerial mySerial(13, 12); // RX, TX  通过软串口连接esp8266

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  mySerial.begin(115200);
  mySerial.println("AT+RST");   // 初始化重启一次esp8266
  delay(1500);
  echo();
  mySerial.println("AT");
  echo();
  delay(500);
  mySerial.println("AT+CWMODE=3");  // 设置Wi-Fi模式
  echo();
  mySerial.println("AT+CWJAP=\"WiFiSSID\",\"password\"");  // 连接Wi-Fi
  echo();
  delay(10000);
}

void loop() {

  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
  post();
}

void echo(){
  delay(50);
  while (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

void post(){
  String temp = "POST data";
  mySerial.println("AT+CIPMODE=1");
  echo();
  mySerial.println("AT+CIPSTART=\"TCP\",\"webserver.com\",80");  // 连接服务器的80端口
  delay(1000);
  echo();
  mySerial.println("AT+CIPSEND"); // 进入TCP透传模式,接下来发送的所有消息都会发送给服务器
  echo();
  mySerial.print("POST /update.php?params=sth"); // 开始发送post请求
  mySerial.print(" HTTP/1.1\r\nHost: webserver.com\r\nUser-Agent: arduino-ethernet\r\nConnection:close\r\nContent-Length:"); // post请求的报文格式
  mySerial.print(temp.length()); // 需要计算post请求的数据长度
  mySerial.print("\r\n\r\n");
  mySerial.println(temp); // 结束post请求
  delay(3000);
  echo();
  mySerial.print("+++"); // 退出tcp透传模式,用println会出错
  delay(2000);
}
[/mw_shl_code]


发表于 2017-10-23 17:32 | 显示全部楼层
esp 性能 绝对没问题,8266自己 担当 开发板 足够
 楼主| 发表于 2017-11-1 18:53 | 显示全部楼层
parv 发表于 2017-10-23 17:32
esp 性能 绝对没问题,8266自己 担当 开发板 足够

IO口有时候会不够用,有些库在esp上不能用,那就需要用一个Arduino来做主控了
发表于 2018-4-3 23:25 | 显示全部楼层
助人为快乐之本~有恒为成功之本~
发表于 2018-8-13 22:50 | 显示全部楼层
请问按照你的代码使用以后,串口输出的内容有部分是乱码,请问是为什么呢?
部分输出如下
AT+RST


OK
CLOSDD

ets J`n  8 2013,r.⸮⸮͕⸮b⸮⸮сj⸮⸮⸮AT⸮CA⸮j⸮L⸮AT+CWMODE<3


OK
AT+CWJAP="coolcarrov","12341234nikeasong"

WIFI CONNECTED
WIFI GOT IP

OK
AT+CIPMODE=1


OK
AT+CIPSTAQT="TCP","weaserver.com#,80

CONOECT
发表于 2018-8-31 21:33 | 显示全部楼层
怎么接收post返回的值呢?
发表于 2019-1-30 16:26 | 显示全部楼层
已经成功用的你的代码把温湿度数据传到TCP服务器!非常感谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:53 , Processed in 0.100736 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表