ESP8266 ArduinoIDE 搭建web服务器与客户端开发

这篇具有很好参考价值的文章主要介绍了ESP8266 ArduinoIDE 搭建web服务器与客户端开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、wifi 相关配置

 

1.1 无线终端 wifi 模式

此模式中,esp8266 会连接到指定 wifi 进行工作。

#include <ESP8266WiFi.h>        // 本程序使用ESP8266WiFi库
 
const char* ssid     = "home";      // 连接WiFi名(此处使用home为示例)
const char* password = "12345678";          // 连接WiFi密码(此处使用12345678为示例)
                                            
void setup() {
  Serial.begin(9600);         // 启动串口通讯
  
  WiFi.begin(ssid, password);                  // 启动网络连接
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");  // 告知用户NodeMCU正在尝试WiFi连接
  
  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时NodeMCU将通过串口监视器输出连接时长读秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。
                                               
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address:    ");             // 同时还将输出NodeMCU的IP地址。这一功能是通过调用
  Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
}
 
void loop() {                                   
}

 8266 web,硬件,# esp8266,网络,esp8266

 wifi 连接成功,esp8266 通过串口返回当前局域网 IP

1.2 接入点模式(热点模式 AP)

此模式中,esp8266 会开启一个指定名称和密码的热点进行工作。

#include <ESP8266WiFi.h>        // 本程序使用ESP8266WiFi库
 
const char *ssid = "taichi-maker"; // 这里定义将要建立的WiFi名称。此处以"taichi-maker"为示例
const char *password = "12345678";  // 这里定义将要建立的WiFi密码。此处以12345678为示例
 
void setup() {
  Serial.begin(9600);              // 启动串口通讯
  
  WiFi.softAP(ssid, password);     // 此语句是重点。WiFi.softAP用于启动NodeMCU的AP模式。

  Serial.print("Access Point: ");    // 通过串口监视器输出信息
  Serial.println(ssid);              // 告知用户NodeMCU所建立的WiFi名
  Serial.print("IP address: ");      // 以及NodeMCU的IP地址
  Serial.println(WiFi.softAPIP());   // 通过调用WiFi.softAPIP()可以得到NodeMCU的IP地址
}
 
void loop() {

}

二、搭建HTTP网络服务器

2.1 hello world 程序

#include <ESP8266WiFi.h>        // 本程序使用 ESP8266WiFi库
#include <ESP8266WebServer.h>   //  ESP8266WebServer库

ESP8266WebServer esp8266_server(80);  // 建立ESP8266WebServer对象,对象名称为esp8266_server

const char* ssid     = "home";        // 连接WiFi名(此处使用home为示例)
const char* password = "123456"; // 连接WiFi密码(此处使用12345678为示例)

void setup(void){
  Serial.begin(9600);          // 启动串口通讯
  WiFi.begin(ssid, password);  // 启动网络连接
  
  int i = 0;                                 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }
 
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  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地址
  
  esp8266_server.begin();                   //  开启web服务器
  esp8266_server.on("/", handleRoot);       //  访问根路由即调用 handlerRoot 函数处理
  esp8266_server.onNotFound(handleNotFound);        
  Serial.println("HTTP esp8266_server started"); //  告知用户ESP8266网络服务功能已经启动
}
 
void loop(void){
  esp8266_server.handleClient();     // 处理http服务器访问
}

void handleRoot() {   //处理网站根目录“/”的访问请求 
  esp8266_server.send(200, "text/plain", "Hello from ESP8266");   // 状态码 头报文 正文
}

// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  esp8266_server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数。
}

 8266 web,硬件,# esp8266,网络,esp8266

 8266 web,硬件,# esp8266,网络,esp8266

2.2 web LED 点灯案例

#include <ESP8266WiFi.h>        // 本程序使用 ESP8266WiFi库
#include <ESP8266WebServer.h>   //  ESP8266WebServer库

ESP8266WebServer esp8266_server(80);  // 建立ESP8266WebServer对象,对象名称为esp8266_server

const char* ssid     = "home";        // 连接WiFi名(此处使用home为示例)
const char* password = "123456"; // 连接WiFi密码(此处使用12345678为示例)

