|
用过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]
|
|