首页 > 编程语言 >【花雕学编程】Arduino动手做(246)---使用 Web 服务器的 ESP8266 LED 控制

【花雕学编程】Arduino动手做(246)---使用 Web 服务器的 ESP8266 LED 控制

时间:2025-01-18 19:29:25浏览次数:3  
标签:动手做 Web LED ESP8266 client println GPIO Serial

在这里插入图片描述
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所需零件
在本案例中,我们将控制两个 LED。因此,我们需要以下部分:
ESP8266开发板
两个 LED
面包板
跳线

在这里插入图片描述

在这里插入图片描述

【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
实验项目之十三:使用 Web 服务器的 ESP8266 LED 控制

实验开源代码

/*
  【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
   实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
   实验项目之十三:使用 Web 服务器的 ESP8266 LED 控制
*/

#include <ESP8266WiFi.h> // 包含ESP8266WiFi库,用于WiFi连接
#include <ESP8266WebServer.h> // 包含ESP8266WebServer库,用于创建Web服务器

#define output2  2
#define output0  0

// 定义AP模式的SSID和密码
const char* ssid = "ESP8266_AP"; // 这是ESP8266将广播的SSID
const char* password = "12345678"; // 密码至少应为8个字符

// 创建全局变量
String http;
String output2State = "off";
String output0State = "off";

// 定义服务端和客户端
WiFiServer server(80); // 创建一个WiFiServer对象,监听80端口
WiFiClient client; // 创建一个WiFiClient对象

void setup() {
  Serial.begin(9600); // 初始化串口通信,波特率为9600
  Serial.println(" ");
  Serial.println(" ");
  pinMode(2, OUTPUT); // 设置GPIO 2为输出模式
  pinMode(0, OUTPUT); // 设置GPIO 0为输出模式
  digitalWrite(2, LOW); // 初始化GPIO 2为低电平
  digitalWrite(0, LOW); // 初始化GPIO 0为低电平
  Serial.print("Connecting to ");
  Serial.println(ssid);

  // 创建ESP8266接入点
  WiFi.softAP(ssid, password);

  Serial.println("");
  Serial.println("WiFi AP is now running");
  Serial.println("IP address: ");
  Serial.println(WiFi.softAPIP());

  // 启动ESP8266服务器
  server.begin();
}