void setup(void){
  Serial.begin(9600);          // 启动串口通讯
  pinMode(LED_BUILTIN, OUTPUT); //设置内置LED引脚为输出模式以便控制LED
  digitalWrite(LED_BUILTIN,1);// 改变LED的点亮或者熄灭状态
  WiFi.begin(ssid, password);  // 启动网络连接
  
  int i = 0;                                 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }
 
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  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地址
  
  esp8266_server.begin();                   //  开启web服务器
  esp8266_server.on("/", handleRoot);       //  访问根路由即调用 handlerRoot 函数处理
  esp8266_server.on("/LED", HTTP_POST, handleLED);  // 设置处理LED控制请求的函数'handleLED'
  esp8266_server.onNotFound(handleNotFound);        
  Serial.println("HTTP esp8266_server started"); //  告知用户ESP8266网络服务功能已经启动
}
 
void loop(void){
  esp8266_server.handleClient();     // 处理http服务器访问
}

void handleLED(){
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
  esp8266_server.sendHeader("Location","/");
  esp8266_server.send(303);
}

void handleRoot() {   //处理网站根目录“/”的访问请求 
  esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}

// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  esp8266_server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数。
}

 在这里改写了根目录,他会向客户端发送一个按钮的页面,点击即向 "/LED" 路由下发送 POST 请求。

void handleRoot() {   //处理网站根目录“/”的访问请求 
  esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}

由于我们之前绑定了这个相应,即会触发:

void handleLED(){
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
  esp8266_server.sendHeader("Location","/");
  esp8266_server.send(303);
}

他在给 LED 取反后又重定向到根目录,即可实现我们的效果。

 8266 web,硬件,# esp8266,网络,esp8266

三、ESP8266WebServer 库

在之前我们基本使用了 ESP8266WebServer 库的功能,下面我们来配合案例详细了解这个库的 API。

8266 web,硬件,# esp8266,网络,esp8266

3.1 创建并启动 Web Server

#include <ESP8266WebServer.h>   //  ESP8266WebServer库
ESP8266WebServer esp8266_server(80);  // 建立ESP8266WebServer对象,对象名称为esp8266_server

此时实例化了一个名为 esp8266_server 的webServer 的对象。当实例化完成后即自动启动这个服务。当然,此时我们的 8266 需要已经配置好 wifi 才能被外部访问。

3.2 配置路由处理

esp8266_server.on("/LED", handleLED);  // 无论GET 或POST请求都会触发
esp8266_server.on("/LED", HTTP_POST, handleLED);  // 无论GET 或POST请求都会触发

void onNotFound(THandlerFunction fn);    //配置无效的路由 用于404

void onFileUpload(THandlerFunction fn);    //配置处理文件上传的handler

3.3 获取请求类型与参数案例

先用一个案例来演示:

#include <ESP8266WiFi.h>        // 本程序使用 ESP8266WiFi库
#include <ESP8266WebServer.h>   //  ESP8266WebServer库

ESP8266WebServer esp8266_server(80);  // 建立ESP8266WebServer对象,对象名称为esp8266_server

const char* ssid     = "home";        // 连接WiFi名(此处使用home为示例)
const char* password = "123456"; // 连接WiFi密码(此处使用12345678为示例)

void setup(void){
  Serial.begin(9600);          // 启动串口通讯
  pinMode(LED_BUILTIN, OUTPUT); //设置内置LED引脚为输出模式以便控制LED
  digitalWrite(LED_BUILTIN,1);// 改变LED的点亮或者熄灭状态
  WiFi.begin(ssid, password);  // 启动网络连接
  
  int i = 0;                                 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }
 
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  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地址
  
  esp8266_server.begin();                   //  开启web服务器
  esp8266_server.onNotFound(handleNotFound);        
  Serial.println("HTTP esp8266_server started"); //  告知用户ESP8266网络服务功能已经启动
  Serial.println("---------------------------------------");
}
 
void loop(void){
  esp8266_server.handleClient();     // 处理http服务器访问
}

// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){ 
  Serial.print("url:");
  Serial.println(esp8266_server.uri());

  Serial.print("method:");
  Serial.println(esp8266_server.method());

  Serial.print("arg count:");
  Serial.println(esp8266_server.args());

  Serial.print("request host:");
  Serial.println(esp8266_server.hostHeader());

  Serial.print("auth:");
  Serial.println(esp8266_server.authenticate("123", "456"));

  Serial.println("---------------------------------------");
  esp8266_server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数。
}

8266 web,硬件,# esp8266,网络,esp8266

使用 postman 工具发送消息

192.168.0.105/123、POST 请求、无参数、填入 authorization 账号:123 密码:456

8266 web,硬件,# esp8266,网络,esp8266

串口即收到信息。对于这个库来说,POST 请求枚举类型是 3,所以返回了method:3,auth 也验证通过。

如果用浏览器访问 192.168.0.105 也会给出相应的返回值。

3.4 获取请求类型方法和参数合集

以下函数均是 ESP8266WebServer 的实例方法

ESP8266WebServer esp8266_server(80);
esp8266_server.url(); //这样调用即可
String url();                //获取请求的url
HTTPMethod method();         //获取请求方法
String arg(String name);     //获取请求参数的值 name:根据关键字name获取请求参数的值
String arg(int i);           //i:获取第i个请求参数的值
int args();                  //获取参数个数
bool hasArg(String name);    //是否存在某个参数

//设置需要收集的请求头 headerkeys[]:请求头的名字 headerkeysCount:请求头的个数
void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);
String header(String name);  //获取请求头参数 name:请求头名称
String header(int i);        //i:获取第i个请求头参数
String headerName(int i);    //获取请求头名字 i:获取第i个请求头名字
int headers();               //获取请求头个数
bool hasHeader(String name); //判断是否存在某个请求头
String hostHeader();         //获取请求头Host的值
bool authenticate(const char * username, const char * password);    //认证校验

四、响应客户端请求

4.1 响应案例

在 2.2 的点灯案例中,我们编写了 handleLED 函数。在这里我们使用了 sendHeader 和 send 两个客户端响应类函数。

其功能是设置响应头,并且设置为 303 状态码提示浏览器进行刷新。

void handleLED(){
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
  esp8266_server.sendHeader("Location","/");
  esp8266_server.send(303);
}

4.2 响应客户端方法和参数合集

以下函数均是 ESP8266WebServer 的实例方法文章来源地址https://www.toymoban.com/news/detail-761734.html

ESP8266WebServer esp8266_server(80);
esp8266_server.esp8266_server.send(200); //这样调用即可
//设置响应头
//name: 响应头名
//value: 响应头值
//first: 是否需要放在第一行
void sendHeader(const String& name, const String& value, bool first = false);

//设置响应体长度
void setContentLength(const size_t contentLength);

//发送响应内容
void sendContent(const String& content);

//发送响应数据
void send(int code, const char* content_type = NULL, const String& content = String(""));
void send(int code, char* content_type, const String& content);
void send(int code, const String& content_type, const String& content);

