Raspberry Pi GPIO – Interaktive GPIO Info
Pinout!
What are the ID EEPROM pins and what can they be used for?
Frameworks
Raspberry gPIo (learn.sparkfun.com)
Official C/C++ library ?
RPi GPIO Code Samples
- SYSFS
- Python
- bcm2816 Library
- WiringPi
- pigpio
SYSFS
Introduction to accessing the Raspberry Pi’s GPIO in C++ (sysfs)
github.com/halherta/RaspberryPi-GPIOClass-v1
Exploring Raspberry Pi: Chapter 6: Interfacing to the Raspberry Pi Input/Outputs
Python
GPIO – Event / Using interrupt-driven GPIO in Raspian
raspberry-gpio-python, A Python module to control the GPIO on a Raspberry Pi
gpiozero, A simple interface to GPIO devices with Raspberry Pi
RPi.GPIO update and detecting BOTH rising and falling edges
How to use interrupts with Python on the Raspberry Pi and RPi.GPIO – part 2
void *poll_thread(void *threadarg) { struct epoll_event events; char buf; struct timeval tv_timenow; unsigned long long timenow; struct gpios *g; int n; thread_running = 1; while (thread_running) { n = epoll_wait(epfd_thread, &events, 1, -1); [...] } int add_edge_detect(unsigned int gpio, unsigned int edge, int bouncetime) // return values: // 0 - Success // 1 - Edge detection already added // 2 - Other error { pthread_t threads; struct epoll_event ev; [...] // create epfd_thread if not already open if ((epfd_thread == -1) && ((epfd_thread = epoll_create(1)) == -1)) return 2; // add to epoll fd ev.events = EPOLLIN | EPOLLET | EPOLLPRI; ev.data.fd = g->value_fd; if (epoll_ctl(epfd_thread, EPOLL_CTL_ADD, g->value_fd, &ev) == -1) { remove_edge_detect(gpio); return 2; } g->thread_added = 1; [...] }
bcm2816 Library
GPIO register access
Constants for passing to and from library functions
bcm2835_set_debug(1) bcm2835_gpio_len()
Sensorian 1.0 – C API Reference Guide Library
Raspberry Pi – detect button press
[POSIX-PIGPIO] Real-time thread on GPIO interrupt?
C program a button to perform a task once when pressed (latch)
int main(int argc, char **argv) { pthread_attr_t attr; struct sched_param param; pthread_t thread; bcm2835_init(); bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT); bcm2835_gpio_aren(PIN); pthread_attr_init(&attr); pthread_attr_setschedpolicy(&attr, SCHED_FIFO); pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); param.sched_priority = 99; pthread_attr_setschedparam(&attr, ¶m); while (1) { if (bcm2835_gpio_eds(PIN)) { bcm2835_gpio_set_eds(PIN); pthread_create(&thread, &attr, callback_acq, NULL); } } bcm2835_close(); return 0; }
WiringPi
The GPIO utility
Understand “gpio readall” Bash shell command output on Raspberry Pi
how to read output of gpio readall
pigpio
Interrupt / Event Detection / poll() / epoll()
GPIO state monitoring via command line?
Raspberry Pi And The IoT In C – Input And Interrupts (Page 1 of 4)
Raspberry Pi And The IoT In C – Input And Interrupts (Page 2 of 4)
What’s the difference between epoll, poll, threadpool?