Formations à l'informatique et à l'électronique

Auteur : SD
Créé le : 30-03-2019

Développer en C/C++ sur Raspberry Pi à distance depuis NetBeans

logo langage C C++ raspberry pi netbeans

Sommaire

Configurer le Raspberry Pi

Par défaut le compte "root" est désactivé dans Raspbian.

Pour faciliter l'accès aux GPIO il est préférable d'avoir un accès administrateur (root).

Se connecter en SSH sur le Raspberry Pi (avec Putty par exemple). Si Raspbian vient d'être installée, le login et mot de passe par defaut est : pi/raspberry (si nécessaire, voir ici pour installer Raspbian)

Définir le mot de passe "root" :

sudo passwd root

Autoriser les connections de l'utilisateur "root" en ssh

Cet accès n'est pas autorisé par défaut. Pour l'activer, ouvrir le fichier "sshd_config" dans nano :

sudo nano /etc/ssh/sshd_sonfig

Chercher la ligne commencant par "PermtitRootLogin" et la modifier de manière à avoir :

PermtitRootLogin yes

Enregistrer le fichier (CTRL+O puis Entrée) et quitter Nano (CTRL+X).

Redémarrer le Raspberry Pi :

sudo reboot

Créer un nouveau projet NetBeans

Cliquer sur "New Project..." :

NetBeans New Project  Nouveau Projet

Sélectionner "C/C++" => "C/C++ Application" puis cliquer sur "Next".

NetBeans C C++ Application

Donner un nom au projet, un emplacement et sélectionner le type de langage (C ou C++). Cliquer sur "Finish" pour terminer :

NetBeans Nom Emplacement Langage C C++ Projet

Cliquer sur l'onglet "Services" :

NetBeans Projet Service Host Raspberry Pi

Assurez-vous que le Raspberry Pi est en route et connecté sur le même réseau IP que votre ordinateur. Vous devez également connaitre son adresse IP.

Faire un clic droit sur "C/C++ Build Hosts" puis sur "Add New Host"

NetBeans Add New Host Raspberry Pi

Entrer l'adresse IP du Raspberry Pi et cliquer sur "Next" :

NetBeans New Remote Host Raspberry Pi

Entrer le nom d'utilisateur "root" :

NetBeans Login New Remote Host Setup

Lors de la première connexion, un message d'avertissement vous demande de confirmer que vous êtes certain qu'il s'agit du bon hôte (vérification de la clé RSA). Cliquer sur "Yes" :

NetBeans Raspberry Pi Confirm RSA

Entrer le mot de passe :

NetBeans Raspberry Pi Password Mot De Passe

Cliquer sur "Finish" :

NetBeans New Remote Host Setup Finish

Cliquer sur l'onglet "Projects" :

NetBeans Project Tab Onglet Projet

Faire un clic droit sur le nom du projet et cliquer sur "propriétés" :

NetBeans Project Properties Projet Propriétés

Sélectionner "All coonfigurations", puis dans "Build => Build Host", sélectionner le nom d'hôte créé précédement :

NetBeans Project Properties Build Host

Dans "Run => Console Type", sélectionner "Standard Output" :

NetBeans Projet Run Console Type

Activer l'utilisation de la bibliothèque "wiringPi" en allant dans "Build => Linker", cliquer sur le bouton "..." en face de "Libraries" :

NetBeans Projet Linker

Cliquer ensuite sur le bouton "Add Option..." :

NetBeans Projet Linker Add Option

Entrer "-lwiringPi" :

NetBeans Projet Linker Add Option -lwiringPi

La configuration du projet est maintenant terminée. Fermer les fenêtres de propriétés en cliquant sur "Ok".

Premier programme : Le traditionnel BLINK

Dans "main.c", taper le code ci-dessous :

NetBeans Code C Main Blink GPIO Raspberry Pi

Réaliser le câblage ci-dessous :

Raspberry Pi Cablage LED GPIO Blink

Lancer l'exécution en cliquant sur l'icône "Run Project" (ou touche F6) :

NetBeans Run Projet Touche F6 Code C Raspberry Pi

La LED doit clignoter.

Remarques :

1. Si vous cliquez à nouveau sur "Run" un deuxième programme "blink" va être exécuté sur le Raspberry Pi. Il est donc nécessaire de stopper l'exécution du premier avant :

NetBeans Raspberry Pi Code C C++ Stop Execution