到了这里,关于ESP8266 ArduinoIDE 搭建web服务器与客户端开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32通过ESP8266连接MQTT服务器

            ESP8266有多种连接MQTT方式,本文介绍使用的是AT MQTT版本固件的ESP01s,基于此固件版本进行说明。本文所需硬件:STM32F103RCT6、LED、ESP01s、DHT11,实现功能:温湿度上传和远程开关灯的基本功能。 B站视频教程:STM32+ESP8266+DHT11_哔哩哔哩_bilibili gitee: STM32_Share: STM32、DHT

    2024年02月09日
    浏览(51)
  • ESP8266入门教程11:连接MQTT服务器

    将第三方库PubSubClient下载到lib文件夹 git clone https://github.com/knolleary/pubsubclient.git 1、打开阿里云IOT官网,登录阿里云账号 https://iot.console.aliyun.com 2、创建实例 3、新建产品 4、自定义主题  5、添加设备  6、查看设备配置   1、修改PubSubClient.h头文件,否则无法连接阿里云MQTT服务

    2023年04月24日
    浏览(60)
  • ESP8266+STM32+MQTT发送数据到阿里云服务器(三、配置ESP8266模块并测试连接)

    1、固件烧录器 2、固件 3、串口工具 4、ESP866模块 5、USB转TTL模块 (以上软件工具文末分享的链接有,硬件请淘宝自行购买) 硬件如下图: 1、按照下面对照关系进行接线 USB转TTL ESP8266 3.3V 3V3 GND GND RX TX TX RX IO0 GND 2、打开固件烧录工具图标 3、点击“ OK ” 4、在出现的界面中,

    2024年03月23日
    浏览(52)
  • 使用esp32+micropython+microdot搭建web(http+websocket)服务器(超详细)第一部分

    microdot文档速查 什么是Microdot?Microdot是一个可以在micropython中搭建物联网web服务器的框架 micropyton文档api速查 Quick reference for the ESP32 演示视频链接 视频中我们简单的实现了 使用esp32搭建web服务器 实现get请求 上传网页到服务器 手机打开网址访问该网页 服务器处理请求,实现开

    2024年02月08日
    浏览(53)
  • ESP8266调用NTP服务器进行时间校准

    NTP是网络时间协议(Network Time Protocol,简称NTP),是一种用于同步计算机时间的协议。NTP服务器指的是提供NTP服务的计算机或设备。NTP服务器的主要功能是保证网络上的所有设备的时间同步,以确保各个设备相互之间的时间协调一致。NTP服务器通常连接到具有高度精确时间源

    2024年02月08日
    浏览(43)
  • 提供最全面最详细的ESP32从零开始搭建一个物联网平台教程(从最基本的配网和内建WEB服务器开始到自已搭建一个MQTT服务器)

    目录 教程大纲  硬件需求 教程说明 教程章节链接 ESP32搭建WEB服务器一(AP配网) ESP32搭建WEB服务器二(STA模式) ESP32搭建WEB服务器三(AP模式与STA模式共存) ESP32搭建WEB服务器四(最简单的WEB服务器) ESP32搭建WEB服务器五(内嵌HTML) ESP32搭建WEB服务器六(利用SPIFFS存放html,css,js等文件(读取

    2024年02月13日
    浏览(65)
  • STM32通过esp8266连接WiFi接入MQTT服务器

    上文我们讲到如何搭建本地MQTT服务器http://t.csdn.cn/aHNcO,现在介绍如何通过stm32连接MQTT 一.首先我们初始化esp8266这里我们使用的是USART4与其通信代码如下 二.通过数据间隔时间来判断是否是一串数据如果间隔时间大于30ms则判定为不是一串数据,接收缓冲器清零。 代码如下!

    2024年02月07日
    浏览(55)
  • 【教程】ArduinoIDE2.0之Esp8266&Esp32开发板环境安装

    最新版本信息: ArduinoIDE V2.2.1        Esp32 V2.0.14        Esp8266 V3.1.2 第一步:下载ArduinoIDE2.0,并安装它。内置中文,安装设置过程不做过多描述。下载地址:https://www.arduino.cc/en/software 第二步:下载Esp8266和Esp32开发板离线安装包,因众所周知的原因,将集成包上传至网

    2024年02月11日
    浏览(46)
  • esp8266模块--MQTT协议连接服务器实现数据接收和发送+源码

    首先推荐中国移动的代码,我觉得中国移动的代码更为合理:(但是有一些其他的模块在里面) OneNET开发板代码、资料--2020-09-27--标准板、Mini板bug修复 - 开发板专区 - OneNET设备云论坛 (10086.cn) 以及这位b站up做的视频:(wifi模块在p9节) 【挽救小白第一季】STM32+8266+小程序智能

    2024年02月08日
    浏览(63)
  • ESP8266-01 MQTT固件烧录并连接阿里云服务器

    1、烧录工具:flash_download_tool :   链接:https://pan.baidu.com/s/1jJJ07G56jNJ3SrOwstPzVA?pwd=8i93  提取码:8i93 2、串口调试助手:串口调试助手 3、阿里云配置生成工具: 链接:https://pan.baidu.com/s/13tjpFwGMeR0juS5OSEBiJQ?pwd=61me  提取码:61me 4、USB TO TTL 5、esp8266 01s 6、AT固件:下载   向esp8266烧

    2024年02月06日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包