在笔记本或台式机上开发 Raspberry Pi GPIO 项目时,用一个小型模拟器替代 RPi.GPIO 会很有用。这样可以在把代码放到真实的 Pi 上运行之前,先测试导入路径、控制流程和输出逻辑。
方法一:使用简单的本地桩模块
在项目目录中创建一个名为 testRPiGPIO.py 的文件,然后在测试时导入它,而不是导入 RPi.GPIO:
import testRPiGPIO as GPIO
一个最小桩模块可以写成这样:
#!/usr/bin/python
BOARD = "board"
BCM = "bcm"
OUT = "out"
IN = "in"
HIGH = 1
LOW = 0
def setwarnings(mode):
print(mode)
def output(pin, value):
print(pin, ":", value)
def setmode(mode):
print(mode)
def setup(pin, value):
print(pin, ":", value)
def cleanup():
print("clean-up")
# End
对于只调用 setmode()、setwarnings()、setup()、output() 和 cleanup() 的非常简单的脚本,这种方法已经足够。如果你的程序会读取输入引脚、使用上拉或下拉常量,或者依赖 PWM 或事件检测,就需要扩展这个桩模块,或者使用功能更完整的模拟器。
方法二:使用 GPIO 模拟器包
下载 Pi GPIO Emulator 并解压到你的项目文件夹中。然后这样导入:
from EmulatorGUI import GPIO
如果你想用 pip 安装一个模拟器,可以使用:
pip install GPIOSimulator
然后在项目中这样导入:
from RPiSim.GPIO import GPIO
由于包名和导入路径可能会随时间变化,请在本地用 pip show GPIOSimulator 验证已安装的包;如果导入失败,请查看该包的文档。
支持的方法包括:
GPIO.setmode()GPIO.setwarnings()GPIO.setup()GPIO.input()GPIO.output()
示例
下面的示例使用模拟器导入。在真实的 Raspberry Pi 上,把它替换为 import RPi.GPIO as GPIO。
from EmulatorGUI import GPIO
# import RPi.GPIO as GPIO
import time
import traceback
def Main():
try:
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(4, GPIO.OUT)
GPIO.setup(17, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(21, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(26, GPIO.IN)
while True:
if GPIO.input(23) == False:
GPIO.output(4, GPIO.HIGH)
GPIO.output(17, GPIO.HIGH)
time.sleep(1)
if GPIO.input(15) == True:
GPIO.output(18, GPIO.HIGH)
GPIO.output(21, GPIO.HIGH)
time.sleep(1)
if GPIO.input(24) == True:
GPIO.output(18, GPIO.LOW)
GPIO.output(21, GPIO.LOW)
time.sleep(1)
if GPIO.input(26) == True:
GPIO.output(4, GPIO.LOW)
GPIO.output(17, GPIO.LOW)
time.sleep(1)
except Exception as ex:
traceback.print_exc()
finally:
GPIO.cleanup() # This ensures a clean exit.
Main()
进行真实硬件测试时,在 Raspberry Pi 上切回官方 GPIO 库:
import RPi.GPIO as GPIO
先运行模拟器版本来检查控制逻辑,然后在 Pi 上运行硬件版本,以验证引脚编号、接线、上拉或下拉行为以及电压输出。
