ESP32教程:通过WIFI控制LED灯的开关
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灯的开关的更多相关文章
- Arduino控制LED灯(开关控制)
问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...
- 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)
最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...
- STM32用寄存器实现电平翻转(一个按键控制LED灯的开关)
代码 GPIOx -> ODR ^= GPIO_Pin_x 如果加载了标准库的文件: GPIOx中的x可以为(A,B,C,D--) GPIO_Pin_x中的x可以为(1,2,3--) 如果没有加 ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- 嵌入式Linux学习入门:控制LED灯
记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...
- arduino 红外遥控器控制LED灯
/* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...
- arduino入门学习实现语音控制LED灯
需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...
- BLE 安卓APP控制LED灯的实现(转)
源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...
- enc28J60 网页控制LED灯
软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...
- 云中树莓派(4):利用声音传感器控制Led灯
云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...
随机推荐
- Apache Camel系列(2)----Hello World
下面创建一个Apache Camel的Hello World程序,该程序使用Maven,Intellij 15,运行环境是JDK 8. 1,创建一个maven工程,在pom.xml文件中添加apa ...
- 服务器安装jdk,tomcat,mysql等全系列
安装jdk 执行如下命令, 然后等待安装完成 yum install -y java-1.8.0-openjdk-devel.x86_64 安装完毕后执行如下命令查看版本 java -version安 ...
- Luogu P8112 [Cnoi2021] 符文破译 题解 [ 蓝 ] [ KMP ] [ 线性 dp ] [ 决策单调性 dp ]
符文破译:KMP + dp 的好题. 暴力 dp 不难打出一个暴力 dp:设计 \(dp_i\) 表示当前前 \(i\) 位全部完成了匹配,所需的最小分割数. 转移也是简单的,我们在 KMP 的过程中 ...
- 记一次CUDA报错
报错内容:CUDA error: device-side assert triggered 原因:使用ResNet50训练时使用了pretrained=True的模型,但实际类别数classes远超过 ...
- [SDOI2008] Sandy的卡片 题解
讲一种自认为最暴力的方法. 首先肯定还是用差分的思想,对于每一张卡片进行重新标号,在卡片串与卡片串中插入特殊字符,然后找重复了 \(n\) 次的子串. 这里我们对于每一个子串开一个大小为 \(n\) ...
- Trae初体验
前情 自从AI IDE面世以来,网络上到处流传程序员要失业了,小白也能轻松完成程序开发了,某某0基础靠AI上架了苹果应用,平时工作也有偶尔用用AI工具的我,都觉得这些都是标题党文章不予理会的,直到看到 ...
- Python - “人生苦短,我用Python”
Python中的值(数据)类型 类型 描述 说明 数字(Number) 支持 整数(int) 浮点数(float) 复数(complex) 布尔(bool) 整数(int),如:10.-10 浮点数( ...
- node几个类之间的关系
B/S 架构的应用程序,包含两个部分,客户端和服务端,在每一个http请求至响应的完成,产生了这多姿多彩的网页世界,所以,与B/S 架构的一切相关技术问题,都可以认为是一个http请求过程的详细解释: ...
- JMeter 线程重复读取在跑数据的解决方法
场景: 需要模拟 100 个账号,100个并发,循环登录登出系统:由此引起了一个问题,如果线程10比线程1提前结束,那么线程10会按 cvs 顺序读取,就有可以读取到目前还在其他线程里面的一个账号: ...
- git 合并分支 merge
git 分支开发 git 分支开发,分支(feature)同步主干(master)代码,以及最终分支合并到主干的操作流程 由于 rebase 执行速度慢,分支同步主干代码时,分支的每次提交都可能和 ...