Konzeptionell ähnelt libPiGPIO den bekannten python-Bibliotheken RPi.GPIO bzw. gpiozero: Bauelemente werden in einer Objekthierarchie abgebildet, sodass sich eine Art ‚Baukasten‘ ergibt.
Zusätzlich können über einen signal-slot Mechanismus elektrische ‚Events‘ asynchron an Objektmethoden (callbacks) gebunden werden.
// ein 'Drückschalter' an Pin GPIO 16
pigButton button( bcm16 );
// eine LED und ein Summer an Pin 12 und Pin 23
pigLED LED( bcm12 );
pigBuzzer buzzer( bcm23 );
// Zustände verknüpfen
button.connect_state( LED );
button.connect_state( buzzer );
Technisch handelt es sich um einen C++ – Wrapper der C-library pigpio für den RaspBerry Pi. Zur Realisierung der Callbacks wurde die sigslot Library eingebunden. Die Überwachung der Sensorik erfolgt multithreaded, sodass polling oder busy-waiting vermieden werden können.
// Ultraschall Modul HC-SR04
pigSonar sonar( bcm21, bcm20 );
// je näher, desto höher der Ton
sonar.sigValue.connect( [&](double dist){ buzzer.buzz( 100, dist*50 ); } );
// Schwellwert <= 20 cm
sonar.start( 20 );
Es liegt nahe, die ‚elektrischen‘ c++ Objekte über den Callback-Mechanismus mit den GUI-Klassen des Qt-Framworks zu verbinden, z.B. ein QDial-Widget als ‚digitalen Zwilling‘ eines Rotary-Encoders.
- Techstack C / C++ / stl / Qt5
- Plattform: Raspberry Pi4
- Quellcode: gitea.sourceworx.org/chris/libpigpio