Hoe te detecteren welk type HAT- of GPIO-kaart is aangesloten - indien aanwezig?

Ik ben bezig met het opzetten van een aantal Raspberry Pis voor gebruik in demo's aan collega's, om te laten zien hoe de Pi zelf werkt, en van enkele van de uitbreidingskaarten die beschikbaar zijn.

Ik zou graag één cron-job/opstartscript willen bijhouden voor alle mogelijke demo's die ik aan het opzetten ben, en dat script zal detecteren welk HAT of ouder GPIO-board is aangesloten, zodat ik een trigger kan activeren passend demo script/programma.

Bijvoorbeeld,

  • If a SenseHAT is attached, then auto-start a Sense HAT Marble Maze
  • If a Display-O-Tron HAT is attached, then auto-run the menu example
  • If a PiTFT screen is attached, then auto-start a photo slide show

Is er een manier om Python, sh of iets dergelijks uit te voeren, om te detecteren welke van sommige veelgebruikte GPIO-kaarten met een Pi is verbonden?

Dingen die ik overwoog:

  • Informatie uit Pinout.xyz gebruiken om de gebruikte pins te detecteren, maar dat klinkt als veel werk.

Merk op dat het mijn bedoeling is om de configuratie automatisch te detecteren, zonder een toetsenbord, ssh in of iets dergelijks te hoeven aansluiten - vandaar de wens voor automatische detectie en waarom iets als het instellen van een omgevingsvariabele niet zou helpen.

8
Ik denk dat dit mogelijk is met hoeden, omdat ze een eprom bevatten die wordt gebruikt voor de installatie. Je kunt de rest waarschijnlijk bepalen met wat shell-scripting en kijken naar wat wordt gerapporteerd door dmesg, lsusb etc. Je zou ook een omgevingsvariabele kunnen overwegen die je wijzigt wanneer je hardware ruilt.
toegevoegd de auteur doekman, de bron
@SteveRobillard, doen alle hoeden een eprom? Zijn ze niet stapelbaar? Zo ja, hoe worden de toenmalige multipele eprom apart geadresseerd?
toegevoegd de auteur Ghanima, de bron
toegevoegd de auteur Ghanima, de bron
@SteveRobillard, ik trek mijn eerste opmerking in, per rpi.blog stapelbare HAT's die in de specificatie-discussie voorkomen, maar uiteindelijk werd deze weggegooid vanwege de grote toename in complexiteit van autoconfig en potentieel voor gebruikersfouten.
toegevoegd de auteur Ghanima, de bron
@SteveRobillard Bedankt voor de suggestie. Ik heb mijn vraag verduidelijkt om te proberen te verklaren waarom het instellen van omgevingsvariabelen (en elke andere toetsenbordinteractie) niet zal werken. Ik had niet gehoord van dmesg en lsusb. Googlen wees mij op Ken uw Raspberry Pi die er goed uitziet te.
toegevoegd de auteur Emacs User, de bron
@Ghanima Ik zou erg blij zijn om dit op te lossen voor de een-HAT-zaak, en me niet zorgen te maken over het stapelen ervan!
toegevoegd de auteur Emacs User, de bron

2 antwoord

Having read through the very helpful earlier comments and answers from Steve Robillard and Ghanima:

/ Proc/device-tree/hoed/product

If / Proc/device-tree/hoed/product exists, you have a HAT attached and loaded - and that file contains the name of HAT.

Hier zijn enkele voorbeelduitgangen:

Display-o-Tron HAT

cat/Proc/device-tree/hoed/product
Display-o-Tron HAT

Namen en inhoud van alle bestanden in /proc/device-tree/hat/ voor dit apparaat:

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 inch

cat/Proc/device-tree/hoed/product
Adafruit PiTFT Plus - 3,5 inch Resistive

Namen en inhoud van alle bestanden in /proc/device-tree/hat/ voor dit apparaat:

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

Update: dit werkt niet meer, vanaf 2018-05-17

Unfortunately this mechanism no longer works - I'm investigating in https://github.com/claremacrae/raspi_hat_data/issues/1

4
toegevoegd
Blij dat dit goed werkt voor jou! Bedankt voor de echte inhoud van de apparaatstructuur. Het helpt zeker om het probleem beter te begrijpen.
toegevoegd de auteur Ghanima, de bron

SteveRobillards eraf halen uitstekende opmerking:

Gebruik de I2C EEPROM van HAT

De Raspberry Pi Blog verwijst naar de HAT-specificatie naar GitHub waar zowel documentatie- als softwaretools ( eepromutils ) voor manipulatie beschikbaar zijn.

README.md:

De ID EEPROM bevat gegevens die het bord identificeren, vertelt de B + hoe de GPIO's moeten worden ingesteld en welke hardware zich op het bord bevindt. Hierdoor kan de uitbreidingskaart automatisch worden geïdentificeerd en ingesteld door de Pi-software tijdens het opstarten, inclusief het laden van alle benodigde stuurprogramma's.

Informatie van de HAT komt tot uiting in de apparaatboom /proc/device-tree/hat die op een van de genoemde manieren vanuit gebruikersruimte kan worden gelezen (python, sh, ...).

Merk op dat er geen gestapelde HAT's * zijn (per Raspberry Pi Blog ) :

Stapelbare HAT's in de specificatiediscussie - maar uiteindelijk is deze weggegooid vanwege de grote toename in complexiteit van autoconfig en potentieel voor gebruikersfouten.

Dus op elk willekeurig moment zal slechts één HAT worden aangesloten, de EEPROM worden uitgelezen en zijn informatie beschikbaar worden gemaakt in de apparaatstructuur.


* Het is mogelijk om stapelbare hoeden te maken als ze van hetzelfde type zijn en dus geen meerdere en verschillende identificatie vereisen, b.v. de Adafruit 16-Channel PWM/Servo HAT voor Raspberry Pi .

3
toegevoegd
Geen probleem zolang de gebruiker een antwoord krijgt - dat is het enige dat ertoe doet.
toegevoegd de auteur doekman, de bron
@steverobillard, sorry, kon het niet laten.
toegevoegd de auteur Ghanima, de bron
Heel erg bedankt zowel @SteveRobillard en Ghanima - dit gaf me een paar hele goede tips.
toegevoegd de auteur Emacs User, de bron