一.点亮单LED
from machine import Pin
from utime import sleep
print("Hello, ESP32!")
led = Pin(15, Pin.OUT)
while True:
led.on()
sleep(0.5)
led.off()
sleep(0.5)
实现呼吸灯
from machine import Pin,PWM
from time import sleep_ms
led_pin=Pin(4,Pin.OUT)#引脚控制对象
pwm_pin=PWM(led_pin,freq=1000,duty=0)#模拟信号对象,频率1023,占空比0
while True:
times=0
while times<1023:
pwm_pin.duty(times)
times+=1
sleep_ms(2)
while times>0:
pwm_pin.duty(times)
times-=1
sleep_ms(2)
'''优化1.
for duty_ts in range(0,1024):
pwm_pin.duty(duty_ts)
sleep_ms(3)
for duty_ts in range(1023,-1,-1):
pwm_pin.duty(duty_ts)
sleep_ms(3)
优化2.
val=0
v=1
while val<=1023 and val>=0:
pwm_pin.duty(val)
sleep_ms(3)
val+=v
if val==1023:v=-1
if val==0 :v=1
'''
二.流水灯实现
from machine import Pin
from utime import sleep
'''流水灯'''
led_list=[15,2,4,5]
op_led_list=[]
for i in led_list:
op_led_list.append(Pin(i,Pin.OUT))
while True:
for j in op_led_list:
j.on()
sleep(0.5)
j.off()
sleep(0.5)
三 .获取按钮值
from machine import Pin
from time import sleep
'''获取按钮值'''
btn_pin=Pin(5,Pin.IN)
while True:
print(btn_pin.value())#获取变化的状态
sleep(1)
四.按钮控制LED
from machine import Pin
from time import sleep
led_pin=Pin(2,Pin.OUT)
btn_pin=Pin(4,Pin.IN)
while True:
led_pin.value(btn_pin.value())
实现一开一关
from machine import Pin
from time import sleep
led_pin=Pin(2,Pin.OUT,value=0)#设置默认低电平
btn_pin=Pin(4,Pin.IN)
while True:
if btn_pin.value():
led_pin.value(not led_pin.value())
while btn_pin.value():#判断是否长按
pass
五. 模拟信号控制
from machine import Pin, ADC
from time import sleep_ms
pinoDT=Pin(33)
voltimetro = ADC (pinoDT)
while True:
lido = voltimetro.read()
tensao = lido/4096*3.3
print (tensao)
sleep_ms(1000)
六.超声波测距
from machine import Pin
import utime
def getDistacne(trig,echo): # 声波测距函数
#1初始化trig引脚,将trig引脚拉低,暂停2us
trig.value(0)
utime.sleep_us(2)
#2 拉高trig 引脚至高电平,超声波传感器发送声波
trig.value(1)
utime.sleep_us(5)
trig.value(0)
#3 echo 端口循环检测是否收到回波,并记录更新收到回波的时间戳
while echo.value() == 0:
s_time = utime.ticks_us()
while echo.value() == 1:
e_time = utime.ticks_us()
# 计算从发送到收到回波的时间
timeSpend = e_time-s_time
soundSpd = 0.0345 # 单位为cm/us
distance = (timeSpend*soundSpd)/2
return distance
trig = Pin(14,Pin.OUT) # 实际接线trig 接ESP32 GPIO14 引脚 echo 接GPIO 27
echo = Pin(27,Pin.IN)
#测距
while True:
# 循环测距,1s 进行1次距离更新显示
dis = getDistacne(trig,echo)
utime.sleep(1)
print(str(dis) +'cm')
距离计算:室温20的环境下,超声波传播速度约为340米/秒,距离=速度+时间/2
计算检测1cm: 距离(0.01m)=速度(340米/秒)*时间/2
时间=0.01*2/344 约58US
from machine import Pin,time_pulse_us
import time
#默认引脚初始化低电平
trig=Pin(14,Pin.OUT,value=0)
echo=Pin(27,Pin.IN)
def hcdis():
#拉高引脚,超声波发送音波
trig.value(1)
time.sleep_us(10)
trig.value(0)
#接收距离有效距离*58
us=time_pulse_us(echo,1,400*58)
if us<0 :
return us
else:
cm=round(us/58,1)
return cm
while True:
cm=hcdis()
print(cm)
time.sleep(1)
模块化
from machine import Pin,time_pulse_us
import time
class HCSR04:
def __init__(self,trig,echo):
self.trig=Pin(trig,Pin.OUT,value=0)
self.echo=Pin(echo,Pin.IN)
def hcdis(self):
#拉高引脚,超声波发送音波
self.trig.value(1)
time.sleep_us(10)
self.trig.value(0)
#接收距离有效距离*58
us=time_pulse_us(self.echo,1,400*58)
if us<0 :
return us
else:
cm=round(us/58,1)
return cm
hcsr04=HCSR04(14,27)
while True:
cm=hcsr04.hcdis()
print(cm)
time.sleep(1)