Pi IoT a Python utilitzant controladors Linux

Pàgina 1 de 3

El controlador GPIO a Linux abans era GPIO sysfs, però ara ja no és el controlador de caràcters GPIO. Descobriu com controlar GPIO de manera moderna.

Aquest contingut prové del nostre llibre recent publicat:

Raspberry Pi IoT a Python Ucantar els controladors de Linux

Per Harry Fairhead i Mike James

Compra a Amazon.

Continguts

  1. Escollint un Pi per a IoT
  2. Com començar amb Python
  3. Conductors: un primer programa
  4. El controlador de caràcters GPIO *** NOU!!
  5. GPIO utilitzant el control d’E/S
  6. Esdeveniments GPIO

  7. L’arbre de dispositius
    Extracte: El DHT22
  8. Alguna Electrònica

  9. Modulació d’amplada de pols
    Extracte: PWM
  10. Dispositius SPI

  11. Conceptes bàsics d’I2C
    Extracte: I2C
  12. El controlador I2C Linux

  13. I2C avançat

  14. Controladors de sensors

  15. Anar més enllà amb els conductors

  16. Apèndix I

El controlador de caràcters GPIO

Pel que fa a IoT, el controlador fonamental de Linux és el controlador GPIO, que us dóna accés a les línies GPIO individuals. Aquest és un altre controlador integrat i també és com el controlador LED introduït al capítol anterior, però és un controlador de caràcters i s’utilitza d’una manera lleugerament diferent.

En la majoria dels casos, quan un dispositiu està connectat mitjançant un conjunt de línies GPIO, normalment feu servir un controlador de dispositiu específic. D’aquesta manera gairebé podeu ignorar les línies GPIO i el que estan fent. Tanmateix, encara hi ha situacions senzilles en què un conductor complet seria excessiu. Si voleu connectar un botó o un LED, aleshores el control directe sobre les línies GPIO és la manera més directa de fer la feina fins i tot si hi ha controladors LED de Linux (vegeu el capítol anterior) i fins i tot un controlador d’entrada.

Fins fa poc, la forma estàndard de treballar amb GPIO a Linux era utilitzar la interfície sysfs. Veureu molts articles que en defenen l’ús i trobareu molts programes que en fan ús. Tanmateix, GPIO sysfs va quedar obsolet a Linux 4.8 a finals de 2016 i s’ha d’eliminar del nucli el 2020. Per descomptat, les distribucions de Linux necessiten temps per fer ús dels darrers nuclis. En el moment d’escriure, Pi OS utilitza Linux 4.19, llançat dos anys abans. No obstant això, sysfs GPIO s’eliminarà aviat i, tot i que encara necessiteu saber-ne per fer front al programari heretat, no l’heu d’utilitzar per a projectes nous.

El seu substitut és el dispositiu de caràcters GPIO i, tot i que s’assembla superficialment a l’antiga interfície sysfs, té moltes diferències importants. Tot i que té alguns avantatges, també és una mica més complex i ja no es pot utilitzar des de la línia d’ordres: és una interfície només de programa. Dit això, hi ha alguns programes d’utilitat senzills que són bastant estàndard i permeten el control GPIO des de la línia d’ordres. Aquestes es cobreixen a la primera part del capítol, tot i que és poc probable que siguin la forma principal de treballar amb la nova interfície. També hi ha una biblioteca d’embolcalls anomenada libgpiod (Librar Ggeneral Pimposar jonentrada/Osortida evice) Tot i que no és necessari per a un accés senzill a les línies GPIO, es descriu en aquest capítol.

Dispositiu de caràcters GPIO

El nou enfocament per treballar amb GPIO ve preinstal·lat a l’última versió de Pi OS, però no és compatible amb versions anteriors. Si busqueu al directori /dev, trobareu els fitxers corresponents a cada controlador GPIO instal·lat. Com a mínim veuràs:

/dev/gpiochip0

Això representa el controlador GPIO principal i totes les línies GPIO que proporciona. Si sabeu com funciona sysfs, potser espereu instruccions sobre com llegir i escriure al fitxer des de la consola. En aquest cas, llegir i escriure al fitxer us servirà de poc, ja que la major part del treball es realitza mitjançant la crida al sistema de control d’entrada/sortida, ioctl() que no es pot utilitzar des de la línia d’ordres. L’ús de ioctl és típic d’un controlador de caràcters, però vol dir que l’ús del controlador GPIO és molt diferent d’altres controladors orientats a fitxers que es descriuen més endavant. El següent capítol analitza l’ús de ioctl per controlar directament el dispositiu de caràcters GPIO.

