ESP32WROOM32 DEVKIT_C 物联网学习笔记(2)网络服务器

系列文章目录

ESP32WROOM32 DEVKIT_C 物联网学习笔记(1)开发板简介及开发环境-CSDN博客


目录

系列文章目录

前言

一、参考资料

二、建立基本的网络服务器

1.参考资料

2.演示

三、通过网络服务实现ESP32WROOM32开发板基本控制

1.参考资料 

 2.演示

四、 通过网络服务将开发板引脚状态显示在网页中(未完待续)

1.参考资料 

总结


前言

上篇文章中对ESP32WROOM32做了简单介绍,并完成VSCode + PlatFormIO IDE环境搭建。接下来让我们使用ESP32动手搭建一个简单的网络服务器,正式开始我们的物联网学习之旅。

一、参考资料

本文主要参考自太极创客网站

3-2 ESP8266-NodeMCU网络服务器 – 太极创客


二、建立基本的网络服务器

1.参考资料

 3-2-1 建立基本网络服务器 – 太极创客

修改后的代码如下:

/**********************************************************************
项目名称/Project          : 零基础入门学用物联网
程序名称/Program name     : 3_2_1_First_Web_Server
团队/Team                : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author              : CYNO朔
日期/Date(YYYYMMDD)     : 20191107
程序目的/Purpose          : 使用NodeMCU建立基本服务器。用户可通过浏览器使用8266的IP地址
                           访问8266所建立的基本网页(Hello from espwroom32)
-----------------------------------------------------------------------
修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
2024/7/15    王煜明                         将太极创客8266版本代码修改为通用代码
 
***********************************************************************/
#include <WiFi.h>        // 本程序使用 WiFi库
#include <WiFiMulti.h>   //  WiFiMulti库
#include <WebServer.h>   //  WebServer库
 
WiFiMulti wifiMulti;     // 建立WiFiMulti对象,对象名称是'wifiMulti'
WebServer espwroom32_server(80);// 建立WebServer对象,对象名称为espwroom32_server
                                    // 括号中的数字是网路服务器响应http请求的端口号
                                    // 网络服务器标准http端口号为80,因此这里使用80为端口号
 
void handleRoot();              //函数声明
void handleNotFound();

void setup(void){
  Serial.begin(9600);          // 启动串口通讯

  pinMode(2, OUTPUT);          //蓝色LED初始化
 
  //通过addAp函数存储  WiFi名称       WiFi密码
  wifiMulti.addAP("SSID1", "Passwora1");  // 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。
  wifiMulti.addAP("SSID2", "Password2"); // 请将SSID1、SSID2、SSID3修改为要连接的WiFi名称。
  wifiMulti.addAP("SSID3", "Password3"); // 并修改对应的Password1、Password2、Password3
                                                // 此处WiFi信息只是示例,请在使用时将需要连接的WiFi信息填入相应位置。
                                                // 另外这里只存储了3个WiFi信息,您可以存储更多的WiFi信息在此处。
 
  int i = 0;                                 
  while (wifiMulti.run() != WL_CONNECTED) {  // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
    delay(1000);                             // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
    Serial.print(i++); Serial.print(' ');    // 将会连接信号最强的那一个WiFi信号。
  }                                          // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
                                             // 此处while循环判断是否跳出循环的条件。
 
  digitalWrite(2, HIGH);                     //WiFi连接成功后蓝灯常亮

  // 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地址
  
//--------"启动网络服务功能"程序部分开始-------- //  此部分为程序为本示例程序重点1
  espwroom32_server.begin();                   //  详细讲解请参见太极创客网站《零基础入门学用物联网》
  espwroom32_server.on("/", handleRoot);       //  第3章-第2节 espwroom32-NodeMCU网络服务器-1
  espwroom32_server.onNotFound(handleNotFound);        
//--------"启动网络服务功能"程序部分结束--------
  Serial.println("HTTP espwroom32_server started");//  告知用户espwroom32网络服务功能已经启动
}
 
/* 以下函数语句为本示例程序重点3
详细讲解请参见太极创客网站《零基础入门学用物联网》
第3章-第2节 3_2_1_First_Web_Server 的说明讲解*/  
void loop(void){
  espwroom32_server.handleClient();     // 处理http服务器访问
}
 
/* 以下两个函数为本示例程序重点2
详细讲解请参见太极创客网站《零基础入门学用物联网》
第3章-第2节 3_2_1_First_Web_Server 的说明讲解*/                                                                            
void handleRoot() {   //处理网站根目录“/”的访问请求 
  espwroom32_server.send(200, "text/plain", "Hello from espwroom32");   // NodeMCU将调用此函数。
}
 
// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  espwroom32_server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数。
}

2.演示

 烧写代码后串口会输出已连接的WiFi名称和ESP32的IP地址信息:

