硬件准备:开发板ESP8266 CH340 NodeMCU Lua V3,数据线(确保数据线的可靠,踩坑之一,数据线问题,导致连接问题)

软件准备:ESP烧录工具NodeMCU-PyFlasher5.0(ESP8266 NodeMCU Lua V3似乎必须使用这款烧录工具,官网烧录工具烧录不成功),Thonny(代码工具)

第一步:电脑安装CH340驱动(驱动必须正确,和开发板匹配,要不然无法连接)

第二步:开发板烧录固件,官网下载了esp8266-20210902-v1.17版本的固件,使用NodeMCU-PyFlasher5.0烧录,如下图,连接好后,根据选项选择最后点击“Flash NodeMCU”

esp8266 thonny写入python程序 esp8266可以用python_mcu


烧录成功后显示如下

esp8266 thonny写入python程序 esp8266可以用python_物联网_02


第三步:打开Thonny,选择相应的开发板ESP8266及连接端口

esp8266 thonny写入python程序 esp8266可以用python_单片机_03


正确连接后会显示MicroPython设备上的代码和固件版本,如下图

esp8266 thonny写入python程序 esp8266可以用python_单片机_04


第四步:上载HCSR04.py代码

esp8266 thonny写入python程序 esp8266可以用python_mcu_05


第五步:输入代码,并将代码保存到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连接起来,注意连线正确

第七步:运行,显示如下:

esp8266 thonny写入python程序 esp8266可以用python_物联网_06


测得的距离与“超声波测距模块 HC-SR04测试板”显示的相符,代码正确。

到此应该已经完事了,但在得到正确结果前,出了点问题,当时购买了两个HCSR04模块,第一个如下图

esp8266 thonny写入python程序 esp8266可以用python_物联网_07


第二个如下图

esp8266 thonny写入python程序 esp8266可以用python_单片机_08


两个模块在“HC-SR04测试板”都能显示相同且正确的距离,但用HCSR04.py的代码,使用第一个才能显示正确,第二个显示明显错误。

错误的距离信息如下:

esp8266 thonny写入python程序 esp8266可以用python_物联网_09

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

不知道为什么出现距离测量错误的情况。如果哪位朋友遇到相同的情况,并且解决了,还请指教。