[树莓派 PICO(基于MicroPython)]基础教程02-按键测试、按键控制外设LED开关

最近入手了pico学习。

〇、总的参考

视频参考【微雪课堂】PICO系列教程2——外设GPIO(bilibili)
另附其github,课程中所用代码皆在其中。
博文参考树莓派 PICO基础教程(基于MicroPython)

下面让我们开始GPIO的学习吧!ε≡٩(๑>₃<)۶

一、函数说明

machine.Pin(id, mode=None, pull=None, value)
	#Pin对象构造函数,其作用为根据参数初始化GPIO,并返回
	#参数id:GPIO编号,数值为0-29,如使用GPIO13则填写为13
	#参数mode:GPIO模式,可设置为:不初始化None、输入模式Pin.IN(0)、输出模式Pin.OUT(1)、开漏模式Pin.OPEN_DRAIN(2)
	#pull:使用内部上拉或下拉电阻,仅在输入模式下有效,可设置为:悬空 None、上拉Pin.PULL_UP(1)、下拉Pin.PULL_DOWN(2)
	#输出赋值value:在输出或开漏模式下有效。且端口值0为低(off)、1为高(on)
Pin.init(mode=None, pull=None)
	#重新初始化GPIO口
	#参数与Pin类构造函数相同
	#参数mode:GPIO模式,可设置为:不初始化None、输入模式Pin.IN(0)、输出模式Pin.OUT(1)、开漏模式Pin.OPEN_DRAIN(2)
	#pull:使用内部上拉或下拉电阻,仅在输入模式下有效,可设置为:悬空 None、上拉Pin.PULL_UP(1)、下拉Pin.PULL_DOWN(2)
Pin.value([x])
	#不填写参数的情况下返回GPIO端口数值
	#填写参数的情况下将参数写入GPIO端口中,参数可为0或者1
Pin.toggle()
	#输出或开漏模式下将端口进行一次翻转
#输出或开漏模式下使用的四个函数:

Pin.low()	#输出或开漏模式下将端口设置为低(0);
Pin.off()	#输出或开漏模式下将端口设置为低(0);

Pin.high()	#输出或开漏模式下将端口设置为高(1);
Pin.on()	#输出或开漏模式下将端口设置为高(1);
Pin.irq(handler=None,trigger=(Pin.IRQ_FALLING | Pin.IRQ_RISING))
	#外部中断函数
	#参数handler:中断触发回调函数;
	#参数trigger:中断触发条件,可设置为边缘触发或电平触发
		#其中Pin.IRQ_FALLING 在下降沿中断
		#其中Pin.IRQ_RISING  在上升沿中断

二、硬件准备

1、焊接排针的pico,1个
2、面包板,1个
3、直插按键,1个
4、直插LED灯,1个
5、适当阻值的直插电阻(1kΩ),1个
6、杜邦线(若用面包板,选用公公线),若干

三、程序-按键测试、按键控制外设LED开关

1、按键测试

按键测试主要参考树莓派 PICO基础教程(基于MicroPython)的3.04,原理图可以看那位大佬的。
硬件连接:
①GPIO0与按键一端相连;
②pico上GND与按键另一端相连。
代码:

from machine import Pin
	#从machine中引入Pin,以便后面控制引脚
import utime
	#之前的代码里引入的是time库
	#我个人并未发现time库和utime库的区别
	#如果有大佬知道麻烦告知我下,不知道的也可以把一起交流下想法

# 配置按键
# key = machine.Pin(id, mode, pull)
# id:PICO引脚编号。这里按键设置为与GPIO0相连
# mode:输入输出方式,有Pin.IN(输入)和Pin.OUT(输出)两种。这里设置为输入模式
# pull:上下拉电阻配置,有None(无上下拉电阻)、Pin.PULL_UP(上拉电阻)和Pin.PULL_DOWN(下拉电阻)三种
key = Pin(0, Pin.IN, Pin.PULL_UP)

if __name__ == '__main__':
    while True:
    	#无限循环语句
        if key.value() == 0:
            #读取key的数值即GPIO0,并判断是否为0,若为0则代表按键按下
            utime.sleep_ms(100)
            	#等待一段时间,再重新判断,防止按键抖动问题
            if key.value() == 0:
            	#按键确实被按下
                print('The button is pressed')
                	#输出信息

实验现象: 按键按下,Thonny中的Shell输出The button is pressed.
在这里插入图片描述

2、按键控制外设LED开关

按键测试主要参考【微雪课堂】PICO系列教程2——外设GPIO
硬件连接:
①GPIO15与按键一端相连;
②pico上GND与按键另一端相连;
③GPIO16与限流电阻相连,限流电阻接LED正极(注意长正短负);
④LED负极接回pico上GND。
代码:

from machine import Pin#从machine中引入pin库
import utime#引入utime库

button_num = 15#GPIO15与button相连,设为输入、上拉模式
button = Pin(button_num,Pin.IN,Pin.PULL_UP)

external_led_num =16#GPIO16与led相连,设为输出模式
external_led = Pin(external_led_num,Pin.OUT)

led_num = 25#板载led端口为25,设为输出模式
led = Pin(led_num,Pin.OUT)

print("button gpio={0}".format(button_num))

while True:
    led.off()
    if(button.value()==0):#读取button的数值即GPIO15,并判断是否为0,若为0则代表按键按下
        #utime.sleep_ms(100)
        utime.sleep(0.01)
        if(button.value()==0):#重新判断按键是否按下,若仍为按下,则继续操作 
            external_led.toggle()#GPIO16翻转
            led.on()#GPIO25设为高电平
           
            print("button is pressed")
            while(button.value()==0):#通过while循环等待按键释放,按键释放后,回到代码顶端并将led设为低电平,等待下次按下
                #utime.sleep_ms(100)
                utime.sleep(0.01)

实验现象:
①软件现象:pico读取button的GPIO,这里设置为了15,所以输出button gpio=15。按键按下一次,shell输出一次button is pressed。
在这里插入图片描述
②硬件现象:板载LED默认灯灭。按键按下,板载LED亮起(马上灭)、外设LED亮起(不灭);按键再次按下,板载LED亮起(马上灭)、外设LED灭(不亮)。如此反复。

四、可能出现的问题

问题都是出现在第二个程序“按键控制外设LED开关“中,一开始我按下按键,硬件并无任何反馈。经过几天不断检查自己的程序、电路,才成功完成实验。(强迫症不可取啊,其实程序、电路都没问题,就是实验器材本身的问题,这样效率太低了)

程序、电路相对而言比较基础(对于有过电子开发经验的人来说),但是
①面包板的接触点可能出现问题。
我之前缺乏面包板的使用经验,在与导师沟通后才知道面包板竟然还有不灵敏的问题。。。所以解决方案就是多尝试几个面包板(为啥视频里还有一些教程里,大佬们总是一次成功捏,唉~~)

看看也有人遇到过一样的问题:
请问为何用面包板面包线实验出现好多毛病?
在这里插入图片描述

②pico版本身的问题?或是面包板GND的问题?
这个问题来源暂时不清,因为万用表测得没啥问题。
经过不断的尝试,最后,我不再使用面包板自带的GND,把GND都接在了3上。竟然板载LED成功亮起!但是按键按下,外设LED仍无反应。
然后我灵机一动(终于脑子开了个窍),把GND都接到了38上,再次实验,竟然成功了!(༼༎ຶᴗ༎ຶ༽)太不容易了。。。
在这里插入图片描述

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值