void loop() {
  client = server.available(); // 检查是否有新的客户端尝试连接到服务器
  if (client) {
    Serial.println("New Client.");
    String clientData = "";
    while (client.connected()) { // 等待客户端完成HTTP请求的发送
      if (client.available()) { // 如果有数据
        char c = client.read(); // 读取一个字符
        http += c; // 解析它
        Serial.write(c);
        if (c == '\n') { // 如果字符是换行符
          // 表示客户端HTTP请求结束
          if (clientData.length() == 0) { // 清空clientData
            sendResponse(); // 执行必要操作
            updateLED();
            updateWebpage();
            break;
          } else {
            clientData = ""; // 清空clientData
          }
        } else if (c != '\r') { // 如果字符不是回车符
          clientData += c; // 将字符存储到clientData变量中
        }
      }
    }
    http = "";
    client.stop(); // 断开客户端连接
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

void sendResponse() {
  // 发送HTTP响应头
  client.println("HTTP/1.1 200 OK");
  client.println("Content-type:text/html");
  client.println("Connection: close");
  client.println();
}

void updateWebpage() {
  // 发送整个HTML页面
  client.println("<!DOCTYPE html><html>");
  client.println("<head>");
  client.println("<title>LED Status</title>");
  client.println("</head>");

  client.println("<head>");
  client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
  client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
  client.println("</style></head>");

  // 网页标题
  client.println("<body><h1>ESP Web Server!</h1>");

  // 显示蓝色LED的按钮
  client.println("<p>1. GPIO 2 is " + output2State + "</p>");
  if (output2State == "off") {
    client.println("<p><a href=\"/2/on\"><button>Turn ON</button></a></p>");
  } else {
    client.println("<p><a href=\"/2/off\"><button>Turn OFF</button></a></p>");
  }

  client.print("<hr>");

  // 显示绿色LED的按钮
  client.println("<p>2. GPIO 0 is " + output0State + "</p>");
  if (output0State == "off") {
    client.println("<p><a href=\"/0/on\"><button>Turn ON</button></a></p>");
  } else {
    client.println("<p><a href=\"/0/off\"><button>Turn OFF</button></a></p>");
  }

  client.println("</body></html>");
  client.println();
}

void updateLED() {
  if (http.indexOf("GET /2/on") >= 0) {
    Serial.println("GPIO 2 LED on");
    output2State = "on";
    digitalWrite(2, HIGH);
  } else if (http.indexOf("GET /2/off") >= 0) {
    Serial.println("GPIO 2 LED off");
    output2State = "off";
    digitalWrite(2, LOW);
  } else if (http.indexOf("GET /0/on") >= 0) {
    Serial.println("GPIO 0 LED on");
    output0State = "on";
    digitalWrite(0, HIGH);
  } else if (http.indexOf("GET /0/off") >= 0) {
    Serial.println("GPIO 0 off");
    output0State = "off";
    digitalWrite(0, LOW);
  }
}

代码解读:

1、包含库:

#include <ESP8266WiFi.h>:包含ESP8266WiFi库,用于WiFi连接。

#include <ESP8266WebServer.h>:包含ESP8266WebServer库,用于创建Web服务器。

2、定义网络凭据:

const char* ssid = “ESP_AP”;:定义要广播的SSID。

const char* password = “12345678”;:定义WiFi密码,必须至少为8个字符。

3、创建全局变量:

String http;:存储HTTP请求的内容。

String output2State = “off”;:存储GPIO 2的状态。

String output0State = “off”;:存储GPIO 0的状态。

4、定义服务端和客户端:

WiFiServer server(80);:创建WiFiServer对象,监听80端口。

WiFiClient client;:创建WiFiClient对象。

5、初始化设置(setup函数):

初始化串口通信,设置波特率为9600。

设置GPIO 2和GPIO 0为输出模式,初始状态为低电平。

创建ESP32接入点。

打印接入点的IP地址。

启动ESP32服务器。

6、主循环(loop函数):

检查是否有新的客户端连接。

处理客户端请求并解析HTTP数据。

发送HTTP响应和更新网页。

断开客户端连接。

7、发送HTTP响应(sendResponse函数):

发送HTTP响应头信息。

8、更新网页内容(updateWebpage函数):

发送整个HTML页面,包括按钮和LED状态。

9、更新LED状态(updateLED函数):

根据HTTP请求更新LED状态。

实验串口返回情况

在这里插入图片描述
在手机端打开WiFi ,输入密码,连接ESP8266_AP

在这里插入图片描述
在手机端打开浏览器,输入IP地址:192.168.4.1
使用面板上的两个按钮,即可控制LED的亮灭

在这里插入图片描述
控制LED后的实验串口返回情况

在这里插入图片描述

实验场景图

在这里插入图片描述
在这里插入图片描述

标签:动手做,Web,LED,ESP8266,client,println,GPIO,Serial
From: https://blog.csdn.net/weixin_41659040/article/details/145147401

相关文章

  • 图书馆管理系统javaweb(含数据库脚本)
    图书馆管理系统javaweb(含数据库脚本),tomcat7eclipsejdk1.8包含数据库文件列表BookLibrarySystem-master/.classpath , 9020BookLibrarySystem-master/.project , 1639BookLibrarySystem-master/.settings/.jsdtscope , 499BookLibrarySystem-master/.settings/org.ec......
  • Flask Web开发实战:入门、进阶与原理解析PDF免费下载
    适读人群:本书适合了解Python基本语法,想要自己动手做网站的编程人员;熟悉Python。想要从事PythonWeb开发的后端工程师、运维工程师和爬虫工程师;香葱Django等其他PythonWeb框架转向Flask的Python工程师阅读。PythonWeb框架Flask开发团队成员撰写,内容全面,从基础知识到进阶实战,再到......
  • 集体智慧编程 : 构建智能Web 2.0应用PDF、EPUB免费下载
    适读人群:Web开发者、架构师、应用工程师电子版仅供预览,支持正版,喜欢的请购买正版书籍点击原文去下载书籍信息作者:[美]TobySegaran出版社:电子工业出版社副标题:构建智能Web2.0应用原作名:ProgrammingCollectiveIntelligence:BuildingSmartWeb2.0Applica......
  • Invicti v25.1.0 for Windows - Web 应用程序安全测试
    Invictiv25.1.0forWindows-Web应用程序安全测试Invicti(formerlyNetsparker)|WebApplicationandAPISecurityforEnterprise请访问原文链接:https://sysin.org/blog/invicti/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgInvicti是一种自动化但完全......
  • ESP8266
    XCOSnTh平台的获取如下 XCOSnTh-MCU-Lib-CSDN博客https://blog.csdn.net/stars_A_B_C/article/details/145224971?spm=1001.2014.3001.5501https://blog.csdn.net/stars_A_B_C/article/details/145224971?spm=1001.2014.3001.5501https://blog.csdn.net/stars_A_B_C/article/......
  • 工具 | webshell-decryptor
    0x00简介webshell-decryptor是一款通过获取到的webshell流量、url、key来还原攻击者使用webshell所做操作的工具。下载地址:webshell-decryptor下载:webshell-decryptor下载0x01功能说明支持冰蝎还原攻击者行为,并生成一个webshell管理界面还原历史命令、文件操作......
  • 使用libwebsocket技术总结
    一、编译libwebsocket1)需要使用Cmake工具,将根目录下CMakeLists.txt打开后,需要配置openssl库的路径2)当前libwebsocketv3.2版本需要使用opensslv1.1.x以上版本,否则ssl安全协议支持只能选择内置ssl模块,一般都选择openssl库作为ssl加密库。3)Openssl库的版本问题当前终......
  • WEBUPLOADER怎样上传文件夹
    要求:免费,开源,技术支持技术:百度webuploader,分块,切片,断点续传,秒传,MD5验证,纯JS实现,支持第三方软件集成前端:vue2,vue3,vue-cli,html5,webuploader后端:asp.net,.netmvc,.netcore,asp,jsp,java,springboot,php,数据库:MySQL,Oracle,SQLServer,达梦,人大金仓,国产数据库平......
  • webSocket拿来即用
    使用时只需将代码写入组件中,引入即可使用<template></template><script>import{mapGetters}from'vuex';exportdefault{ data(){ return{ webSocket:null,//webSocket实例 lockReconnect:false,//重连锁,避免多次重连 maxReconnect:-1,//最......
  • 锐捷路由器网关RG-NBR6135-E和锐捷交换机 Ruijie Reyee RG-ES224GC 电脑登录web方法
    2025年1月17日22:29:35最近淘了点东西,准备在家里搞一套深度学习的服务器,先把网关和交换机搞到了锐捷路由器网关RG-NBR6135-E电脑登录web方法在拿到机器的时候,如果不是全新建议拿根牙签,差入reset5-10秒,灯光会全部闪几下,重置机器,因为有些机器会配置的ip和网段无法访问默认的w......