使用 Rasbian 有一个方便的工具rasi-config
可以启用/禁用树莓派上的 SPI 和 I2C。但是 Ubuntu 没有这样的工具,也没有直接启用它们的方法(据我所知)。有补丁像这样有些人已经成功了,但似乎不适用于 20.04。我正在尝试启用 SPI 来跟踪本教程。当我运行 Python 脚本时,我总是得到:
Traceback (most recent call last):
File "testwind.py", line 8, in <module>
spi.open(0,0)
PermissionError: [Errno 13] Permission denied
是否有针对 Ubuntu Server 20.04 的官方文档来启用 SPI 和 I2C?提前致谢。
答案1
更新,启用 I2C 的分步指南:
上周,我最后的零件到货了,所以我完成了硬件并配置了 Ubuntu 20.04。我正准备开始摆弄 I2C,这时托马斯评论了我原来的答案,链接这文章作者亚历山大·吕德林格有了缺失的部分,启动 I2C 就轻而易举了。下面的内容也应该适用于 SPI。
导航raspi-配置在archive.raspberrypi.org上。选择最新版本。
将该文件下载到 /tmp 并尝试使用 dpkg 安装。
wget https://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_*INSERT DATE*_all.deb -P /tmp
sudo dpkg -i /tmp/raspi-config_*INSERT DATE*_all.deb
这会导致错误,报告缺少依赖项。阅读输出并安装依赖项:
sudo apt-get install *INSERT DEPENDENCIES*
alsa-utils
这导致依赖项之一的安装失败。要修复,请运行:sudo apt-get -fy
现在安装 raspi-config:
sudo dpkg -i /tmp/raspi-config_*INSERT DATE*_all.deb
运行 raspi-config,导航到“接口选项”,启用 I2C。
安装相关软件包。您至少需要安装一个,但如果这是您选择的语言,
i2c-tools
我建议您libi2c-dev
也安装一个。python3-smbus
尝试以用户和根用户身份探测总线:
sudo i2cdetect -y 1
(或者0
,I2C 总线号取决于硬件)如果这给了你一个地址矩阵,则 I2C 已打开并正在工作。
i2cdetect -y 1
(或者0
)如果出现权限错误,请执行下一步。否则,请跳过。
创建一个 I2C 用户组,将其应用到总线并将您的用户添加到该组:
sudo groupadd i2c
(该组可能已经存在)sudo chown :i2c /dev/i2c-1
(或者i2c-0
)sudo chmod g+rw /dev/i2c-1
sudo usermod -aG i2c *INSERT YOUR USERNAME*
注销并登录。我通过 VS code 的 SSH 扩展连接,需要重新启动。然后重试:
i2cdetect -y 1
一些评论:
提供的说明留言在这个问题是必不可少的,但实际依赖项已经过时了几年。所以我建议您尝试步骤 1 并阅读 dpkg 输出以根据您的 raspi-config 版本定制依赖项。
看来 raspi-config 可能不是必需的,但你可能只需要将标志添加dtparam=i2c_arm=on
到 /boot/config.txt(参见官方文档)。我还没有尝试过(目前还没有)。如果您想尝试,sudo nano /boot/config.txt
请在新行中添加标志,按 CTRL-X,按 Y 确认,然后从步骤 #6 开始。
原始答案:
过去几天我一直在关注类似的问题。似乎没有官方支持,非官方软件包似乎大部分都已过时。
安装 raspi-config
鉴于 RasPi OS 和 Ubuntu 都是基于 Debian 的,因此它可以轻松工作。我已经为自己制定了以下方法,但可能无法在接下来的几周内进行测试:
- 我将尝试留言在里面问题你链接了。
- 请注意,他的回答链接到这講述埃米尔·格斯在 Github 上,它指定了许多依赖项。
- 根据建议nc4pk在此问题,我将从官方 RasPi 仓库中获取最新版本的 raspi-config。
- 我认为这是这文件夹。
权限问题
这就是安装过程,您可能已经搞定了。从错误来看,我猜运行的用户testwind.py
需要额外的权限才能访问该界面 - 或者在 Ubuntu 下必须以不同的方式访问该界面。我希望有人能对此发表意见。
语境
我正在计划一个项目来实现大满贯在 8GB RasPi 4 上。我使用两个 Arduino 作为额外的 GPIO 并运行硬件控制循环:即PID控制脉宽调制, 以便每分钟转数即使地形不同,也大致恒定。使用 I2C 并以 RasPi 作为主机;尚未研究 SPI。
鉴于 SLAM 算法具有更多的内存密集型(但计算量较少)实现,我选择了新的 8GB RasPi 4。每个进程的内存限制为 3GB可能会妨碍我,因此我将运行 Ubuntu 20.04 LTS 64 位服务器。
如果无法正常工作,我将在 Raspberry Pi OS 下测试 I2C。一旦我有了可用的测试脚本,我就会回到 Ubuntu。
答案2
根据我在 RPI4 上使用 Ubuntu 20.04 服务器的经验,默认情况下 I2C 和 SPI 均已启用。检查文件/boot/固件/syscfg.txt看看是否有以下几行:
dtparam=i2c_arm=on
dtparam=spi=on
如果没有,也许你可以将它们附加到/boot/firmware/usercfg.txt然后重启,希望一切顺利。如果这不起作用,也许可以这样做,sudo apt update && sudo full-upgrade -y
看看是否需要任何发行版更新。
答案3
据我所知法伊亚兹·海德尔已经声明 SPI 和 I2C 在 RPi 4 上的 Ubuntu Server 20.04 上都已处于活动状态。你的问题似乎更多地与权限问题比禁用的 SPI。
关于SPI和权限,检查spidevs的权限:
ls -la /dev/spidev*
如果您看到此类权限:
crw-------
然后,您必须相应地更改他们的权限,使它们成为您希望能够访问 SPI 的用户的读写权限。您可以按照以下方式进行操作:
sudo groupadd spiuser
sudo usermod -aG spiuser <yourusername>
sudo chown :spiuser <put the spi device name here>
sudo chmod g+rw <put the spi device name here>
您必须为每个 spi 设备重复最后两行,您可以使用上面的 ls 命令获取列出它们的 spi 设备名称。这应该能够解决您的权限问题。
答案4
工作解决方案:
当我尝试将 BMX160(地址 0x68)传感器与运行 Ubuntu 22.04 的 Raspberry Pi 4 连接时,我遇到了同样的问题。我在 Google 上搜索了几分钟,尝试了各种其他命令,然后我找到了完美的解决方案bus.SMBus(1): PermissionError: [Errno 13] Permission denied problem
。以下是对我有用的解决方案,分步说明:
- 确保您已python3-smbus已安装。如果没有,请运行命令进行安装
sudo apt install python3-smbus
- 运行命令,
sudo i2cdetect -y 1 (or 0, maybe)
这应该显示一个矩阵,其中地址(对我来说是 0x68)位于相应的行和列下。 - 运行命令,
sudo groupadd i2c
(i2c 组可能已经存在,没关系) - 运行命令,
sudo chown :i2c /dev/i2c-1 (or /dev/i2c-0)
- 运行命令,
sudo chmod g+rw /dev/i2c-1 (or /dev/i2c-0)
- 运行命令,
sdo usermod -aG <insert_your_username>
- 现在关闭终端并退出系统并重新登录
- 现在,当您最终运行时
i2cdetect -y 1 (or 0)
,您将能够在没有任何 root 访问权限的情况下看到矩阵,这表明现在您将能够使用当前用户本身访问您的 i2c 设备!
这是我在 StackExchange 上的第一个答案!希望它能真正帮助您找到正确的解决方案。
谢谢你!!