Si voleu explorar el GPIO des de la línia d’ordres, heu d’instal·lar algunes eines que s’han creat principalment com a exemples d’ús de la nova interfície del dispositiu. Per fer-ho, primer heu d’instal·lar-los i la biblioteca C libgpiod que utilitzareu més tard amb un enllaç Python:

sudo apt-get install gpiod libgpiod-dev libgpiod-doc

Tingueu en compte que, si no voleu utilitzar la biblioteca per accedir al controlador, no cal que l’instal·leu: el controlador GPIO es carrega com a part del nucli de Linux i està llest per utilitzar-lo.

Les Utilitats

Les aplicacions autònomes que s’instal·len són:

Llista tots els controladors GPIO instal·lats:

gpio1

Llista totes les línies GPIO proporcionades pel controlador GPIO anomenat:

gpio2

Podeu donar noms de línies concrets editant l’arbre del dispositiu. Si els doneu noms correctes adequats, aleshores:

gpiofind nom

retornarà el número de la línia GPIO.

Podeu utilitzar-ho per configurar qualsevol nombre de línies GPIO en una operació. L’ordre té la forma:

gpioset opcions nom/número del xip =

=
on les opcions són:
-l, –active-low estableix l’estat actiu de la línia a baix
-m, –mode= indica al programa què ha de fer després d’establir els valors

exit: surt immediatament, per defecte
esperar: espereu que l’usuari preme ENTER
temps: dormir durant un període de temps especificat
senyal: espereu SIGINT o SIGTERM

-s, –sec=SEC nombre de segons per esperar
-u, –usec=USEC nombre de microsegons per esperar
-b, –background es desprèn del terminal de control

Tingueu en compte que el canvi en l’estat de la línia només persisteix mentre s’executa l’ordre. Això vol dir que per veure l’efecte, cal fer servir l’espera o el temps. Per exemple:

gpioset -m wait 0 4=0 17=1

estableix gpiochip 0 GPIO4 a 0 i GPIO17 a 1 i espera fins que l’usuari prem Intro.

L’ordre gpioget retorna l’estat de les línies especificades com a text:

gpioget chip name/number  

Per exemple:

gpioget 0 4 17

mostrarà l’estat actual de GPIO4 i GPIO17 a gpiochip0.

L’ordre gpiomon us permet supervisar els canvis a les línies d’entrada mitjançant una trucada al sistema d’enquesta:

gpiomon options chip name/number <offset 1> 

Les opcions són:

 -n, --num-events=NUM	exit after processing NUM events
 -s, --silent		don't print event info
 -r, --rising-edge	only process rising edge events
 -f, --falling-edge	only process falling edge events
 -F, --format= FMT	specify custom output format FMT
Format specifiers: %o: GPIO line offset %e: event type (0 - falling edge, 1 - rising edge) %s: seconds part of the event timestamp %n: nanoseconds part of the event timestamp

Per exemple, per supervisar GPIO4 i GPIO17 per detectar qualsevol canvi:

gpio3

Aquestes utilitats són útils i es poden utilitzar en scripts per controlar línies GPIO. Per exemple, si deseu:

while true
do
 gpioset -m time -s 1 0 4=0 17=1
gpioset -m time -s 1 0 4=1 17=0
done

en un fitxer de text anomenat binky.sh i establiu el seu permís d’execució al propietari, llavors podeu executar-lo en una consola i flashejar un parell de LED connectats a GPIO4 i GPIO17. Tingueu en compte que si alguna de les línies GPIO està en ús, l’script retornarà un missatge d’error. També heu de tenir en compte que la línia GPIO només s’utilitza mentre s’executa l’ordre gpioset, és a dir, la línia s’obre a l’inici de l’ordre i es tanca quan s’acaba, de manera que es torna la línia a l’entrada.

Podeu fer un llarg camí amb els scripts d’intèrpret d’ordres i les utilitats GPIO, però tard o d’hora voldreu treballar amb Python.

.

Leave a Comment

Your email address will not be published. Required fields are marked *