34、树莓派 GPIOZero Python 库:轻松控制外部设备

树莓派 GPIOZero Python 库:轻松控制外部设备

1. 树莓派 GPIO 简介

树莓派的一大主要特性是能够通过 40 针 GPIO 连接器与外部设备进行交互。借助这个连接器,我们既可以从外部传感器读取数据,比如温度、湿度和大气压力等;也能够控制外部设备,例如触发继电器或者驱动 RGB LED 灯带。

不过,要实现对这些外部设备和传感器的控制,除了完成电气连接之外,还需要编写并运行相应的程序。树莓派是一款功能完备的计算机,支持多种操作系统,包括 Linux,因此可以使用多种编程语言来编写控制程序:
- 年轻人可以使用可视化语言 Scratch,这对于引导他们进入计算和编程领域非常有帮助。
- 追求高性能的开发者可以选择使用 C/C++ 进行编程。
- 来自 Web 领域的开发者可以使用 node.js。
- 对新兴语言感兴趣的人可以使用 Go 语言来编写和控制 GPIO。
- 而对于追求简单、表达性和即时性的开发者,Python 语言是一个不错的选择。

2. GPIOZero 库概述

GPIOZero 是专门为树莓派设计的 Python 库,它为通过 GPIO 引脚连接和控制的设备与传感器提供了简单的接口。该库由树莓派基金会开发和维护,并遵循 BSD 3 - 条款“新”或“修订”许可证发布。

这个许可证非常宽松,允许以源代码和二进制形式重新分发该库,无论是否进行修改。但需要遵守以下三个约束条件:
1. 以源代码形式重新分发时,必须始终携带版权信息。
2. 以二进制形式重新分发时,必须在所有部分(包括文档和与项目相关的任何其他材料)中携带版权信息。
3. 未经特定书面许可,不得使用版权持有者(树莓派基金会)和任何贡献者的名称以任何方式或形式来推荐或推广使用该库的产品。

以下是一个简单的表格总结了 GPIOZero 库的特点:
| 特点 | 详情 |
| ---- | ---- |
| 开发者 | 树莓派基金会 |
| 许可证 | BSD 3 - 条款“新”或“修订”许可证 |
| 许可范围 | 允许重新分发,可修改 |
| 约束条件 | 源代码和二进制分发需带版权信息,不得随意使用版权方名称推广 |

3. 设备建模

GPIOZero 库的关键特性在于为树莓派常用的设备提供了高级模型或接口。与其他库不同的是,它不需要程序员手动管理单个引脚,而是为每个支持的组件提供了特定的接口和一组高级方法。

版本 1.4.1 支持的组件如下:
- LED
- 带 PWM 亮度控制的 LED
- 板载 LED
- LED 条形灯
- LED 交通灯
- RGB LED
- 按钮
- HC - SR501 PIR 运动传感器
- LDR 亮度传感器
- HC - SR04 超声波距离传感器
- DC 电机(直流)
- 双轮机器人(RC 车)
- MCP300x 模拟 - 数字转换器(AC/DC)
- BlueDot
- GPIO 远程控制
- TCRT5000 线传感器
- 声学蜂鸣器
- SG90 伺服电机

除了这些组件,该库还可以通过扩展特定类来支持许多其他外部设备。也就是说,开发者可以扩展该库以支持尚未在上述列表中出现的外部设备。

下面是一个简单的 mermaid 流程图,展示了使用 GPIOZero 库控制设备的基本流程:

graph LR
    A[连接外部设备到 GPIO 引脚] --> B[导入 GPIOZero 库]
    B --> C[创建对应设备对象]
    C --> D[使用对象方法控制设备]

接下来,我们将介绍如何使用该库来控制两个简单的设备,如 LED(输出)和按钮(输入),并与 Arduino 平台进行比较,突出其优势和高级特性。

4. 使用 GPIOZero 库控制 LED 和按钮

4.1 控制 LED

下面我们将展示如何使用 GPIOZero 库来控制一个 LED。假设 LED 连接到树莓派的 GPIO 引脚 17。以下是示例代码:

from gpiozero import LED
from time import sleep

# 创建一个 LED 对象,指定连接的 GPIO 引脚
led = LED(17)

# 循环 5 次,每次点亮 LED 1 秒,然后熄灭 1 秒
for i in range(5):
    led.on()  # 点亮 LED
    sleep(1)  # 等待 1 秒
    led.off()  # 熄灭 LED
    sleep(1)  # 等待 1 秒

上述代码的操作步骤如下:
1. 导入 LED 类和 sleep 函数。 LED 类用于创建 LED 对象, sleep 函数用于暂停程序执行。
2. 创建一个 LED 对象,指定连接的 GPIO 引脚为 17。
3. 使用 for 循环 5 次,每次循环中调用 on() 方法点亮 LED,然后使用 sleep(1) 暂停 1 秒,接着调用 off() 方法熄灭 LED,再暂停 1 秒。

4.2 读取按钮输入

假设按钮连接到树莓派的 GPIO 引脚 27,以下是读取按钮输入的示例代码:

from gpiozero import Button
from time import sleep

# 创建一个 Button 对象,指定连接的 GPIO 引脚
button = Button(27)

while True:
    if button.is_pressed:  # 检查按钮是否被按下
        print("按钮被按下!")
    else:
        print("按钮未被按下。")
    sleep(0.1)  # 每隔 0.1 秒检查一次

