树莓派Python 按键实验

article/2025/8/26 12:42:12

第一课:什么是树莓派
第二课:树莓派能做什么
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派Python编程手册
第六课:树莓派Python Led实验
第七课:树莓派Python 按键实验
视频链接

如果要实现按下一个按钮让灯亮,再按下让灯灭这样的功能,就需要实现按键编程了,按键编程属于输入设备范畴。

什么是输入设备,什么是输出设备

参考**第六课:树莓派Python Led实验

用什么做实验

我们一般用第一种按键(左边),淘宝上几毛钱就可以买到,右边的按键,还需要自己去加电阻搭电路,不方便。
在这里插入图片描述

编程思路

很多学生总是喜欢看,迟迟不动手,我发现原因是他还没有思路,就是不知如何动手,或者有几种方法,不确定用哪一种比较好,所以在茫茫博客中找到理论依据,其实这种情况,还是动手比较好,编程就是要多写,即时尝试的方法不是最好的,也可以让你搞清楚这种方法的弊端在哪里,然后一步步逼近正确方法,如果没有经验,没有人能够一步到位,所以不尝试是最好的,也最直接的学习方法。
这里的编程思路,其实就是要搞清楚这个按键的工作原理。
我先上一张图:
在这里插入图片描述
我们这里拿S1来说明,当我们按下时,有什么现象,不按的时候有什么现象呢?
这里的p0.4就是我们树莓派接线时候的引脚,所以现象就是当不按的时候,p0.4这个点是高电平(比3.3v低一点),按下的时候,p0.4是低电平,因为跟GND(地)连通了。这样我们就可以写程序来读取p0.4引脚的电平,当读到高,说明没有按键,当读到低说明按键了。
——这就是编程思路,了解到这里,你应该迫不及待了吧!

如何连线

VCC接5V,out接wiringPi的第1脚。
在这里插入图片描述

开始写程序了

程序的步骤还是跟led的控制差不多,但是因为这里是要控制输入设备,稍微有些不同,步骤如下:
1)包含导入GPIO模块
import RPi.GPIO as GPIO #这是第一条语句,不然你不能调用控制IO口的函数
import time #导入时间模块,为了下面做延时用,不然看不到一闪一闪的效果
2) 设置编码模式
gpio.setmode(gpio.BCM)#设置引脚编码模式,c语言一般使用wiringPi编码模式,python一般使用BCM编码模式
#这些函数不知道什么意思的,可以参考第五课:树莓派Python编程手册
3)设置引脚功能
GPIO.setup(18,GPIO.IN,GPIO.PUD_UP)#设置18号引脚为输入功能,并且上拉
4) 循环控制
while 1:
time.sleep(0.05)
if(GPIO.input(KEY)==1): #判断是否按下
print “key press”
最后的完整代码:

pi@xiajiashan:~/pi-python-blog$ cat key.py 
#-*-coding:utf-8-*-       //支持中文注释
import RPi.GPIO as GPIO    #导入RPi模块
import time                #使用延时功能
GPIO.setmode(GPIO.BCM)     #设置BCM编码
KEY = 18                   #BCM第18引脚
GPIO.setup(KEY,GPIO.IN,GPIO.PUD_UP)#设置输入,上拉
while 1:time.sleep(0.05)if(GPIO.input(KEY)==1):    #判断是否按下print "key press"

编译运行

编译运行会出现很多打印语句,可以说是铺天盖地,就像这样
在这里插入图片描述

甚至,手一碰过去,就出现了一大波打印语句。

如何解决按键不灵敏的问题

上面的问题,其实是正常现象,造成这一现象的原因,是按键有机械抖动,怎么解决这个问题呢?
我们先来看一张图:
在这里插入图片描述
之所以我们的程序出现很多的打印语句,是因为在前沿抖动区间,这个区间是10~20ms,感觉很短,但是对树莓派cpu来说,足可以执行几千次了。
所以,我们需要想办法绕过这段时间,思路是:
先判断低电平,然后延时20ms,跨到稳定区间,再判断一次,如果还是低电平,那么就确认是一个真实的按键了。
代码如下:

