Micropython ESP8266板入门指南(二)开关控制负载

Micropython ESP8266板入门指南(二)开关控制负载

(一)USB接口电路使
用CH340G接口芯片,所以要用CH341SER驱动程序。
在这里插入图片描述
(二)ESP-12P模块
板载LED灯接在GPIO2脚上
在这里插入图片描述
常用GPIO脚的默认电位:这几只脚IC内已有电阻,不用外接电阻,可以直接接开关。
平时高电位(即IC内用电阻接Vcc的)是:Reset、EN、GPIO0、GPIO2
平时低电位(即IC内用电阻接GND的)是:GPIO15

8266与硬件相关的指令都在machine库中,并根据功能分成不同的类(class),例如,与脚有关的命令在machine库的Pin类中。
在这里插入图片描述
from machine import Pin(from库中只导入脚类)
import machine(导入这个库的所有类)

应用一:读取微动开关控制LED

 from machine import Pin
>>> sw=Pin(0,Pin.IN)
>>> led=Pin(15,Pin.OUT)
>>> while 1:
...     val=sw.value()
...     led.value(val)

运行说明:微动开关接GND和GPIO0脚,LED灯接GPIO15脚;8266循环读取0脚状态,当开关导通0脚低电平;即val的值为0;接15脚的led的值也为0,关灯。

应用二:按一下亮灯,再按一下关灯
(1)简单方案


from machine import Pin    #导入库
import time                #导入控制时间库

toggle=1
led=Pin(15,Pin.OUT)
sw=Pin(0,Pin.IN)

while True:
    if sw.value()==0:
        toggle=not toggle
        led.value(toggle)
        

本程序的缺点,按开关时,不是按一下就准确在反转,存在不稳定,主要原因是在while的作用下循环不断地进行,即不断地反转,而造成LED随机亮灭的结果。

(2)优化方案一:在按下开关时(读取开关脚的状态),程序什么也不做,这样就防止进入循环。程序见下:

from machine import Pin    #导入库
import time                #导入控制时间库

toggle=1
led=Pin(15,Pin.OUT)
sw=Pin(0,Pin.IN)

while True:
    if sw.value()==0:
        toggle=not toggle  #将toggler的值进行not(反相

)
        led.value(toggle)
        while sw.value()==0:   #while(当)开关按下时
            pass               # 什么也不做,暂停 

(3)优化方案二:在按下开关时(读取开关脚的状态),对LED灯现状态进行反转,同时程序什么也不做,直至放开开关后再继续循环。对比优化方案一程序少了两行命令。程序见下:

from machine import Pin    #导入库
import time                #导入控制时间库

led=Pin(15,Pin.OUT)
sw=Pin(0,Pin.IN)

while True:
    if sw.value()==0:               #如果按下开关
        led.value(not led.value())  #对LED状态进行反转
        while sw.value()==0:   #while(当)开关按下时
            pass               # 什么也不做,暂停           

(4)优化进阶:消除开关切换时振动造成的开关铜片弹跳现象。方法是进行2-30毫秒的延时。


from machine import Pin    #导入库
import time                #导入控制时间库

led=Pin(15,Pin.OUT)
sw=Pin(0,Pin.IN)

while True:
    if sw.value()==0:               #如果按下开关
        time.sleep(0.1)             #延时0.1秒,或写成time.sleep_ms(100)
        led.value(not led.value())  #对LED状态进行反转
        while sw.value()==0:   #while(当)开关按下时
            pass               # 什么也不做,暂停

(5)增加一个LED2灯与LED灯成反相

from machine import Pin    #导入库
import time                #导入控制时间库
led2=Pin(9,Pin.OUT)
led=Pin(15,Pin.OUT)
sw=Pin(0,Pin.IN)

while True:
    if sw.value()==0:               #如果按下开关
        time.sleep(0.1)             #延时0.1秒
        led.value(not led.value())  #对LED状态进行反转
        led2.value(not led.value())
        while sw.value()==0:   #while(当)开关按下时
            pass               # 什么也不做,暂停

(六)增加一个副程序(MINI)。主程序main.py ;副程序 MINI.py
主程序

#main.py
from machine import Pin    #导入库
import time                #导入控制时间库
import MINI                #导入副程序MINI
led2=Pin(9,Pin.OUT)
led=Pin(15,Pin.OUT)
sw=Pin(0,Pin.IN)

while True:
    if sw.value()==0:               #如果按下开关
        MINI.hello()                #运行MINI中的自定义函数hello
        time.sleep(0.1)             #延时0.1秒
        led.value(not led.value())  #对LED状态进行反转
        led2.value(not led.value())
        while sw.value()==0:   #while(当)开关按下时
            pass               # 什么也不做,暂停 

副程序

#MINI.py
def hello():
    print("hello")
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值