树莓派Python编程手册

article/2025/8/26 14:46:28

第一课:什么是树莓派
第二课:树莓派能做什么
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派Python编程手册
树莓派可以使用C语言,java,Python,而用python控制树莓派的人越来越多,刚把C语言教程专栏写完,接下来着手python教程。因为要控制硬件,所以我们需要安装一个模块RPi.GPIO.

我们是如何使用RPi.GPIO模块的

下面是简单点亮一个灯的代码,所有硬件操作的函数(方法)都是通过RPi.GPIO这个模块来操作的。
在这里插入图片描述

为什么叫RPi.GPIO:

RPi这里的R是树莓raspberry的意思,Pi就是派(π)的意思,关于树莓派的历史和来源请参考《什么是树莓派》。
GPIO是通用引脚输入输出的意思,就是可以控制树莓派这个硬件上的引脚。该知识后面会细讲。

RPi.GPIO模块如何安装

安装方法有几种,我介绍最好的一种:
1)打开https://pypi.org网站
2)在搜索框里面输入RPi.GPIO
在这里插入图片描述
3)下载下来,得到源码
想办法放到树莓派中,就像这样(我用RPi.GPIO-0.6.3讲解)
在这里插入图片描述
4)解压 在这里插入图片描述
5)进入源码目录 在这里插入图片描述
6)安装模块
sudo python setup.py install
一切就这么简单,别想得太难太复杂…

树莓派python编程手册介绍

树莓派的两大编程语言主要是C和Python,大家有C语言需求的请看我C部分的专栏。
Python编程手册,其实就是RPi.GPIO这个模块中的一些函数的使用方法。

如何快速查看帮助信息

该模块下的函数(用面向对象的术语说叫方法)可以这样查看:
在这里插入图片描述
完整帮助信息如下:

