LED闪烁

在通过WIFI控制LED灯的开关之前,我们先实现一下LED闪烁。

接线图:

来源:https://esp32io.com/tutorials/esp32-led-blink

我的接线图:

LED长的为阳极,短的为阴极,阳极通过一个电阻与ESP32引脚连接,这里以18引脚为例,阴极连接ESP32的GND引脚。

代码:

// 定义 LED 连接的引脚
const int ledPin = 18; // GPIO 2
void setup() {
// 初始化 LED 引脚为输出
pinMode(ledPin, OUTPUT);
}
void loop() {
// 打开 LED
digitalWrite(ledPin, HIGH);
delay(1000); // 等待 1 秒
// 关闭 LED
digitalWrite(ledPin, LOW);
delay(1000); // 等待 1 秒
}

烧录运行,如果接线没错的话,效果在:https://mp.weixin.qq.com/s/tI6YlXAeGp7CvGZeuGdV5g

通过WIFI控制LED灯的开关

在实现第一个例子之后,为了挖掘一下ESP32的特性,我们就来玩一下通过WIFI控制LED灯的开关。

整个过程的时序图:

代码:

#include <WiFi.h>
#include <WebServer.h> // 定义 LED 连接的引脚
const int ledPin = 18; // GPIO 2 // WiFi 连接参数
const char* ssid = "WIFI名称";
const char* password = "WIFI密码"; // Web 服务器端口
const int serverPort = 80; // 创建 WiFi 客户端和 Web 服务器对象 WebServer server(serverPort); void setup() {
// put your setup code here, to run once:
Serial.begin(115200); // 初始化 LED 引脚为输出
pinMode(ledPin, OUTPUT); // 连接 WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP()); // 设置 Web 服务器路由
server.on("/", handleRoot);
server.on("/on", handleOn);
server.on("/off", handleOff); // 开始 Web 服务器
server.begin();
Serial.println("Web server started");
} void loop() {
// 处理 Web 服务器请求
server.handleClient();
} // 处理根路由
void handleRoot() {
String html = "<html><head><title>ESP32 LED Control</title></head><body>";
html += "<h1>ESP32 LED Control</h1>";
html += "<a href=\"/on\"><button>Turn On</button></a>";
html += "<a href=\"/off\"><button>Turn Off</button></a>";
html += "</body></html>";
server.send(200, "text/html", html);
} // 处理 LED 开启请求
void handleOn() {
digitalWrite(ledPin, HIGH);
server.send(200, "text/plain", "LED is ON");
} // 处理 LED 关闭请求
void handleOff() {
digitalWrite(ledPin, LOW);
server.send(200, "text/plain", "LED is OFF");
}

方便理解,可以看一下这个图:

烧录运行,查看串口监视器,没有看到输出的话,就按一下ESP32上的RST重启一下:

现在我们可以使用连接同一个WIFI的电脑或者手机,登录http://192.168.0.100:80/由于80是默认端口号,直接输入ip地址即可。

为了方便录制效果,我使用的是平板登录。

效果在:https://mp.weixin.qq.com/s/xMPMKkogfbtllKeyBYShXw

总结

总结一下,通过这个示例,我们可以了解到:

  • 基础 Arduino 结构: setup() 用于初始化,loop() 用于重复执行。
  • GPIO 控制: 如何使用 pinMode() 设置引脚模式,以及如何使用 digitalWrite() 控制数字输出(开关 LED)。
  • 串口通信: 如何使用 Serial 对象向电脑发送调试信息。
  • ESP32 WiFi 连接: 如何包含库、设置 SSID/密码、启动连接、检查状态并获取 IP 地址。
  • ESP32 Web 服务器: 如何包含库、创建服务器对象、设置路由(将 URL 路径映射到处理函数)、启动服务器以及在 loop() 中处理客户端请求。
  • HTTP 基础: 了解请求 (访问 URL) 和响应 (服务器发送回的内容),以及简单的 HTTP 状态码 (200 OK) 和内容类型 (text/html, text/plain)。
  • HTML 基础: 如何构建一个包含标题、链接和按钮的简单网页。
  • 回调函数 (Handlers): 函数可以作为参数传递给其他函数(如 server.on),并在特定事件发生时被调用。

ESP32教程:通过WIFI控制LED灯的开关的更多相关文章

  1. Arduino控制LED灯(开关控制)

    问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...

  2. 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)

    最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...

  3. STM32用寄存器实现电平翻转(一个按键控制LED灯的开关)

    代码 GPIOx -> ODR ^= GPIO_Pin_x 如果加载了标准库的文件: GPIOx中的x可以为(A,B,C,D--) GPIO_Pin_x中的x可以为(1,2,3--) 如果没有加 ...

  4. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  5. 嵌入式Linux学习入门:控制LED灯

    记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...

  6. arduino 红外遥控器控制LED灯

    /* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...

  7. arduino入门学习实现语音控制LED灯

    需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...

  8. BLE 安卓APP控制LED灯的实现(转)

    源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...

  9. enc28J60 网页控制LED灯

    软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...

  10. 云中树莓派(4):利用声音传感器控制Led灯

    云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...

随机推荐

  1. mybatis之生命周期及作用域

    SqlSessionFactoryBuilder 一旦创建了SqlSessionFactory之后就没有作用了 局部变量 SqlSessionFactory 可以理解为数据库的连接池 SqlSessi ...

  2. mysql之我的第一个jdbc程序

    package com.yeyue.lesson01; import java.sql.*; public class jdbcFirstDemo { public static void main( ...

  3. Blazor开发框架KnownPro-创建新项目

    摘要 本文主要介绍如何使用Known专业版创建新项目. 操作步骤 登录Known专业版VIP会员管理系统. 进入首页,点击[创建项目]按钮. 弹出创建项目对话框,填写项目ID.名称和数据库类型(默认S ...

  4. 如何在ubuntu[linux] 上用docker安装Sqlserver

    本次按照目前最新版本Sqlserver2022进行记录 先决条件 任何受支持的 Linux 发行版上的 Docker 引擎 1.8 及更高版本. 有关详细信息,请参阅 Install Docker(安 ...

  5. CUDA时长统计

    技术背景 前面的一篇文章中介绍了在CUDA中使用宏来监测CUDA C函数或者Kernel函数的运行报错问题.同样的思路,我们可用写一个用于统计函数运行时长的宏,这样不需要使用额外的工具来对函数体的性能 ...

  6. opencv实现像素统计的示例代码

    在 OpenCV 中,统计图像的像素信息(如像素值分布.最大值.最小值.均值等)是常见的操作.以下是一些常用的方法和函数,用于统计图像的像素信息: 统计像素值的基本信息 最大值.最小值.均值.标准差: ...

  7. FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战 🚀

    title: FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战 date: 2025/3/10 updated: 2025/3/10 author: cmdragon excerpt: ...

  8. git push解决 error src refspec master does not match anyerror

    前言 git push origin master git push 时报错: error: src refspec master does not match anyerror: failed to ...

  9. 解决nvm ls-remote 列表只出现iojs版本

    前言 在 nvm 安装 node 时发现显示不存在此版本,使用 nvm ls-remote 查看可安装列表时发现,列表中只有 iojs $ nvm ls-remote iojs-v1.0.0 iojs ...

  10. Grafana导入 json 文件的 dashboard 错误 Templating Failed to upgrade legacy queries Datasource xxx not found

    前言 编辑或者修改后的 dashboard 保存为 json 文件,在其他环境导入使用,报错 Failed to upgrade legacy queries Datasource xxxxxxx w ...