先看下ESP32开发板上哪些脚支持数模转换,途中紫色标记的ADC针脚都是支持的,在实际的使用中ADC1是最稳定的,GPIO36和GPIO39因为涉及到系统的启动问题,一般不会使用,用的比较多的是GPIO34和GPIO35。GPIO32、GPIO33、GPIO25、GPIO26也是可使用的,但是它涉及到触摸和一些其他功能,所以我们选择GPIO34和GPIO35。GPIO34和GPIO35作为普通GPIO只能输入不能输出。所以首选它作为模数转换的端口是比较合适的。

Wokwi网站上ESP32开发板是ESP32 Devkit V1版本的。

一、打开Wokwi网站,选择Micropython on ESP32开发板,添加一个滑动电位器

我们点击滑动电位器上方的问号,查看它的使用手册

wokwi-slide-potentiometer Reference | Wokwi DocsSliding variable resistor (linear potentiometer)https://docs.wokwi.com/parts/wokwi-slide-potentiometer我们看到,滑动电位器的初始值是0,我们可以改变他的长度来调节它的大小。

关于ESP32的ADC介绍我们查看官方手册:

Quick reference for the ESP32 — MicroPython 1.19.1 documentationhttp://docs.micropython.org/en/latest/esp32/quickref.html#adc-analog-to-digital-conversion二、打印电位器ADC值

main.py

from machine import Pin,ADC
from time import sleep_msport = ADC(Pin(34))while 1:print(port.read())sleep_ms(500)

diagram.json

{"version": 1,"author": "Anonymous maker","editor": "wokwi","parts": [{"type": "wokwi-esp32-devkit-v1","id": "esp","top": -44.67,"left": 19.33,"attrs": { "env": "micropython-20220618-v1.19.1" }},{"type": "wokwi-slide-potentiometer","id": "pot1","top": 163.5,"left": -20.21,"attrs": { "travelLength": "60" }}],"connections": [[ "esp:TX0", "$serialMonitor:RX", "", [] ],[ "esp:RX0", "$serialMonitor:TX", "", [] ],[ "esp:D34", "pot1:SIG", "green", [ "h-99.9", "v10.14" ] ],[ "esp:3V3", "pot1:VCC", "green", [ "v-0.6", "h17.14", "v54.67", "h-173.33" ] ],[ "esp:GND.1", "pot1:GND", "black", [ "h0" ] ]]
}

滑动电位器查看效果,我们看到输出从0到4095,默认是12位(2的12次方-1)。

也可以在线查看效果哦,点击下方链接

Wokwi Arduino and ESP32 Simulatorhttps://wokwi.com/projects/341746287702442578

当然我们可以选择设置想要的位数,只需要加上这句话

from machine import Pin,ADC
from time import sleep_msport = ADC(Pin(34))
ADC.width(ADC.WIDTH_9BIT)  # 设置输出位数
while 1:print(port.read())sleep_ms(500)

 三、脉宽调试

关于什么叫做脉宽调制(PWM)这里就不在说明,大家自行百度学习。

首先我们在Wokwi上选择Miropython with ESP32,打开开发网页。

同事查看ESP32 的官方文档关于PWM的描述:

Quick reference for the ESP32 — MicroPython 1.19.1 documentationhttp://docs.micropython.org/en/latest/esp32/quickref.html#adc-analog-to-digital-conversion接下来我们看代码:

main.py

# 脉宽调制例子
# 通过滑动电位器产生不同的ADC值来调节LED灯的占空比
# 使LED产生不同的亮度
from machine import Pin,ADC,PWM
from time import sleep_msled = PWM(Pin(25))  # 定义PWM在端口25
adc = ADC(Pin(34))  # 定义ADC在端口34
# LED灯的亮度不能超过1023,否则跑出异常duty must be from 0 to 1023
adc.width(ADC.WIDTH_10BIT)  # 设置ADC的位数为9(0-1023)while True:value = adc.read()  # 读取端口34的ADC值led.duty(value)  # 设置PWM波的占空比print(value)   # 打印PWM波的占空比sleep_ms(300)

diagram.json

