MicroPythonESP32 超声波测距传感器应用
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 #超声波往返距离 = 超声波空中运行时间*声音在空气中传播速度;实际距离 = 超声波往返距离/2print("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] = markTimeself.index += 1elif self.index == 1:if self.echo.value() == 0:self.timemark[self.index] = markTimeself.index += 1'''实际距离计算函数''' def distance(self):while self.index<=1:passself.index = 0passTime = self.timemark[1]-self.timemark[0]return passTime/2*0.34distance = Sound_distance() #实例化超声波测距类 print("distance:",distance.distance(),"mm") #打印测量距离
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
