Cours:Rpi : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m ({{Bleu|Configuration QT}})
 
(7 révisions intermédiaires par le même utilisateur non affichées)
Ligne 45 : Ligne 45 :
 
Et voilà, on peut maintenant sélectionner le kit rpi lors de la création du projet.
 
Et voilà, on peut maintenant sélectionner le kit rpi lors de la création du projet.
  
Pour déployer (télécharger) et exécuter le programme sur la rpi, modifier le fichier {{Rouge|.pro}} en ajoutant après la ligne {{Rouge|target=}} :
+
Pour déployer (télécharger) et exécuter le programme sur la rpi, modifier le fichier {{Rouge|.pro}} en ajoutant après la ligne {{Rouge|target}}= :
 
  target.path = /root
 
  target.path = /root
 
  INSTALLS = target
 
  INSTALLS = target
Ligne 77 : Ligne 77 :
  
 
<source lang=c>
 
<source lang=c>
#include ....
+
 
 +
// ajout d'un attribut dans le header
 +
#include "gpio.h"
 
using namespace exploringRPi;
 
using namespace exploringRPi;
 
...
 
...
 
GPIO * ledRouge;
 
GPIO * ledRouge;
 +
....
 +
 +
// instanciation dans le constructeur
 
....
 
....
 
ledRouge = new GPIO(16);
 
ledRouge = new GPIO(16);
 
ledRouge->setDirection(OUTPUT);
 
ledRouge->setDirection(OUTPUT);
 +
....
 +
 +
// utilisation dans une méthode
 +
....
 
ledRouge->setValue(HIGH);
 
ledRouge->setValue(HIGH);
 +
....
 
</source>
 
</source>
 
  
 
=={{Bleu|Entrée}}==
 
=={{Bleu|Entrée}}==
Ligne 98 : Ligne 107 :
 
....
 
....
 
bp = new GPIO(16);
 
bp = new GPIO(16);
bp->setDirection(OUTPUT);
+
bp->setDirection(INPUT);
 
int n = bp->getValue();
 
int n = bp->getValue();
 
</source>
 
</source>
Ligne 104 : Ligne 113 :
 
{{Rouge|Attention, }} en procédant de la sorte, il convient de scruter régulièrement la valeur de l'entrée pour vérifier si celle-ci n'a pas changée d'état. On peut par exemple utiliser un {{Rouge|QTimer}} pour réaliser ce {{Rouge|polling}}.
 
{{Rouge|Attention, }} en procédant de la sorte, il convient de scruter régulièrement la valeur de l'entrée pour vérifier si celle-ci n'a pas changée d'état. On peut par exemple utiliser un {{Rouge|QTimer}} pour réaliser ce {{Rouge|polling}}.
  
Comme nous réalisons un programmation événementielle, cette méthode n'est pas la plus adaptée, voyons comment faire :
+
Comme nous réalisons une programmation événementielle, cette méthode n'est pas la plus adaptée, voyons comment faire :
 
*les GPIOs se trouvent dans l'arborescence linux dans le répertoire {{Rouge|/sys/class/gpio/}}
 
*les GPIOs se trouvent dans l'arborescence linux dans le répertoire {{Rouge|/sys/class/gpio/}}
 
*si une broche est configurée, la 10 par ex, on aura un répertoire : {{Rouge|/sys/class/gpio/gpio10/}}
 
*si une broche est configurée, la 10 par ex, on aura un répertoire : {{Rouge|/sys/class/gpio/gpio10/}}
Ligne 120 : Ligne 129 :
 
...
 
...
 
// On configure la broche en entrée:
 
// On configure la broche en entrée:
 +
bp = new GPIO(10);
 
bp->setDirection(INPUT);
 
bp->setDirection(INPUT);
 
// Quel type d'événement nous intéresse ? NONE, RISING, FALLING, BOTH
 
// Quel type d'événement nous intéresse ? NONE, RISING, FALLING, BOTH
Ligne 128 : Ligne 138 :
 
bpWatcher->addPath("/sys/class/gpio/gpio10/value");
 
bpWatcher->addPath("/sys/class/gpio/gpio10/value");
 
// Un signal "fileChanged" est généré à chaque événement surveillé (cf plus haut)
 
// Un signal "fileChanged" est généré à chaque événement surveillé (cf plus haut)
connect(bpWatcher,SIGNAL(fileChanged()), ... , SLOT( .... ));
+
connect(bpWatcher,SIGNAL(fileChanged(QString)), ... , SLOT( .... ));
 
</source>
 
</source>
 +
 +
 +
=docs=
 +
