六、利用ESP32搭建网络服务器(一)

  • 基本网络服务器
  • 服务器响应与客户端请求
  • 程序流程
    • 建立连接
    • 开启网络服务器
    • 客户端验证
  • 总结
  • 完整代码

原文链接:https://www.yourcee.com/newsinfo/2925713.html

点击图片购买

基本网络服务器

我们在使用ESP32接触网络服务器功能的时候我们先了解一下客户端与服务器在通信中的作用,以及他们各自所主要实现的功能,下面是百度查资料加上个人见解仅做参考,欢迎大佬指正

客户端:客户端我们可以理解为两者中提出需求的一方,客户端向服务端提出需要什么样的资源,这个资源可能是图片、视频、文档等等,我们理解为客户端请求

服务端:前面描述客户端的时候我们知道客户端会提出他的需求,我们这里服务端就是用来响应需求的,客户端需要图片服务端会发送一张图片给客户端,文档就发文档

如果我们没有这个资源或者因为种种原因不能发给客户端,那么这里就会有两种情况出现
一种 是客户端需要这张图片服务端正好有并且可以发给客户端,那么就可以发送过去
第二种 情况就是服务端没有这张图片或者这张图片是不能发出去的,这个时候就会出现404等错误了,这里我们理解为服务端的响应

服务器响应与客户端请求

本期我们学习的目的是使用ESP32作为服务器去响应来自客户端的请求,这里的客户端我们选择使用电脑去请求ESP32的数据,请求的数据以 “ Hello world!” 为例,较为复杂一些的图片视频之类的我们后面再慢慢接触
下面我们将以电脑作为客户端使用浏览器请求ESP32建议的数据,我们在ESP32端需要做的就是对电脑的请求作出回应

程序流程

建立连接

程序开始我们先要选择一种方式与电脑建立连接,电脑发出热点使用ESP32去连接或者ESP32发出热点用电脑去连接,当然也可以都接到路由器上,我们这里选择电脑去连接ESP32的热点,ESP32发出热点参考代码如下(关于程序串口通信部分我们这里不做说明)

  const char *AP_SSID="OnePlus 8 Pro";const char *AP_Password="122232542jxl";WiFi.softAP(wifi_SSID,wifi_Password);  //设置AP模式热点的名称和密码,密码可不填则发出的热点为无密码热点Serial.print("\n ESP32建立的wifi名称为:");Serial.print(wifi_SSID);  //串口输出ESP32建立的wifi的名称Serial.print("\nESP32建立wifi的IP地址为:");Serial.print(WiFi.softAPmacAddress());  //串口输出热点的IP地址

主要代码为WiFi.softAP(wifi_SSID,wifi_Password);,函数功能为开启ESP32的热点,其中wifi_SSIDwifi_Password分别为开启热点的名称和密码,可以自行去定义也可参考前面的文章
关于后面的Serial.print()语句均为我们需要的一些调试信息,看代码可以看出输出信息为热点名称与ESP32的IP地址
完成上面的步骤之后我们就可以通过电脑连接ESP32的热点来进行连接了,下面我们将开启网络服务器的功能

开启网络服务器

网络服务器部分是我们新接触到的内容,在本次例程中我们需要了解使用的WebServer.h库中的一些函数,也可以直接参考库文件,当然使用这个库之前我们在程序中同样要调用这个库

virtual void begin()

函数功能:启动服务器

void on(const String &uri, HTTPMethod method, THandlerFunction fn)

函数功能:当建立网络服务器之后,有客户端做出HTTP请求,用这个函数来设置对应请求的回调函数
参数 :
uri:客户端所请求的资源
method:用来设置响应客户端请求是的方法,可选方法如下
HTTP_ANY
HTTP_GET
HTTP_POST
HTTP_PUT
HTTP_PATCH
HTTP_DELETE
HTTP_OPTIONS
fn:接收的请求对应的回调函数