WiFi名称和IP地址

 

首先确认你的电脑和ESP32连接在同一局域网内,然后在电脑上打开浏览器,输入上一步获取的IP地址,你的ESP32就会通过互联网来和你打招呼啦! 

Say Hello!
 

三、通过网络服务实现ESP32WROOM32开发板基本控制

1.参考资料 

3-2-2 通过网络服务实现NodeMCU开发板基本控制 – 太极创客 

修改后的代码如下 :

/**********************************************************************
项目名称/Project          : 零基础入门学用物联网
程序名称/Program name     : 3_2_2_Turning_on_and_off_an_LED
团队/Team                : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author              : CYNO朔
日期/Date(YYYYMMDD)     : 20191108
程序目的/Purpose          : 使用ESP32建立基本服务器。用户可通过浏览器使用WROOM的IP地址
                           访问WROOM所建立的基本网页并通过该页面点亮/熄灭ESP32的内置LED
-----------------------------------------------------------------------
修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
2024/7/15    王煜明                         将8266程序修改为通用程序
 
***********************************************************************/
#include <WiFi.h>        // 本程序使用 WiFi库
#include <WiFiMulti.h>   //  WiFiMulti库
#include <WebServer.h>   //  WebServer库

void handleLED();       //函数声明
void handleRoot();
void handleNotFound();
 
WiFiMulti wifiMulti;     // 建立WiFiMulti对象,对象名称是 'wifiMulti'
 
WebServer esp32wroom32_server(80);// 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)
 
void setup(void){
  Serial.begin(9600);   // 启动串口通讯
 
  pinMode(2, OUTPUT); //设置内置LED引脚为输出模式以便控制LED
  
  wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1"); // 将需要连接的一系列WiFi ID和密码输入这里
  wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); // ESP32再启动后会扫描当前网络
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); // 环境查找是否有这里列出的WiFi ID。如果有
  Serial.println("Connecting ...");                            // 则尝试使用此处存储的密码进行连接。
  
  int i = 0;                                 
  while (wifiMulti.run() != WL_CONNECTED) {  // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),ESP32将会在当前
    delay(1000);                             // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么ESP32
    Serial.print(i++); Serial.print(' ');    // 将会连接信号最强的那一个WiFi信号。
  }                                          // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
                                             // 此处while循环判断是否跳出循环的条件。
  
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());              // 通过串口监视器输出连接的WiFi名称
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());           // 通过串口监视器输出ESP32的IP
 
  esp32wroom32_server.begin();                           // 启动网站服务
  esp32wroom32_server.on("/", HTTP_GET, handleRoot);     // 设置服务器根目录即'/'的函数'handleRoot'
  esp32wroom32_server.on("/LED", HTTP_POST, handleLED);  // 设置处理LED控制请求的函数'handleLED'
  esp32wroom32_server.onNotFound(handleNotFound);        // 设置处理404情况的函数'handleNotFound'
 
  Serial.println("HTTP esp32wroom32_server started");//  告知用户ESP32网络服务功能已经启动
}
 
void loop(void){
  esp32wroom32_server.handleClient();                     // 检查http服务器访问
}
 
/*设置服务器根目录即'/'的函数'handleRoot'
  该函数的作用是每当有客户端访问ESP32服务器根目录时,
  ESP32都会向访问设备发送 HTTP 状态 200 (Ok) 这是send函数的第一个参数。
  同时ESP32还会向浏览器发送HTML代码,以下示例中send函数中第三个参数,
  也就是双引号中的内容就是ESP32发送的HTML代码。该代码可在网页中产生LED控制按钮。 
  当用户按下按钮时,浏览器将会向ESP32的/LED页面发送HTTP请求,请求方式为POST。
  ESP32接收到此请求后将会执行handleLED函数内容*/
void handleRoot() {       
  esp32wroom32_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}
 
//处理LED控制请求的函数'handleLED'
void handleLED() {                          
  digitalWrite(2,!digitalRead(2));// 改变LED的点亮或者熄灭状态
  esp32wroom32_server.sendHeader("Location","/");          // 跳转回页面根目录
  esp32wroom32_server.send(303);                           // 发送Http相应代码303 跳转  
}
 
// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){
  esp32wroom32_server.send(404, "text/plain", "404: Not found"); // 发送 HTTP 状态 404 (未找到页面) 并向浏览器发送文字 "404: Not found"
}

 2.演示

 烧写代码后查看IP地址,在电脑浏览器中输入ESP32的IP地址后打开如下网页:

网页中出现了一个“Toggle LED”按钮

 

按下按钮就可以开/关LED灯啦

 


四、 通过网络服务将开发板引脚状态显示在网页中(未完待续)

1.参考资料 

3-2-3 通过网络服务将开发板引脚状态显示在网页中 – 太极创客 


总结

