木子呢 发表于 2023-12-18 19:08:43

Python库揭秘PinPong:如何控制Raspberry Pi树莓派的GPIO和I2C

在本文中,我们将深入探讨“Python 库”的战略应用- RPi.GPIO 和 PinPong,有效操作“树莓派Raspberry Pi树莓派 GPIO”和“树莓派Raspberry Pi I2C” “Raspberry Pi树莓派”。本指南提供分步说明和详细的Python代码,使读者能够利用这两个库在 树莓派Raspberry Pi 上执行各种编程任务。无论您是Python新手还是经验丰富的开发人员,这里分享的见解和实践都将阐明如何有效使用“Python 库”。用于管理“Raspberry Pi GPIO”和“Raspberry Pi I2C”。有了这些可用的工具,您将有能力充分利用 Python 的强大功能,探索 Raspberry Pi 提供的广阔的微型计算机世界。

Python是一种非常强大的语言,如果您渴望踏上学习Python 的旅程,可以在广阔的互联网上找到大量宝贵的资源。其中,人们可以轻松获得丰富的视频、教程、文档和开发人员指南。

仔细阅读最新的编程语言排名,人们会发现 Python 雄踞前列。
来源:https://hellogithub.com/report/tiobe/
为什么Python语言受到如此广泛的喜爱?使用 Python 丰富自己可以获得多种成就的能力:

1.事实证明,Python 对于编写服务器端代码非常有利,因为它提供了一系列充满预先存在的复杂后端函数的库。
2.Python脚本在程序员中无处不在,他们利用它们来自动化无数的日常任务,例如将文件批量转换为替代格式。
3.在人工智能和机器学习领域,Python 是数据科学家开展大量数据驱动工作的首选工具,包括纠正和消除有缺陷的信息,通常称为数据清理。
4.软件开发人员经常使用Python进行各种开发任务和软件应用程序,利用图形用户界面(GUI)库来推出桌面应用程序。
然而,人们可以确定 Python 主要用于软件开发、数据操作等领域。因此,当努力将物理领域和创新领域融合起来以追求创客式项目时,人们可能会发现缺乏适合此类努力的信息和 Python 库。因此,在接下来的讨论中,作为一名创客,我们的重点将集中在利用Python语言的基础快速打造创客项目。

## 1. 使用Python实现Raspberry Pi的基本GPIO控制Blink

首先,我们选择Raspberry Pi作为能够运行Python的硬件,利用各种Python硬件控制库来实现所需的Blink效果。

### 项目所需软硬件准备:
硬件设备:树莓派

系统环境:已安装Linux系统且Python IDLE运行顺利

硬件连接图:

将 LED 的正极端子连接到引脚 7 (GPIO4),并将负极端子连接到与接地引脚相连的电阻。
图:Blink项目的硬件图
## 使用 RPi.GPIO 库在 Raspberry Pi 上进行 Blink 项目
说到控制树莓派上的GPIO来实现Blink项目,对于接触过树莓派的创客来说,没有什么比RPi.GPIO库更熟悉的了。这个非凡的库使您能够编写通过 Raspberry Pi 的 GPIO 引脚发出命令的 Python 程序。在 Pigpio 和 gpiozero 等各种可用库中,RPi.GPIO 脱颖而出,成为使用中最流行和最完善的库。利用Linux操作系统的内核,我们可以通过Python直接与文件交互来操作GPIO。

RPi.GPIO:https://pypi.org/project/RPi.GPIO/#description
图:Raspberry Pi 引脚定义表
## 树莓派 RPi.GPIO 代码

```
#import the GPIO and time package
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(4, GPIO.OUT)
# loop through 50 times, on/off for 1 second
for i in range(50):
    GPIO.output(4,True)
    time.sleep(1)
    GPIO.output(4,False)
    time.sleep(1)
GPIO.cleanup()
```

