在树莓派上用Python控制LED

所需材料

  • 一个已经安装配置好了的树莓派
  • 连接控制树莓派所用的其他必须设备
  • 200Ω电阻 x 8
  • led x 8
  • 面包板及连接线若干

电路连接

电路图

按照电路图所示,在面包板上进行连接。

编写程序

安装RPi.GPIO

首先得确定RPi.GPIO已安装。最新的系统已经自带了,如果没有的可以使用命令

sudo apt-get update

sudo apt-get install python-dev python-rpi.gpio

来安装

编写模块

用文本编辑器新建一个led.py文件。(高手们都用vi,我只会用nano…)

cd

mdir GPIO

cd GPIO

nano led.py

python代码如下:

import RPi.GPIO as GPIO
import time

channels = [16,18,22,24,26,19,21,23]

def init():
GPIO.setmode(GPIO.BOARD)
for x in channels:
GPIO.setup(x,GPIO.OUT)
pass

def on(i):
GPIO.output(channels[i], GPIO.HIGH)

def off(i):
GPIO.output(channels[i], GPIO.LOW)

def ctrl(data):
for i in channels:
GPIO.output(i, data & 0×1)
data = data >> 1
pass

def test():
for i in xrange(512):
ctrl(i)
time.sleep(0.1)

def clean():
GPIO.cleanup()

你可以在树莓派上直接编辑这个文件,也可以将文件在电脑上编辑好,然后用SFTP或者Linux下的scp命令传到树莓派上。

调用模块

你可以编写一个test.py调用刚刚编写好的led模块:

import led

led.init()

led.test()

led.clean()

也可以直接在python shell中操作,这里是我在python shell中调用写好的模块的一个例子

要注意的是,GPIO操作需要管理员权限,因此要用sudo。譬如视频中我在启动python shell的时候前边加了sudo:

sudo python

而在运行自己写的test.py的时候也要加sudo:

sudo python test.py

知识补充:

RPi.GPIO模块函数说明:

RPi.GPIO.setmode(naming_system)

设置将GPIO针的命名方式。naming_system可用的取值有 RPi.GPIO.BCM 和 RPi.GPIO.BOARD,分别代表boardcom命名系统和树莓派板子上的命名系统。而因为使用BCM 的时候(据说)不同的版本BVM针脚定义不一样,所以同一套程序在多个树莓派系统上使用的时候建议用BOARD。

RPi.GPIO.setup(channel, state)

将标号为channel的针设置为state模式。channel取值为1~26,state取值为RPi.GPIO.IN 或者RPi.GPIO.OUT,分别表示输入和输出。例如 RPi.GPIO.setup(1, RPi.GPIO.IN)表示将1号针设置为输入模式;RPi.GPIO.setup(3, RPi.GPIO.OUT)表示将3号针设置为输出模式。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.output(channel, state)

将标号为channel的针设置为state指定的电平。channel取值为1~26,state取值为RPi.GPIO.HIGH 和RPi.GPIO.LOW,或者1和0,或者True和False,表示高电平和低电平。例如RPi.GPIO.output(1, 1) 表示把1号针设置为高电平,RPi.GPIO.output(3, Flase) 表示将3号针设置为低电平。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.input(channel)

获取将标号为channel的针的电平砖头。channel取值为1~26。例如RPi.GPIO.input(1) 表示获取1号针的状态。

RPi.GPIO.cleanup()

清除掉之前RPi.GPIO.setup()设置的状态。退出程序之前一定要调用,否则下次调用的时候会报错。

led.py模块说明

channel 中保存的是连接中使用的针的标号,按顺序。

init() 是初始化GPIO接口的代码,使用控制lcd去前要调用。主要工作是设置接口命名模式和 将channel中的针设置为输出模式

on() / off() 是将channel 中第i个针设置为高电平/低电平

ctrl() 是根据参数设置全8根针的电平。参数的低0位、低1位、低2位…分别表示channel下标为0、1、2…的针的电平状况,1为高电平、0为低电平

test() 是测试函数。用8位二进制表示8个灯的状态,每隔0.1秒到下一个状态: 0000 0000, 0000 0001, 0000 0010, 0000 0011,0000 0100 … 实际上就是从0数到255

clean() 是对 RPi.GPIO.cleanup() 的一个封装

时间: 2024-08-28 03:36:37

在树莓派上用Python控制LED的相关文章

VS Code 调试树莓派上的python程序