{"version": 1,"author": "Anonymous maker","editor": "wokwi","parts": [{"type": "wokwi-esp32-devkit-v1","id": "esp","top": 0,"left": 0,"attrs": { "env": "micropython-20220618-v1.19.1" }},{"type": "wokwi-slide-potentiometer","id": "pot1","top": 187.5,"left": -46.63,"attrs": { "travelLength": "30" }},{"type": "wokwi-led","id": "led1","top": 48.89,"left": -134.23,"attrs": { "color": "red" }},{"type": "wokwi-resistor","id": "r1","top": 81.93,"left": -76.59,"attrs": { "value": "470" }}],"connections": [[ "esp:TX0", "$serialMonitor:RX", "", [] ],[ "esp:RX0", "$serialMonitor:TX", "", [] ],[ "esp:D25", "r1:2", "green", [ "h0" ] ],[ "r1:1", "led1:A", "green", [ "v0" ] ],[ "led1:C", "esp:GND.2", "green", [ "v0" ] ],[ "pot1:VCC", "esp:3V3", "red", [ "h-8.16", "v-26.33", "h172.71", "v-42.74" ] ],[ "pot1:GND", "esp:GND.1", "black", [ "v0" ] ],[ "pot1:SIG", "esp:D34", "green", [ "h-98.01", "v-209.46" ] ]]
}

查看效果

或者通过网页查看效果

Wokwi Arduino and ESP32 Simulatorhttps://wokwi.com/projects/341747547238302292

我们在加个蜂鸣器看个小效果哈:

蜂鸣器buzzer的使用文档见:

wokwi-buzzer Reference | Wokwi DocsA piezoelectric buzzerhttps://docs.wokwi.com/parts/wokwi-buzzer

main.py

# 脉宽调制例子
# 通过滑动电位器产生不同的ADC值来调节LED灯的占空比
# 使LED产生不同的亮度
from machine import Pin,ADC,PWM
from time import sleep_msbuzzer = PWM(Pin(14))  #定义蜂鸣器的PWM在端口14
buzzer.duty(512) # 设置蜂鸣器的占空比
led = PWM(Pin(25))  # 定义PWM在端口25
adc = ADC(Pin(34))  # 定义ADC在端口34
# LED灯的亮度不能超过1023,否则跑出异常duty must be from 0 to 1023
adc.width(ADC.WIDTH_10BIT)  # 设置ADC的位数为9(0-1023)while True:value = adc.read()  # 读取端口34的ADC值led.duty(value)  # 设置PWM波的占空比# 此处加1是因为最小频率是1HZ,否则抛出异常freqency must be from 1Hz to 40MHzbuzzer.freq(value + 1 ) print(value)   # 打印PWM波的占空比sleep_ms(300)

diagram.json