> * BCM 编号系统:BCM 编号系统基于 Raspberry Pi 上 Broadcom 芯片的引脚编号。这些数字是固定的,不受特定 Raspberry Pi 型号的影响。使用 BCM 编号系统时,您需要参考引脚的 BCM 编号以进行编程。
> * 板编号系统:板编号系统基于 Raspberry Pi 板上引脚的物理位置。每个特定的 Raspberry Pi 型号都有不同的物理引脚布局。因此,在使用 BOARD 编号系统时,您需要参考引脚的物理位置以进行编程。

## 使用 PinPong 库在 Raspberry Pi 上进行 Blink 项目
PinPong是DFRobot开发的一个用于控制开源硬件主板的Python库。借助 PinPong,您可以使用统一的 Python 代码以编程方式控制各种常见的开源硬件。现在让我们使用 PinPong 库在 Raspberry Pi 上实现 Blink。

PinPong 库链接:https://pinpong.readthedocs.io/

以下是在 Raspberry Pi 上实现 Blink 项目的 PinPong 代码:
```
      import time
from pinpong.board import Board,Pin
Board("rpi").begin()               

led = Pin(Pin.D4, Pin.OUT)
while True:
led.write_digital(1)
time.sleep(2)
led.write_digital(0)
time.sleep(1)
```

## Blink 项目的 Python 库实现比较:
当谈到 Raspberry Pi 上的基本 GPIO 控制时,这两个 Python 库都非常简单。虽然代码语法可能存在一些差异,但基本用法和逻辑是相似的。


通过对比官方的描述并进行实际测试,我发现这两个库都可以实现几个基本功能,包括:

> * 控制GPIO引脚的输入和输出
> * 操纵引脚的逻辑电平
> * 检测引脚逻辑电平的变化
> * 配置引脚的上拉和下拉电阻
> * 生成 PWM 信号
现在,当涉及到创意项目时,通常需要额外的传感器,例如 I2C 接口传感器。为了进一步验证 RPi.GPIO 和 PinPong 在处理连接到 Raspberry Pi 的外部超声波传感器方面的功能,让我们继续一个涉及超声波距离测量的有趣项目。

## 2. Python硬件控制:用Raspberry Pi创建超声波测距仪超声波距离测量项目涉及将超声波传感器连接到 Raspberry Pi 的 I2C 引脚,并快速检索颜色信息,同时通过串行通信显示 RGB 值。选择该项目的目的是为了更好地评估 RPi.GPIO 和 PinPong 库在使用某些专用传感器时的差异。

为了开展该项目,请确保以下软硬件准备:

### 硬件:

> * 树莓派
> * 超声波传感器

### 系统环境:
> * Linux系统已正确安装并运行Python IDLE

### 硬件连接图:
将I2C接口超声波传感器连接到Raspberry Pi的I2C接口。


图:树莓派硬件连接图
## 使用 smbus 库的 Raspberry Pi 超声波测距仪项目
Raspberry Pi 超声波测距仪项目利用 smbus 库进行 I2C 通信。虽然 RPi.GPIO 文档提到了读取 I2C 的功能,但没有提供具体的使用教程。在搜索过程中,发现了 Raspberry Pi 上 I2C 通信的替代常用库,名为 smbus2。该库补充了 RPi.GPIO 在 I2C 读取功能方面的限制。

以下是继续该项目的步骤:

> * ### 第 1 步:验证 Raspberry Pi 库的可用性
请参阅产品的 Wiki 文档以确认是否存在专门为所使用的超声波传感器设计的库。

> * ### 第二步:将超声波库导入树莓派
安装并导入 Wiki 文档中提到的超声波传感器的适当库。

> * ### 步骤3:I2C超声波读取和距离测量的代码实现
编写必要的代码以通过 I2C 接口读取超声波传感器数据,并使用导入的库计算距离测量值。

