一、ESP8266简介
ESP8266 是深圳安信可科技有限公司开发的基于乐鑫ESP8266的超低功耗的UART-WIFI模块的模组,可以方便进行二次元开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。
核心模块处理器ESP8266在较小尺寸中继承了业界领先的Tensilical106超低功耗32位微型MCU,带有16位精简模式,支持RTOS(实时操作系统,指当外界事件或者数据变化时候能够以足够快的速度处理),集成WIFI/MAC/BB/RF/PA/LAN,板载天线。支持IEEE802.11b/g/n协议,完整的TCP/IP协议。
二、开发环境
开发环境采用Arduino IDE for ESP8266 采用 Arduino 语法进行编程设计。
三、编程
1. HTTP相关知识
HTTP是一套计算机网络通讯规则。下来主要介绍一下HTTP消息格式。详细HTTP请求请戳链接。
HTTP请求数据格式:
当浏览器发送请求是,向服务器发送了一个数据块,也就是请求信息,其中信息由三部分组成。
1. 请求方法 URI协议/版本
2. 请求头(Request Header)
3. 请求正文
eg.
1 GET/sample.jspHTTP/1.1
2 Accept:image/gif.image/jpeg,*/*
3 Accept-Language:zh-cn 4 Connection:Keep-Alive 5 Host:localhost 6 User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0) 7 Accept-Encoding:gzip,deflate 8
9 username=jinqiao&password=1234
HTTP 请求应答格式:
当服务器收到浏览器的请求时,会向客户端返回数据,数据主要由三部分组成
1. 协议状态 版绷带吗描述
2. 响应头(ResponseHeader)
3. 响应正文
eg.
1 HTTP/1.1 200 OK 2 Server:Apache Tomcat/5.0.12
3 Date:Mon,6Oct2003 13:23:42 GMT 4 Content-Length:112
5
6 data(返回数据)
2. ESP8266 编程
下附esp8266模块发送请求的代码
1 /*
2 * HTTP over TLS (HTTPS) example sketch 3 * 4 * This example demonstrates how to use 5 * WiFiClientSecure class to access HTTPS API. 6 * We fetch and display the status of 7 * esp8266/Arduino project continous integration 8 * build. 9 * 10 * Created by Ivan Grokhotkov, 2015. 11 * This example is in public domain. 12 */
13
14 #include <ESP8266WiFi.h>
15 #include <WiFiClientSecure.h>
16
17 const char* ssid = "zlei"; 18 const char* password = "18829237005"; 19
20 const char* host = "15r34407v7.imwork.net"; //需要访问的域名
21 const int httpsPort = 37170; // 需要访问的端口
22 const String url = "/test"; // 需要访问的地址
23
24 void setup() { 25 Serial.begin(9600); 26 Serial.println(); 27 Serial.print("connecting to "); 28 Serial.println(ssid); 29 WiFi.begin(ssid, password); // 连接WIFI
30 while (WiFi.status() != WL_CONNECTED) { 31 delay(500); 32 Serial.print("."); 33 } 34 Serial.println(""); 35 Serial.println("WiFi connected"); 36 Serial.println("IP address: "); 37 Serial.println(WiFi.localIP()); // 显示WIFI地址
38 } 39
40 void loop() { 41 Serial.print("connecting to "); 42 Serial.println(host); 43
44 WiFiClient client; 45
46 /** 47 * 测试是否正常连接 48 */
49 if (!client.connect(host, httpsPort)) { 50 Serial.println("connection failed"); 51 return; 52 } 53 delay(10); 54
55 String postRequest =(String)("GET ") + url + "/ HTTP/1.1\r\n" +
56 "Content-Type: text/html;charset=utf-8\r\n" +
57 "Host: " + host + "\r\n" +
58 "User-Agent: BuildFailureDetectorESP8266\r\n" +
59 "Connection: Keep Alive\r\n\r\n"; 60 Serial.println(postRequest); 61 client.print(postRequest); // 发送HTTP请求
62
63 /** 64 * 展示返回的所有信息 65 */
66 String line = client.readStringUntil('\n'); 67 while(line.length() != 0){ 68 Serial.println(line); 69 line = client.readStringUntil('\n'); 70 } 71 Serial.println(line); 72 client.stop(); 73 delay(3000); 74 }
总结: 通过 WiFiClient 的 connect 方法来进行WIFI链接 通过print方法来发送HTTP请求, 以及readStringUntil('\n') 来读取服务器端返回的数据。
其中测试结果如图所示:
、
如有错误,欢迎指正。