ESP32入门例程2 驱动DHT22温湿度传感器(Wokwi仿真)
一、Wokwi仿真
Wokwi是一个在线的电子电路仿真器,你可以使用它来仿真Arduino、ESP32和许多其他流行的电路板、元器件以及传感器,欲探索更多Wokwi相关,请见:欢迎使用Wokwi! | Wokwi Docs。
1. 在VS Code中下载Wokwi插件
我使用的开发环境是VS Code,可以直接在VS Code下载插件使用Wokwi,插件名为Wokwi Simulator。在VS Code中安装完Wokwi Simulator插件以后,按 F1 并选择“Wokwi: Request a new License”。 VS Code 会要求您确认在浏览器中打开 Wokwi 网站。单击“Open”进行确认。然后单击“GET YOUR LICENSE”按钮并登录Wokwi 帐户。如果没有帐户,可以免费创建一个。登录成功后浏览器将许可证发送到 VS Code,在 VS Code 中可以看到一条消息,上面写着“License activated for [你的名字]”。
单击“GET YOUR LICENSE”按钮后并登录Wokwi 帐户,可能会出现如下错误:Sign in failed: auth/internal-error. Please go to https://wokwi.com/status and contact support@wokwi.com with the results.
这是网络问题导致的,在国内访问 GitHub或者google 等国外网站时时,可能会遇到网页打不开或访问速度慢的问题,此时挂VPN(梯子,飞机,魔法)就可以解决。
2. Wokwi配置
在VS Code中如果想要使用使用Wokwi仿真ESP32项目,你需要在项目的根目录中创建两个文件:
1) wokwi.toml - 告诉 Wokwi 如何运行你的项目的配置文件。如何配置wokwi.toml的内容?详情可见Wokwi官网:Configuring Your Project (wokwi.toml) | Wokwi Docs
1) diagram.json - 用于描述电路的diagram file文件。如何配置diagram.json的内容?详情可见Wokwi官网:Configuring Your Project (wokwi.toml) | Wokwi Docs(如果是esp32项目,最简单的方式就是在Wokwi网页打开一个空的esp32项目,在控件放置页里面添加需要的元器件并正确连接,然后将生成的diagram.json内容复制到项目的diagram.json中)
二、WS2812多彩灯
1. WS2812简介与特性
WS2812是一种集成了控制单元和RGB灯珠的高集成度器件,广泛应用于智能家居、装饰灯等领域。其主要特性包括:
- 单总线通信:通过一根GPIO线即可实现数据传输。
- 高精度控制:每个灯珠可以独立控制任意颜色。
- 串接扩展:多个WS2812可以串联,通过单个GPIO控制多个灯珠。
以下是WS2812的引脚定义:
| 引脚 | 功能 | 电压范围 |
|---|---|---|
| VDD | 电源 | 3.3V-5.3V |
| DIN | 数据输入 | - |
| DOUT | 数据输出 | - |
注意:虽然手册推荐3.5V-5.3V,但实际测试中3.3V也可以正常工作。
2. WS2812驱动时序详解
WS2812的驱动时序通过高低电平的比例来区分零码和一码。器件的具体的时序要求最好是查找datasheet,下图是时序示例:
- 零码:高电平0.35μs±150ns,低电平0.9μs±150ns。
- 一码:高电平0.9μs±150ns,低电平0.35μs±150ns。
3. 红外控制与RMT外设
由于WS2812的时序要求较高,直接使用GPIO模拟难以满足精度需求。ESP32的RMT(Remote Control Module)外设为高精度时序控制提供了理想解决方案。
红外编码原理:红外编码通过高低电平的组合来表示数据。以下是NEC红外编码的时序示例:
- 逻辑0:560μs有效脉冲 + 560μs空闲间隔,总时长为1.12ms。
- 逻辑1:560μs有效脉冲 + 1680μs空闲间隔,总时长为2.25ms。
虽然WS2812的驱动时序与红外编码不同,但RMT外设可以灵活配置时序,满足WS2812的需求。
三、代码实现
使用以下命令的前提是,已经按照如下教程搭建好了ubuntu编译+esp-idf的开发环境:ESP32入门——开发环境搭建_esp32开发环境搭建-CSDN博客
1. 在mobaxterm中新建ESP32工程
使用mobaxterm连接ubuntu, 在mobaxterm中输入以下命令创建工程wokwi_dht22:
cd ~
cd ./esp32
idf.py create-project wokwi_dht22
cd ./wokwi_dht22
idf.py build
2.在VS Code中开发
1)使用Remote - SSH插件登录到ubuntu,打开ws2812目录
2)将esp-idf的源码路径加入到工程,可以搜索函数、跳转函数、查看函数源码等。实现方式:按下ctrl+shift+P,选择ESP-IDF: Add vscode Configuration Folder
3)编写代码
实现dht22驱动:
cd ./esp32/wokwi_dht22
idf.py add-dependency "zorxx/dht"
idf.py build
esp具有组件库,当需要用到某器件驱动时,可以先在组件库搜索该器件,查看是否存在该器件相关驱动。若搜索到相关驱动,可在项目根目录运行idf.py add-dependency XXX将组件添加到项目中(XXX需要替换成组件名),在运行idf.py build后组件会被自动加载到项目路径managed_components文件夹下
实现wokwi_dht22.c:
(具体代码见github: https://github.com/nolasun/ESP32/tree/main/esp32_example/wokwi_dht22)
4)修改main文件夹下的CMakeLists.txt的内容如下:
idf_component_register(SRCS "wokwi_dht22.c"
INCLUDE_DIRS ".")
3.在mobaxterm中编译
cd ./esp32/wokwi_dht22
idf.py build
4.在VS Code中使用wokwi仿真
1)在项目根目录新建一个diagram.json文件
在Wokwi网页打开一个空的esp32项目,在控件放置页里面添加dht22并正确连接,然后将生成的diagram.json内容复制到项目的diagram.json中。diagram.json文件内容如下:
{
"version": 1,
"author": "nola",
"editor": "wokwi",
"parts": [
{ "type": "board-esp32-devkit-c-v4", "id": "esp", "top": 57.6, "left": -23.96, "attrs": {} },
{ "type": "wokwi-dht22", "id": "dht1", "top": -47.7, "left": -168.6, "attrs": {} }
],
"connections": [
[ "esp:TX", "$serialMonitor:RX", "", [] ],
[ "esp:RX", "$serialMonitor:TX", "", [] ],
[ "dht1:VCC", "esp:3V3", "red", [ "v0" ] ],
[ "dht1:GND", "esp:GND.1", "black", [ "v144", "h96" ] ],
[ "dht1:SDA", "esp:14", "green", [ "v0" ] ]
],
"dependencies": {}
}
2)在项目根目录新建一个wokwi.toml文件
wokwi.toml文件的内容如下:
[wokwi]
version = 1
firmware = 'build/flasher_args.json'
elf = 'build/wokwi_dht22.elf'
3)使用wokwi进行仿真
点击F1按键,搜索Wokwi: Start simulation,选中该项开始仿真。
仿真现象:改变温湿度值,看到串口打印了数值

更多推荐


所有评论(0)