如何在Python3中使用Adafruit_BBIO模块?

1 投票
3 回答
3867 浏览
提问于 2025-04-18 09:43

我正在尝试在Beaglebone Black上使用GPIO引脚。我在尝试书中的一些代码示例时使用了Adafruit_BBIO.GPIO模块。之后,我用python3编写了整个逻辑,但它无法访问这个模块。我想问一下,有没有人知道如何用python3访问这个模块。

我已经尝试把Adafruit_BBIO目录复制到我的python3文件夹里,但没有成功。

'#!/usr/bin/python3
import Adafruit_BBIO'

当我像这样调用主脚本时

root@arm: python3 main.py

我收到了这个错误:

_Traceback (most recent call last): File "main.py", line 8, in <module> import lcd_control File "/home/debian/python/lcd_control.py", line 3, in <module> import Adafuit_BBIO.GPIO as GPIO ImportError: No module named 'Adafuit_BBIO'_ 

3 个回答

0

为了让这个问题更清楚,下面的方法现在可以在Debian "buster"上为python3安装Adafruit_GPIO:

pip3 install Adafruit-GPIO

项目历史来看,他们在2019年4月进行了更新,以支持Python 3。

1

太棒了!谢谢你,Joran,这对我帮助很大。一开始你的代码对我没用,我做了一些调整:现在我用的代码是这样的,可以导入到其他简单的程序中来使用GPIO:

  import os 
  class SimpleGPIO:
      def __init__(self,gpio_pin):
          self.gpio_pin = gpio_pin
          os.system("echo %d > /sys/class/gpio/export" % self.gpio_pin)
          self.gpio_path = "/sys/class/gpio/gpio%d/"%gpio_pin
          with open(self.gpio_path+"direction") as f:
              self.direction = f.read()
      def write(self,value):
          if self.direction != "out":
              os.system("echo out > %sdirection"%self.gpio_path)
              self.direction = "out"
          os.system("echo %s > %svalue"%(value,self.gpio_path))
      def read(self):
          if self.direction != "in":
              os.system("echo in > %sdirection"%self.gpio_path)
              self.direction = "in"
          with open(self.gpio_path+value) as f:
              return f.read()

现在,我只需要在开头加上 from gpio import SimpleGPIO 就可以重复使用这段代码了。

我发现当我把代码粘贴到这个帖子里时,似乎把你缺少的那一行也去掉了,import osos.system("echo %d > /sys/class/gpio/export..... 我猜你发帖的时候也发生了同样的事情,所以一开始对我来说没法用。

非常感谢!我真的不喜欢使用 Adafruit 模块,因为它不能直接在 python3 中工作,而且通过这个过程我学到了很多关于如何使用 GPIO 的知识,终于让代码能运行起来了。

1

你可以通过访问以下链接来了解你的GPIO(通用输入输出接口)信息:

$ ls /sys/class/gpio/gpio100 ;or whatever your gpiopin is

然后在Python中使用:

class SimpleGPIO:
     def __init__(self,gpio_pin):
        self.gpio_pin = gpio_pin
        self.gpio_path = "/sys/class/gpio/gpio%d/"%gpio_pin
        with open(self.gpio_path+"direction") as f:
        self.direction = f.read()
     def write(self,value):
        if self.direction != "out":
           os.system("echo out > %sdirection"%self.gpio_path)
           self.direction = "out"
        os.system("echo %s > %svalue"%(value,self.gpio_path)
     def read(self):
        if self.direction != "in":
           os.system("echo in > %sdirection"%self.gpio_path)
           self.direction = "in"
        with open(self.gpio_path+value) as f:
           return f.read()


 gpio_100 = SimpleGPIO(100) #open on 100
 gpio_100.write(1)

撰写回答