实现 LED 灯点亮
使用 wokwi 之前,最好是注册一个账号,否则无法保存项目。
在使用之前,还需要选择开发板。wokwi 提供了很多类型的板子,这里我使用 ESP32-S3,因为我还购买了开发板,方便后面直接调试。
并且在尝试之前,最好是线阅读一下关于开发板的技术文档,后面使用起来更加顺畅。
新建项目
首先打开 Wokwi 的网站 https://wokwi.com/ 。
需要注册并且登录账户,如果不注册的话,无法选择更多型号的板子。
我们需要选择 Micropython ESP32-S3 进行开发。
进入个人项目中心,新建项目,选择 ESP32-S3 的板子
然后选择开发语言
然后就可以进到如下开发界面
在右侧可以看到 main.py
文件是用来编辑代码的。
旁边的 diagram.json
文件是用来显示和编辑硬件开发板和元器件的。
保存编辑的代码可以使用 Ctrl+s
或者也可以点击左上方的保存按钮。也可以分享你的项目给别人,通过 SHARE 按钮。
再看右边,绿色的按钮是运行,加号按钮可以添加元器件到开发板中,三个点按钮是其他的一些方便使用的功能。
点灯实验
首先通过 +
加号按钮添加一个 LED 灯和一个电阻。通过 diagram.json
可以改变电阻的阻值。找到后我们把阻值改为 470
,默认是1000
欧姆。
{
"version": 1,
"author": "zhengxinonly", // 作者
"editor": "wokwi",
"parts": [ // 存放的元器件
{
"type": "board-esp32-s3-devkitc-1",
"id": "esp",
"top": 0,
"left": 0,
"attrs": { "env": "micropython-20231227-v1.22.0", "flashSize": "8" }
},
{ "type": "wokwi-led", "id": "led1", "top": 16, "left": -160, "attrs": { "color": "red" } },
{
"type": "wokwi-resistor",
"id": "r1",
"top": 51.95,
"left": -76.8,
"attrs": { "value": "1000" }
}
],
"connections": [],
"dependencies": {}
}
这里我们在LED灯正极(弯脚的那个脚是正极)接一个 470 欧姆的电阻,然后电阻的另一端连叫道 GPIO4 口上(D4脚),然后 LED 的负极接到开发板的 GND 上。
然后编写代码:
from machine import Pin # 导入 Pin (开发板中 Pin 代表 GPIO)
from time import sleep_ms # 导入时间
led = Pin(4, Pin.OUT) # 定义一个 LED 灯,D4 脚,输出
while 1:
led.on() # 灯亮
sleep_ms(500) # 等待500毫秒
led.off() # 灯灭
sleep_ms(500)
参考项目: https://wokwi.com/projects/406339430591504385
LED 连接方法说明
我们在连接是LED的正极并不一定连接在GPIO上,负极连接在GND上。只不过这是一种习惯性的连接方法。我们可以通过该表连接方法实现不一样的效果。
例如:正极通过电阻接到5V上,负极接在D4上。代码不变同样可实现LED闪烁。
然后修改一下灯灭时间,再次看一下效果
from machine import Pin
from time import sleep_ms
led = Pin(4, Pin.OUT)
while 1:
led.on() # 灯亮
sleep_ms(500) # 等待500毫秒
led.off() # 灯灭
sleep_ms(1500)
仔细观察会发现,效果反过来了,我们把等待的时间调整一下,效果更明显:我们代码期望是亮灯500毫秒,结果实际上是灭灯500毫秒。
当我们把正极接到D4上时,输出高电平亮灯,输出低电平灭灯。当把LED接到5V上时,这种揭发逻辑刚好反过来,当GPIO输出低电平的时候亮灯。
可以使用LED.value来设置和开始一样的效果。设置LED.value(0),即亮灯的时候输出0。
from machine import Pin
from time import sleep_ms
LED = Pin(4, Pin.OUT)
while 1:
LED.value(0) # led.on() # 灯亮
sleep_ms(500) # 等待 500 毫秒
LED.value(1) # led.off() # 灯灭
sleep_ms(1500)
这样就可以看到,输出结果和代码是对应的。
参考项目:https://wokwi.com/projects/406341381775665153
案例:莫尔斯码-SOS
这里实现外部LED模拟发送摩尔斯码的SOS信号(3个点,3个杠,3个点)。一个点表示LED灯亮0.25秒(点的时间),一个杠表示LED灯亮1秒(杠的时间),点与点和杠与杠之间的延迟是0.2秒(间隔时间);字母之间的延迟是0.5秒,这个语句有2秒的延迟然后重复。
from machine import Pin
import time
dot = 0.25 # 点的时间
dash = 1.0 # 杠的时间
gap = 0.2 # 点与点和杠与杠之间的延迟
letterDelay = 0.5 # 每个字母之间的间隔时间
ON = 1 # 亮灯
OFF = 0 # 熄灯
LED = Pin(4, Pin.OUT) # 端口4
while True:
for i in range(0, 3):
LED.value(ON)
time.sleep(dot)
LED.value(OFF)
time.sleep(gap)
time.sleep(letterDelay)
for i in range(0, 3):
LED.value(ON)
time.sleep(dash)
LED.value(OFF)
time.sleep(gap)
time.sleep(letterDelay)
for i in range(0, 3):
LED.value(ON)
time.sleep(dot)
LED.value(OFF)
time.sleep(gap)
time.sleep(letterDelay)