Geplaatst op Geef een reactie

Geef vaste USB-poortnamen aan je Raspberry Pi

Raspberry Pi Fixed USB port name

Wanneer je meerdere apparaten hebt aangesloten op de USB-poorten van je Raspberry PI, kunnen de automatisch toegewezen USB-nummers onverwacht veranderen na een nieuwe opstart. Dit kan het verwarrend zijn wanneer je deze USB-poortnaam gebruikt hebt in je scripts of Node-RED-flows. Als aan je USB-aangesloten apparaat de poort met naam ttyUSB1 werd toegewezen, kan bijvoorbeeld na het opstarten de ttyUSB0-poortnaam worden toegewezen. In deze tutorial leren we hoe je een vaste USB-poortnaam toewijst voor elk aangesloten apparaat. Nadat je deze tutorial hebt voltooid, kan je aan elk aangesloten apparaat een vaste USB-poortnaam toewijzen en dus problemen hiermee voorkomen. Later kan je dus deze zelf toegewezen naam in je scripts verder gebruiken.

Wat je nodig hebt voor deze tutorial

Voor deze tutorial moet je Raspberry Pi op Raspbian draaien

De aangesloten apparaten uitzoeken

Eerst moeten we uitzoeken welk apparaat toegewezen werd aan welk USB-poortnummer. De eenvoudigste manier om dit te achterhalen is door alle apparaten los te koppelen en je Pi en opnieuw op te starten. Zodra je Pi weer operationeel is, sluit je het eerste apparaat aan en open je de terminal.

Dan voeren we volgend commando in :

dmesg | grep ttyUSB

ttyUSB0

 

Start een handgeschreven lijstje en noteer de informatie van je eerste apparaat:

  • de naam van je verbonden apparaat (je kan het niet vinden in het terminalvenster, maar je geeft zelf je apparaat een naam waarmee je het later kan herkennen): in ons geval: DEVICE1
  • de cijfers achter “usb”: in ons geval: 1-1.2
  • de automatisch toegewezen USB-poort: in ons geval: ttyUSB0

Sluit nu je tweede apparaat aan en voer dezelfde opdracht in :

ttyUSB1

 

Bekijk de nieuwe toegevoegde regel op je terminal en voeg de volgende informatie aan je lijstje toe:

  • de naam van je tweede apparaat : in ons geval: DEVICE2
  • de cijfers achter “usb”: in ons geval: 1-1.3
  • de automatisch toegewezen USB-poort: in ons geval: ttyUSB1

Indien je meer dan 2 USB-toestellen hebt, kan je met dit proces doorgaan door elk extra apparaat één voor één aan je Pi te koppelen.

De kenmerken van je verbonden apparaten terugvinden

Om een verbonden apparaat later te kunnen herkennen, gebruiken we enkele specifieke kenmerken van het verbonden toestel. We zijn dus op zoek naar de kenmerken die unieke eigenschappen hebben. Meestal zijn deze kenmerken: leverancier-ID, product-ID, serienummer.

Met behulp van de automatisch toegewezen USB-poortnamen die we eerder hebben genoteerd, zijn we in staat om de attributen voor al onze apparaten terug te vinden. Voor het toestel dat is aangesloten op ttyUSB0, moeten we bijvoorbeeld het volgende commando in de Terminal invoeren :

udevadm info --name=/dev/ttyUSB0 --attribute-walk

De informatie die we hier krijgen, zijn alle kenmerken van de volledige keten van apparaten die aan de opgegeven USB-poort gekoppeld zijn. We moeten nu onze handgeschreven lijstje nemen en zoeken naar de cijfers achter “usb”. In ons geval zoeken we naar: “1-1.2” .

 

In de lijst met kenmerken moeten we nu een aantal unieke eigenschappen van het toestel kiezen. In ons geval nemen we de volgende 2 kenmerken:

  • idProduct : 7523
  • idVendor : 1a86

Schrijf de attribuutnaam en de waarde op, want die hebben we later nodig.

Herhaal dezelfde opdracht in de Terminal voor je andere USB-poortnamen: ttyUSB1, … En noteer opnieuw de verzamelde attributen en waarden. Zorg ervoor dat er ten minste één waarde verschilt tussen al je apparaten. Indien nodig, om je apparaten te kunnen onderscheiden, kan je bijkomende attributen kiezen.

Het bestand met de regels voor de USB-poortnamen maken

Het is nu tijd om de koppeling van de USB-poorten naar de toestellen te maken. Hiervoor maken we een bestand dat de regel voor elk USB-apparaat zal bepalen op basis van de unieke eigenschappen die we zojuist hebben genoteerd. Voer in de Terminal de volgende opdracht in om toegang te krijgen tot het bestand met de regels:

sudo nano /etc/udev/rules.d/10-usb-serial.rules

Een leeg bestand zou op je scherm moeten verschijnen. Voor elk apparaat schrijven we een lijn met de regel. Voer aan het einde van de lijn de eigen eerder gekozen naam in.  In ons geval “ttyUSB_DEVICE1” bijvoorbeeld. Vervang de onderstaande code door de attributen en de waarden die overeenkomen met die van je handgeschreven lijstje. In ons voorbeeld ziet het er als volgt uit:

SUBSYSTEM=="tty", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", SYMLINK+="ttyUSB_DEVICE1"
SUBSYSTEM=="tty", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="ttyUSB_DEVICE2"

Als je klaar bent, toets Ctrl + x in om af te sluiten. En sla de wijzigingen op door “Y” in te voeren.

De nieuwe regels laden

Voer de volgende opdracht in de terminal in om de regels van kracht te laten worden:

sudo udevadm trigger

De nieuwe USB-poortnamen controleren

 

Je kan de nieuwe namen die je zojuist hebt gemaakt controleren door de volgende opdracht in de terminal in te voeren:

ls -l /dev/ttyUSB*

 

Zoals in het bovenstaande venster te zien is, kan je de nieuwe namen van de USB-poorten (in lichtblauw) herkennen. Je kan deze namen nu in je scripts of Node-RED-flows gebruiken. Zelfs na het opnieuw opstarten of wanneer het apparaat werd losgekoppeld, blijft de naam onveranderd en is er dus geen enkele kans voor verwarring meer.

Opmerking: Als een zelf-toegewezen USB-poortnaam niet verschijnt, is de kans groot dat je een typfout in het bestand met de regels maakte. Controleer en verbeter je attribuutnamen en attribuutwaarden.

Super! Het verwijzen naar de USB aangesloten toestellen heb je nu veel stabieler gemaakt.

Raspberry Pi GPIO discovery kit

Indien je geïnteresseerd bent in het leren programmeren van elektronische componenten op je Raspberry Pi, aarzel dan niet om onze shop te bezoeken. We hebben een goed bedachte kit die alle nodige componenten bevat.