CLASSES__builtin__.objectPWMclass PWM(__builtin__.object)|  Pulse Width Modulation class|  |  Methods defined here:|  |  ChangeDutyCycle(...)|      Change the duty cycle|      dutycycle - between 0.0 and 100.0|  |  ChangeFrequency(...)|      Change the frequency|      frequency - frequency in Hz (freq > 1.0)|  |  __init__(...)|      x.__init__(...) initializes x; see help(type(x)) for signature|  |  start(...)|      Start software PWM|      dutycycle - the duty cycle (0.0 to 100.0)|  |  stop(...)
:CLASSES__builtin__.objectPWMclass PWM(__builtin__.object)|  Pulse Width Modulation class|  |  Methods defined here:|  |  ChangeDutyCycle(...)|      Change the duty cycle|      dutycycle - between 0.0 and 100.0|  |  ChangeFrequency(...)|      Change the frequency|      frequency - frequency in Hz (freq > 1.0)|  |  __init__(...)|      x.__init__(...) initializes x; see help(type(x)) for signature|  |  start(...)|      Start software PWM|      dutycycle - the duty cycle (0.0 to 100.0)|  |  stop(...)|      Stop software PWM|  |  ----------------------------------------------------------------------|  Data and other attributes defined here:|  |  __new__ = <built-in method __new__ of type object>|      T.__new__(S, ...) -> a new object with type S, a subtype of TFUNCTIONSadd_event_callback(...)Add a callback for an event already defined using add_event_detect()channel      - either board pin number or BCM number depending on which mode is set.callback     - a callback functionadd_event_detect(...)Enable edge detection events for a particular GPIO channel.channel      - either board pin number or BCM number depending on which mode is set.edge         - RISING, FALLING or BOTH[callback]   - A callback function for the event (optional)[bouncetime] - Switch bounce timeout in ms for callbackcleanup(...)Clean up by resetting all GPIO channels that have been used by this program to INPUT with no pullup/pulldown and no event detection[channel] - individual channel or list/tuple of channels to clean up.  Default - clean every channel that has been used.event_detected(...)Returns True if an edge has occured on a given GPIO.  You need to enable edge detection using add_event_detect() first.channel - either board pin number or BCM number depending on which mode is set.getmode(...)Get numbering mode used for channel numbers.Returns BOARD, BCM or Nonegpio_function(...)Return the current GPIO function (IN, OUT, PWM, SERIAL, I2C, SPI)channel - either board pin number or BCM number depending on which mode is set.input(...)Input from a GPIO channel.  Returns HIGH=1=True or LOW=0=Falsechannel - either board pin number or BCM number depending on which mode is set.output(...)Output to a GPIO channel or list of channelschannel - either board pin number or BCM number depending on which mode is set.value   - 0/1 or False/True or LOW/HIGHremove_event_detect(...)Remove edge detection for a particular GPIO channelchannel - either board pin number or BCM number depending on which mode is set.setmode(...)Set up numbering mode to use for channels.BOARD - Use Raspberry Pi board numbersBCM   - Use Broadcom GPIO 00..nn numberssetup(...)Set up a GPIO channel or list of channels with a direction and (optional) pull/up down controlchannel        - either board pin number or BCM number depending on which mode is set.direction      - IN or OUT[pull_up_down] - PUD_OFF (default), PUD_UP or PUD_DOWN[initial]      - Initial value for an output channelsetwarnings(...)Enable or disable warning messageswait_for_edge(...)Wait for an edge.  Returns the channel number or None on timeout.channel      - either board pin number or BCM number depending on which mode is set.edge         - RISING, FALLING or BOTH[bouncetime] - time allowed between calls to allow for switchbounce[timeout]    - timeout in msDATABCM = 11BOARD = 10BOTH = 33FALLING = 32HARD_PWM = 43HIGH = 1I2C = 42IN = 1LOW = 0OUT = 0PUD_DOWN = 21PUD_OFF = 20PUD_UP = 22RISING = 31RPI_INFO = {'MANUFACTURER': 'Sony', 'P1_REVISION': 3, 'PROCESSOR': 'BC...RPI_REVISION = 3SERIAL = 40SPI = 41UNKNOWN = -1VERSION = '0.6.3'
(END)

RPi.GPIO函数介绍

参考资料:

https://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/

1:导入这个模块

要导入这个模块,需要执行下面的代码:

import RPi.GPIO as GPIO

By doing it this way, you can refer to it as just GPIO through the rest of your script.

通过这种方式,后续代码(也称为脚本script)你可以通过GPIO这个名字来使用这个模块(实际上上是使用了一个简称)

To import the module and check to see if it is successful:

如果要导入模块的同时检查是否成功,可以这样做

try:

import RPi.GPIO as GPIO

except RuntimeError:

print(“Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using ‘sudo’ to run your script”)

说明:

关键字Try和except的组合在Python中常用于捕捉异常(编程术语叫陷阱),在执行完

import RPi.GPIO as GPIO这条语句,会判断是否发生了RuntimeError错误(即运行错误),如果发生了,则条件成立,打印print函数里面的提示信息。

2. 引脚编号

当使用Rpi.GPIO模块编程的时候,树莓派的IO引脚有两种编码方式,第一种是BOARD编码方式,第二种是BCM编码方式,如下图所示:
在这里插入图片描述
你还可以通过命令查看,其实这种方式更方便
在这里插入图片描述
可以使用下面的代码设置你需要的引脚编码方式:
GPIO.setmode(GPIO.BOARD)

或者

GPIO.setmode(GPIO.BCM)

想知道你现在是什么引脚编码方式,可以执行下面的代码得到
mode = GPIO.getmode()
返回结果 mode 将是下面三种情况之一 GPIO.BOARD, GPIO.BCM or None

3.关于警告

It is possible that you have more than one script/circuit on the GPIO of your Raspberry Pi. As a result of this, if RPi.GPIO detects that a pin has been configured to something other than the default (input), you get a warning when you try to configure a script. To disable these warnings:
很有可能你需要设置你的树莓派引脚多种功能,此时,如果Rpi.GPIO模块检测到某个引脚被配置了默认功能以外的功能(默认是输入),你将得到一个警告,比如:
在这里插入图片描述
要解决这个问题,你只需要加入如下代码:
GPIO.setwarnings(False)

4.设置一个通道

(注意这里面的通道就是指引脚)
当你要使用一个引脚作为输入或者输出功能的时候,你必须要配置它。如果要配置某个通道(引脚)作为输入,执行如下脚本(代码)
GPIO.setup(channel, GPIO.IN)

(这里的通道是指BOARD or BCM模式下的编码引脚).
配置某个引脚作为输出,执行如下代码:
GPIO.setup(channel, GPIO.OUT)
你还可以在设置某个引脚为输入或者输出的同时,初始化它为高电平或者低电平,代码如下:
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

5.一次设置多个引脚

你可以利用Python中的列表或者元组功能一次设置多个引脚:
pin_list = [11,12] #使用列表方式同时设置第11号引脚和12号引脚为输出!

#你还可以以元组的方式来设置:
pin_tulpe = (11,12)
GPIO.setup(chan_list, GPIO.OUT)

6.关于输入

通过以下方式可以得到一个输入引脚的值:
GPIO.input(channel)
上面的代码将返回一个0 / GPIO.LOW / False或者1 / GPIO.HIGH / True.
0代表低电平,False表示假,GPIO.LOW也表示低电平
1代表高电平,True表示真,GPIO.HIGH表示高电平

7.关于输出

要设置引脚的输出状态,代码如下:
GPIO.output(channel, state)
这里State 可以是 0 / GPIO.LOW / False或者1 / GPIO.HIGH / True.

8.一次设置多个引脚输出状态

你能够一次设置多个引脚的输出状态. For example:
chan_list = [11,12] # 列表的方式定义11和12引脚
GPIO.output(chan_list, GPIO.LOW) # sets all to GPIO.LOW
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW)) # 设置11号引脚为高电平,12号引脚为低电平

9.Cleanup(释放资源)

一个好的编程习惯是:在程序结束的时候,通过cleanup函数释放所有资源。虽然系统会帮你释放,但是养成这种习惯是很好的,比如你在某个时候需要切换引脚的状态,之前是输入,某个时候要切换到输出,那么在设置输出状态的时候,你应该先释放着引脚,然后切换到输出。
通过下面的代码你可以释放正在使用的所有引脚:
GPIO.cleanup()
你还可以释放某个引脚,或者通过列表或者元组方式释放多个引脚:
GPIO.cleanup(channel)
GPIO.cleanup( (channel1, channel2) )
GPIO.cleanup( [channel1, channel2] )

