MicroPython&ESP32超声波测距传感器应用
- MicroPython GPIO的简单操作
- MicroPython 库导入
from machine import Pin import time
- GPIO 普通输入输出
trig = machine.Pin(27,machine.Pin.OUT) #设置输出 trig.value(0) #IO输出电平状态(0:低电平 1:高电平) echo = machine.Pin(26,machine.Pin.IN) #设置输入 print(echo.value()) #打印输入电平状态(0:低电平 1:高电平) ''' 超声波trig管脚发送10us高电平开始测距 声音在空气中传播速度340m/s,(340*1000)mm/1000000us= 0.34mm/us 记录echo管脚高电平持续时间 所测声音传播时间为遇到障碍的往返时间所测距离/2 ''' trig.value(1) time.sleep_us(10) trig.value(0) while echo.value() != 1: #echo管脚电平为0时未发送超声波信号 pass #空运行 startTime = time.ticks_us() #发送超声波信号后记录开始时间 while echo.value() != 0: #echo管脚电平为1时未接收超声波信号 pass #空运行 endTime = time.ticks_us() #接收超声波信号后记录结束时间 timediff = endTime - startTime #超声波空中运行时间 distance = (timediff * 0.34)/2 #超声波往返距离 = 超声波空中运行时间*声音在空气中传播速度;实际距离 = 超声波往返距离/2 print("distance:",distance,"mm") #打印实际距离
- GPIO 中断输入
''' 创建超声波测距类 ''' class Sound_distance(object): def __init__(self): self.trig = machine.Pin(27,machine.Pin.OUT) #设置输出 self.trig.value(0) #IO输出电平状态(0:低电平 1:高电平) self.echo = machine.Pin(26,machine.Pin.IN) #设置输入 self.echo.irq(trigger=(self.echo.IRQ_RISING|self.echo.IRQ_FALLING),handler = self.__irq) #设置中断触发以及回调函数 self.timemark =[0,0] #创建时间记录表 self.index = 0 # ''' 准备发送超声波 ''' self.trig.value(1) time.sleep_us(10) self.trig.value(0) ''' 中断回调函数 ''' def __irq(self,souce): markTime = time.ticks_us() if self.index == 0: if self.echo.value() == 1: self.timemark[self.index] = markTime self.index += 1 elif self.index == 1: if self.echo.value() == 0: self.timemark[self.index] = markTime self.index += 1 ''' 实际距离计算函数 ''' def distance(self): while self.index<=1: pass self.index = 0 passTime = self.timemark[1]-self.timemark[0] return passTime/2*0.34 distance = Sound_distance() #实例化超声波测距类 print("distance:",distance.distance(),"mm") #打印测量距离