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



用Arduino使用esp8266的Wi-Fi TCP透传和POST请求用过Arduino的朋友,用esp8266的时候,会比较倾向于使用纯ArduinoIDE的esp8266单个板子的开发,毕竟简单,而且库文件的用法比较熟悉,但是这种也会出现很多问题,比如有些引脚不够用,有些库还没完全移植到esp8266的Arduino版上,甚至性能不够用的情况。
这时候最好的方案就是让esp8266只做Wi-Fi的事情,Arduino板子来做其他的收集数据,运算之类的事情,相得益彰,相辅相成。

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

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

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

kittenblock中小学创客名师推荐的图形化编程软件

#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);
}