使用ESP32搭建了一个简单的网页服务器,并使用网页控制开发板上的LED灯,初识物联网。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: esp32-wroom-32e_devkitc 是一款基于 ESP32-WROOM-32E 模组的开发板,它采用了开放源代码的 ESP-IDF 开发框架,支持 Wi-Fi 和蓝牙通信。中文参考手册为开发者提供了详细的技术规格和使用指南。 这份参考手册首先介绍了 ESP32-WROOM-32E 模组的硬件组成和技术规格。模组具有双核 Tensilica LX6 处理器,主频高达 240MHz,支持多种外设接口,如 GPIO、UART、SPI、I2C 等,使其具备了丰富的扩展性。此外,模组还具备 Wi-Fi 802.11 b/g/n/e/i 和蓝牙 4.2 支持。 接着,参考手册详细介绍了如何搭建开发环境和配置开发板。它详细阐述了如何下载和安装 ESP-IDF 开发框架,以及如何配置开发环境和编译项目。开发者可以按照参考手册提供的步骤来快速搭建开发环境。 在使用手册的后续部分,详细描述了开发板的各个方面。它包括如何使用 Wi-Fi 进行连接和通信,如何使用蓝牙进行数据传输,以及如何通过 GPIO 与外部设备进行交互等。此外,手册还提供了丰富的示例代码和代码解释,帮助开发者更好地理解和应用相关功能。 最后,手册还介绍了开发板的固件更新方法,以及一些建议和常见问题解答。开发者可以根据手册中提供的信息和指南来解决常见问题,也可以参考手册获取开发者社区的相关资源和支持。 综上所述,esp32-wroom-32e_devkitc 中文参考手册是一份非常详细和全面的开发指南,可以帮助开发者快速上手和开发基于 ESP32-WROOM-32E 的应用程序。 ### 回答2: esp32-wroom-32e_devkitc 中文参考手册是一个详细介绍 ESP32-WROOM-32E 开发板的使用手册。手册从硬件介绍、软件开发环境搭建、编程语言和连接方式等多个方面对开发板进行了全面讲解。 首先,手册介绍了 ESP32-WROOM-32E 开发板的硬件配置,包括板载的芯片、外设、接口等。通过详细的硬件介绍,开发者可以了解到开发板的基本构造和硬件特性,为后续的软件开发提供基础。 接着,手册详细介绍了软件开发环境的搭建过程。它包括了开发环境的安装方法、编译调试工具的配置以及对应的驱动程序等。开发者可以按照手册中的指引,快速搭建开发环境,并开始进行软件开发。 在编程方面,手册提供了多种编程语言的使用说明,包括 C 语言和 MicroPython。每种语言都有详细的语法介绍和示例代码,方便开发者快速上手。此外,手册还介绍了如何使用各种库函数和API接口,以及涉及到的常用开发工具和调试方法。 最后,手册还展示了一些常见的连接方式和示例应用,例如如何与传感器、无线通信模块和云平台进行连接,并进行数据传输和控制。这些示例可以帮助开发者理解和应用 ESP32-WROOM-32E 开发板在实际项目中的应用场景。 总之,esp32-wroom-32e_devkitc 中文参考手册对 ESP32-WROOM-32E 开发板进行了全面而详尽的介绍,包括硬件和软件开发环境,编程语言和连接方式等。对于使用这款开发板的开发者来说,手册是一份非常宝贵的参考资料,可以帮助他们快速入门和顺利开展项目开发。 ### 回答3: ESP32-WROOM-32E DevKitC是一种基于ESP32-WROOM-32E模组的开发板,它集成了丰富的功能和接口,方便开发者进行硬件和软件开发。 这份中文参考手册为使用者提供了关于开发板硬件和软件方面的详细信息和指导。首先,手册介绍了开发板的硬件组成,包括主控芯片、存储器、引脚布局等。通过详细的图表和说明,使用者可以清楚了解各个组件的功能和连接方式。 接下来,手册介绍了开发板的软件开发环境搭建,包括开发工具的安装、驱动程序的配置等。使用者可以按照手册提供的步骤,轻松地搭建好开发环境,为后续的软件开发做好准备。 手册还提供了关于开发板的软件开发方法和示例代码。使用者可以了解如何使用ESP-IDF开发框架进行开发,并按照示例代码进行实验和测试。手册中还提供了丰富的代码注释和详细的参数说明,帮助使用者理解代码逻辑和功能实现。 此外,手册还包含了开发板的测试和调试方法,以及对常见问题的解答。这些信息可以帮助使用者在开发过程中遇到问题时迅速定位和解决,提高开发效率。 总而言之,ESP32-WROOM-32E DevKitC中文参考手册为使用者提供了全面的开发指南,包含了硬件和软件方面的详细信息和指导。使用者可以通过这份手册,快速上手开发,实现自己的创意和想法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值