```
      # -*- coding:utf-8 -*-
import sys
import time
sys.path.append("../")
from DFRobot_URM09_RPI import *

urm09 = DFRobot_URM09_IIC(0x01, 0x11)
urm09.set_mode_range(urm09._MEASURE_MODE_AUTOMATIC, urm09._MEASURE_RANG_500)

while True:
dist = urm09.get_distance()
#Read temperature register
# temp = urm09.get_temperature()
print("Distance is %d cm         " %dist)
# print("Temperature is %.2f .c    " %temp)
time.sleep(0.1)
```



## 演示

图:超声波测距仪项目演示
Raspberry Pi 超声波测距仪项目基于 PinPong 代码构建

导入PinPong后,通过列表可以看出PinPong与I2C超声波库兼容,可以快速直接检索超声波值进行测速。

要继续,请通过终端输入以下说明:


图:超声波测距仪项目演示

```
python
import pinpong
print(pinpong.__path__)
exit()

```

图:支持的模块 Pinpong 库
这是超声波测距仪的完整示例代码:

```
      # -*- coding: utf-8 -*-

#RPi and PythonBoard
import time
from pinpong.board import Board
from pinpong.libs.dfrobot_urm09 import URM09 #从libs中导入URM09库

Board("RPi").begin()

urm = URM09(i2c_addr=0x11, bus_num=1) #初始化传感器,设置I2C地址
urm.set_mode_range(urm._MEASURE_MODE_AUTOMATIC ,urm._MEASURE_RANG_500) #设置URM09模式为自动检测,最大测量距离500cm

while True:
dist = urm.distance_cm() #读取距离数据,单位厘米(cm)

print("Distance is %d cm         "%dist)
time.sleep(0.5)
```

## 演示

图:超声波测距仪项目演示
## 使用Python库实现超声波测距仪的代码应用程序比较

通过这个超声波测距仪项目,可以观察到RPi.GPIO和smbus库有一定的局限性:

> * RPi.GPIO 提供读取和控制数字/模拟传感器的基本功能。但是,如果使用其他传感器,例如超声波或颜色传感器,您将需要为这些模块开发单独的库。
> * smbus 库允许读取 I2C 数据,但需要很好地理解编码才能实现所需的结果。
> * 或者,您可以联系相应的传感器制造商。如果模块与 Raspberry Pi 兼容,制造商可能会提供特定的库。
> * PinPong 为某些传感器提供预先编写的库,允许直接实施和优化代码。这使得它更适合Python新手用户。

## 3. Raspberry Pi 的 RPi.GPIO、Smbus 和 PinPong 库的比较

通过研究官方文档和在线提供的各种创客项目,我们发现 RPi.GPIO 是一个用户友好的 Raspberry Pi 库,特别适合探索 Raspberry Pi 世界的初学者和新手。这是一个官方推荐的库。不过,经过慎重考虑,建议新手也应该​​尝试一下PinPong。

### 共同特点:

> * 这两个库都可以满足基本的 Raspberry Pi GPIO 控制要求,例如创建 Blink 等项目以及使用按钮控制 LED。

### 差异点:

> * PinPong 库提供与不同板控制器的兼容性。

> RPi.GPIO 库只能与 Raspberry Pi 一起使用,而 PinPong 可以对 Arduino、micro:bit 和其他微控制器进行基于 Python 的控制。

> PinPong 的运行方式是将特定的固件刷新到开源硬件上,使其能够通过串行通信与计算机进行通信并执行各种命令。这意味着您现在可以使用 Python 控制 Arduino。

> 目前,PinPong 库支持以下板卡模型:


> * PinPong 库可以在主要的 SBC 系统上安装和运行,包括 Mac OS、Linux 和 Windows。

> 使用 PinPong,您可以控制 GPIO,而无需更改系统环境,无论您的单板计算机 (SBC) 或计算机上运行什么操作系统。这意味着您可以通过串口与计算机进行通信并执行多个命令。

> 如果您拥有Windows操作系统的高性能单板计算机,并使用Python实现了AI算法和数据处理,那么您可以通过Python语言直接控制电机、舵机等外设,轻松实现AI机器人项目。

> * PinPong 库有助于 Python 项目的快速硬件迁移。