pi@xiajiashan:~/pi-python-blog$ cat key_noshake.py 
#-*-coding:utf-8-*-
import RPi.GPIO as GPIO  #导入RPi.GPIO模块
import time   #导入时间模块,用于延时
GPIO.setwarnings(False)  #屏蔽警告信息
#---第一步:设置引脚编码模式
GPIO.setmode(GPIO.BCM)  #设置引脚为BCM编码
#---第二步:设置引脚方向----
KEY = 18   #定义18脚作为按键使用
GPIO.setup(KEY,GPIO.IN)  #设置按键为输入
#----第三步:循环判断按键是否按下
while 1:if GPIO.input(KEY)==1:#按下(该按键模块,当松开的时候是低电平,按下时高电平)time.sleep(0.02)  #延时20ms  绕过抖动区间,为了防抖if(GPIO.input(KEY)==1):    #再次判断是否在按下的状态(判断是否在稳定区间)while(GPIO.input(KEY)==1): #等待松手pass   #占位行#实现按键要做的事情print('key precess') 
pi@xiajiashan:~/pi-python-blog$ 

这里的20行,是等待手松开的意思。

如何让按键控制灯或者蜂鸣器

我在这里贴出控制蜂鸣器的代码,因为单个的原理已经讲过了,led单独控制知道了,按键知道了,这里只是整合问题,大家还有不懂的可以购买我的教学视频:
https://edu.csdn.net/course/play/28043/383532?spm=1002.2001.3001.4143

pi@xiajiashan:~/pi-python-blog$ cat key_beep.py 
#!/usr/bin/python   
#-*-coding:utf-8-*-
import RPi.GPIO as GPIO  #导入RPi.GPIO模块
import time   #导入时间模块,用于延时
GPIO.setwarnings(False)  #屏蔽警告信息
#---第一步:设置引脚编码模式
GPIO.setmode(GPIO.BCM)  #设置引脚为BCM编码
#---第二步:设置引脚方向----
KEY = 18   #定义18脚作为按键使用
BEEP = 27   #定义27脚为蜂鸣器使用
GPIO.setup(KEY,GPIO.IN)  #设置按键为输入
GPIO.setup(BEEP,GPIO.OUT,initial=GPIO.LOW)  #设置BEEP为输出,并且初始化为低电平
#----第三步:循环判断按键是否按下
Flag = 0
while 1:if GPIO.input(KEY)==1:#按下(该按键模块,当松开的时候是低电平,按下时高电平)time.sleep(0.02)  #延时20ms  绕过抖动区间,为了防抖if(GPIO.input(KEY)==1):    #再次判断是否在按下的状态(判断是否在稳定区间)while(GPIO.input(KEY)==1): #等待松手pass   #占位行#实现按键要做的事情print('key precess') if Flag == 0:   GPIO.output(BEEP,GPIO.HIGH)Flag = 1else:  GPIO.output(BEEP,GPIO.LOW)Flag = 0
pi@xiajiashan:~/pi-python-blog$ 

如何实现长按三秒,让树莓派重启

如何用C实现长按3秒重启树莓派,感觉很复杂高深,其实原理非常简单。
完整代码如下:

pi@xiajiashan:~/pi-python-blog$ cat key_reboot.py 
#!/usr/bin/python   
#-*-coding:utf-8-*-
import RPi.GPIO as GPIO  #导入RPi.GPIO模块
import time   #导入时间模块,用于延时
import os    #导入系统模块,用于调用system
GPIO.setwarnings(False)  #屏蔽警告信息
#---第一步:设置引脚编码模式
GPIO.setmode(GPIO.BCM)  #设置引脚为BCM编码
#---第二步:设置引脚方向----
KEY = 27   #定义27脚作为按键使用
LED = 18   #定义18脚为led灯使用
GPIO.setup(KEY,GPIO.IN)  #设置按键为输入
GPIO.setup(LED,GPIO.OUT,initial=GPIO.LOW)  #设置LED为输出,并且初始化为低电平
#----第三步:循环判断按键是否按下
Flag = 0
counter = 0
while 1:if GPIO.input(KEY)==1:#按下(该按键模块,当松开的时候是低电平,按下时高电平)time.sleep(0.02)  #延时20ms  绕过抖动区间,为了防抖if(GPIO.input(KEY)==1):    #再次判断是否在按下的状态(判断是否在稳定区间)while(GPIO.input(KEY)==1): #等待松手counter+=1time.sleep(0.01)   #等待10msif(counter>300):#保证按下时间大于3秒os.system("sudo reboot")  #重启树莓派#实现按键要做的事情print('key precess') if Flag == 0:   GPIO.output(LED,GPIO.HIGH)Flag = 1else:  GPIO.output(LED,GPIO.LOW)Flag = 0
pi@xiajiashan:~/pi-python-blog$ 

