Usando Rasbian, existe a ferramenta conveniente rasi-config
para ativar/desativar SPI e I2C em um pi de framboesa. No entanto, não existe essa ferramenta para o Ubuntu e nenhuma maneira direta de habilitá-los (tanto quanto eu posso pesquisar no Google). Existem patches como este onde alguns tiveram sucesso, mas não parece funcionar para 20.04. Estou tentando habilitar o SPI para seguir este tutorial . Quando executo o script python, sempre recebo:
Traceback (most recent call last):
File "testwind.py", line 8, in <module>
spi.open(0,0)
PermissionError: [Errno 13] Permission denied
Existe alguma documentação oficial para o Ubuntu Server 20.04 para raspberry pi para habilitar SPI e I2C? Desde já, obrigado.
Update, um guia passo a passo para habilitar o I2C:
Na semana passada, minhas últimas peças chegaram, então terminei o hardware e configurei o Ubuntu 20.04. Eu estava prestes a começar a mexer no I2C, quando Thomas comentou minha resposta original, vinculando este artigo escrito por Alexander Rüedlinger . Com a peça que faltava em mãos, instalar o I2C foi muito fácil. O abaixo deve ser adaptável ao SPI também.
Navegue até raspi-config em archive.raspberrypi.org. Escolha a versão mais recente.
Baixe esse arquivo para /tmp e tente instalar usando o 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
Isso resulta em um erro, relatando dependências ausentes. Leia a saída e instale as dependências:
sudo apt-get install *INSERT DEPENDENCIES*
Isso estragou a instalação do
alsa-utils
, uma das dependências. Para corrigir, execute:sudo apt-get -fy
Agora instale o raspi-config:
sudo dpkg -i /tmp/raspi-config_*INSERT DATE*_all.deb
Execute raspi-config, navegue até 'Opções de interface', habilite I2C.
Instale pacotes relevantes. Você vai querer
i2c-tools
pelo menos, mas eu recomendo ficarlibi2c-dev
bem epython3-smbus
se esse for o seu idioma de escolha.Tente sondar o barramento como usuário e root:
sudo i2cdetect -y 1
(ou0
, o número do barramento I2C depende do hardware)Se isso fornecer uma matriz de endereços, o I2C está ativado e funcionando.
i2cdetect -y 1
(ou0
)Se isso gerar um erro de permissão, execute a próxima etapa. Caso contrário, pule-o.
Crie um grupo de usuários I2C, aplique-o ao barramento e adicione seu usuário a este grupo:
sudo groupadd i2c
(o grupo pode já existir)sudo chown :i2c /dev/i2c-1
(oui2c-0
)sudo chmod g+rw /dev/i2c-1
sudo usermod -aG i2c *INSERT YOUR USERNAME*
Efetue logout e login. Eu estava conectado via extensão SSH do código VS e precisava reiniciar. Em seguida, tente novamente:
i2cdetect -y 1
Alguns comentários:
As instruções fornecidas por anvoice nesta questão foram essenciais, mas as dependências reais estão alguns anos desatualizadas. Portanto, sugiro que você tente a etapa 1 e leia a saída do dpkg para adaptar as dependências à sua versão do raspi-config.
Parece que o raspi-config pode não ser necessário, mas você só precisa adicionar o
dtparam=i2c_arm=on
sinalizador em /boot/config.txt (veja a documentação oficial ). Eu não tentei (ainda). Se você quiser tentar,sudo nano /boot/config.txt
adicione o sinalizador em uma nova linha, CTRL-X, confirme com Y e comece na etapa #6.Resposta original:
Eu estive olhando para um problema semelhante nos últimos dias. Parece não haver suporte oficial, pacotes não oficiais parecem estar desatualizados.
Instalando o raspi-config
Dado que o RasPi OS e o Ubuntu são baseados no Debian, pode funcionar facilmente. Eu formulei a seguinte abordagem para mim mesmo, mas talvez não consiga testá-la nas próximas semanas:
Problema de permissões
Então, isso é o processo de instalação, que você já deve ter acertado. A partir do erro, acho que o usuário em execução
testwind.py
precisa de permissões adicionais para acessar essa interface - ou que a interface deve ser acessada de maneira diferente no Ubuntu. Espero que alguém possa entrar em contato com isso.Contexto
Estou planejando um projeto que implementa SLAM em um RasPi 4 de 8GB. Estou usando dois Arduinos como GPIO adicionais e para executar loops de controle de HW: Ou seja , PID para controlar PWM , para que RPM seja aproximadamente constante mesmo que o terreno seja diferente. Usando I2C com o RasPi como mestre; não olhou para SPI ainda.
Dado que os algoritmos SLAM têm algumas implementações mais intensivas de memória (mas menos pesadas de computação), optei pelo novo RasPi 4 de 8 GB. O limite de memória de 3 GB por processo pode atrapalhar, então executarei o Ubuntu 20.04 LTS servidor de 64 bits.
Se eu não conseguir fazê-lo funcionar, testarei o I2C no Raspberry Pi OS. Assim que eu tiver um script de teste funcionando, voltarei para o Ubuntu.
Na minha experiência com o servidor Ubuntu 20.04 no RPI4, tanto o I2C quanto o SPI estão habilitados por padrão. Verifique o arquivo /boot/firmware/syscfg.txt e veja se você tem as seguintes linhas:
Se não, talvez você possa anexá-los em /boot/firmware/usercfg.txt e reiniciar, e espero que funcione. Se isso não funcionar, talvez faça
sudo apt update && sudo full-upgrade -y
e veja se há alguma atualização de distribuição necessária.AFAIK e como Faiyaz Haider já afirmou que tanto o SPI quanto o I2C já estão ativos no Ubuntu Server 20.04 em um RPi 4. Seu problema parece muito mais relacionado a um problema de permissão do que um SPI desabilitado.
Sobre SPI e permissões, verifique as permissões do spidevs:
Se você vir esse tipo de permissão:
então você tem que alterar suas permissões de acordo para torná-los rw para o usuário que você deseja que possa acessar o SPI. Você pode fazer desta forma:
Você tem que repetir as duas últimas linhas para cada dispositivo spi, você pode obter os nomes dos dispositivos spi listando-os usando o comando ls acima. Isso deve resolver seu problema de permissão.