ESP32 基本入门
成套工具
包装清单
ESP32 简介
首次接触 ESP32?从这里开始!ESP32 是 Espressif 开发的一系列低成本、低功耗片上系统 (SoC) 微控制器,包括 Wi-Fi 和蓝牙无线功能以及双核处理器。如果您熟悉 ESP8266,那么 ESP32 就是它的继任者,配备了许多新功能。ESP32 规格
如果您想了解更多技术性和具体信息,可以查看以下 ESP32 的详细规格(来源: http://esp32.net/)—更多详细信息, 检查数据表):
- 无线连接 WiFi:HT150.0 数据速率为 40 Mbps
- 蓝牙:BLE(低功耗蓝牙)和经典蓝牙
- 处理器:Tensilica Xtensa 双核 32 位 LX6 微处理器,运行频率为 160 或 240 MHz
- 记忆:
- ROM:448 KB(用于启动和核心功能)
- SRAM:520 KB(用于数据和指令)
- RTC fas SRAM:8 KB(用于从深度睡眠模式启动 RTC 期间的数据存储和主 CPU)
- RTC 慢速 SRAM:8KB(用于深度睡眠模式下的协处理器访问) eFuse:1 Kbit(其中 256 位用于系统(MAC 地址和芯片配置),其余 768 位保留用于客户应用程序,包括 Flash 加密和芯片 ID)
嵌入式闪存:通过 ESP16-D17WD 和 ESP0-PICO-D1 上的 IO32、IO2、SD_CMD、SD_CLK、SD_DATA_32 和 SD_DATA_4 内部连接的闪存。
- 0 MiB(ESP32-D0WDQ6、ESP32-D0WD 和 ESP32-S0WD 芯片)
- 2 MiB(ESP32-D2WD 芯片)
- 4 MiB(ESP32-PICO-D4 SiP 模块)
低功耗:确保您仍然可以使用 ADC 转换,例如amp在深度睡眠期间。
外围输入/输出:
- 带 DMA 的外设接口,包括电容式触摸
- ADC(模数转换器)
- DAC(数模转换器)
- I²C(内部集成电路)
- UART(通用异步接收器/发送器)
- SPI(串行外设接口)
- I²S(集成芯片间声音)
- RMII(精简媒体独立接口)
- PWM(脉冲宽度调制)
安全: AES 和 SSL/TLS 的硬件加速器
ESP32 开发板
ESP32 指的是裸 ESP32 芯片。但是,“ESP32”一词也用于指代 ESP32 开发板。使用 ESP32 裸片并不容易,也不实用,尤其是在学习、测试和原型设计时。大多数情况下,您会希望使用 ESP32 开发板。
我们将使用 ESP32 DEVKIT V1 开发板作为参考。下图展示了 ESP32 DEVKIT V1 开发板,该版本有 30 个 GPIO 引脚。规格 – ESP32 DEVKIT V1
下表概述了 ESP32 DEVKIT V1 DOIT 板的功能和规格:
核心数 | 2 (双核) |
无线上网 | 2.4 GHz 高达 150 Mbits/s |
蓝牙 | BLE(低功耗蓝牙)和传统蓝牙 |
建筑学 | 32 位 |
时钟频率 | 高达 240 MHz |
内存 | 512 千字节 |
别针 | 30(根据型号而定) |
外设 | 电容式触摸、ADC(模拟数字转换器)、DAC(数字模拟转换器)、I12C(集成电路内部)、UART(通用异步接收器/发送器)、CAN 2.0(控制器局域网络)、SPI(串行外设接口)、I12S(集成电路内部 声音)、RMII(精简媒体独立接口)、PWM(脉冲宽度调制)等。 |
内置按钮 | RESET 和 BOOT 按钮 |
内置 LED | 内置蓝色 LED 连接至 GPIO2;内置红色 LED 显示开发板正在通电 |
USB转UART 桥 |
CP2102 |
它配备了一个 microUSB 接口,您可以使用它将开发板连接到您的计算机以上传代码或供电。
它使用 CP2102 芯片(USB 转 UART)通过串行接口的 COM 端口与您的计算机通信。另一种流行的芯片是 CH340。检查您的主板上的 USB 转 UART 芯片转换器是什么,因为您需要安装所需的驱动程序,以便您的计算机可以与主板通信(本指南后面将详细介绍此内容)。
该板还配有一个 RESET 按钮(可能标有 EN)用于重启板,以及一个 BOOT 按钮用于将板置于闪烁模式(可用于接收代码)。请注意,有些板可能没有 BOOT 按钮。
它还带有一个内置蓝色 LED,内部连接到 GPIO 2。此 LED 可用于调试以提供某种视觉物理输出。还有一个红色 LED,当您为电路板供电时会亮起。ESP32 引脚分布
ESP32 外设包括:
- 18 个模数转换器 (ADC) 通道
- 3 SPI接口
- 3个UART接口
- 2 个 I2C 接口
- 16个PWM输出通道
- 2 个数模转换器 (DAC)
- 2 个 I2S 接口
- 10 个电容感应 GPIO
ADC(模拟数字转换器)和 DAC(数字模拟转换器)功能已分配给特定的静态引脚。但是,您可以决定哪些引脚是 UART、I2C、SPI、PWM 等 - 您只需要在代码中分配它们即可。这得益于 ESP32 芯片的多路复用功能。
虽然您可以在软件上定义引脚属性,但默认情况下会分配引脚,如下图所示此外,有些引脚具有特定功能,因此它们适合或不适合特定项目。下表显示了哪些引脚最适合用作输入、输出,以及哪些引脚需要谨慎使用。
以绿色突出显示的引脚可以使用。以黄色突出显示的引脚可以使用,但您需要注意,因为它们可能在启动时出现意外行为。以红色突出显示的引脚不建议用作输入或输出。
通用输入输出 | 输入 | 输出 | 笔记 |
0 | 拉起来 | OK | 启动时输出PWM信号,必须为低电平才能进入闪烁模式 |
1 | TX 引脚 | OK | 启动时调试输出 |
2 | OK | OK | 连接到板载 LED,必须保持悬空或低电平才能进入闪烁模式 |
3 | OK | 接收引脚 | 启动时为高电平 |
4 | OK | OK | |
5 | OK | OK | 启动时输出PWM信号,Strapping引脚 |
12 | OK | OK | 如果拉高,启动会失败,捆扎针 |
13 | OK | OK | |
14 | OK | OK | 开机输出PWM信号 |
15 | OK | OK | 启动时输出PWM信号,Strapping引脚 |
16 | OK | OK | |
17 | OK | OK | |
18 | OK | OK | |
19 | OK | OK | |
21 | OK | OK | |
22 | OK | OK | |
23 | OK | OK | |
25 | OK | OK | |
26 | OK | OK | |
27 | OK | OK | |
32 | OK | OK | |
33 | OK | OK | |
34 | OK | 仅输入 | |
35 | OK | 仅输入 | |
36 | OK | 仅输入 | |
39 | OK | 仅输入 |
继续阅读以了解有关 ESP32 GPIO 及其功能的更详细和深入的分析。
仅输入引脚
GPIO 34 至 39 是 GPI – 仅输入引脚。这些引脚没有内部上拉或下拉电阻。它们不能用作输出,因此只能将这些引脚用作输入:
- 通用输入输出口 34
- 通用输入输出口 35
- 通用输入输出口 36
- 通用输入输出口 39
ESP-WROOM-32 上集成的 SPI 闪存
某些 ESP6 开发板会暴露 GPIO 11 至 GPIO 32。但是,这些引脚连接到 ESP-WROOM-32 芯片上的集成 SPI 闪存,不建议用于其他用途。因此,请勿在您的项目中使用这些引脚:
- 通用输入输出接口 6 (SCK/CLK)
- 通用输入输出接口 7(SDO/SD0)
- 通用输入输出 8(SDI/SD1)
- 通用输入输出 9 (SHD/SD2)
- 通用输入输出 10(SWP/SD3)
- GPIO 11(CSC/CMD)
电容式触摸 GPIO
ESP32 有 10 个内部电容式触摸传感器。它们可以感知任何带电荷物体的变化,例如人体皮肤。因此,它们可以检测到用手指触摸 GPIO 时引起的变化。这些引脚可以轻松集成到电容式触摸板上并取代机械按钮。电容式触摸引脚还可用于将 ESP32 从深度睡眠中唤醒。这些内部触摸传感器连接到以下 GPIO:
- T0(通用输入输出 4)
- T1(通用输入输出 0)
- T2(通用输入输出 2)
- T3(通用输入输出 15)
- T4(通用输入输出 13)
- T5(通用输入输出 12)
- T6(通用输入输出 14)
- T7(通用输入输出 27)
- T8(通用输入输出 33)
- T9(通用输入输出 32)
模数转换器(ADC)
ESP32 有 18 x 12 位 ADC 输入通道(而 ESP8266 只有 1x 10 位 ADC)。以下是可用作 ADC 的 GPIO 和相应的通道:
- ADC1_CH0(GPIO 36)
- ADC1_CH1(GPIO 37)
- ADC1_CH2(GPIO 38)
- ADC1_CH3(GPIO 39)
- ADC1_CH4(GPIO 32)
- ADC1_CH5(GPIO 33)
- ADC1_CH6(GPIO 34)
- ADC1_CH7(GPIO 35)
- ADC2_CH0(GPIO 4)
- ADC2_CH1(GPIO 0)
- ADC2_CH2(GPIO 2)
- ADC2_CH3(GPIO 15)
- ADC2_CH4(GPIO 13)
- ADC2_CH5(GPIO 12)
- ADC2_CH6(GPIO 14)
- ADC2_CH7(GPIO 27)
- ADC2_CH8(GPIO 25)
- ADC2_CH9(GPIO 26)
笔记: 使用 Wi-Fi 时无法使用 ADC2 引脚。因此,如果您使用 Wi-Fi 并且无法从 ADC2 GPIO 获取值,您可以考虑改用 ADC1 GPIO。这应该可以解决您的问题。
ADC 输入通道具有 12 位分辨率。这意味着您可以获得从 0 到 4095 的模拟读数,其中 0 对应于 0V,4095 对应于 3.3V。您还可以根据代码和 ADC 范围设置通道的分辨率。
ESP32 ADC 引脚没有线性行为。您可能无法区分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引脚时需要记住这一点。您将获得类似于下图所示的行为。数模转换器 (DAC)
ESP2 上有 8 x 32 位 DAC 通道,用于将数字信号转换为模拟音量tage 信号输出。这些是 DAC 通道:
- DAC1(GPIO25)
- DAC2(GPIO26)
RTC GPIO
ESP32 支持 RTC GPIO。当 ESP32 处于深度睡眠状态时,可以使用路由到 RTC 低功耗子系统的 GPIO。当超低功耗
电源 (ULP) 协处理器正在运行。以下 GPIO 可用作外部唤醒源。
- RTC_GPIO0 (GPIO36)
- RTC_GPIO3 (GPIO39)
- RTC_GPIO4 (GPIO34)
- RTC_GPIO5 (GPIO35)
- RTC_GPIO6 (GPIO25)
- RTC_GPIO7 (GPIO26)
- RTC_GPIO8 (GPIO33)
- RTC_GPIO9 (GPIO32)
- RTC_GPIO10 (GPIO4)
- RTC_GPIO11 (GPIO0)
- RTC_GPIO12 (GPIO2)
- RTC_GPIO13 (GPIO15)
- RTC_GPIO14 (GPIO13)
- RTC_GPIO15 (GPIO12)
- RTC_GPIO16 (GPIO14)
- RTC_GPIO17 (GPIO27)
脉宽调制
ESP32 LED PWM 控制器有 16 个独立通道,可配置为生成具有不同属性的 PWM 信号。所有可用作输出的引脚均可用作 PWM 引脚(GPIO 34 至 39 无法生成 PWM)。
要设置PWM信号,需要在代码中定义这些参数:
- 信号的频率;
- 占空比;
- PWM通道;
- 您想要输出信号的 GPIO。
I2C
ESP32 有两个 I2C 通道,任何引脚都可以设置为 SDA 或 SCL。将 ESP32 与 Arduino IDE 一起使用时,默认的 I2C 引脚为:
- 通用输入输出接口 21 (SDA)
- 通用输入输出接口 22 (SCL)
如果在使用wire库的时候想要使用其他引脚,只需要调用:
电线.开始(SDA,SCL);
串行外设接口
默认情况下,SPI 的引脚映射为:
串行外设接口 | 摩西 | 味噌 | 时钟 | CS |
VSPI | 通用输入输出口 23 | 通用输入输出口 19 | 通用输入输出口 18 | 通用输入输出口 5 |
高压异戊二烯 | 通用输入输出口 13 | 通用输入输出口 12 | 通用输入输出口 14 | 通用输入输出口 15 |
中断
所有 GPIO 均可配置为中断。
捆扎销
ESP32 芯片具有以下捆绑引脚:
- GPIO 0(必须为低电平才能进入启动模式)
- GPIO 2(启动时必须悬空或处于低电平)
- 通用输入输出口 4
- GPIO 5(启动时必须为高电平)
- GPIO 12(启动时必须处于低电平)
- GPIO 15(启动时必须为高电平)
这些用于将 ESP32 置于引导加载程序或闪存模式。在大多数带有内置 USB/串行的开发板上,您无需担心这些引脚的状态。开发板会将引脚置于闪存或引导模式的正确状态。有关 ESP32 引导模式选择的更多信息,请参见此处。
但是,如果您将外围设备连接到这些引脚,则在尝试上传新代码、使用新固件刷新 ESP32 或重置电路板时可能会遇到麻烦。如果您将一些外围设备连接到捆绑引脚,并且您在上传代码或刷新 ESP32 时遇到麻烦,则可能是因为这些外围设备阻止了 ESP32 进入正确的模式。阅读启动模式选择文档以指导您正确的方向。重置、刷新或启动后,这些引脚将按预期工作。
启动时引脚为高电平
一些 GPIO 在启动或重置时将其状态更改为 HIGH 或输出 PWM 信号。
这意味着如果您将输出连接到这些 GPIO,则当 ESP32 重置或启动时可能会得到意外的结果。
- 通用输入输出口 1
- 通用输入输出口 3
- 通用输入输出口 5
- GPIO 6 至 GPIO 11(连接到 ESP32 集成 SPI 闪存 - 不建议使用)。
- 通用输入输出口 14
- 通用输入输出口 15
启用(EN)
启用 (EN) 是 3.3V 稳压器的启用引脚。它被拉高,因此连接到地线以禁用 3.3V 稳压器。这意味着您可以使用连接到按钮的此引脚来重启 ESP32,例如amp勒。
GPIO 电流消耗
根据 ESP40 数据表中的“推荐操作条件”部分,每个 GPIO 的绝对最大电流为 32mA。
ESP32 内置霍尔效应传感器
ESP32 还具有内置霍尔效应传感器,可检测周围磁场的变化
ESP32 Arduino IDE
Arduino IDE 有一个插件,可让您使用 Arduino IDE 及其编程语言对 ESP32 进行编程。在本教程中,我们将向您展示如何在 Arduino IDE 中安装 ESP32 开发板,无论您使用的是 Windows、Mac OS X 还是 Linux。
先决条件:已安装 Arduino IDE
在开始此安装程序之前,您需要在计算机上安装 Arduino IDE。您可以安装两个版本的 Arduino IDE:版本 1 和版本 2。
您可以通过点击以下链接下载并安装 Arduino IDE: arduino.cc/en/Main/软件
我们推荐哪个 Arduino IDE 版本?目前,有一些 plugins 对于 ESP32(如 SPIFFS File系统上传器插件)目前在 Arduino 2 上尚不支持。因此,如果您打算在将来使用 SPIFFS 插件,我们建议您安装旧版本 1.8.X。您只需在 Arduino 软件页面上向下滚动即可找到它。
在 Arduino IDE 中安装 ESP32 附加组件
要在 Arduino IDE 中安装 ESP32 开发板,请按照以下说明操作:
- 在 Arduino IDE 中,转到 File>首选项
- 在“其他董事会经理 URLs”字段:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
然后,单击“确定”按钮:笔记: 如果你已经拥有 ESP8266 开发板 URL,你可以分开 URLs 以逗号分隔,如下所示:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json,
http://arduino.esp8266.com/stable/package_esp8266com_index.json
打开主板管理器。转到工具 > 主板 > 主板管理器…搜索 ESP32 并按下“Espressif Systems 的 ESP32”的安装按钮:
就这样。几秒钟后它就安装好了。
上传测试代码
将 ESP32 开发板插入计算机。打开 Arduino IDE,按照以下步骤操作:
- 在 Tools > Board 菜单中选择你的开发板(在我的情况下是 ESP32 DEV Module)
- 选择端口(如果您在 Arduino IDE 中看不到 COM 端口,则需要安装 CP210x USB 至 UART 桥接 VCP 驱动程序):
- 打开以下示例amp勒昂德 File > 前任amples > 无线网络
(ESP32)> WiFi扫描 - 您的 Arduino IDE 中将打开一个新草图:
- 按下 Arduino IDE 中的上传按钮。等待几秒钟,代码将编译并上传到您的主板。
- 如果一切按预期进行,您应该会看到“上传完成。”消息。
- 以波特率 115200 打开 Arduino IDE 串行监视器:
- 按下 ESP32 板载启用按钮,您应该会看到 ESP32 附近可用的网络:
故障排除
如果您尝试将新草图上传到 ESP32,并收到此错误消息“发生致命错误:无法连接到 ESP32:超时...正在连接...”。 这意味着您的 ESP32 未处于闪烁/上传模式。
选择正确的主板名称和 COM 端口后,请按照以下步骤操作:
按住 ESP32 板上的“BOOT”按钮
- 按下 Arduino IDE 中的“上传”按钮来上传您的草图:
- 在 Arduino IDE 中看到“正在连接....”消息后,松开“BOOT”按钮:
- 此后,您应该会看到“上传完成”消息
就是这样。您的 ESP32 应该正在运行新草图。按“ENABLE”按钮重新启动 ESP32 并运行新上传的草图。
每次您想要上传新的草图时,您还必须重复该按钮序列。
项目 1 ESP32 输入 输出
在本入门指南中,您将学习如何使用带有 Arduino IDE 的 ESP32 读取数字输入(如按钮开关)以及如何控制数字输出(如 LED)。
先决条件
我们将使用 Arduino IDE 对 ESP32 进行编程。因此,在继续操作之前,请确保已安装 ESP32 开发板插件:
- 在 Arduino IDE 中安装 ESP32 附加组件
ESP32 控制数字输出
首先,您需要将要控制的 GPIO 设置为 OUTPUT。使用 pinMode() 函数如下:
pinMode(GPIO,输出);
要控制数字输出,您只需要使用 digitalWrite() 函数,该函数接受您所引用的 GPIO(int 号)和状态(HIGH 或 LOW)作为参数。
数字写入(GPIO,状态);
除 GPIO 6 至 11(连接到集成 SPI 闪存)和 GPIO 34、35、36 和 39(仅输入 GPIO)外,所有 GPIO 均可用作输出;
了解有关 ESP32 GPIO 的更多信息:ESP32 GPIO 参考指南
ESP32 读取数字输入
首先,使用 pinMode() 函数将您想要读取的 GPIO 设置为 INPUT,如下所示:
pinMode(GPIO,输入);
要读取数字输入(例如按钮),您可以使用 digitalRead() 函数,该函数接受您所指的 GPIO(int 号)作为参数。
数字读取(GPIO);
除 GPIO 32 至 6(连接到集成 SPI 闪存)外,所有 ESP11 GPIO 均可用作输入。
了解有关 ESP32 GPIO 的更多信息:ESP32 GPIO 参考指南
项目前ample
为了向您展示如何使用数字输入和数字输出,我们将构建一个简单的项目示例ample 带有一个按钮和一个 LED。我们将读取按钮的状态并相应地点亮 LED,如下图所示。
所需零件
以下是构建电路所需零件的列表:
- ESP32 开发套件 V1
- 5 毫米 LED
- 220 欧姆电阻
- 按钮
- 10k 欧姆电阻
- 面包板
- 跳线
示意图
在继续之前,您需要组装一个带有 LED 和按钮的电路。
我们将 LED 连接到 GPIO 5,将按钮连接到 GPIO 4.代码
在 arduino IDE 中打开代码 Project_1_ESP32_Inputs_Outputs.ino守则如何运作
在以下两行中,您可以创建变量来分配引脚:
按钮连接到 GPIO 4,LED 连接到 GPIO 5。当使用带有 ESP32 的 Arduino IDE 时,4 对应 GPIO 4,5 对应 GPIO 5。
接下来,创建一个变量来保存按钮状态。默认情况下,它是 0(未按下)。
int按钮状态=0;
在 setup() 中,将按钮初始化为 INPUT,将 LED 初始化为 OUTPUT。
为此,您可以使用 pinMode() 函数来接受您所引用的引脚和模式:INPUT 或 OUTPUT。
pinMode(按钮引脚,输入);
pinMode(ledPin,输出);
在 loop() 中,您可以读取按钮状态并相应地设置 LED。
在下一行中,您读取按钮状态并将其保存在 buttonState 变量中。
正如我们之前看到的,您使用 digitalRead() 函数。
按钮状态=数字读取(按钮引脚);
以下 if 语句检查按钮状态是否为 HIGH。如果是,则使用 digitalWrite() 函数打开 LED,该函数接受 ledPin 和 HIGH 状态作为参数。
如果 (按钮状态 == 高)如果按钮状态不是 HIGH,则将 LED 设置为关闭。只需将 LOW 设置为 digitalWrite() 函数中的第二个参数即可。
上传代码
单击上传按钮之前,请转到工具>主板,然后选择主板:DOIT ESP32 DEVKIT V1 主板。
转到“工具”>“端口”,选择 ESP32 所连接的 COM 端口。然后,按下上传按钮并等待“上传完成”消息。注意:如果你在调试窗口中看到很多点(正在连接…__…__),并且出现“无法连接到 ESP32:等待数据包头超时”消息,则意味着你需要在出现这些点之后按下 ESP32 板载 BOOT 按钮
开始出现。故障排除
示范
上传代码后,测试电路。按下按钮时,LED 应亮起:释放时关闭:
项目 2 ESP32 模拟输入
该项目展示了如何使用 Arduino IDE 通过 ESP32 读取模拟输入。
模拟读数对于读取可变电阻器(如电位器)或模拟传感器的值很有用。
模拟输入(ADC)
使用 ESP32 读取模拟值意味着你可以测量不同的音量tag0 V 至 3.3 V 之间的电平。
卷tag然后将测量值赋给 0 至 4095 之间的一个值,其中 0 V 对应 0,3.3 V 对应 4095。任何体积tage 介于 0 V 和 3.3 V 之间时,将赋予其间的相应值。ADC 是非线性的
理想情况下,使用 ESP32 ADC 引脚时,您会期望出现线性行为。
然而,这并没有发生。您将得到如下图所示的行为:这种行为意味着您的 ESP32 无法区分 3.3 V 和 3.2 V。
您将获得相同的价值tages:4095。
对于非常低的波动率,也会发生同样的事情tage 值:对于 0 V 和 0.1 V,您将得到相同的值:0。使用 ESP32 ADC 引脚时需要记住这一点。
analogRead() 函数
使用 Arduino IDE 读取 ESP32 的模拟输入就像使用 analogRead() 函数一样简单。它接受要读取的 GPIO 作为参数:
模拟读取(GPIO);
DEVKIT V15board(具有 1 个 GPIO 的版本)中只有 30 个可用。
找到 ESP32 开发板的引脚分布并找到 ADC 引脚。下图中,这些引脚以红色边框突出显示。这些模拟输入引脚具有 12 位分辨率。这意味着当您读取模拟输入时,其范围可能从 0 到 4095 不等。
注意:使用 Wi-Fi 时不能使用 ADC2 引脚。因此,如果您使用 Wi-Fi 并且无法从 ADC2 GPIO 获取值,您可以考虑改用 ADC1 GPIO,这应该可以解决您的问题。
为了了解一切是如何联系在一起的,我们将做一个简单的例子amp从电位器读取模拟值。
所需零件
对于这个前任amp那么,你需要以下部分:
- ESP32 DEVKIT V1 开发板
- 电位器
- 面包板
- 跳线
原理图
将电位器连接到您的 ESP32。电位器中间引脚应连接到 GPIO 4。您可以使用以下原理图作为参考。代码
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可以跳至下一步。)
在 Arduino IDE 中安装 ESP32 附加组件
在 arduino IDE 中打开代码 Project_2_ESP32_Inputs_Outputs.ino此代码只是从电位器读取值并在串行监视器中打印这些值。
在代码中,首先定义电位器所连接的 GPIO。在本例中amp例如,GPIO 4。在setup()中,初始化串行通信,波特率为115200。
在 loop() 中,使用 analogRead() 函数从 potPin 读取模拟输入。
最后,在串行监视器中打印从电位器读取的值。
将提供的代码上传到您的 ESP32。确保您在工具菜单中选择了正确的主板和 COM 端口。
测试 Example
上传代码并按下 ESP32 重置按钮后,以 115200 的波特率打开串行监视器。旋转电位器并查看值的变化。您将获得的最大值是 4095,最小值是 0。
总结
在本文中,您学习了如何使用 ESP32 和 Arduino IDE 读取模拟输入。总结:
- ESP32 DEVKIT V1 DOIT 板(30 针版本)有 15 个 ADC 针,可用于读取模拟输入。
- 这些引脚的分辨率为 12 位,这意味着您可以获得从 0 到 4095 的值。
- 要读取 Arduino IDE 中的值,只需使用 analogRead() 函数。
- ESP32 ADC 引脚没有线性行为。您可能无法区分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引脚时需要记住这一点。
项目 3 ESP32 PWM(模拟输出)
在本教程中,我们将向您展示如何使用 Arduino IDE 通过 ESP32 生成 PWM 信号。作为示例amp我们将构建一个简单的电路,使用 ESP32 的 LED PWM 控制器来调暗 LED。ESP32 LED PWM 控制器
ESP32 有一个 LED PWM 控制器,该控制器有 16 个独立通道,可以配置为生成具有不同属性的 PWM 信号。
以下是使用 Arduino IDE 通过 PWM 调暗 LED 所需遵循的步骤:
- 首先,你需要选择一个PWM通道。从16到0共有15个通道。
- 然后,您需要设置 PWM 信号频率。对于 LED,使用 5000 Hz 的频率即可。
- 您还需要设置信号的占空比分辨率:分辨率范围为 1 到 16 位。我们将使用 8 位分辨率,这意味着您可以使用 0 到 255 之间的值来控制 LED 亮度。
- 接下来,您需要指定信号将出现在哪个或哪些 GPIO 上。为此,您将使用以下函数:
ledcAttachPin(GPIO,通道)
此函数接受两个参数。第一个是将输出信号的 GPIO,第二个是将生成信号的通道。 - 最后,要使用 PWM 控制 LED 亮度,请使用以下函数:
ledcWrite(通道,占空比)
该函数接受生成 PWM 信号的通道和占空比作为参数。
所需零件
要遵循本教程,您需要以下部分:
- ESP32 DEVKIT V1 开发板
- 5毫米LED
- 220 欧姆电阻
- 面包板
- 跳线
原理图
按照以下示意图将 LED 连接到 ESP32。LED 应连接到 GPIO 4.笔记: 您可以使用任何您想要的引脚,只要它可以用作输出即可。所有可以用作输出的引脚都可以用作 PWM 引脚。有关 ESP32 GPIO 的更多信息,请阅读:ESP32 引脚分配参考:您应该使用哪些 GPIO 引脚?
代码
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可以跳至下一步。)
在 Arduino IDE 中安装 ESP32 附加组件
在 arduino IDE 中打开代码 Project_3_ESP32_PWM.ino首先定义 LED 所连接的引脚。在本例中,LED 连接到 GPIO 4。
然后,设置 PWM 信号属性。定义频率为 5000 Hz,选择通道 0 来生成信号,并设置分辨率为 8 位。您可以选择其他属性(不同于这些属性)来生成不同的 PWM 信号。
在 setup() 中,您需要使用 ledcSetup() 函数配置 LED PWM,该函数接受 ledChannel、频率和分辨率作为参数,如下所示:
接下来,您需要选择要从中获取信号的 GPIO。为此,请使用 ledcAttachPin() 函数,该函数接受要从中获取信号的 GPIO 以及生成信号的通道作为参数。在此示例中amp这样,我们就可以在 ledPin GPIO 中获取信号了,它对应 GPIO 4。产生信号的通道是 ledChannel,它对应通道 0。
在循环中,您将改变 0 到 255 之间的占空比以增加 LED 亮度。
然后,在 255 和 0 之间降低亮度。
要设置 LED 的亮度,您只需使用 ledcWrite() 函数,该函数接受生成信号的通道和占空比作为参数。
由于我们使用的是 8 位分辨率,因此占空比将使用 0 到 255 之间的值进行控制。请注意,在 ledcWrite() 函数中,我们使用生成信号的通道,而不是 GPIO。
测试 Example
将代码上传到您的 ESP32。确保您选择了正确的电路板和 COM 端口。查看您的电路。您应该有一个可以增加和减少亮度的调光 LED。
项目 4 ESP32 PIR 运动传感器
该项目展示了如何使用 PIR 运动传感器通过 ESP32 检测运动。当检测到运动时,蜂鸣器会发出警报,当在预设时间内(例如 4 秒)未检测到运动时,蜂鸣器会停止警报
HC-SR501 运动传感器的工作原理
.HC-SR501传感器的工作原理是基于运动物体上红外辐射的变化。要被HC-SR501传感器检测到,物体必须满足两个要求:
- 该物体正在发射红外线。
- 物体正在移动或摇晃
所以:
如果物体发射红外线但没有移动(例如,一个人静止不动),则传感器无法检测到它。
如果物体正在移动但不发射红外线(例如机器人或车辆),则传感器无法检测到它。
计时器简介
在此例中amp我们还将介绍计时器。我们希望 LED 在检测到运动后保持亮起预定的秒数。我们应该使用计时器,而不是使用会阻止您的代码并且不允许您在确定的秒数内执行任何其他操作的 delay() 函数。delay() 函数
您应该熟悉 delay() 函数,因为它被广泛使用。此函数使用起来非常简单。它接受单个 int 数字作为参数。
这个数字表示程序必须等待才能转到下一行代码的时间(以毫秒为单位)。当您执行 delay(1000) 时,您的程序在该行停止 1 秒。
delay() 是一个阻塞函数。阻塞函数会阻止程序执行任何其他操作,直到特定任务完成为止。如果您需要同时执行多个任务,则不能使用 delay()。
对于大多数项目,您应该避免使用延迟,而应使用计时器。
millis() 函数
使用名为 millis() 的函数,您可以返回自程序首次启动以来经过的毫秒数。为什么这个函数很有用?因为通过使用一些数学运算,您可以轻松验证已经过了多长时间,而不会阻塞您的代码。
所需零件
要学习本教程,您需要以下部分
- ESP32 DEVKIT V1 开发板
- PIR 运动传感器(HC-SR501)
- 有源蜂鸣器
- 跳线
- 面包板
原理图笔记: 工作卷tagHC-SR501 的 e 为 5V。使用 Vin 引脚为其供电。
代码
在继续本教程之前,您应该在 Arduino IDE 中安装 ESP32 插件。如果尚未安装,请按照以下教程之一在 Arduino IDE 上安装 ESP32。(如果您已经完成此步骤,则可以跳到下一步。)
在 Arduino IDE 中安装 ESP32 附加组件
在 arduino IDE 中打开代码 Project_4_ESP32_PIR_Motion_Sensor.ino。
示范
将代码上传到您的 ESP32 开发板。请确保您选择了正确的开发板和 COM 端口。上传代码参考步骤。
以 115200 的波特率打开串行监视器。将手移到 PIR 传感器前面。蜂鸣器应打开,并在串行监视器中打印消息“检测到运动!蜂鸣器警报”。
4 秒后蜂鸣器应关闭。
项目 5 ESP32 交换机 Web 服务器
在这个项目中,你将创建一个独立的 web 服务器配有 ESP32,可使用 Arduino IDE 编程环境控制输出(两个 LED)。 web 服务器对移动设备响应迅速,可以使用本地网络上的任何浏览器访问。我们将向您展示如何创建 web 服务器以及代码如何一步步工作。
项目结束view
在直接进入项目之前,重要的是概述我们的 web 服务器就可以了,这样后面的步骤就比较容易了。
- 这 web 您将构建的服务器控制连接到 ESP32 GPIO 26 和 GPIO 27 的两个 LED;
- 您可以访问 ESP32 web 通过在本地网络的浏览器上输入 ESP32 的 IP 地址来访问服务器;
- 点击您 web 服务器您可以立即改变每个 LED 的状态。
所需零件
对于本教程,您需要以下部分:
- ESP32 DEVKIT V1 开发板
- 2x 5毫米 LED
- 2x 200 欧姆电阻
- 面包板
- 跳线
原理图
首先构建电路。将两个 LED 连接到 ESP32,如下面的示意图所示 - 一个 LED 连接到 GPIO 26,另一个连接到 GPIO 27。
笔记: 我们使用的是 32 针 ESP36 DEVKIT DOIT 开发板。组装电路之前,请务必检查所用开发板的引脚排列。代码
这里我们提供创建 ESP32 的代码 web 服务器。打开代码 Project_5_ESP32_Switch _Web_Server.ino 在 arduino IDE 中,但不要上传。您需要进行一些更改才能使其为您工作。
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可以跳至下一步。)
在 Arduino IDE 中安装 ESP32 附加组件
设置您的网络凭证
您需要使用网络凭据修改以下几行:SSID 和密码。代码中已对需要进行更改的位置进行了很好的注释。上传代码
现在,您可以上传代码和 web 服务器将立即工作。
按照以下步骤将代码上传到 ESP32:
- 将您的 ESP32 开发板插入计算机;
- 在 Arduino IDE 中的工具>开发板中选择您的开发板(在我们的例子中,我们使用 ESP32 DEVKIT DOIT 开发板);
- 在工具 > 端口中选择 COM 端口。
- 按下 Arduino IDE 中的上传按钮,等待几秒钟,代码将编译并上传到您的主板。
- 等待“上传完成”消息。
查找 ESP IP 地址
上传代码后,以 115200 的波特率打开串行监视器。按下 ESP32 EN 按钮(重置)。ESP32 连接到 Wi-Fi,并在串行监视器上输出 ESP IP 地址。复制该 IP 地址,因为您需要它来访问 ESP32 web 服务器。
访问 Web 服务器
要访问 web 服务器,打开浏览器,粘贴 ESP32 的 IP 地址,您将看到以下页面。
笔记: 您的浏览器和 ESP32 应该连接到同一个 LAN。如果您查看串行监视器,您可以看到后台发生的情况。ESP 从新客户端(在本例中为浏览器)接收 HTTP 请求。
您还可以查看有关 HTTP 请求的其他信息。
示范
现在你可以测试你的 web 服务器正常运行。单击按钮来控制 LED。同时,您可以查看串行监视器以查看后台正在发生的事情。例如amp例如,当您点击按钮打开 GPIO 26 时,ESP32 会在 /26/on 上收到请求 URL.
当 ESP32 收到该请求时,它会打开连接到 GPIO 26 的 LED,并在 web 页。
GPIO 27 的按钮工作方式类似。测试它是否正常工作。
守则如何运作
在本节中我们将仔细研究代码以了解其工作原理。
您需要做的第一件事是包含 WiFi 库。如前所述,您需要在双引号内的以下几行中插入您的 ssid 和密码。
然后你设置你的 web 服务器至端口 80。
以下行创建一个变量来存储 HTTP 请求的标头:
接下来,创建辅助变量来存储输出的当前状态。如果要添加更多输出并保存其状态,则需要创建更多变量。
您还需要为每个输出分配一个 GPIO。这里我们使用 GPIO 26 和 GPIO 27。您可以使用任何其他合适的 GPIO。
设置()
现在,让我们进入setup()。首先,我们以115200的波特率启动串行通信以进行调试。您还可以将 GPIO 定义为 OUTPUT 并将其设置为 LOW。
以下行使用 WiFi.begin(ssid, password) 开始 Wi-Fi 连接,等待连接成功并在串行监视器中打印 ESP IP 地址。
环形()
在 loop() 中,我们编程当新客户端与 web 服务器。
ESP32 始终使用以下行监听传入的客户端:当收到来自客户端的请求时,我们将保存传入的数据。只要客户端保持连接,后面的 while 循环就会运行。除非您确切知道自己在做什么,否则我们不建议更改代码的以下部分。
下一部分 if 和 else 语句检查你的 web 页面,并相应地控制输出。正如我们之前所见,我们在不同的 URL取决于所按下的按钮。
例如amp例如,如果你按下 GPIO 26 ON 按钮,ESP32 会在 /26/ON 上收到请求 URL (我们可以在串行监视器上的 HTTP 标头上看到该信息)。因此,我们可以检查标头是否包含表达式 GET /26/on。如果包含,我们将 output26state 变量更改为 ON,ESP32 将打开 LED。
其他按钮也类似。因此,如果您想添加更多输出,则应修改此部分代码以包含它们。
显示 HTML web 页
接下来你需要做的是创建 web 页面。ESP32 将向您的浏览器发送响应,其中包含一些 HTML 代码,以构建 web 页。
这 web 页面使用这个表达 client.println() 发送到客户端。您应该输入要发送到客户端的内容作为参数。
我们应该发送的第一件事始终是下面这一行,这表明我们正在发送 HTML。然后,下面这行代码使 web 页面响应任何 web 瀏覽器。
下面的代码用于阻止对图标的请求。——您不需要担心这一行。
造型 Web 页
接下来,我们用一些 CSS 文本来设置按钮的样式, web 页面外观。
我们选择Helvetica字体,将要显示的内容定义为块并居中对齐。我们给按钮设置了 #4CAF50 颜色的样式,没有边框,文字为白色,内边距为:16px 40px。我们还将文本修饰设置为无,定义字体大小、边距,并将光标设置为指针。
我们还定义了第二个按钮的样式,该样式具有我们之前定义的按钮的所有属性,但颜色不同。这将是关闭按钮的样式。
设置 Web 页面首页标题
在下一行中,你可以设置你的 web 页面。这里有“ESP32 Web 服务器”,但您可以将此文本更改为您喜欢的任何内容。显示按钮和相应状态
然后,你写一段代码来显示 GPIO 26 的当前状态。如你所见,我们使用 output26State 变量,这样当此变量发生变化时,状态就会立即更新。然后,我们根据 GPIO 的当前状态显示开启或关闭按钮。如果 GPIO 的当前状态为关闭,则显示开启按钮,如果不是,则显示关闭按钮。
我们对 GPIO 27 使用相同的程序。
关闭连接
最后,当响应结束时,我们清除标题变量,并使用 client.stop() 停止与客户端的连接。
总结
在本教程中,我们向你展示了如何构建 web 使用 ESP32 的服务器。我们向你展示了一个简单的示例ample 控制两个 LED,但其想法是用继电器或任何其他想要控制的输出来替换那些 LED。
项目 6 RGB LED Web 服务器
在这个项目中,我们将向你展示如何使用 ESP32 开发板远程控制 RGB LED web 带有颜色选择器的服务器。
项目结束view
在开始之前,让我们看看这个项目是如何运作的:
- ESP32 web 服务器显示颜色选择器。
- 当你选择颜色时,浏览器会发出请求 URL 包含所选颜色的 R、G 和 B 参数。
- 您的 ESP32 接收请求并拆分每个颜色参数的值。
- 然后,它将具有相应值的 PWM 信号发送到控制 RGB LED 的 GPIO。
RGB LED 如何工作?
在共阴极 RGB LED 中,所有三个 LED 共用一个负极连接(阴极)。套件中包含的所有内容都是共阴极 RGB。如何创造不同的颜色?
当然,使用 RGB LED,您可以产生红光、绿光和蓝光,并且通过配置每个 LED 的强度,您还可以产生其他颜色。
例如amp例如,要产生纯蓝光,您需要将蓝色 LED 设置为最高强度,将绿色和红色 LED 设置为最低强度。要产生白光,您需要将所有三个 LED 设置为最高强度。
混合颜色
要产生其他颜色,您可以将三种颜色以不同的强度组合起来。要调整每个 LED 的强度,您可以使用 PWM 信号。
由于 LED 彼此非常接近,因此我们的眼睛看到的是颜色组合的结果,而不是单独的三种颜色。
要了解如何组合颜色,请看下表。
这是最简单的颜色混合图表,但可以让您了解其工作原理以及如何产生不同的颜色。所需零件
对于此项目,您需要以下部分:
- ESP32 DEVKIT V1 开发板
- RGB LED
- 3x 220 欧姆电阻
- 跳线
- 面包板
原理图代码
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可以跳至下一步。)
- 在 Arduino IDE 中安装 ESP32 附加组件
组装电路后,打开代码
项目_6_RGB_LED_Webarduino IDE 中的 _Server.ino。
在上传代码之前,请不要忘记插入您的网络凭证,以便 ESP 可以连接到您的本地网络。代码如何工作
ESP32 草图使用 WiFi.h 库。以下行定义字符串变量来保存来自请求的 R、G 和 B 参数。
接下来的四个变量用于稍后解码 HTTP 请求。
为控制条带 R、G 和 B 参数的 GPIO 创建三个变量。在本例中,我们使用 GPIO 13、GPIO 12 和 GPIO 14。
这些GPIO需要输出PWM信号,所以我们需要先配置PWM属性。将PWM信号频率设置为5000 Hz。然后,为每种颜色关联一个PWM通道
最后,将 PWM 通道的分辨率设置为 8 位
在setup()中,将PWM属性分配给PWM通道
将 PWM 通道连接到相应的 GPIO
以下代码部分显示颜色选择器 web 页面并根据您选择的颜色提出请求。
当您选择颜色时,您会收到以下格式的请求。
因此,我们需要拆分此字符串以获取 R、G 和 B 参数。这些参数保存在 redString、greenString 和 blueString 变量中,值可以在 0 到 255 之间。要使用 ESP32 控制灯带,请使用 ledcWrite() 函数生成 PWM 信号,该信号的值是从 HTTP 解码的 要求。
笔记: 了解有关使用 ESP32 的 PWM 的更多信息:项目 3 ESP32 PWM(模拟输出)
要使用 ESP8266 控制灯带,我们只需要使用
analogWrite() 函数使用从 HTPP 请求解码的值生成 PWM 信号。
模拟写入(redPin,redString.toInt());
模拟写入(greenPin,greenString.toInt());
analogWrite(bluePin,blueString.toInt())
因为我们获取字符串变量中的值,所以我们需要使用 toInt() 方法将它们转换为整数。
示范
插入您的网络凭证后,选择正确的主板和COM端口,并将代码上传到您的ESP32。上传代码参考步骤。
上传后,以 115200 的波特率打开串行监视器,然后按下 ESP 启用/重置按钮。您应该会获得板的 IP 地址。打开浏览器并输入 ESP IP 地址。现在,使用颜色选择器为 RGB LED 选择颜色。
然后,您需要按“更改颜色”按钮才能使颜色生效。要关闭 RGB LED,请选择黑色。
最强的颜色(位于颜色选择器的顶部)是能够产生更好效果的颜色。
项目 7 ESP32 中继 Web 服务器
使用带有 ESP32 的继电器是远程控制交流家用电器的好方法。本教程介绍如何使用 ESP32 控制继电器模块。
我们将了解继电器模块的工作原理,如何将继电器连接到 ESP32 并构建 web 服务器远程控制继电器。
介绍中继
继电器是一种电动开关,与任何其他开关一样,它可以打开或关闭,让电流通过或不通过。它可以用低电压控制tages,就像 ESP3.3 GPIO 提供的 32V 一样,允许我们控制高音量tag比如 12V、24V 或主电压tage(欧洲为230V,美国为120V)。左侧有两组三个插座,用于连接高压tages,以及右侧的引脚(低电压tage) 连接到 ESP32 GPIO。
电源音量tag电子连接上图所示的继电器模块有两个连接器,每个连接器有三个插座:公共 (COM)、常闭 (NC) 和常开 (NO)。
- COM:连接要控制的电流(主电压tage)。
- NC(常闭):当您希望继电器默认关闭时,使用常闭配置。NC 是 COM 引脚连接的,这意味着除非您从 ESP32 向继电器模块发送信号以打开电路并停止电流流动,否则电流会流动。
- NO(常开):常开配置的工作方式相反:NO 和 COM 引脚之间没有连接,因此电路断开,除非您从 ESP32 发送信号来关闭电路。
控制销低挥发性tag一侧有一组四个引脚和一组三个引脚。第一组由 VCC 和 GND 组成,用于为模块供电,输入 1 (IN1) 和输入 2 (IN2) 分别用于控制底部和顶部继电器。
如果您的继电器模块只有一个通道,那么您就只有一个 IN 引脚。如果您有四个通道,那么您就拥有四个 IN 引脚,依此类推。
您发送到 IN 引脚的信号决定继电器是否处于活动状态。当输入低于约 2V 时,继电器被触发。这意味着您将遇到以下情况:
- 常闭配置(NC):
- 高信号 – 电流流动
- 低信号 – 电流不流动
- 常开配置 (NO):
- 高信号 – 没有电流流动
- 低信号 – 电流流动
当电流大多数时间流动,而您只想偶尔停止它时,您应该使用常闭配置。
当您希望电流偶尔流动时,请使用常开配置(例如ample,打开 alamp 偶尔)。
电源选择第二组引脚由GND、VCC、JD-VCC引脚组成。
JD-VCC 引脚为继电器的电磁铁供电。请注意,模块有一个连接 VCC 和 JD-VCC 引脚的跳线帽;此处显示的是黄色,但您的颜色可能不同。
戴上跳线帽后,VCC 和 JD-VCC 引脚相连。这意味着继电器电磁铁直接由 ESP32 电源引脚供电,因此继电器模块和 ESP32 电路彼此之间没有物理隔离。
如果没有跳线帽,则需要提供独立的电源,通过 JD-VCC 引脚为继电器的电磁铁供电。该配置通过模块的内置光耦合器将继电器与 ESP32 物理隔离,从而防止在出现电尖峰时损坏 ESP32。
原理图警告: 使用高容量tag电源可能会造成严重伤害。
因此,使用 5 毫米 LED 代替高供电电压tag实验中的灯泡。如果你不熟悉主电压tage 询问可以帮你解决的人。在对 ESP 进行编程或接线时,请确保所有设备都已从主电源断开tage.安装 ESP32 库
为了构建这个 web 服务器,我们使用 ESPAsyncWeb服务器库和 AsyncTCP 库。
安装 ESPAsyncWeb服务器库
按照以下步骤安装 ESPA同步Web服务器 图书馆:
- 点击此处下载ESPAsyncWeb服务器库。你应该有
下载文件夹中的 .zip 文件夹 - 解压 .zip 文件夹,你应该得到 ESPAsyncWeb服务器主文件夹
- 从 ESPAsync 重命名文件夹Web服务器主控到 ESPAsyncWeb服务器
- 移动 ESPAsyncWeb将服务器文件夹复制到 Arduino IDE 安装库文件夹
或者,在 Arduino IDE 中,你可以转到 Sketch > Include
库 > 添加 .ZIP 库...并选择您刚刚下载的库。
为 ESP32 安装 AsyncTCP 库
这 ESPA同步Web服务器 图书馆需要 异步TCP 图书馆工作。关注
安装该库的下一步:
- 单击此处下载 AsyncTCP 库。您的下载文件夹中应该有一个 .zip 文件夹
- 解压 .zip 文件夹,你应该得到 AsyncTCP-master 文件夹
1. 将文件夹从 AsyncTCP-master 重命名为 AsyncTCP
3. 将 AsyncTCP 文件夹移动到 Arduino IDE 安装库文件夹
4.最后,重新打开你的Arduino IDE
或者,在 Arduino IDE 中,你可以转到 Sketch > Include
库 > 添加 .ZIP 库...并选择您刚刚下载的库。
代码
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可以跳至下一步。)
在 Arduino IDE 中安装 ESP32 附加组件
安装所需的库后,打开代码Project_7_ESP32_Relay_Webarduino IDE 中的 _Server.ino。
在上传代码之前,请不要忘记插入您的网络凭证,以便 ESP 可以连接到您的本地网络。示范
进行必要的修改后,将代码上传到你的ESP32。上传代码参考步骤。
打开串口监视器,波特率为 115200,按下 ESP32 EN 按钮获取其 IP 地址。然后,在本地网络中打开浏览器,输入 ESP32 IP 地址即可访问 web 服务器。
打开串口监视器,波特率为 115200,按下 ESP32 EN 按钮获取其 IP 地址。然后,在本地网络中打开浏览器,输入 ESP32 IP 地址即可访问 web 服务器。笔记: 您的浏览器和 ESP32 应该连接到同一个 LAN。
您应该获得如下所示的内容,其中按钮的数量与您在代码中定义的继电器数量相同。现在,您可以使用按钮通过智能手机来控制继电器。
项目_8_输出_状态_同步_ Web_服务器
该项目展示了如何使用 web 服务器和物理按钮同时进行。输出状态在 web 页面是否通过物理按钮更改或 web 服务器。
项目结束view
让我们快速了解一下该项目的工作原理。ESP32 或 ESP8266 托管 web 允许您控制输出状态的服务器;
- 当前输出状态显示在 web 服务器;
- ESP 还连接到控制相同输出的物理按钮;
- 如果你使用物理按钮改变输出状态,其当前状态也会在 web 服务器。
总之,这个项目允许你使用 web 服务器和按钮同时运行。每当输出状态发生变化时, web 服务器已更新。
所需零件
以下是构建电路所需零件的列表:
- ESP32 DEVKIT V1 开发板
- 5 毫米 LED
- 220欧姆电阻
- 按钮
- 10k 欧姆电阻
- 面包板
- 跳线
原理图安装 ESP32 库
为了构建这个 web 服务器,我们使用 ESPAsyncWeb服务器库和 AsyncTCP 库。(如果您已经完成此步骤,则可以跳至下一步。)
安装 ESPAsyncWeb服务器库
按照以下步骤安装 ESPAsyncWeb服务器库:
- 点击此处下载ESPAsyncWeb服务器库。你应该有
下载文件夹中的 .zip 文件夹 - 解压 .zip 文件夹,你应该得到 ESPAsyncWeb服务器主文件夹
- 从 ESPAsync 重命名文件夹Web服务器主控到 ESPAsyncWeb服务器
- 移动 ESPAsyncWeb将服务器文件夹复制到 Arduino IDE 安装库文件夹
或者,在 Arduino IDE 中,你可以转到 Sketch > Include
库 > 添加 .ZIP 库...并选择您刚刚下载的库。
为 ESP32 安装 AsyncTCP 库
ESPAsyncWeb服务器库需要 AsyncTCP 库才能工作。请按照以下步骤安装该库:
- 单击此处下载 AsyncTCP 库。您的下载文件夹中应该有一个 .zip 文件夹
- 解压 .zip 文件夹,你应该得到 AsyncTCP-master 文件夹
- 将文件夹从 AsyncTCP-master 重命名为 AsyncTCP
- 将 AsyncTCP 文件夹移动到 Arduino IDE 安装库文件夹
- 最后,重新打开你的 Arduino IDE
或者,在 Arduino IDE 中,你可以转到 Sketch > Include
库 > 添加 .ZIP 库...并选择您刚刚下载的库。
代码
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可以跳至下一步。)
在 Arduino IDE 中安装 ESP32 附加组件
安装所需的库后,打开代码
项目_8_输出_状态_同步_Webarduino IDE 中的 _Server.ino。
在上传代码之前,请不要忘记插入您的网络凭证,以便 ESP 可以连接到您的本地网络。
守则如何运作
按钮状态和输出状态
ledState 变量保存 LED 输出状态。默认情况下,当 web 服务器启动时,它处于 LOW 状态。
buttonState 和 lastButtonState 用于检测按钮是否被按下。按钮 (web 服务器)
我们没有在 index_html 变量中包含用于创建按钮的 HTML。
这是因为我们希望能够根据当前 LED 状态来改变它,并且可以通过按钮来改变它。
因此,我们为按钮 %BUTTONPLACEHOLDER% 创建了一个占位符,它将被替换为 HTML 文本,以便稍后在代码中创建按钮(这是在 process() 函数中完成的)。处理器()
process() 函数将 HTML 文本上的任何占位符替换为实际值。首先,它检查 HTML 文本是否包含任何
占位符 %BUTTONPLACEHOLDER%。然后,调用 outputState() 函数返回当前输出状态。我们将其保存在 outputStateValue 变量中。
之后,使用该值创建 HTML 文本以显示具有正确状态的按钮:
HTTP GET 请求更改输出状态 (JavaScript)
当你按下按钮时,toggleCheckbox() 函数被调用。此函数将对不同的 URLs 打开或关闭 LED。要打开 LED,它会在 /update?state=1 上发出请求 URL:
否则,它会在 /update?state=0 上发出请求 URL.
HTTP GET 请求更新状态 (JavaScript)
为了保持输出状态更新 web 服务器,我们调用以下函数,在 /state 上发出新请求 URL 每一秒。处理请求
然后,我们需要处理当 ESP32 或 ESP8266 收到这些请求时发生的情况 URLs.
当根 /URL,我们发送 HTML 页面以及处理器。以下几行检查您是否收到了 /update?state=1 或 /update?state=0 上的请求 URL 并相应地改变ledState。
当 /state 收到请求时 URL,我们发送当前输出状态:
环形()
在 loop() 中,我们对按钮进行去抖动,并根据 ledState 的值打开或关闭 LED 多变的。示范
将代码上传到你的ESP32板。上传代码参考步骤。
然后,以 115200 的波特率打开串行监视器。按下板载 EN/RST 按钮获取 IP 地址。在本地网络上打开浏览器,然后输入 ESP IP 地址。您应该可以访问 web 服务器如下图所示。
笔记: 您的浏览器和 ESP32 应该连接到同一个 LAN。您可以切换 web 服务器打开 LED。
您还可以使用物理按钮控制同一个 LED。其状态将始终在 web 服务器。
项目 9 ESP32 DHT11 Web 服务器
在这个项目中,你将学习如何构建异步 ESP32 web 带有 DHT11 的服务器,使用 Arduino IDE 显示温度和湿度。
先决条件
这 web 我们将构建的服务器会自动更新读数,而无需刷新 web 页。
通过这个项目你将学到:
- 如何从DHT传感器读取温度和湿度;
- 构建一个异步 web 服务器使用 ESPA同步Web服务器库;
- 自动更新传感器读数,无需刷新 web 页。
异步 Web 服务器
为了建立 web 我们将使用服务器 ESPA同步Web服务器库 提供了一种构建异步的简单方法 web 服务器。构建异步 web 服务器有几个优势tag如库 GitHub 页面中所述,例如:
- “同时处理多个连接”;
- “当您发送响应时,您就可以立即准备处理其他连接,而服务器则负责在后台发送响应”;
- “简单的模板处理引擎来处理模板”;
所需零件
要完成本教程,您需要以下部分:
- ESP32 开发板
- DHT11 模块
- 面包板
- 跳线
原理图安装库
您需要为该项目安装几个库:
- 这 双氢睾酮 和 Adafruit 统一传感器 从 DHT 传感器读取的驱动程序库。
- ESPA同步Web服务器 和 异步 TCP 构建异步的库 web 服务器。
按照接下来的说明安装这些库:
安装DHT传感器库
要使用 Arduino IDE 读取 DHT 传感器,您需要安装 DHT 传感器库. 按照以下步骤安装该库。
- 单击此处下载 DHT 传感器库。您的下载文件夹中应该有一个 .zip 文件夹
- 解压 .zip 文件夹,你应该得到 DHT-sensor-library-master 文件夹
- 将文件夹从 DHT-sensor-library-master 重命名为 DHT_sensor
- 将 DHT_sensor 文件夹移动到 Arduino IDE 安装库文件夹
- 最后,重新打开你的 Arduino IDE
安装 Adafruit 统一传感器驱动程序
您还需要安装 Adafruit 统一传感器驱动程序库 与 DHT 传感器配合使用。按照以下步骤安装库。
- 单击此处下载 Adafruit Unified Sensor 库。您的下载文件夹中应该有一个 .zip 文件夹
- 解压 .zip 文件夹,你应该得到 Adafruit_sensor-master 文件夹
- 将您的文件夹从 Adafruit_sensor-master 重命名为 Adafruit_sensor
- 将 Adafruit_sensor 文件夹移动到 Arduino IDE 安装库文件夹
- 最后,重新打开你的 Arduino IDE
安装 ESPAsyncWeb服务器库
按照以下步骤安装 ESPA同步Web服务器 图书馆:
- 点击此处下载ESPAsyncWeb服务器库。你应该有
下载文件夹中的 .zip 文件夹 - 解压 .zip 文件夹,你应该
获取 ESPAsyncWeb服务器主文件夹 - 从 ESPAsync 重命名文件夹Web服务器主控到 ESPAsyncWeb服务器
- 移动 ESPAsyncWeb将服务器文件夹复制到 Arduino IDE 安装库文件夹
为 ESP32 安装异步 TCP 库
这 ESPA同步Web服务器 图书馆需要 异步TCP 库才能正常工作。请按照以下步骤安装该库:
- 单击此处下载 AsyncTCP 库。您的下载文件夹中应该有一个 .zip 文件夹
- 解压 .zip 文件夹,你应该得到 AsyncTCP-master 文件夹
- 将文件夹从 AsyncTCP-master 重命名为 AsyncTCP
- 将 AsyncTCP 文件夹移动到 Arduino IDE 安装库文件夹
- 最后,重新打开你的 Arduino IDE
代码
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可以跳至下一步。)
在 Arduino IDE 中安装 ESP32 附加组件
安装所需的库后,打开代码
项目_9_ESP32_DHT11_Webarduino IDE 中的 _Server.ino。
在上传代码之前,请不要忘记插入您的网络凭证,以便 ESP 可以连接到您的本地网络。守则如何运作
在以下段落中,我们将解释代码的工作原理。如果您想了解更多信息,请继续阅读,或跳至演示部分查看最终结果。
导入库
首先,导入所需的库。WiFi、ESPAsyncWeb需要服务器和ESPAsyncTCP来构建 web 服务器。需要 Adafruit_Sensor 和 DHT 库来从 DHT11 或 DHT22 传感器读取数据。变量定义
定义 DHT 数据引脚所连接的 GPIO。在本例中,它连接到 GPIO 4。然后,选择您正在使用的 DHT 传感器类型。在我们的示例amp比如,我们使用的是 DHT22。如果您使用的是其他类型,则只需取消注释您的传感器并注释所有其他传感器。
使用我们之前定义的类型和引脚实例化一个 DHT 对象。创建一个异步Web端口 80 上的服务器对象。
读取温度和湿度函数
我们创建了两个函数:一个用于读取温度。我们创建了两个函数:一个用于读取温度(readDHTTemperature()),另一个用于读取湿度(readDHTHumidity())。获取传感器读数就像使用 dht 对象上的 readTemperature() 和 readHumidity() 方法一样简单。
我们还有一个条件,如果传感器无法获取读数,则返回两个破折号(-)。
读数以字符串类型返回。要将浮点数转换为字符串,请使用 String() 函数
默认情况下,我们以摄氏度读取温度。要获取华氏度的温度,请注释掉摄氏度的温度,并取消注释华氏度的温度,这样你就得到了以下内容:
上传代码
现在,将代码上传到您的 ESP32。确保您选择了正确的主板和 COM 端口。上传代码参考步骤。
上传后,打开串口监视器,波特率为 115200。按下 ESP32 重置按钮。ESP32 的 IP 地址应该打印在串口中 监视器。示范
打开浏览器并输入 ESP32 的 IP 地址。您的 web 服务器应显示最新的传感器读数。
笔记: 您的浏览器和 ESP32 应该连接到同一个 LAN。
请注意,温度和湿度读数会自动更新,无需刷新 web 页。
项目_10_ESP32_OLED_显示
该项目展示了如何使用 Arduino IDE 将 0.96 英寸 SSD1306 OLED 显示屏与 ESP32 结合使用。
推出 0.96 英寸 OLED 显示屏
这 OLED 显示屏 我们将在本教程中使用的是 SSD1306 型号:单色、0.96 英寸显示屏,分辨率为 128×64 像素,如下图所示。OLED 显示屏无需背光,因此在黑暗环境中对比度非常好。此外,其像素仅在开启时才消耗能量,因此与其他显示屏相比,OLED 显示屏的功耗更低。
由于OLED显示屏采用I2C通信协议,因此接线非常简单。您可以使用下表作为参考。
OLED 引脚 | ESP32 |
文 | 3.3伏 |
地线 | 地线 |
新加坡 | 通用输入输出口 22 |
南达科他州 | 通用输入输出口 21 |
原理图安装 SSD1306 OLED 库 – ESP32
有多个库可用于通过 ESP32 控制 OLED 显示屏。
在本教程中,我们将使用两个 Adafruit 库: Adafruit_SSD1306 库 和 Adafruit_GFX 库.
按照以下步骤安装这些库。
- 打开 Arduino IDE,然后转到 Sketch > Include Library > Manage Libraries。库管理器应该会打开。
- 在搜索框中输入“SSD1306”,并从 Adafruit 安装 SSD1306 库。
- 从 Adafruit 安装 SSD1306 库后,在搜索框中输入“GFX”并安装该库。
- 安装库后,重新启动 Arduino IDE。
代码
安装所需的库后,在 arduino IDE 中打开 Project_10_ESP32_OLED_Display.ino。代码
我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前已安装 ESP32 插件:(如果您已经完成此步骤,则可跳至下一步。)
在 Arduino IDE 中安装 ESP32 附加组件守则如何运作
导入库
首先,您需要导入必要的库。Wire 库用于使用 I2C,Adafruit 库用于写入显示器:Adafruit_GFX 和 Adafruit_SSD1306。初始化 OLED 显示屏
然后,定义 OLED 的宽度和高度。在本例中amp例如,我们使用 128×64 OLED 显示屏。如果您使用其他尺寸,则可以在 SCREEN_WIDTH 和 SCREEN_HEIGHT 变量中更改。然后,使用I2C通信协议(&Wire)初始化具有先前定义的宽度和高度的显示对象。
(-1) 参数表示您的 OLED 显示器没有 RESET 引脚。如果您的 OLED 显示器有 RESET 引脚,则应将其连接到 GPIO。在这种情况下,您应该将 GPIO 编号作为参数传递。
在 setup() 中,将串行监视器初始化为波特率 115200,以便进行调试。使用 begin() 方法初始化 OLED 显示屏,如下所示:
如果我们无法连接到显示器,此代码片段还会在串行监视器上打印一条消息。
如果您使用的是不同的 OLED 显示器,则可能需要更改 OLED 地址。在我们的例子中,地址是 0x3C。
初始化显示器后,添加两秒延迟,以便 OLED 有足够的时间在写入文本之前进行初始化:
清除显示、设置字体大小、颜色并写入文本
初始化显示屏后,使用 clearDisplay() 方法清除显示缓冲区:
在编写文本之前,您需要设置文本大小、颜色以及文本在 OLED 上的显示位置。
使用 setTextSize() 方法设置字体大小:使用 setTextColor() 方法设置字体颜色:
WHITE 设置白色字体和黑色背景。
使用 setCursor(x,y) 方法定义文本开始的位置。在本例中,我们将文本设置为从 (0,0) 坐标开始 - 即左上角。最后,可以使用 println() 方法将文本发送到显示器,如下所示
然后,您需要调用 display() 方法将文本实际显示在屏幕上。
Adafruit OLED 库提供了有用的方法可以轻松滚动文本。
- startscrollright(0x00,0x0F):从左向右滚动文本
- startscrollleft(0x00,0x0F):从右向左滚动文本
- startscrolldiagright(0x00, 0x07): 将文本从左下角滚动到右上角 startscrolldiagleft(0x00, 0x07): 将文本从右下角滚动到左上角
上传代码
现在,将代码上传到您的 ESP32。上传代码参考步骤。
上传代码后,OLED 将显示滚动文本。
文件/资源
![]() |
LAFVIN ESP32 基本入门套件 [pdf] 使用说明书 ESP32 基础入门套件,ESP32,基础入门套件,入门套件 |