2. La compilation a créé un fichier exécutable sur le Raspberry Pi. Celui-ci peut maintenant être lancé directement dans la ligne de commande. Sur la capture d'écran ci-dessous, on peut voir que le fichier "gpio_pi" est un exécutable (indicateur x). Il est dans le dossier "/root/.netbeans/remote/192.168.1.31/desktop-25pjpug-Windows-x86/C/Users/sn/Documents/NetBeansProjects/gpio_pi/dist/Debug/GNU-Linux"... Pas très pratique! Je l'ai déplacé dans "/root" avec la commande "cp". Pour lancer l'exécutable, taper "./gpio_pi" depuis le dossier "/root" ou "/root/gpio_pi" depuis n'importe quel dossier :

Raspberry Pi Console Shell Exécution

3. Sur le capture ci-dessus on peut voir que lorsque l'exécutable est lancé l'invite de commande ne revient pas : le programme s'exécute dans le processus du terminal. Il faut appuyer sur CTRL+C pour stopper son exécution.

Si on veut lancer le programme dans un nouveau processus, il faut ajouter un '&' à la fin de la commande (voir capture ci-dessous).

La commande "ps" permet de visualiser les processus en cours d'exécution avec leur PID (numéro d'identification).

Pour stopper un processus, utiliser la commande "kill" suivi de son PID.

Raspberry Pi Console Shell Processus ps kill

Utilisation du port série (GPIO)

Configuration du Raspberry Pi

Avant de pouvoir utiliser le port série, quelques réglages sont nécessaires dans Raspbian. En effet, Raspbian utilise le port série GPIO comme port console sur lequel on peut se loguer avec un terminal (comme Putty par exemple). Il faut donc désactiver ceci pour libérer le port série. Pour cela, exécuter "raspi-config" :

raspi-config

Raspi-config est une interface en mode texte. Pour se déplacer, utiliser les flèches ou la touche tabulation. Pour valider un choix, utiliser la barre d'espace ou la touche Entrée.

Sélectionner "Interfacing options" :

raspi-config Interfacing Options

Sélectionner "P6 Serial" :

raspi-config Serial port

Sélectionner "No" pour désactiver le shell sur le port série :

raspi-config Serial Port no login shell

Sélectionner "Yes" pour que le port série soit activé :

raspi-config Serial Port Enabled

Sélectionner "Ok" pour confirmer :

raspi-config Confirm

Sélectionner "Finish" pour quitter "raspi-config :

raspi-config 06 Finish

Exemple de code : port série GPIO du Raspberry Pi

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>

// La LED est connectée à la GPIO 0
const int LED = 0;

int main(int argc, char** argv) {
int fd;

int pause = 500;

// Initialisation de la bibliothèque wiringPi
wiringPiSetup();

// Configuration de la GPIO 0 en sortie
pinMode(LED, OUTPUT);

// Ouverure du port série à 115 200 bauds
if ((fd = serialOpen("/dev/ttyS0", 115200)) < 0) {
printf("ERREUR : Impossible d'ouvrir le port série ! ");
return -1;
}

// Boucle infine
while (1) {
// On fait clignotter la LED
digitalWrite(LED, HIGH);
delay(pause);
digitalWrite(LED, LOW);
delay(pause);

// On envoie "SN " caractères par caractères
serialPutchar(fd, 'S');
serialPutchar(fd, 'N');
serialPutchar(fd, 0x0D);
serialPutchar(fd, 0x0A);

// Si on a reçu un caractère
if (serialDataAvail(fd) > 0) {
// On le lit
char c = serialGetchar(fd);

// Si le caractère est 'q' on quitte le programme
if (c == 'q') {
serialClose(fd); // Fermeture du port série
return 0;
}

// Si le caractère est '+' on augmente pause (la LED clignotera moins vite)
if (c == '+') {
pause = pause + 100;
serialPrintf(fd, "pause = %d ", pause);
}

// Si le caractère est '-' on diminu pause (la LED clignotera plus vite)
if ((c == '-') && (pause > 100)) {
pause = pause - 100;
serialPrintf(fd, "pause = %d ", pause);
}
}
}

serialClose(fd);
return 0;
}

Articles connexes

Référence

Documentation de la bibliothèque Wiring Pi

Vous avez apprécié cet article ? Partagez le !

Article connexe : Raspberry Pi - Installer une image de système d'exploitation