Page 1 of 1

Utiliser les ports GPIO de la raspberry pi 4

Posted: Tue May 19, 2020 7:30 am
by wizzy15
Bonjour à tous,

Je me heurte à un sacré problème, en effet je souhaite faire un programme utilisant les ports GPIO de la raspberry mais apreès multes recherche je n'ai rien trouvé... Fin si, j'ai trouvé des programmes utilisant par exemple les librairies wiringPi ou bcm2835 mais je ne comprends pas, je n'obtiens aucun résultat... J'ai pourtant bien regardé et ces librairies se trouvent, pour wiringPi dans mon /usr/include et pour mon bcm2835 dans mes téléchargements. Je ne sais pas si il faut que je les changes de répertoire pour qu'elle fonctionne.

Voici mes programmes (que j'ai copié collé sur internet :D )

Pour wiringPi :

Code: Select all

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>

int main(void)
{
int pin =7;
if(wiringPiSetup()==-1)
{
 return 0;
}
pinMode(pin,OUTPUT);//on indique que le GPIO7 est en mode sortie
while(1)
{
 digitalWrite(pin,1);//la valeur est définie à HIGH (3.3v)
 delay(500); //on attend 500ms
 digitalWrite(pin,0);//la valeur est définie à LOW (0V)
 delay(500);
}
return 0;
}
pour bcm2835

Code: Select all

int main() 
{
//===============================
// initialise the GPIO
if (!bcm2835_init()) return 1;

// indique que la PIN "pinOut" est en sortie
bcm2835_gpio_fsel(pinOut, BCM2835_GPIO_FSEL_OUTP);

unsigned int myDelay = 1000; // délais en [ms]. On aurait pu le déclarer : #define myDelay 1000

while (1) 
{
  bcm2835_gpio_set(pinOut); // allume la LED
  bcm2835_delay(myDelay);   // bcm_delayMicroseconds(utin64_t micros);  fait un delay en microsecondes.
  bcm2835_gpio_clr(pinOut); // éteint la LED
  bcm2835_delay(myDelay);
  }
} // main  */
Et sinon j'ai trouvé un programme n'utilisant pas de librairie, il a fonctionné mais qu'une fois et je n comprends pas pourquoi :/

Code: Select all

#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    // Export the desired pin by writing to /sys/class/gpio/export

    int fd = open("/sys/class/gpio/export", O_WRONLY);
    if (fd == -1) {
        perror("Unable to open /sys/class/gpio/export");
        close(fd);
        exit(1);
    }
    //printf("%d\n" ,fd);
    if (write(fd, "18", 3) != 3) {
        perror("Error writing to /sys/class/gpio/export");
        close(fd);
        exit(1);
    }

    close(fd);

    // Set the pin to be an output by writing "out" to /sys/class/gpio/gpio24/direction
    
    fd = open("/sys/class/gpio/gpio24/direction", O_WRONLY);
    //printf("%d\n" ,fd);
    
    if (fd == -1) {
        perror("Unable to open /sys/class/gpio/gpio24/direction");
        close(fd);
        exit(1);
    }

    if (write(fd, "out", 3) != 3) {
        perror("Error writing to /sys/class/gpio/gpio24/direction");
        close(fd);
        exit(1);
    }

    close(fd);

    fd = open("/sys/class/gpio/gpio24/value", O_WRONLY);
    if (fd == -1) {
        perror("Unable to open /sys/class/gpio/gpio24/value");
        close(fd);
        exit(1);
    }

    // Toggle LED 50 ms on, 50ms off, 100 times (10 seconds)

    for (int i = 0; i < 100; i++) 
    {
        if (write(fd, "1", 1) != 1) 
        {
            perror("Error writing to /sys/class/gpio/gpio24/value");
            close(fd);
            exit(1);
        }
        usleep(50000);

        if (write(fd, "0", 1) != 1) 
        {
            perror("Error writing to /sys/class/gpio/gpio24/value");
            close(fd);
            exit(1);
        }
        usleep(50000);
    }

    close(fd);

    // Unexport the pin by writing to /sys/class/gpio/unexport

    fd = open("/sys/class/gpio/unexport", O_WRONLY);
    if (fd == -1) {
        perror("Unable to open /sys/class/gpio/unexport");
        exit(1);
    }

    if (write(fd, "24", 2) != 2) {
        perror("Error writing to /sys/class/gpio/unexport");
        exit(1);
    }

    close(fd);

    // And exit
    return 0;
}
Enfin breef, j'ai besoin d'aide, j'ai honte de rester bloqué aussi longtemps sur quelque chose d'aussi simple :oops:

Si quelqu'un pourrait m'aider ce serait génial, merci d'avance aux courageux qui liront ce post jusqu'ici :D

Re: Utiliser les ports GPIO de la raspberry pi 4

Posted: Tue May 19, 2020 10:34 am
by wizzy15
C'est bon , j'ai trouvé la solution pour wiringPi, il ne faut pas oublier de compiler le programme avec la commande "-lwiringPi". Pour ce faire aller dans "Construire/Définir les commandes de construction" et ajouter la commande à la suite du compilateur "gcc -Wall -c "%f" -lwiringPi", je l'ai également rajouté pour le build.

J'espère que ça aidera un autre débutant xD

Re: Utiliser les ports GPIO de la raspberry pi 4

Posted: Tue May 19, 2020 12:43 pm
by totoharibo
cela m'étonne que n'aies pas eu d'erreur en oubliant d'inclure la librairie wiringPi

Re: Utiliser les ports GPIO de la raspberry pi 4

Posted: Tue May 19, 2020 12:48 pm
by wizzy15
Ca me mettait des erreurs de référence mais je comprenais pas pour quoi étant donné que j'avais inclus la bibliothèque wiringPi.h

Re: Utiliser les ports GPIO de la raspberry pi 4

Posted: Tue May 19, 2020 3:44 pm
by totoharibo
normal les #define <trucmuch>.h c'est pour définir ce qui est dans la librairie -l <trucmuch>
il faut inclure la librairie ensuite.
en informatique quand ça crie c'est que quelque chose est mauvais.
Il faut d'abord lire le message que le programmeur veut te faire passer et essayer de le comprendre.

et j'ajoute plus l'erreur est grosse moins elle se voit.

Re: Utiliser les ports GPIO de la raspberry pi 4

Posted: Wed May 20, 2020 7:21 am
by wizzy15
Et bien merci, je ne le savais pas forcément haha. Je ferai plus attention la prochaine fois ;)