硬件准备:开发板ESP8266 CH340 NodeMCU Lua V3,数据线(确保数据线的可靠,踩坑之一,数据线问题,导致连接问题)
软件准备:ESP烧录工具NodeMCU-PyFlasher5.0(ESP8266 NodeMCU Lua V3似乎必须使用这款烧录工具,官网烧录工具烧录不成功),Thonny(代码工具)
第一步:电脑安装CH340驱动(驱动必须正确,和开发板匹配,要不然无法连接)
第二步:开发板烧录固件,官网下载了esp8266-20210902-v1.17版本的固件,使用NodeMCU-PyFlasher5.0烧录,如下图,连接好后,根据选项选择最后点击“Flash NodeMCU”
烧录成功后显示如下
第三步:打开Thonny,选择相应的开发板ESP8266及连接端口
正确连接后会显示MicroPython设备上的代码和固件版本,如下图
第四步:上载HCSR04.py代码
第五步:输入代码,并将代码保存到micropython设备,命名为main.py。
from machine import Pin
from HCSR04 import HCSR04
import time
trig = Pin(5, Pin.OUT)
echo = Pin(4, Pin.IN)
HC = HCSR04(trig, echo)
i = 0
for i in range(20):
distance = HC.getDistance()
print(str(distance) + ' cm')
time.sleep(2)
i += 1
第六步:连线,将HCSR04模块与ESP8266连接起来,注意连线正确
第七步:运行,显示如下:
测得的距离与“超声波测距模块 HC-SR04测试板”显示的相符,代码正确。
到此应该已经完事了,但在得到正确结果前,出了点问题,当时购买了两个HCSR04模块,第一个如下图
第二个如下图
两个模块在“HC-SR04测试板”都能显示相同且正确的距离,但用HCSR04.py的代码,使用第一个才能显示正确,第二个显示明显错误。
错误的距离信息如下:
HCSR04.py的代码如下,使用网上流传的代码。
from time import sleep_us, ticks_us
class HCSR04():
def __init__(self, trig, echo):
self.trig = trig
self.echo = echo
def getDistance(self):
distance = 0
self.trig.value(1)
sleep_us(20)
self.trig.value(0)
while self.echo.value() == 0:
pass
if self.echo.value() == 1:
ts = ticks_us() # 开始时间
while self.echo.value() == 1:
pass
te = ticks_us() # 时间结束
tc = te - ts
distance = tc * 0.017 # 距离计算(单位: cm)
return distance
不知道为什么出现距离测量错误的情况。如果哪位朋友遇到相同的情况,并且解决了,还请指教。