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?