Como detectar que tipo de placa HAT ou GPIO está conectada - se houver?

8

Estou configurando algumas Raspberry Pis para uso em demos para colegas, a fim de mostrar os recursos do próprio Pi e de algumas das placas complementares disponíveis.

Eu realmente gostaria de poder manter um script cron-job / start-up para todas as demos possíveis que estou configurando e fazer com que esse script detecte qual placa GPAT HAT ou mais antiga está conectada, para que eu possa acionar um script / programa de demonstração apropriado.

Por exemplo,

  • Se um SenseHAT estiver conectado, inicie automaticamente um Sense HAT Marble Maze
  • Se um Display-O-Tron HAT estiver conectado, execute o exemplo de menu automaticamente
  • Se uma tela PiTFT estiver conectada, inicie automaticamente uma apresentação de slides de fotos

Existe alguma maneira de executar Python, sh ou similar, para detectar qual das placas GPIO comuns está conectada a um Pi?

Coisas que eu considerei:

  • Usar as informações do Pinout.xyz para detectar os pinos em uso, mas isso parece muito trabalho.

Observe que minha intenção é detectar automaticamente a configuração, sem a necessidade de conectar um teclado, ssh ou similar - daí o desejo de detecção automática e por que algo como definir uma variável de ambiente não ajudaria.

Clare Macrae
fonte
11
Eu acho que isso é possível com os chapéus, pois eles contêm um eprom usado para a instalação. Provavelmente, você pode determinar o restante com alguns scripts de shell e ver o que é relatado por dmesg, lsusb etc. Você também pode considerar a possibilidade de definir uma variável de ambiente que você altera ao trocar de hardware.
9788 Steve Rogillard
@SteveRobillard, todos os chapéus vêm com uma eprom? Eles não são empilháveis? Em caso afirmativo, como o eprom múltiplo é tratado separadamente?
Ghanima
@SteveRobillard Obrigado pela sugestão. Esclarei minha pergunta para tentar dizer por que definir variáveis ​​de ambiente (e qualquer outra interação do teclado) não funcionará. Eu não tinha ouvido falar de dmesg e lsusb. Pesquisá-los no Google me apontou para conhecer o seu Raspberry Pi, que também parece bom.
Clare Macrae
@Ghanima Eu ficaria muito feliz em resolver isso para o caso one-HAT, e não me preocupar em empilhá-los!
Clare Macrae
Boa leitura: github.com/raspberrypi/hats
Ghanima

Respostas:

5

Depois de ler os comentários e respostas anteriores muito úteis de Steve Robillard e Ghanima :

/ proc / árvore de dispositivos / chapéu / produto

Se /proc/device-tree/hat/productexistir, você tem um HAT anexado e carregado - e esse arquivo contém o nome do HAT.

Aqui estão alguns exemplos de saídas:

Exibir-o-Tron HAT

cat /proc/device-tree/hat/product
Display-o-Tron HAT

Nomes e conteúdo de todos os arquivos /proc/device-tree/hat/deste dispositivo:

name: hat
product: Display-o-Tron HAT
product_id: 0x0007
product_ver: 0x0001
uuid: 666dfe9b-9d78-4825-bbfe-1697048fc6cd
vendor: Pimoroni Ltd.

Adafruit PiTFT Plus - 3,5 polegadas

cat /proc/device-tree/hat/product
Adafruit PiTFT Plus - 3.5 inch Resistive

Nomes e conteúdo de todos os arquivos /proc/device-tree/hat/deste dispositivo:

name: hat
product: Adafruit PiTFT Plus - 3.5 inch Resistive Touch
product_id: 0x0000
product_ver: 0x0000
uuid: 684cdc28-d27f-4065-9d11-bb3f3463786d
vendor: Adafruit Industries

Atualização: 17/05/2018

Alguns dispositivos são comercializados como HATs, mas não possuem uma EEPROM com um blob de dados válido; nesse caso, não há como detectar o tipo "HAT", pois não corresponde à especificação HAT.

Atualização: 2020-01-07

Criei um repositório do github com um script para obter os dados dos HATs aos quais tive acesso e registrar aqueles que não são realmente HATs:

https://github.com/claremacrae/raspi_hat_data

Solicitações pull são bem-vindas - basta executar o copy_hat_data.shscript nesse repositório.

Clare Macrae
fonte
11
Ainda bem que isso funciona bem para você! Obrigado pelo conteúdo da vida real da árvore de dispositivos. Certamente ajuda a entender melhor o problema.
Ghanima
Ainda funciona! O problema que você vinculou no github foi apenas um erro do usuário.
Paul Slocum
Obrigado @PaulSlocum - eu atualizei isso e tornei o repositório mais óbvio ... me saber se você precisar de mais informações ....
Clare Macrae 07/01
Estou recebendo exatamente as mesmas informações /sys/firmware/devicetree/base/hatse houver um chapéu conectado ao RPi. Qual é recomendado?
testuser 19/04
4

Arrancando o excelente comentário de SteveRobillards:

Use a EEPROM I2C do HAT

O Blog do Raspberry Pi aponta para a especificação HAT para o GitHub, onde eepromutilsestão disponíveis a documentação e as ferramentas de software ( ) para manipulação.

README.md :

O ID EEPROM contém dados que identificam a placa, informa ao B + como os GPIOs precisam ser configurados e qual hardware está na placa. Isso permite que a placa adicional seja automaticamente identificada e configurada pelo software Pi no momento da inicialização, incluindo o carregamento de todos os drivers necessários.

As informações do HAT são refletidas na árvore do dispositivo /proc/device-tree/hatque pode ser lida no espaço do usuário de qualquer uma das maneiras mencionadas (python, sh, ...).

Observe que não há HATs empilhados * (por Blog do Raspberry Pi ):

HATs empilháveis ​​apresentados na discussão de especificação - mas, eventualmente, foram descartados devido ao grande aumento na complexidade do autoconfig e no potencial de erro do usuário.

Portanto, a qualquer momento, apenas um HAT será conectado, terá sua EEPROM lida e disponibilizado suas informações na árvore de dispositivos.


* É possível fazer chapéus empilháveis ​​se forem do mesmo tipo e, portanto, não exigirem identificação múltipla e diferente, por exemplo, o PWM / Servo HAT Adafruit de 16 canais para Raspberry Pi .

Ghanima
fonte
@steverobillard, desculpe, não pude resistir.
Ghanima
3
Não há problema, desde que o usuário obtenha uma resposta - isso é tudo o que importa.
Steve Robillard
Muito obrigado a ambos, @SteveRobillard e Ghanima - isso me deu algumas boas dicas.
Clare Macrae