> 通过将开发人员从不同硬件模型的限制中解放出来,他们可以专注于软件实现。无论最初的程序开发是在Arduino上进行,后来改用Raspberry Pi进行部署,只需修改硬件参数即可无缝执行,体现了“一次编写,随处运行”的原则。

> 使用该库时,切换控制器就像根据指定的板类型和端口号生成相应的对象一样简单。

示例:初始化为 Arduino UNO
```
      Python
#UNO
Board("uno").begin()               #Select the board type (Uno, Micro:bit, RPi, Handpy) and port number. If the port number is not provided, automatic recognition will be performed.

```

示例:初始化为 Raspberry Pi
```
      #Raspberry Pi
Board("rpi").begin()                #Select the board type (Uno, Micro:bit, RPi, Handpy) and port number. If the port number is not provided, automatic recognition will be performed.

```

> * PinPong 为一百多个常用传感器提供了广泛的 Python 库。

> 通过之前的测试,我们发现很多专用模块的快速使用依赖于专用的库。 PinPong的开发人员为舵机、DHT11等温湿度传感器、NFC模块等常用组件编译并不断开发硬件支持库,使其易于直接调用。

> 展示智能家居项目温度监控的示例项目:

> 在该项目中,利用LCD显示屏和温度传感器来方便地查看实时温度数据并将其显示在屏幕上。这使得实现简单的智能家居温度监控系统成为可能。

```
      import time
from pinpong.board import Board,Pin
from pinpong.libs.lcd1602 import LCD1602_I2C

Board("uno").begin()##Select the board type (Uno, Micro:bit, RPi, Handpy) and port number. If the port number is not provided, automatic recognition will be performed.
adc0 = Pin(Pin.A0, Pin.ANALOG) #Initializing the temperature reading pin to A0.
lcd = LCD1602_I2C(i2c_addr=0x20)#Initializing the I2C address for the LCD display.
lcd.backlight(True) #Turn on the backlight
lcd.clear()#Clear the screen
lcd.set_cursor(2,0)#Set the cursor position
lcd.print('temperature')# Display "temperature"

while True:
    v = adc0.read_analog()#Read the analog value
    tem = round(v*(5/10.24),2)# Convert the read value to temperature data
    lcd.set_cursor(5,1)
    lcd.print(str(tem))
    lcd.print('C')
    time.sleep(1)
```

PinPong 当前支持的模块库列表包括:

>* 1.伺服电机。
>* 2.蜂鸣器模块
>* 3.超声波传感器(SR04)
>* 4.温湿度传感器(DHT11)
>* 5.WS2812 RGB LED灯带
>* 6.1602液晶显示
>* 7 .OLED显示屏
>* 8.颜色识别传感器
>* 9.红外测温传感器
>* 10.NFC(近场通信)模块
>* 11.空气质量传感器
>* 12.I2C BME280环境传感器
>* 13.音频分析模块

要及时了解 PinPong 的最新模块库添加内容,我建议访问官方文档:https://pinpong.readthedocs.io/。导入 PinPong 后,您将能够访问当前版本支持的最新模块库列表。


图:支持的模块 Pinpong 库
通过对比测试,发现了一个新的Python库,名为PinPong。为什么我建议尝试 PinPong?

如果您以前使用过 RPi.GPIO 库,我建议您探索 PinPong。您无需担心创意项目的编码复杂性,因为有适用于各种传感器的预定义读取方法。这大大降低了项目编码的难度。

如果您有 Python 编码基础,但目前主要在 PC 上工作,那么可能值得考虑集成硬件控制。通过结合 PinPong 库的强大功能,您对硬件的理解将大大简化,使您能够通过库函数快速实现项目。如果有人对树莓派的 Python 库有新的发现,或者有基于 PinPong 的创新想法,我鼓励公开讨论和交流。
页: [1]
查看完整版本: Python库揭秘PinPong:如何控制Raspberry Pi树莓派的GPIO和I2C