void onNotFound(THandlerFunction fn)

函数功能:当客户端请求的资源地址无效或者说没有的时候,这个函数会做出响应,并用该函数来设置对应的回调函数

参数:
fn:接收的请求对应的回调函数

void send(int code, char* content_type, const String& content)

函数功能:使用该函数可以向客户端发送信息

参数:
code:发送给客户端的HTTP响应状态码,可以参考HTTP协议资料中关于响应状态码部分
content_type:响应内容的类型,同样可参考HTTP协议中的定义
content:响应给客户端的内容

virtual void handleClient()

函数功能:处理客户端的请求,当该函数执行一次时会检查一次是否有客户端请求未处理并进行响应的处理

有以上几个函数我们就可以建立基础的网络服务器并进行响应了,下面我们看到写好的网络服务器部分的代码

  #include<WebServer.h>WebServer  esp32_server(80);  //声明一个 WebServer 的对象,对象的名称为 esp32_server//设置网络服务器响应HTTP请求的端口号为 80esp32_server.begin();  //启动网络服务器esp32_server.on("/HolleWorld",HTTP_GET,handleRoot);  //函数处理当有HTTP请求 "/HolleWorld" 时执行函数 handleRoot esp32_server.onNotFound(handleFound);  //当请求的网络资源不在服务器的时候,执行函数 handleFound 

上面的部分代码中#include<WebServer.h>调用库应该放在程序头部
后面函数esp32_server.begin();用于启动初始化服务器功能
函数esp32_server.on("/",HTTP_GET,handleRoot);/HolleWorld 为请求的资源,HTTP_GET为响应请求时使用的方法,这部分具体可参照HTTP协议相关资料,handleRoot为响应请求时调用的函数,也就是说当有接收到 http://ESP32IP地址/HolleWorld 这个请求时将会执行后面我们建立的函数名为handleRoot的函数
esp32_server.onNotFound(handleFound);这个函数与前面的非常类似,在客户请求的地址或者说资源没有时将执行函数handleFound

下面我们看到响应的两个函数handleRoothandleFound响应的内容

