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. docker容器内部添加字体

    1.首先在windows电脑内找到字体拷贝到linux服务器,路径 C:\Windows\Fonts,linux的路径 /usr/share/fonts 2.复制到docker容器内部 docker ...

  2. 关于DateTime的自定义转换

    关于DateTime的自定义转换.把字符串时间转换成可以供DateTime类型识别的字符串类型的粗略实现. /// <summary> /// 把从数据库中读取的字符串的CurrentTi ...

  3. 开源一款串口舵机驱动扩展板-FreakStudio多米诺系列

    原文链接: FreakStudio的博客 摘要 总线舵机扩展板通过UART接口控制多个舵机,支持堆叠级联,最多连接4个扩展板.具备小尺寸设计.供电保护.全双工转半双工通信.稳定供电等特点,适用于多舵机 ...

  4. JUC并发—11.线程池源码分析

    大纲 1.线程池的优势和JUC提供的线程池 2.ThreadPoolExecutor和Excutors创建的线程池 3.如何设计一个线程池 4.ThreadPoolExecutor线程池的执行流程 5 ...

  5. FineReport - [01] 概述

    Gartner报表平台全球市场唯一入选国产软件! 一.FineReport 是什么?有什么用途? FineReport 是一款企业级Web报表工具,由帆软自主研发,秉持零编码的理念,易学易用且功能强大 ...

  6. 花3分钟来了解一下Vue3中的插槽到底是什么玩意

    前言 插槽看着是一个比较神秘的东西,特别是作用域插槽还能让我们在父组件里面直接访问子组件里面的数据,这让插槽变得更加神秘了.其实Vue3的插槽远比你想象的简单,这篇文章我们来揭开插槽的神秘面纱. 欧阳 ...

  7. Windows 提权-PrintNightmare

    本文通过 Google 翻译 PrintNightmare – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充 ...

  8. Alibaba Sentinel SSRF漏洞分析(CVE-2021-44139)

    Alibaba Sentinel SSRF漏洞分析(CVE-2021-44139) 一.Alibaba Sentienl 简介 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel ...

  9. DCL(Double-checked Locking双重校验锁)实现单例模式的原理、问题与解决方案

    ​ 好的,要深入理解DCL(Double-Checked Locking)双重校验锁的原理.问题以及解决方法. 首先,我需要回忆一下单例模式的基本概念,因为DCL通常用于实现单例模式. 单例模式确保一 ...

  10. SpringBoot原理分析-1

    SpringBoot原理分析 作为一个javaer,和boot打交道是很常见的吧.熟悉boot的人都会知道,启动一个springboot应用,就是用鼠标点一下启动main方法,然后等着就行了.我们来看 ...