想系统学习的同学可以购买我的教学视频:
长按3秒实现树莓派重启视频Python版

END

希望这篇文章对大家有价值,如果有帮助就收藏吧!

第一课:什么是树莓派
第二课:树莓派能做什么
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派Python编程手册
第六课:树莓派Python Led实验
第七课:树莓派Python 按键实验
视频链接


http://chatgpt.dhexx.cn/article/ZpEB4Twr.shtml

相关文章

树莓派python 简介_树莓派与python语言概述

原标题:树莓派与python语言概述 树莓派是一个非常廉价的、只有手掌大小的完全可编程的计算机。虽然树莓派的体积小,但是它的潜力无限。你可以像使用常规台式计算机一样在树莓派上创建一个非常酷的工程。例如,你可以用树莓派搭建你自己的家用云存储服务器。 树莓派用什么语言…

树莓派python版本的串口通信设置

经过一天的探索终于解决了一个问题,就是在树莓派上用python代码来使用串口来通讯,看过了无数的教程 踩过了无数的坑,下面是我结合各个案例总结的设置方法。参考链接: 1.https://blog.csdn.net/weixin_41656968/article/details/80085836 2.ht…

超详细!基于树莓派Python编程使用dht11温湿度模块

超详细!基于树莓派Python编程使用dht11温湿度模块 前言: 本人树莓派小白(电路知识也很有限),在树莓派上使用dht11模块时没有在网络上找到 很详细的教程,因此经历两天的摸索才得以正确使用该模块,所以我萌…

树莓派Python开发第8课: PWM实验

第一课:什么是树莓派 第二课:树莓派能做什么 第三课:购买您的第一个树莓派 第四课:如何安装树莓派系统 第五课:树莓派Python编程手册 第六课:树莓派Python Led实验 第七课:树莓派Python 按键实验…

教你用树莓派Python打造一个音乐播放器

买了个树莓派3B,装好系统后灰落了好厚一层都不知道要干嘛。。。最近突发奇想:用树莓派做一个音乐播放器,每天6:30-7:20自动播放英语听力,强迫自己练习英语,也治治自己的懒床习惯,平时也可以用来听听歌。在这…

4步树莓派python3安装opencv,无需编译

4步树莓派python3安装opencv,无需编译 测试器件:树莓派4b 最近配置树莓派环境,装opencv时上网搜索发现教程挺麻烦而且过于老旧,现有一个简单方法分享一下 0.安装树莓派64位系统 可以使用官方软件安装系统 记得烧录前右下角高级设置配置ss…

树莓派 python驱动蜂鸣器

Author: Runsen 有问题,底部评论 蜂鸣器分为两种类型:“有源蜂鸣器”和“无源蜂鸣器”。 有源蜂鸣器内部具有多振动器,只需要在外部提供工作电压,它就能发出固定频率的声音。 无源蜂鸣器没有内部振荡源,需要外部驱动…

树莓派Python3安装运行OpenCV

1、安装 打开树莓派的命令行界面,输入命令即可完成安装。执行命令的时间更网速有关,请耐心等待。 sudo apt-get install python-opencv 是安装在python2 上的 sudo apt-get install python3-opencv 是安装在python3 上的 2、在Python3上测试OpenCV 安装…

树莓派Python开发教程:什么是树莓派