*https://www.tal.org/tutorials/building-qt-515-lts-raspberry-pi-raspberry-pi-os

Version actuelle datée du 14 novembre 2023 à 20:45

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!! Attention, les broches RPI sont en 3.3V max   !!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Raspberry Pi

Configuration QT

Lors de la création de votre projet de type "Application QT avec widgets", il faudra sélectionner le kit rpi.

Si celui-ci n'existe pas, il faut le créer :

  • Faire un nouveau projet
  • de type "Application QT avec widgets"
  • Sur la page de sélection de kit clic sur manage
  • Dans la page appareils mobiles
    • ajouter
    • périph linux generique
      • remplir :
      • nom : rpi
      • @ip ou nom de machine : rpixx (numéro indiqué sur la carte RPI)
      • username : root
      • mdp : geii
  • Dans la page Compiler et exécuter
    • onglet Compilateurs
      • ajouter/gcc/c++
      • nom : gcc rpi
      • chemin : /opt/electronique/pi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++
      • appliquer
    • onglet QT Version
      • ajouter
      • chemin : /opt/electronique/pi/qt5/bin/qmake
      • modifier le nom : qt5 rpi
      • appliquer
    • onglet kits
      • nom : rpi
      • type : periph generique
      • appareil : rpi
      • racine du système : /opt/electronique/pi/sysroot
      • compilateur : gcc rpi
      • version qt : qt rpi
      • appliquer

Et voilà, on peut maintenant sélectionner le kit rpi lors de la création du projet.

Pour déployer (télécharger) et exécuter le programme sur la rpi, modifier le fichier .pro en ajoutant après la ligne target= :

target.path = /root
INSTALLS = target


!!!!SAUVEGARDE !!!! du projet qt :

  • Sauvegarder le répertoire du projet
  • Sauvegarder le répertoire de configuration de QtCreator : /home/nomUtilisateur/.config/QtProject

!!!!!!!!!!!!!!!!!!!

GPIO

Gpio rpi3.png

On dispose d'un connecteur avec un certain nombre de GPIO sur la carte rpi.

Ce sont des broches configurables qui peuvent servir de :

  • entrée logique
  • sortie logique
  • fonction particulière :
    • entrée analogique (pas sur les rpi actuelles)
    • i2c
    • spi
    • pwm
    • liaison série
    • ...

Vous utiliserez les classes mises à disposition sur github pour utiliser facilement une broche en entrée, sortie logique ou sortie pwm :

Sortie

// ajout d'un attribut dans le header
#include "gpio.h"
using namespace exploringRPi;
...
GPIO * ledRouge;
....

// instanciation dans le constructeur
....
ledRouge = new GPIO(16);
ledRouge->setDirection(OUTPUT);
....

// utilisation dans une méthode
....
ledRouge->setValue(HIGH);
....

Entrée

On pourrait procéder de façon analogue :

#include ....
using namespace exploringRPi;
...
GPIO * bp;
....
bp = new GPIO(16);
bp->setDirection(INPUT);
int n = bp->getValue();

Attention, en procédant de la sorte, il convient de scruter régulièrement la valeur de l'entrée pour vérifier si celle-ci n'a pas changée d'état. On peut par exemple utiliser un QTimer pour réaliser ce polling.

Comme nous réalisons une programmation événementielle, cette méthode n'est pas la plus adaptée, voyons comment faire :

  • les GPIOs se trouvent dans l'arborescence linux dans le répertoire /sys/class/gpio/
  • si une broche est configurée, la 10 par ex, on aura un répertoire : /sys/class/gpio/gpio10/
  • dans ce répertoire, il y a un fichier value
  • on va observer ce fichier /sys/class/gpio/gpio10/value qui reflète l'état de la broche
  • on demandera l'exécution d'un SLOT lors de la modification de ce fichier
  • mise en oeuvre :
// il nous faut un objet de type QFileSystemWatcher
#include <QFileSystemWatcher>
QFileSystemWatcher * bpWatcher;
GPIO * bp;
...
...
// On configure la broche en entrée:
bp = new GPIO(10);
bp->setDirection(INPUT);
// Quel type d'événement nous intéresse ? NONE, RISING, FALLING, BOTH
bp->setEdgeType(BOTH);
// On crée l'objet QFileSystemWatcher:
bpWatcher = new QFileSystemWatcher();
// On ajoute la liste des fichiers dont il faut surveiller la modification
bpWatcher->addPath("/sys/class/gpio/gpio10/value");
// Un signal "fileChanged" est généré à chaque événement surveillé (cf plus haut)
connect(bpWatcher,SIGNAL(fileChanged(QString)), ... , SLOT( .... ));


docs