操作步骤如下:
1. 导入 Button 类和 sleep 函数。
2. 创建一个 Button 对象,指定连接的 GPIO 引脚为 27。
3. 使用 while True 循环不断检查按钮状态。通过 is_pressed 属性判断按钮是否被按下,如果按下则打印相应信息,否则打印未按下信息。
4. 使用 sleep(0.1) 暂停 0.1 秒,避免过于频繁地检查按钮状态。

4.3 结合 LED 和按钮

我们可以将 LED 和按钮结合起来,当按钮被按下时点亮 LED,松开时熄灭 LED。示例代码如下:

from gpiozero import LED, Button
from signal import pause

# 创建 LED 和 Button 对象
led = LED(17)
button = Button(27)

# 定义按钮按下和松开时的回调函数
def button_pressed():
    led.on()

def button_released():
    led.off()

# 绑定回调函数
button.when_pressed = button_pressed
button.when_released = button_released

# 保持程序运行,等待事件发生
pause()

操作步骤如下:
1. 导入 LED Button 类和 pause 函数。
2. 创建 LED Button 对象,分别指定连接的 GPIO 引脚。
3. 定义 button_pressed() button_released() 回调函数,分别用于在按钮按下和松开时执行相应操作。
4. 使用 when_pressed when_released 属性将回调函数绑定到按钮的按下和松开事件上。
5. 调用 pause() 函数,使程序保持运行,等待按钮事件的发生。

4.4 与 Arduino 平台比较

比较项 GPIOZero(树莓派) Arduino
编程语言 Python,易于学习和快速开发 C/C++,性能较高但学习曲线较陡
设备建模 提供高级接口,无需管理单个引脚 需要手动管理引脚
扩展性 可通过扩展类支持新设备 扩展性相对较弱,需编写底层代码
生态系统 丰富的 Python 库支持 有大量的 Arduino 库和教程

从上述表格可以看出,GPIOZero 在开发的简易性和快速迭代方面具有优势,而 Arduino 在性能和底层控制方面表现较好。

5. 总结

通过本文,我们了解了树莓派 GPIO 的基本功能以及如何使用 GPIOZero 库来控制外部设备。GPIOZero 库为树莓派开发者提供了一个简单、高效的方式来与各种设备和传感器进行交互。其高级的设备建模特性使得开发者无需关注底层的引脚管理,能够更专注于实现具体的功能。

同时,我们通过控制 LED 和按钮的示例代码,展示了如何使用 GPIOZero 库进行实际开发。并且将其与 Arduino 平台进行了比较,突出了各自的优缺点。

在实际应用中,开发者可以根据项目的需求和自身的技术栈来选择合适的平台和库。如果追求快速开发和简单的编程体验,GPIOZero 库是一个不错的选择;如果对性能和底层控制有较高要求,Arduino 可能更适合。

希望本文能够帮助你更好地理解和使用 GPIOZero 库,开启你的树莓派开发之旅。

C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​ 内容概要:本文围绕动态环境下多无人机系统的协同路径规划与防撞问题展开研究,提出基于Matlab的仿真代码实现方案。研究重点在于在复杂、动态环境中实现多无人机之间的高效协同飞行与避障,涵盖路径规划算法的设计与优化,确保无人机集群在执行任务过程中能够实时规避静态障碍物与动态冲突,保障飞行安全性与任务效率。文中结合智能优化算法,构建合理的成本目标函数(如路径长度、飞行高度、威胁规避、转弯角度等),并通过Matlab平台进行算法验证与仿真分析,展示多机协同的可行性与有效性。; 适合人群:具备一定Matlab编程基础,从事无人机控制、路径规划、智能优化算法研究的科研人员及研究生。; 使用场景及目标:①应用于灾害救援、军事侦察、区域巡检等多无人机协同任务场景;②目标是掌握多无人机系统在动态环境下的路径规划与防撞机制,提升协同作业能力与自主决策水平;③通过Matlab仿真深入理解协同算法的实现逻辑与参数调优方法。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注目标函数设计、避障策略实现与多机协同逻辑,配合仿真结果分析算法性能,进一步可尝试引入新型智能算法进行优化改进。
先展示下效果 https://pan.quark.cn/s/a4b39357ea24 StudentInfo 基于SSM的学生信息管理系统(选课) 已停更 项目简介: 由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离,主机丛机分别为腾讯云的服务器,而项目部署在阿里云上。 前端主要由bootstrap完成,背景用particles.js插件。 数据交互查询用到pagehelper分页。 在添加修改相关功能时通过ajax来验证其主键是否存在可用。 代码层次清晰,输入框约束较高,已配置登录拦截。 一、应用技术 #### 工具:eclipse、navicat 环境:JDK1.8、tomcat9.0、mysql8.0 前端:JavaScript、jQuery、bootstrap4、particles.js 后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页 二、功能 #### 这是在上个springmvc选课系统的基础上进行修改完善的,目前功能基本相同,修复诸多bug,上个系统中有详细介绍:B/S基于springMVC的网上选课系统 主要功能模块图: 新增: 增加分页查询 输入框约束 学号、身份证、课程编号、教师编号只能输入数字,并且有最大输入限制,其中学号固定12位,若小于12位将会有提示。 姓名只能输入中文。 几乎所有输入框不能输入空格等约束 下拉框联动 添加、修改课程采用二级联动,即所属系别——所属专业; 添加、修改学生采用三级联动,即系别——专业——班级。 (三级联动代码有些复杂,因为JavaScript学的不好=-=)。 ajax+springmvc验证 用于验证学号、课程编号、教师...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值