10.树莓派开发板信息和GPIO模块版本信息

想知道你现在树莓派开发板信息,可以执行如下代码:
GPIO.RPI_INFO
要知道你的树莓派的版本信息可以执行如下代码:
GPIO.RPI_INFO[‘P1_REVISION’]
GPIO.RPI_REVISION (deprecated)
想获取Python中 RPi.GPIO模块的版本信息,执行如下代码:
GPIO.VERSION
在这里插入图片描述

END

本文到这里结束,因为是智能拼音,打字难免有误,如果发现麻烦在评论区提醒一下。
如果觉得本文对您有帮助就收藏吧!
第一课:什么是树莓派
第二课:树莓派能做什么
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派Python编程手册


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

相关文章

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

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

第1.2.1章 树莓派python编程环境

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

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

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

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

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

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

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

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

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

python小游戏开发——井字棋

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

使用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. 准备工作 …

小游戏开发引擎CocosCreator

小游戏 六彩跳棋 已经通过审核并且发布了好几天了&#xff0c;对跳棋感兴趣的朋友可以去看看&#xff0c;在微信游戏里搜索 六彩跳棋 &#xff0c;点击 立即玩 吧&#xff01;进去游戏后&#xff0c;需要点击 获取头像昵称 才能得到玩家数据&#xff0c;然后 划动屏幕 选择游戏…

unity开发微信小游戏1

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、准备工作二、官方文档三、WX开发者工具四、获得Appid五、获得AppidError: app.json: app.json六、资源下载失败404总结 前言 最开使用unity3d开发微信小游…

【微信小游戏】微信小游戏开发设置竖屏

微信小游戏开发环境默认横屏&#xff0c;对竖屏游戏非常不方便。 设置竖屏的入口十分隐蔽&#xff0c;以至于一度令我以为不能设置竖屏。 网上也根本搜不到解决方法&#xff0c;经过我的不懈努力&#xff0c;最终还是找到了设置方法。 原本是横屏的 按下面路径设置竖屏 开发…

使用pygame开发一个小游戏

学习了pygame&#xff0c;身为一个IKUN所以&#xff0c;做了一个简单的小游戏。游戏规则是&#xff0c;使用键盘的方向键控制坤坤&#xff0c;当坤坤触碰到篮球&#xff0c;就会爆发出音乐”只因你太美“。代码如下&#xff1a; import random import sys import pygame pygam…

微信小游戏开发教程

微信小游戏开发教程-前言 自18年年初对开发者开放小游戏接口以后小游戏越来越火热&#xff0c;本文就是对小游戏开发的入门教程&#xff0c;希望这篇文章能够帮到想要入门开发游戏的你。 哈哈哈&#xff0c;看到有人说我故意分成好几篇刷PV&#xff0c;改了一下删了两篇&…

支持小游戏开发的“引擎四剑客”

2017年12月28日&#xff0c;微信发布了一款叫“跳一跳”的微信小程序的一个小游戏&#xff0c;无需下载安装&#xff0c;即点即玩&#xff0c;只需要在微信客户端的小程序界面搜索“跳一跳”&#xff0c;点击即可加载进入该游戏玩。游戏小而精&#xff0c;借助于微信巨大的社交…

小程序开发小游戏注意事项

今天研究小游戏开发&#xff0c;总结了一些自己遇到的问题 : 一. 注册appId 用小程序开发的小游戏跟用小程序开发其他项目不是公用的一个appId 如果你现在的小程序账号已经选了别的类目&#xff08;非游戏&#xff09;&#xff0c;那你就需要另外注册一个账号来单独申请小游戏…

【小程序】快来开发你的第一个微信小游戏(详细流程)

&#x1f973; 作者&#xff1a;伯子南 &#x1f60e; 坚信&#xff1a; 好记性不如乱笔头&#xff0c;独乐乐不如众乐乐 &#x1f4aa; 个人主页&#xff1a;https://blog.csdn.net/qq_34577234?spm1010.2135.3001.5421 &#x1f46c;&#x1f3fb; 觉得博主文章不错的话&…

小游戏开发

小游戏开发 1、游戏发展历史 广义&#xff1a;一种有组织的玩耍&#xff0c;一般是以娱乐为目的&#xff0c;有时也有教育目的。在英语中&#xff0c;体育比赛(Game)也是游戏&#xff0c;只要其活动本质带有目的、规则、挑战和互动&#xff0c;我们都可以把其归为游戏。 狭义…

小游戏开发指南及过程中的难点问题

如果仅仅针对个人开发者来讲&#xff0c;要独立开发一款大型游戏几乎无可能&#xff0c;更大成功的可能还是开发一款类似《羊了个羊》这样洗脑的小程序游戏。 所以这里主要论述小游戏开发的情况&#xff0c;也就是小程序游戏&#xff0c;首先从小游戏的开发流程来看&#xff1…