void handleRoot()  //该函数内为处理网站根目录 “/” 时所执行的内容
{esp32_server.send(200,"text/plain","Holle World!");  //用函数 send 向浏览器发送信息,200表示正常状态码,text/plain表示发送的内容为纯文本类型 text/html为HTML的网页信息,"Holle World!"为发送的内容}void handleFound()
{esp32_server.send(404,"text/plain","404:Not Found!");  //用函数 send 向浏览器发送信息,404表示服务器上找不到请求的资源,text/plain表示发送的内容为纯文本类型,"404:Not Found!"为发送的内容}

上面两个函数对不同的客户端请求做出不同的响应从而在客户端浏览器上显示不同的内容
服务器需要不停的检查是否有客户端请求并做出响应的回应,因此我们需要在loop函数中一直循环调用handleClient()函数以检查是否有客户端请求,下面为loop函数示例,较为简单

void loop() {// put your main code here, to run repeatedly:esp32_server.handleClient();
}

客户端验证

完整的源码会贴在文章末尾,有需要的可以复制也可以留言邮箱获取资料文件,学习完上面相关的之后编写程序并烧录到ESP32开发板,打开串口监视器并按下复位键,将会在串口监视器看到返回的调试信息


我们看到获取到的IP地址为192.168.4.1,ESP32默认的这个参数是这个IP,可能部分人会不一样以自己的为准,下面我们用电脑连接wifi,并在浏览器中输入 192.168.4.1/HolleWorld 打开之后我们会发现浏览器界面出现一段文字HolleWorld!,如果出现了那么我们的函数esp32_server.on("/HolleWorld",HTTP_GET,handleRoot);得到了成功调用,之后我们再输入 192.168.4.1/xxx xxx随便填,只要不是HolleWorld,观察浏览器界面是否出现404:Not Found!以验证esp32_server.onNotFound(handleFound);相关程序是否正确,请记住上传完程序之后的所有操作都需要建立在电脑已经连接到ESP32热点的前提下操作

总结

本次使用ESP32搭建基础网络服务器相较于前文关于HTTP数据类型,状态码等地方可能会有部分同学觉得比较难以理解,可以百度相关HTT协议格式进行了解之后理解起来会比较容易,需要代码资料的同学可以在下方留言邮箱,也可在下方沟通交流,大家互相学习互相进步!

完整代码

#include<WiFi.h>
#include<WebServer.h>WebServer  esp32_server(80);  //声明一个 WebServer 的对象,对象的名称为 esp32_server//设置网络服务器响应HTTP请求的端口号为 80const char *AP_SSID="OnePlus 8 Pro";
const char *AP_Password="122232542jxl";
void setup() {// put your setup code here, to run once:Serial.begin(115200);  //初始化串口通信并设置波特率为115200WiFi.softAP(AP_SSID,AP_Password);  //设置AP模式热点的名称和密码,密码可不填则发出的热点为无密码热点Serial.print("\n ESP32建立的wifi名称为:");Serial.print(AP_SSID);  //串口输出ESP32建立的wifi的名称Serial.print("\nESP32建立wifi的IP地址为:");Serial.print(WiFi.softAPIP());  //串口输出热点的IP地址esp32_server.begin();  //启动网络服务器esp32_server.on("/HolleWorld",HTTP_GET,handleRoot);  //函数处理当有HTTP请求 "/" 时执行函数 handleRoot esp32_server.onNotFound(handleFound);  //当请求的网络资源不在服务器的时候,执行函数 handleFound void loop() {// put your main code here, to run repeatedly:esp32_server.handleClient();
}void handleRoot()  //该函数内为处理网站根目录 “/” 时所执行的内容
{Serial.print("客户端访问!");esp32_server.send(200,"text/plain","Holle World!");  //用函数 send 向浏览器发送信息,200表示正常状态码,text/plain表示发送的内容为纯文本类型 text/html为HTML的网页信息,"Holle World!"为发送的内容}void handleFound()
{esp32_server.send(404,"text/plain","404:Not Found!");  //用函数 send 向浏览器发送信息,404表示服务器上找不到请求的资源,text/plain表示发送的内容为纯文本类型,"404:Not Found!"为发送的内容}

六、利用ESP32搭建网络服务器(一)相关推荐

  1. esp虚拟服务器,esp32搭建web服务器

    esp32搭建web服务器 内容精选 换一换 云解析服务支持为域名快速添加网站解析,通过该功能可以简化解析记录的配置,包含如下两种场景:网站解析至IP地址:为域名的主域名和子域名分别添加一条A类型记录 ...

  2. 利用自己的电脑设置web服务器建网站_win7系统篇,win7系统利用iis搭建web服务器实现信息浏览资源共享的操作方法...

    很多小伙伴都遇到过对win7系统利用iis搭建web服务器实现信息浏览资源共享进行设置的困惑吧,一些朋友看过网上对win7系统利用iis搭建web服务器实现信息浏览资源共享设置的零散处理方法,并没有完 ...

  3. centos下利用httpd搭建http服务器方法

    centos下利用httpd搭建http服务器方法 1. 解决的问题 在开发测试过程中,分析图片任务需要将图片保存在服务器端,通过url来访问和下载该图片,这就需要使用一台图片服务器,但常常遇到图片服 ...

  4. 如何利用ewomail搭建邮件服务器

    如何利用ewomail搭建邮件服务器 首先你应该做好如下准备 1.需要一台全新干净的服务器,就是不需要安装任何东西的服务器,mysql,apache都不要.不然会安装不成功.切记!!! 2.查看官方文 ...

  5. 基于ESP32搭建物联网服务器十三(自已搭建一个MQTT服务器)

    在之前的文章中:ESP32搭建WEB服务器十二(使用MQTT协议与ESP32互动)_你的幻境的博客-CSDN博客 我们已经实现了ESP32通过MQTT协议连接到公共MQTT服务器上,但是公共服务器在稳 ...

  6. win10系统如何配置web服务器,win10系统利用iis搭建web服务器的设置教程

    有关win10系统利用iis搭建web服务器的操作方法想必大家有所耳闻.但是能够对win10系统利用iis搭建web服务器进行实际操作的人却不多.其实解决win10系统利用iis搭建web服务器的问题 ...

  7. 利用SRS搭建直播服务器

    前言 初入公司,调研SRS搭建流媒体服务器,实现直播.点播功能,并搭建基于SRS的流媒体服务器集群. 我们知道,SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码.SRS ...

  8. 2021-9-21 esp32 micropython 网络服务器 (硬件作品)

    这篇是一个硬件作品,由于这个只做了一只如果长时间不用一些东西会忘记,如果时间太长忘的太多想配置使用的时候就会很痛苦,不用了又很浪费,所以单独开贴记录下关键部分以及用它做的一些软硬件布置. . 硬件:e ...

  9. Centos7.6利用vsftpd搭建FTP服务器详细教程

    Centos7搭建FTP服务器 目录 Centos7搭建FTP服务器 一.关闭防火墙 二.安装vsftpd并启动服务 1.安装vsftpd 2.启动服务 三.编辑配置 四.新建用户并设置密码 1.新建 ...

  10. 利用sendmail搭建邮件服务器

    人们在互联网上最常使用的就是电子邮件了,很多企业用户也经常使用免费的电子邮件系统.今天我就给大家介绍一种在Red Hat Linux 9.0环境下运行的邮件服务器软件Sendmail.Sendmail ...

最新文章

  1. windows下安装ubuntu 12.04---利用ubuntu的iso包中的wubi.exe工具安装
  2. 人脸质量评估网络推荐
  3. c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...
  4. 安卓手机指纹解锁linux电脑,【果核干货应用篇-06】使用手机指纹解锁电脑
  5. java----OO的概念和设计原则(转)
  6. 用随机数发生器射击自己的脚
  7. 用ISAPI Filter设置HttpOnly属性
  8. ubuntu 16.04 终端命令太长,换行输入方法
  9. Fission:基于 Kubernetes 的 Serverless 函数框架
  10. SQL SERVER2017 安装程序无法与下载服务器联系。无法安装机器学习服务的问题解决方式...
  11. Apache24(VC15)安装步骤
  12. 评价的等级优良差_老师问:小学考试用优良等级评价,可取吗?
  13. 《面试》游戏开发常用面试问题以及答案
  14. 服务器删除的文件不在回收站,删除的文件不在回收站如何恢复?新方法来了
  15. Cox模型中的时间依存协变量和时间依存系数(R语言)第一部分
  16. 第八章 VAR模型与脉冲响应
  17. 若依分离版部署遇到的问题
  18. Vue项目实现web端第三方分享(qq、qq空间、微博、微信)
  19. 零点起飞学java视频_零点起飞学java (刘升华) 高清PDF_IT教程网
  20. 文件的哈夫曼编码与解码

热门文章

  1. 足球相声:我现在真的火了
  2. 2021年危险化学品生产单位安全生产管理人员考试内容及危险化学品生产单位安全生产管理人员新版试题
  3. 基于Hadoop平台使用MapReduce统计某银行信用卡违约用户数量
  4. qq附近的人怎么引流?如何利用手机QQ附近功能引流
  5. 【参会指南】PPP全球数字资产投资峰会之金融科技区块链支持可持续发展
  6. 梁宁 产品30讲理解
  7. 中英文金额大写转换器
  8. 移动智能终端之国产操作系统(笔记三)
  9. 香帅的北大金融学课笔记4 -- 基金
  10. Flink 1.13(八)CDC