安装pip install ptvsd 在py文件前面加代码 import ptvsd ptvsd.enable_attach() ptvsd.wait_for_attach() ptvsd.break_into_debugger() 调试配置文件launch.json代码 { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes.

【物联网(IoT)开发】使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关

上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断开网络提供电源依然还可以工作.本文将介绍如何开发一个应用程序,以便使用适用于物联网 (Internet of Things, IoT) 的技术.我们的应用程序通过串口收集数据,将其存储在一个 Web 服务器上,然后在网页上实时显式结果,并可以在网页上控制LED的开关. 构建一个类似的应用程序的前提条件 对于第

树莓派 LED+蜂鸣+声音传感器+红外模块组合打造声控/红外控制LED

昨天搞了控制LED,玩了第一个,剩下的就感觉很简单了,这里记录一下 先来几张照片 玩了蜂蜜模块才发现规律,一般这种模块,都会有三个针脚,VCC(3.3V或5V供电输出针脚).GNC(对应GPIO针脚的GNC).OUT/(I/O)(对应GPIO编号的针脚),如果是需要向树莓派发送信息的,这个模块上标识的是OUT,例如这里用的声音传感器和人体红外传感器,这两个都是需要向树莓派发送侦测的信息,如果不需要向树莓派发送消息的,则标识的是I/O,比如我这个蜂鸣模块,这只是我用这三个传感器发现的,可能不正确

云中树莓派(4):利用声音传感器控制Led灯

云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感器控制Led灯 1. 声音传感器及其配置 声音传感器如下图所示: 将 VCC 引脚接入树莓派 5V 引脚,将 GND 引脚接入树莓派 GND 引脚,将 OUT 引脚接入树莓派 GPIO20. 要注意,模块在环境声音强度达不到设定阈值时,OUT输出高电平(1),当外界环境声音强度超过设定阈值时,模块O

驱动控制开发板上的四个LED小灯

在上一章了解了开发linux驱动程序的步骤,在本章会完成一个真正意义上的linux驱动,该驱动用来控制开发板上的四个LED小灯,通过向驱动发送数据可以控制LED小灯的开关. 首先介绍了LED驱动的实现原理,虽然linux驱动直接与硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.Linux内核的内存管理模块负责同步I/O内存与硬件中的数据.每一个连接linux的硬件在I/O内存中都会有映射首地址. 其次是编写LED驱动.以下创建一个设备文件,第一步:使用

树莓派GPIO输入输出--控制LED

GPIO引脚有两种模式BOARD和BCM. 1.GPIO输出控制LED 效果图: 代码: (1)使用BOARD模式,GPIO.setmode(GPIO.BOARD).35号引脚在BCM下是GPIO19 (2)将引脚35设置为输出模式,GPIO.setup(35,GPIO.OUT) (3)对GPIO35引脚输出高电平,也可以为GPIO.HIGH 2.GPIO接口获取输入信号 效果图: 电路图 当开关断开时,GPIO23是高点平获取到的输入信号是Ture.当开关按下时GPIO23为接地,获取到的信号

第七章主要讲的是控制发光二极管的驱动程序,用来控制开发板上的4个led灯

首先讲了led驱动的实现原理,linux驱动并不是直接向硬件的内存中写数据,而是与本机的i/o内存进行交互,每一个连接linux的硬件在i/o内存中都会有映射首地址. 编写驱动程序,先创建led驱动的设备文件: 1.使用cdev_init函数初始化cdev 描述设备文件需要一个cdev的结构体,cdev的大多是成员变量并不需要我们去初始化,只要调用cdev_init函数就可以初始化大部分cdev的成员变量 2.指定设备号 Linux 的设备的文件号分为 主设备号和此设备号,设备号有两种指定方法:

树莓派.使用Node.js控制GPIO

树莓派上的40个GPIO是最好玩的东西 它们可以被C,/C++, Python, Java等语言直接控制 现在就来看看怎么用Node.js做到同样的事情 在试验之前, 请先安装好Node.js, 具体可以移步到: <树莓派.安装系统+Node.js+MongoDB系列环境> 1.准备试验文件夹 mkdir /home/pi/Documents/test-gpio-demo/ 2.创建文件package.json { "name": "test-gpio-demo&

树莓派上的GPIO字符驱动程序

前言 主要是在嵌入式Linux(树莓派)中如何使用已有的函数库编写应用程序操纵GPIO,如何编写字符设备驱动程序在内核程序中使用GPIO 硬件连接图 虚拟文件系统操作GPIO Linux可以通过访问sys/class/gpio下的一些文件,通过对这些文件的读写来实现对于GPIO的访问. 树莓派下面的可用的GPIO如下图所示,需要注意树莓派一代和二代的区别 首先用一个小灯来测试下操作.首先向export中写入18,表示启用18号gpio端口,执行之后,可以看到该目录下多出了一个gpio18的目录.