本文整理自太极创客网站ESP8266-Arduino库 开发参考资料,更多请访问太极创客官网
一:无线终端模式连接WiFi
直接连接:
自动连接最强信号WiFi网络
#include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库
#include <ESP8266WiFiMulti.h> // 本程序使用ESP8266WiFiMulti库
ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象,对象名称是’wifiMulti’
void setup() {
Serial.begin(9600); // 启动串口通讯
//通过addAp函数存储 WiFi名称 WiFi密码
wifiMulti.addAP(“taichi-maker”, “12345678”); // 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。
wifiMulti.addAP(“taichi-maker2”, “87654321”); // 这3个WiFi网络名称分别是taichi-maker, taichi-maker2, taichi-maker3。
wifiMulti.addAP(“taichi-maker3”, “13572468”); // 这3个网络的密码分别是123456789,87654321,13572468。
// 此处WiFi信息只是示例,请在使用时将需要连接的WiFi信息填入相应位置。
// 另外这里只存储了3个WiFi信息,您可以存储更多的WiFi信息在此处。
Serial.println(“Connecting …”); // 通过串口监视器输出信息告知用户NodeMCU正在尝试连接WiFi
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) { // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
delay(1000); // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
Serial.print(‘.’); // 将会连接信号最强的那一个WiFi信号。
} // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
// 此处while循环判断是否跳出循环的条件。
Serial.println(‘\n’); // WiFi连接成功后
Serial.print(“Connected to “); // NodeMCU将通过串口监视器输出。
Serial.println(WiFi.SSID()); // 连接的WiFI名称
Serial.print(“IP address:\t”); // 以及
Serial.println(WiFi.localIP()); // NodeMCU的IP地址
}
void loop() {
}
二.接入点模式
三.WIFIManage相关代码
四.多任务处理 – Ticker库
请注意:attach函数所能传递的参数最多只有一个。另外该参数仅能是以下类型中的一种:char, short, int, float, void*, char*。
ticker.attach(1, tickerCount);
void loop() {
if (count >= 5){
httpRequest();
count = 0;
}
}
void tickerCount(){
count++;
Serial.print(“count = “);
Serial.println(count);
}
5.OTA操作说明
#include <ArduinoOTA.h>
ArduinoOTA.setPassword(“12345678”);
ArduinoOTA.begin();
六.ESP8266HTTPClient库
设置请求信息
— begin – 设置请求URL
我们经常使用ESP8266通过HTTP协议向网络服务器发送HTTP请求。本函数用于设置ESP8266发送HTTP请求的目标URL。
语法
httpClient.begin(url)
httpClient.begin(url, port)
参数
url: HTTP请求网址
port: HTTP请求的网络服务器端口 (此参数为可选参数,默认为端口80)
返回值
无
— setReuse – 设置请求头中的keep-alive
说明
此函数用于设置ESP8266开发板在通过HTTP发送请求时,请求头中的keep-alive是否为”true”。
HTTP keep-alive 也称为 HTTP 长连接。它通过重用一个 TCP 连接来发送/接收多个 HTTP请求,来减少创建/关闭多个 TCP 连接的开销。
如果设置 keep-alive为true,则服务端在返回 response 后不关闭 TCP 连接;同样的,在接收完响应报文后,客户端也不关闭连接,发送下一个 HTTP 请求时会重用该连接。
语法
httpClient.setReuse(true)
httpClient.setReuse(false)
参数
返回值类型为布尔型。返回值的简要说明如下:
true: 启用请求头中的keep-alive
false: 禁用请求头中的keep-alive
返回值
无
— setUserAgent – 设置请求头中的User-Agent
说明
ESP8266开发板在通过HTTP发送请求时,我们可以使用此函数设置请求头的User-Agent内容。
User Agent请求头的作用是让服务器能够识别客户端使用的操作系统及版本、客户端设备的CPU类型、浏览器名称和版本、浏览器所用的语言、浏览器所用的插件等。换句话说,就是告诉服务端现在是什么设备在访问服务器。
语法
httpClient.setUserAgent(device_info)
参数
– device_info : 用户自定义的客户端标识
– 参数类型: 字符串 或 const char *
返回值
无
— setAuthorization – 设置请求头中的Authorization
说明
此函数用于设置ESP8266开发板在通过HTTP发送请求时,设置请求头中的Authorization部分。
语法
httpClient.setAuthorization(user,password)
参数
user: 设备进行访问的用户名请求头信息
password: 设备进行访问的密码请求头信息
返回值
无
— addHeader – 请求头中添加自定义信息
说明
使用此函数,我们可以ESP8266开发板发起HTTP请求的时候,添加自定义的请求头信息。
语法
http.addHeader(name,value)
参数
name: 自定义请求头名称 (类型:String 或 const char *)
value: 自定义请求头参数值 (类型:String 或 const char *)
注:自定义请求头不能使用Connection、User-Agent、Host、Authorization等标准请求头名称。
返回值
无
— useHTTP10 – 设置http协议版本
说明
此函数用于设置ESP8266开发板在通过HTTP发送请求时使用的HTTP协议版本。
语法
http.useHTTP10(val)
参数
val: 控制HTTTP版本。默认情况下,设备时使用HTTTP 1.1 版本。当此参数为true时,则使用HTTTP 1.0版本。false时,使用HTTTP 1.1版本。(参数类型:bool)
返回值
无
请求方法类型
— GET
说明
此函数用于ESP8266使用HTTP协议通过网络向服务器发送GET请求。
客户端与服务器通讯时最常被用到的方法是:GET 和 POST。
– GET – 从指定的资源请求数据。
– POST – 向指定的资源提交要被处理的数据
语法
http.GET()
参数
无
返回值
服务器状态码(返回值类型:int类型)
以下是常见的HTTP状态码(以下括号中内容为ESP8266HTTPClient库声明定义的HTTP状态码替代文字,具体内容可参考ESP8266库ESP8266HTTPClient.h文件中相应内容):
– 200: 请求成功 (HTTP_CODE_OK)
– 301: 资源(网页等)被永久转移到其它URL (HTTP_CODE_MOVED_PERMANENTLY)
– 404: 请求的资源(网页等)不存在(HTTP_CODE_NOT_FOUND)
– 500: 内部服务器错误(HTTP_CODE_INTERNAL_SERVER_ERROR)
— POST
说明
此函数用于ESP8266备使用HTTP协议通过网络向服务器发送POST请求。
客户端与服务器通讯时最常被用到的方法是:GET 和 POST。
– GET – 从指定的资源请求数据。
– POST – 向指定的资源提交要被处理的数据
语法
http.POST(payload)
http.POST(payload, size)
参数
payload: 通过POST请求所发送的数据信息(该信息置于请求体中被发送)。该参数可使用字符串类型。
size: 通过POST请求所发送的数据字节数(此参数为可选参数,类型:size_t )。
返回值
服务器响应状态码(类型:int)
— PUT
说明
此函数用于ESP8266使用HTTP协议通过网络向服务器发送PUT请求。
语法
http.PUT(payload)
http.PUT(payload, size)
参数
payload:通过PUT请求所发送的数据信息(该信息置于请求体中被发送)。该参数可使用字符串类型。
size: 通过PUT请求所发送的数据字节数(此参数为可选参数,类型:size_t )。
返回值
服务器状态码
— PATCH
说明
此函数用于ESP8266使用HTTP协议通过网络向服务器发送PATCH请求。
语法
http.PATCH(payload)
http.PATCH(payload, size)
参数
payload:通过PATCH请求所发送的数据信息(该信息置于请求体中被发送)。该参数可使用字符串类型。
size: 通过PATCH请求所发送的数据字节数(此参数为可选参数,类型:size_t )。
返回值
服务器响应状态码
发送请求类型
— sendRequest – 发送请求
说明
此函数用于ESP8266使用HTTP协议通过网络向服务器发送请求。本函数可以自定义请求方法类型,如 GET、POST等。
语法
sendRequest(type, payload)
sendRequest(type, payload, size)
sendRequest(type, stream, size)
参数
type: 发送请求的类型,可以是”GET”、”POST”等。参数类型: const char *
payload: 请求所发送的数据信息(该信息置于请求体中被发送)。该参数可使用字符串类型。(使用GET作为请求方法时,此参数可以省略)。
size: 请求所发送的数据字节数(此参数为可选参数,类型:size_t )。
stream: 数据流对象
返回值
服务器状态码
以下是常见的HTTP状态码:
– 200 – 请求成功
– 301 – 资源(网页等)被永久转移到其它URL
– 404 – 请求的资源(网页等)不存在
– 500 – 内部服务器错误
— end – 结束请求
说明
当ESP8266发送HTTP请求结束后,我们应该调用此函数来清除ESP8266的接收缓存以便设备再次接收服务器发来的响应信息。
语法
http.end()
参数
无
返回值
无
响应头类型
— collectHeaders – 设置收集响应头内容
— header – 获取指定响应头参数值
— headers – 获取响应头数量
— headerName – 获取指定的响应头名
— hasHeader – 确认是否存在指定响应头
响应体类型
— getString – 获取响应体数据并且以字符串形式返回
— getStream – 获取响应体数据并且以Stream形式返回
— writeToStream – 获取响应体数据并且写入其它Stream对象
— getSize – 获取响应体数据字节数
— errorToString – 获取错误代码并且以字符串形式返回
示例代码
//int httpCode = http.sendRequest(“POST”, “date_test”);
//Serial.print(“[HTTP] POST…\n”);
七.ESP8266 – WiFiClient库
WiFiServer对象在处理或发送网络数据时,可以通过调用Stream类中的函数来实现。因此在以下结构图中的“发送数据类型”以及“响应信息操作类型”中有“Stream类”作为这种类型函数的一部分。
连接服务器类型
设置类型
— connect – 连接服务器
说明
connect函数用于ESP8266开发板通过TCP协议连接网络服务器。
语法
client.connect(ip, port);
参数
ip:所要连接的服务器地址。
注:在定义参数ip的时候可使用String、const char。如下所示:
const char * ip = "47.92.129.18";
String ip = "www.ranye-iot.com";
port:所要连接的服务器端口号,允许使用int类型。
返回值
连接失败返回0,连接成功返回1。返回值数据类型是bool型。
— stop – 停止客户端
说明
stop函数用于停止ESP8266连接TCP服务器。
语法
client.stop()
参数
无
— setNoDelay- 停止小包合并发送
说明
setNoDelay()用于与TCP服务器通讯时 ,是否禁用 Nagle 算法。Nagle 算法的目的是通过合并一些小的发送消息,然后一次性发送所有的消息来减少通过网络发送的小数据包的tcp/ip流量。
语法
client.setNoDelay(true);
语法
数据类型:bool
1
2
|
server.setNoDelay(true);//true 表示禁用 Nagle 算法,合并一些小的消息
server.setNoDelay(false);//false 表示启用 Nagle 算法,消息直接发送
|
信息类型
— connected – 检查是否成功连接服务器
说明
connected 函数用于检查设备是否成功连接服务器。
语法
client.connected();
返回值
0:连接失败返回0
1:连接成功返回1
返回值数据类型:bool
— status – 获取客户端运行状态
说明
status函数用于获取设备与服务器的连接状态。
语法
client.status();
返回值
CLOSED = 0
LISTEN = 1
SYN_SENT = 2
SYN_RCVD = 3
ESTABLISHED = 4
FIN_WAIT_1 = 5
FIN_WAIT_2 = 6
CLOSE_WAIT = 7
CLOSING = 8
LAST_ACK = 9
TIME_WAIT = 10
发送数据类型
— print – 发送信息(Stream类)
说明
print函数用于发送数据到已连接的服务器。print函数与println函数功能十分相似。他们二者的区别是,println函数会在发送的数据结尾增加一个换行符(’\n’),而print函数则不会。
请留意,WiFiClient库对象在处理或发送网络数据时,可以通过调用Stream类中的函数来实现。本函数即是Stream类中的一员。
语法
client.print(val);
参数
val:所要发送的数据,可以是字符串、字符或者数值。
返回值
无
— println – 发送信息(Stream类)
说明
println函数用于发送数据到已连接的服务器。println函数与print函数功能十分相似。他们二者的区别是,println函数会在发送的数据结尾增加一个换行符(’\n’),而print函数则不会。
请留意,WiFiClient对象在处理或发送网络数据时,可以通过调用Stream类中的函数来实现。本函数即是Stream类中的一员。
语法
client.println(val);
参数
val:所要发送的数据,可以是字符串、字符或者数值。
返回值
无
— write – 发送信息(Stream类)
说明
write函数可用于发送数据到已连接的服务器。你可以发送单个字节的信息也可以发送多字节的信息。
语法
WiFiClient.write(val);
WiFiClient.write(str)
WiFiClient.write(buf, len)
参数
val: 要发送的单字符数据
str: 要发送的多字符数据
buf: 要发送的多字符数组
len: buf的字节长度
返回值
写入发送缓存的字节数
— Stream类
响应信息操作类型
— readString – 读取数据并保存为字符串 (Stream类)
说明
本函数可用于从ESP8266接收到数据中读取数据信息。读取到的信息将以字符串格式返回。
请留意,WiFiClient对象在处理或发送网络数据时,可以通过调用Stream类中的函数来实现。本函数即是Stream类中的一员。
语法
client.readString()
参数
无
返回值
接收到的数据,类型为字符串。
— readStringUntil – 读取数据直到指定字符并保存为字符串 (Stream类)
说明
readStringUntil函数可用于从设备接收到的数据中读取信息。读取到的数据信息将以字符串形式返回。该函数在满足以下任一条件后都会停止函数执行并返回。
– 读取到指定终止字符
– 达到设定时间(可使用setTimeout来设置)
当函数读取到终止字符后,会立即停止函数执行。此时函数所返回的字符串为”终止字符”前的所有字符信息。
请留意,WiFiClient对象在处理或发送网络数据时,可以通过调用Stream类中的函数来实现。本函数即是Stream类中的一员。
语法
client.readStringUntil(terminator)
参数
terminator: 终止字符。用于设置终止函数执行的字符信息。设备在读取数据时一旦读取到此终止字符,将会结束函数执行。允许使用char类型。
返回值
接收到的数据,类型为字符串。
— find – 在数据中寻找信息(Stream类)
说明
find函数可用于从设备接收到的数据中寻找指定字符串信息。当函数找到了指定字符串信息后将会立即结束函数执行并且返回“真”。否则将会返回“假”。
请留意,WiFiClient对象在处理或发送网络数据时,可以通过调用Stream类中的函数来实现。本函数即是Stream类中的一员。
语法
client.find(target)
参数
target: 被查找字符串。允许使用String或char类型。
返回值
返回值类型为bool。当函数找到了指定字符串信息后将会立即结束函数执行并且返回“真”。否则将会返回“假”。
— parseInt – 解析数据中的整数(Stream类)
说明
parseInt函数可用于从设备接收到的数据中寻找整数数值。
请留意,WiFiClient对象在处理或发送网络数据时,可以通过调用Stream类中的函数来实现。本函数即是Stream类中的一员。
语法
client.parseInt()
参数
无
返回值
在输入信息中找到的整数数值。类型:long
— Stream类
备注:以上带有(Stream类)标注的函数说明该函数是Stream类函数。
示例代码
八.ESP8266WebServer库
服务器运行管理分类
– ESP8266WebServer – 建立新的ESP8266WebServer对象
说明
本函数用于启动ESP8266开发板所建立的网络服务器。
语法
server.begin()
参数
无
返回值
无
– begin – 服务器启动
说明
本函数用于启动ESP8266开发板所建立的网络服务器。
语法
server.begin()
参数
无
返回值
无
– stop – 停止服务器
– close – 停止服务器
处理客户端HTTP请求分类
客户端请求处理配置分类
– on – 可找到资源处理配置
说明
当ESP8266开发板建立网络服务器以后,每当有客户端向服务器发送HTTP请求时,我们可以利用on函数来设置HTTP请求回调函数。
通过HTTP请求回调函数,我们可以让ESP8266服务器生成响应信息并发送给HTTP请求客户端。
语法
server.on(uri, uri_handler);
server.on(uri, method, uri_handler);
参数
– uri: HTTP请求客户端所请求的uri(参数类型:const String*)
– uri_handler: HTTP请求回调函数(参数类型:THandlerFunction)
– method: 此参数用于设置向客户端发送响应信息时所使用的HTTP方法。以下为可供选择的响应方法关键字。
HTTP_ANY
HTTP_GET
HTTP_POST
HTTP_PUT
HTTP_PATCH
HTTP_DELETE
HTTP_OPTIONS
返回值
无
– onNotFound – 未找到资源处理配置
说明
当ESP8266开发板建立网络服务器以后,每当有客户端向服务器发送HTTP请求时,我们可以利用onNotFound函数来设置HTTP请求无效地址的回调函数。
通过无效地址回调函数,我们可以让ESP8266服务器生成响应信息并在客户端请求无效地址时,将404页面信息发送给客户端。
语法
server.onNotFound(function)
参数
function – 处理无效地址请求的回调函数(类型: THandlerFunction)
返回值
无
– onFileUpload – 文件上传处理配置
– addHandler – 设置请求响应回调
处理客户端请求分类
– handleClient – 处理客户端请求
说明
此函数主要作用是检查有没有客户端设备通过网络向ESP8266网络服务器发送请求。每一次handleClient`函数被调用时,ESP8266网络服务器都会检查一下是否有客户端发送HTTP请求。因此建议将该函数放在loop函数中,从而确保它能经常被调用。
假如loop函数里有类似delay一类的函数延迟程序运行,那么就一定要注意了。如果handleClient函数长时间得不到调用,ESP8266网络服务器会因为无法经常检查HTTP客户端请求而导致服务器响应变慢,严重的情况下,会导致服务器工作不稳定。
语法
server.handleClient()
参数
无
返回值
无
获取客户端请求信息分类
获取客户端请求行信息分类
– uri – 获取请求路径
– method – 获取请求方法
获取客户端请求头信息分类
– collectHeaders – 设置需要收集哪些请求头信息
– headers – 获得请求头数量
– header – 获得指定请求头所对应的数值
– headerName – 获取指定请求头的名称
– hasHeader – 确定是否包含指定请求头
– authenticate – 请求认证校验