基于MicroPython的ESP8266连接外设IO(一)

目录

OLED屏

DHT11温湿度传感器

光敏传感器

超声波测距传感器HC-SR04


OLED屏

本次所用的0.9寸OLED屏仅含I2C接口,首先要找到该显示屏的驱动程序,从GitHub上的microPython库,driver文件夹中能找到该文件ssd1306.py

https://github.com/micropython/micropython/tree/master/drivers/display

将该驱动文件拷贝到项目工程文件中调用即可,如下案例

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C

scl = Pin(12, Pin.OUT)  #OLED屏的SCL管脚接GPIO12管脚
sda = Pin(14, Pin.OUT)  #OLED屏的SCL管脚接GPIO14管脚

i2c = I2C(scl=scl, sda=sda)
oled = SSD1306_I2C(128, 64, i2c)

oled.fill(0)
oled.text("Hello", 0 , 0)
oled.show()

DHT11温湿度传感器

参考链接

说明:micropython固件已自带这个库,直接导入即可,如下案例

import dht
import machine
import time

d = dht.DHT11(machine.Pin(4))

for i in range(10):
    d.measure()
    print("温度和湿度为:", d.temperature(), d.humidity())
    time.sleep_ms(2000)

光敏传感器

示例代码:

from machine import Pin
import time

p2 = Pin(2, Pin.OUT) #ESP8266上的led灯
p5 = Pin(5, Pin.IN, Pin.PULL_UP)  #光敏传感器的DO管脚接入GPIO05

while True:
    if p5.value() == 1:
        p2.off()
    if p5.value() == 0:
        p2.on()
    print(p5.value())
    time.sleep_ms(1000)

超声波测距传感器HC-SR04

参考链接

HC-SR04超声波模块测距原理

给模块Trig管脚1个最少10us的高电平,模块接受到高电平后开始发射8个40KHz的声波,Echo脚会由0变为1,MCU开始计时,当超声波模块接收到返回的声波时,Echo由1变为0,MCU停止计时,这时间差就是测距总时间,在乘声音的传播速度340米/秒,除2就是距离。

如下面的案例:

import time
from machine import Pin

#下面用于超声波测距
Trig = Pin(4, Pin.OUT)  #传感器Trig管脚接入GPIO04
Echo = Pin(5, Pin.IN)   #传感器Echo管脚接入GPIO05
Trig.off()
Echo.off()

#获取超声波测量的距离
def checkDist():
    #对传感器Trig管脚产生一个10us的脉冲
    Trig.on()
    time.sleep_us(10)
    Trig.off()
    #获取开始测量的时间,Echo值由0变为1
    while(Echo.value()==0):
        pass
    t1 = time.ticks_us()
    #获取测量结束时间,Echo值由1变为0
    while (Echo.value()==1):
        pass
    t2 = time.ticks_us()
    #获取时间差,除以1000变为ms
    t3 = time.ticks_diff(t2, t1)/1000
    #返回测量值,开始测距的时间减测距完成的时间*声音的速度/2(来回)
    return t3*340/2

数据滤波处理,去除最大和最小值,之后取平均值

#数据滤波处理
def forAverage(data_list):
    if len(data_list)==0:
        return 0
    if len(data_list)>2:
        data_list.remove(min(data_list))
        data_list.remove(max(data_list))
        average_date = float((sum(data_list))/len(data_list))
        return average_date
    elif len(data_list)<=2:
        average_date = float((sum(data_list)) / len(data_list))
        return average_date

之后再进行调用

def main():
    try:
        while True:
            dataList = []
            for i in range(10):
                dataList.append(checkDist())
            print(str(forAverage(dataList)))
            time.sleep_ms(100)
    except KeyboardInterrupt:
        pass

上述程序测试成功后,将其封装为hcsr04.py驱动程序,如下

import time
class HCSR04:
    def __init__(self, trig, echo, aveNum=10):
        self.trig = trig
        self.echo = echo
        self.aveNum = aveNum

        trig.init(trig.OUT, value =0)
        echo.init(echo.IN, value =0)

    # 获取超声波测量的距离(单次)
    def getDistOnce(self):
        # 对传感器Trig管脚产生一个10us的脉冲
        self.trig.on()
        time.sleep_us(10)
        self.trig.off()
        # 获取开始测量的时间,Echo值由0变为1
        while (self.echo.value() == 0):
            pass
        t1 = time.ticks_us()
        # 获取测量结束时间,Echo值由1变为0
        while (self.echo.value() == 1):
            pass
        t2 = time.ticks_us()
        # 获取时间差,除以1000变为ms
        t3 = time.ticks_diff(t2, t1) / 1000
        # 返回测量值,开始测距的时间减测距完成的时间*声音的速度/2(来回)
        return t3 * 340 / 2

    #滤波处理,去掉最大最小值,然后取平均值
    def forAverage(self, data_list):
        if len(data_list) == 0:
            return 0
        if len(data_list) > 2:
            data_list.remove(min(data_list))
            data_list.remove(max(data_list))
            average_date = float((sum(data_list)) / len(data_list))
            return average_date
        elif len(data_list) <= 2:
            average_date = float((sum(data_list)) / len(data_list))
            return average_date

    #最终输出结果值
    def aveValue(self):
        dataList = []
        for i in range(self.aveNum):
            dataList.append(self.getDistOnce())
        #print(dataList)
        return self.forAverage(dataList)

调用方式如下

#超声波传感器测距
from machine import Pin
import hcsr04
Trig = Pin(4)  #传感器Trig管脚接入GPIO04
Echo = Pin(5)   #传感器Echo管脚接入GPIO05
hcs1 = hcsr04.HCSR04(trig= Trig, echo= Echo, aveNum=5)
value = hcs1.aveValue() #结果值
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值