{"version": 1,"author": "Anonymous maker","editor": "wokwi","parts": [{"type": "wokwi-esp32-devkit-v1","id": "esp","top": 0,"left": 0,"attrs": { "env": "micropython-20220618-v1.19.1" }},{"type": "wokwi-slide-potentiometer","id": "pot1","top": 190.76,"left": -57.51,"attrs": { "travelLength": "30" }},{"type": "wokwi-led","id": "led1","top": 48.89,"left": -134.23,"attrs": { "color": "red" }},{"type": "wokwi-resistor","id": "r1","top": 81.93,"left": -76.59,"attrs": { "value": "470" }},{"type": "wokwi-buzzer","id": "bz1","top": 28.37,"left": -228.1,"attrs": { "volume": "0.1" }}],"connections": [[ "esp:TX0", "$serialMonitor:RX", "", [] ],[ "esp:RX0", "$serialMonitor:TX", "", [] ],

查看效果:

也可用网页查看哦~~~

Wokwi Arduino and ESP32 Simulatorhttps://wokwi.com/projects/341754674259427923

物联网开发笔记(8)- 使用Wokwi仿真ESP32开发板实现模数转换和脉宽调制相关推荐

  1. 物联网开发笔记(64)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示. 二.环境 ESP32 + ILI9341 3.2寸TFT-L ...

  2. 物联网开发笔记(77)- 使用Micropython开发ESP32开发板之使用MAX7219驱动控制8x8LED点阵模块(续)

    一.目的 这一节我们继续学习如何使用我们的ESP32开发板控制带MAX7219驱动的8x8LED点阵模.我们使用库来显示,更加方便. 二.环境 ESP32 + MAX7219驱动的8x8LED点阵模块 ...

  3. 物联网开发笔记(68)- 使用Micropython开发ESP32开发板之使用官方工具esptool烧录

    一.目的 这一节我们学习如何使用我们的ESP32开发板来烧录. 二.环境 ESP32 + esptool + Win10 + python3.10 + 其他工具. ESP32开发板购买地址: http ...

  4. 物联网开发笔记(94)- 使用Micropython开发ESP32开发板之获取天气数据并用ILI9341屏幕显示

    一.目的 这一节我们学习如何使用乐鑫的ESP32开发板通过心知天气API控获取实时天气的数据,并使用串口SPI控制ILI9341 液晶屏,显示出来. 二.环境 ESP32(固件:esp32-20220 ...

  5. 物联网开发笔记(96)- Micropython ESP32开发之SPI接口控制Micro SD卡TF卡模块挂载内存卡

    一.目的 这一节我们学习如何使用乐鑫的ESP32开发板连接SD卡模块,进行目录.文件的相关操作. 在早前我们也介绍过TFT SD卡的操作,这里我们重新复习一下. 物联网开发笔记(60)- 使用Micr ...

  6. MLX90640开发笔记(一)概述及开发资料准备

    现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了AMG8833(8*8像素).前段时间因为公司生产电路板测试需要,打算买一台红外成像仪测量电路板发热是否正常,商 ...

  7. 物联网开发笔记(48)- 使用Micropython开发ESP32开发板之控制OLED ssd1306屏幕

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制OLED ssd1306屏幕,此处使用的是I2C协议,大家可自行百度学习一下I2C. 二.环境 ESP32 + OLED ssd1306屏幕 ...

  8. 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏

    这一节我们讲解了如何控制LCD1602显示屏,显示两行字. 一.目的 使用MicroPython开发ESP32开发板控制LCD1602显示屏 二.环境 ESP32 + LCD1602显示屏 + Tho ...

  9. 物联网开发笔记(54)- 使用Micropython开发ESP32开发板之控制MG90S舵机

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制舵机.前面我和大家使用Wokwi在线仿真讲过.这里我们再来学习一下,大家可以通过文章末尾的链接去购买适合的舵机来学习.这里我为了讲解方便依然 ...

最新文章

  1. oralce rollup 小计合计_总计与小计–WITH ROLLUP
  2. DelphiX教程系列 1 - 使用键盘和摇杆
  3. 中国计算机学会CCF推荐国际学术会议和期刊目录-交叉/综合/新兴
  4. 全面改进Transformer类预训练模型,自然语言任务超越BERT
  5. [系统安全] 八.Windows漏洞利用之CVE-2019-0708复现及防御详解
  6. python matplotlib 绘制曲线图,柱状图
  7. 萌娃六一对程序员老爸说:再不陪我玩我就长大了
  8. (81)FPGA复位激励(task)
  9. 车辆销售系统用例_使用OpenCV和Python构建自己的车辆检测模型
  10. Java链表入门(超详细)
  11. java中级参考教材答案_Java中级开发工程师笔试题及答案(2)
  12. 自然语言处理 | (30) 文本相似度计算与文本匹配问题
  13. C++解题报告:连续的“包含”子串长度——(线段树+尺取法)
  14. Youtube 开发通过遥控机控制实现快进快退功能
  15. 研究生复试发邮件注意事项
  16. Java SE 005 运算符续
  17. 连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)
  18. 3399使用GPIO口模拟i2c升级NT68411
  19. MATLAB||清除指令clear,clear all,clc,clf,cla
  20. Stata 画图配色

热门文章

  1. 2018Python元年
  2. 第四范式下的科教研:算力困局怎么解?
  3. Android GC机制及一些调试信息
  4. 华为手机的便签怎么拷贝到别的手机?
  5. 盘点Ubuntu18.04在python=2.7下安装Lasagne==0.2.dev1和Theano
  6. Camtasia 2023新功能添加了新的视觉效果、滤镜和其他重大改进
  7. 基于JAVA的问卷调查系统设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  8. Typora和ipic结合上传图片
  9. Oracle安装时 [INS-32025] 所选安装与指定oracle主目录中已安装的软件冲突
  10. Word处理控件Aspose.Words功能演示:在 C# .NET 中将 Word 转换为 PDF - 完整指南