第一课:什么是树莓派 第二课:树莓派能做什么 第三课:购买您的第一个树莓派 第四课:如何安装树莓派系统 楔子 树莓派C语言版本的基础教程差不多写完了,原计划这个十一期间着手写Python部分,但是前几天又冒…

树莓派Python编程手册

第一课:什么是树莓派 第二课:树莓派能做什么 第三课:购买您的第一个树莓派 第四课:如何安装树莓派系统 第五课:树莓派Python编程手册 树莓派可以使用C语言,java,Python,而用python控…

树莓派 python3.9降级为python3.7

今天烧录了一个官方烧录器中的最新的镜像,打开之后python的版本是3.9的,之前做的一些东西都是基于python3.7的,再重新架构十分麻烦,于是干脆就把python3.9进行降级,降为python3.7. 这个镜像不像之前的一些镜像&#x…

第1.2.1章 树莓派python编程环境

树莓派3B,默认的python版本是2.7.13,但是操作系统自带了python3.5.3的IDE 因为现在主流都是用python3,那么我怎么讲python的环境切换到3呢? 1 python环境切换 参考将树莓派内置的 Python2.7 升级成 Python3 # 卸载 python2.7 su…

用python在树莓派上编程,你可以将项目扩展到令人难以置信的规模

树莓派是一个非常廉价的、只有手掌大小的完全可编程的计算机。虽然树莓派的体积小,但是它的潜力无限。你可以像使用常规台式计算机一样在树莓派上创建一个非常酷的工程。例如,你可以用树莓派搭建你自己的家用云存储服务器。 树莓派用什么语言编程&#x…

树莓派基础设置以及编程环境(python语言)

基础条件: 硬件:树莓派 3b 固件:2018-04-18-raspbian-stretch.img IO:树莓派3B的IO是3.3V,5V有风险。 一、python 使用方法 1.1、python2.7进入编程界面 左上角树莓派图标----->Programming----->Python2&…

树莓派教程(基于python编程)--入门篇

一:格式化SD卡 SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化 (重装烧录也要进行着SD卡格式化操作) 二:下载官方镜像 http://downloads.raspberrypi.org/raspbian_latest 三:烧录SD卡 使用…

unity学习开发小球吃方块小游戏(从制作到发布程序,超详细全教程包你学会)

unity小球吃方块开发过程 你将学会用unity开发小游戏的基础知识吃方块游戏超详细全教程,保姆式教学包你学会一、创建对象创建PlayBall小球吃金币游戏项目,创建地面和小球。 二、添加脚本创建脚本使小球动起来,并用键盘控制小球的运动。 三、控…

python小游戏开发——井字棋

一家懂得用细节留住客户的3年潮牌老店我必须支持!➕🛰:luyao1931 案例介绍 本案例采用 python 实现了一个简单的井字棋游戏。该游戏在控制台界面中进行,有游戏提示。游戏棋盘为 3 X 3 的九宫格样式,每个棋格与数字键盘…

使用Vue框架开发的贪吃蛇小游戏

注意&#xff1a;尽量不要用谷歌浏览器运行&#xff0c;因为谷歌浏览器会把GameValue翻译成中文&#xff0c;使游戏掉帧卡顿 解决办法&#xff1a;1.使用Edge浏览器&#xff0c;2.把谷歌浏览器的自动中文翻译关闭即可 游戏截图&#xff1a; 源码如下&#xff1a; <!DOCTY…

QT大作业——自制小游戏

The RPGgame with QT 一、 系统架构 该项目有4个ui组成&#xff0c;其中mainwindow作为项目程序入口&#xff0c;窗口跳转流程为&#xff1a;mainwindow->gamegraph->area_prairrie->playerstastus。 主要游戏功能装载在gamegraph和area_prairrie两个ui中&#xff0…

webpack + typescript 开发微信小游戏实践

源码地址 微信小游戏版本技术选型使用typescript开发 但是微信小游戏原生不支持 typescript 开发&#xff0c;于是探索一下使用ts开发微信小游戏 1. 创建小游戏 使用测试号&#xff0c;创建一个使用官方示例的小游戏 会生成一个可以直接运行的打飞机小游戏 2. 准备工作 …