Le pcDuino est un mini-PC qui offre une variété de fonctionnalités et de possibilités. Avec PyQt Lab, il est possible de créer une interface graphique pour afficher le résultat de 6 mesures analogiques. Cette interface graphique est composée de 6 widgets afficheurs LCD avec champs de conversion en unité de mesure. Dans cet article, nous allons examiner en détail les fonctionnalités et les avantages de PyQt Lab et du pcDuino.
![PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.](/web/20211026203934im_/https://www.mon-club-elec.fr/mes_images/clipart/python_qt.png)
![PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.](/web/20211026203934im_/https://www.mon-club-elec.fr/mes_images/clipart/logo_pyduino.png)
PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.
Par X. HINAULT – Juin 2013 – Testé sur pcDuino et poste fixe + Arduino. Incompatible RaspberryPi (pas de broches analogiques)
![PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.](/web/20211026203934im_/https://www.mon-club-elec.fr/mes_images/montages_pcduino/analog/pcduino_rvarx1_A2_pyqt_lcd_lineedit_x6_capture.png)
Capture du bureau du pcDuino en accès distant par VNC, webcam branchée !
On voit très bien ici que sur le pcDuino, les voies A0 et A1 sont 6 bits (0 à 63) et les voies A2 à A5 sont 12 bits (0 à 4095).
Ce que l’on va faire ici
- Dans ce programme PyQt, je montre comment afficher 6 mesures analogiques dans 6 afficheurs LCD graphiques avec champs de conversion en unité de mesure au sein d’une interface PyQt.
Pré-requis
- pcDuino avec système Lubuntu opérationnel. Voir si besoin la page d’accueil du pcDuino
- Langage Python (2.7) et l’éditeur Geany installés. Voir si besoin : S’installer pour programmer le pcDUino en Python et intro au langage Python PDF
- pyqt4.x installé. Voir si besoin : Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le pcDuino ? PDF
- ma librairie pyDuino fournissant les fonctions Arduino pour Python. Installer la librairie avec la commande suivante à saisir dans un terminal :
Téléchargement des codes
- L’archive avec les codes est disponible ici : http://ubuntuone.com/5sa7KwwuSK2zzmWBl10Dfo
- A télécharger en ligne de commande avec :
$ wget -4 -N –content-disposition http://ubuntuone.com/5sa7KwwuSK2zzmWBl10Dfo
- Une fois l’archive obtenue, l’extraire graphiquement ou avec la commande :
Matériel nécessaire
- une plaque d’essai pour montage sans soudures,
![PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.](https://www.mon-club-elec.fr/wp-content/uploads/www.mon-club-elec.fr/wp-content/uploads/2023/04/PyQt-Lab-Mini-PC-pcDuino-Le-resultat-de.gif)
- des straps,
![PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.](https://www.mon-club-elec.fr/wp-content/uploads/www.mon-club-elec.fr/wp-content/uploads/2023/04/1682316584_434_PyQt-Lab-Mini-PC-pcDuino-Le-resultat-de.gif)
- une résistance variable, ( on pourra en utiliser jusqu’à 6)
![PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.](https://www.mon-club-elec.fr/wp-content/uploads/www.mon-club-elec.fr/wp-content/uploads/2023/04/1682316585_200_PyQt-Lab-Mini-PC-pcDuino-Le-resultat-de.gif)
Instructions de montage
- Connecter la sortie variable de la résistance variable à une des broches analogique de A0 à A6, la deux autres broches de la résistance variable étant connectées entre le 0V et le 3.3V.
Le montage à réaliser
Note : On ne représente ici qu’une seule résistance variable, mais on pourra en utiliser jusqu’à 6 simultanément.
Le fichier d’interface *.py
- Fichier obtenu automatiquement avec l’utilitaire pyuic4 à partir du fichier *.ui créé avec QtDesigner :
# Form implementation generated from reading ui file
#
# Created: Sun Sep 15 15:36:25 2013
# by: PyQt4 UI code generator 4.9.1
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8(« Form »))
Form.resize(417, 352)
self.lcdNumber_A2 = QtGui.QLCDNumber(Form)
self.lcdNumber_A2.setGeometry(QtCore.QRect(15, 135, 106, 40))
self.lcdNumber_A2.setStyleSheet(_fromUtf8(« background-color: rgb(170, 255, 127);\n«
« color: rgb(85, 170, 0); »))
self.lcdNumber_A2.setFrameShape(QtGui.QFrame.Box)
self.lcdNumber_A2.setFrameShadow(QtGui.QFrame.Sunken)
self.lcdNumber_A2.setSegmentStyle(QtGui.QLCDNumber.Filled)
self.lcdNumber_A2.setObjectName(_fromUtf8(« lcdNumber_A2 »))
self.lineEditValeurMin_A2 = QtGui.QLineEdit(Form)
self.lineEditValeurMin_A2.setGeometry(QtCore.QRect(125, 160, 66, 16))
self.lineEditValeurMin_A2.setObjectName(_fromUtf8(« lineEditValeurMin_A2 »))
self.lcdNumber_A1 = QtGui.QLCDNumber(Form)
self.lcdNumber_A1.setGeometry(QtCore.QRect(15, 80, 106, 40))
self.lcdNumber_A1.setStyleSheet(_fromUtf8(« background-color: rgb(170, 255, 127);\n«
« color: rgb(85, 170, 0); »))
self.lcdNumber_A1.setFrameShape(QtGui.QFrame.Box)
self.lcdNumber_A1.setFrameShadow(QtGui.QFrame.Sunken)
self.lcdNumber_A1.setSegmentStyle(QtGui.QLCDNumber.Filled)
self.lcdNumber_A1.setObjectName(_fromUtf8(« lcdNumber_A1 »))
self.labelValeurMaxMin_A5 = QtGui.QLabel(Form)
self.labelValeurMaxMin_A5.setGeometry(QtCore.QRect(125, 290, 71, 16))
self.labelValeurMaxMin_A5.setStyleSheet(_fromUtf8(« font: 6pt \ »DejaVu Sans\ »; »))
self.labelValeurMaxMin_A5.setObjectName(_fromUtf8(« labelValeurMaxMin_A5 »))
self.lcdNumberValeurCalc_A0 = QtGui.QLCDNumber(Form)
self.lcdNumberValeurCalc_A0.setGeometry(QtCore.QRect(195, 15, 166, 51))
self.lcdNumberValeurCalc_A0.setStyleSheet(_fromUtf8(« background-color: rgb(255, 255, 0);\n«
« color: rgb(255, 0, 0); »))
self.lcdNumberValeurCalc_A0.setSmallDecimalPoint(True)
self.lcdNumberValeurCalc_A0.setNumDigits(7)
self.lcdNumberValeurCalc_A0.setMode(QtGui.QLCDNumber.Dec)
self.lcdNumberValeurCalc_A0.setObjectName(_fromUtf8(« lcdNumberValeurCalc_A0 »))
self.labelVoie_A3 = QtGui.QLabel(Form)
self.labelVoie_A3.setGeometry(QtCore.QRect(15, 175, 121, 16))
self.labelVoie_A3.setObjectName(_fromUtf8(« labelVoie_A3 »))
self.lineEditValeurMin_A5 = QtGui.QLineEdit(Form)
self.lineEditValeurMin_A5.setGeometry(QtCore.QRect(125, 325, 66, 16))
self.lineEditValeurMin_A5.setObjectName(_fromUtf8(« lineEditValeurMin_A5 »))
self.lcdNumber_A4 = QtGui.QLCDNumber(Form)
self.lcdNumber_A4.setGeometry(QtCore.QRect(15, 245, 106, 40))
self.lcdNumber_A4.setStyleSheet(_fromUtf8(« background-color: rgb(170, 255, 127);\n«
« color: rgb(85, 170, 0); »))
self.lcdNumber_A4.setFrameShape(QtGui.QFrame.Box)
self.lcdNumber_A4.setFrameShadow(QtGui.QFrame.Sunken)
self.lcdNumber_A4.setSegmentStyle(QtGui.QLCDNumber.Filled)
self.lcdNumber_A4.setObjectName(_fromUtf8(« lcdNumber_A4 »))
self.lineEditValeurMax_A5 = QtGui.QLineEdit(Form)
self.lineEditValeurMax_A5.setGeometry(QtCore.QRect(125, 305, 66, 16))
self.lineEditValeurMax_A5.setObjectName(_fromUtf8(« lineEditValeurMax_A5 »))
self.lineEditValeurMin_A0 = QtGui.QLineEdit(Form)
self.lineEditValeurMin_A0.setGeometry(QtCore.QRect(125, 50, 66, 16))
self.lineEditValeurMin_A0.setObjectName(_fromUtf8(« lineEditValeurMin_A0 »))
self.lcdNumber_A0 = QtGui.QLCDNumber(Form)
self.lcdNumber_A0.setGeometry(QtCore.QRect(15, 25, 106, 40))
self.lcdNumber_A0.setStyleSheet(_fromUtf8(« background-color: rgb(170, 255, 127);\n«
« color: rgb(85, 170, 0); »))
self.lcdNumber_A0.setFrameShape(QtGui.QFrame.Box)
self.lcdNumber_A0.setFrameShadow(QtGui.QFrame.Sunken)
self.lcdNumber_A0.setSegmentStyle(QtGui.QLCDNumber.Filled)
self.lcdNumber_A0.setObjectName(_fromUtf8(« lcdNumber_A0 »))
self.lineEditValeurMax_A3 = QtGui.QLineEdit(Form)
self.lineEditValeurMax_A3.setGeometry(QtCore.QRect(125, 195, 66, 16))
self.lineEditValeurMax_A3.setObjectName(_fromUtf8(« lineEditValeurMax_A3 »))
self.lcdNumberValeurCalc_A5 = QtGui.QLCDNumber(Form)
self.lcdNumberValeurCalc_A5.setGeometry(QtCore.QRect(195, 290, 166, 51))
self.lcdNumberValeurCalc_A5.setStyleSheet(_fromUtf8(« background-color: rgb(255, 255, 0);\n«
« color: rgb(255, 0, 0); »))
self.lcdNumberValeurCalc_A5.setSmallDecimalPoint(True)
self.lcdNumberValeurCalc_A5.setNumDigits(7)
self.lcdNumberValeurCalc_A5.setMode(QtGui.QLCDNumber.Dec)
self.lcdNumberValeurCalc_A5.setObjectName(_fromUtf8(« lcdNumberValeurCalc_A5 »))
self.labelVoie_A5 = QtGui.QLabel(Form)
self.labelVoie_A5.setGeometry(QtCore.QRect(15, 285, 121, 16))
self.labelVoie_A5.setObjectName(_fromUtf8(« labelVoie_A5 »))
self.labelValeurMaxMin_A4 = QtGui.QLabel(Form)
self.labelValeurMaxMin_A4.setGeometry(QtCore.QRect(125, 235, 71, 16))
self.labelValeurMaxMin_A4.setStyleSheet(_fromUtf8(« font: 6pt \ »DejaVu Sans\ »; »))
self.labelValeurMaxMin_A4.setObjectName(_fromUtf8(« labelValeurMaxMin_A4 »))
self.lcdNumberValeurCalc_A4 = QtGui.QLCDNumber(Form)
self.lcdNumberValeurCalc_A4.setGeometry(QtCore.QRect(195, 235, 166, 51))
self.lcdNumberValeurCalc_A4.setStyleSheet(_fromUtf8(« background-color: rgb(255, 255, 0);\n«
« color: rgb(255, 0, 0); »))
self.lcdNumberValeurCalc_A4.setSmallDecimalPoint(True)
self.lcdNumberValeurCalc_A4.setNumDigits(7)
self.lcdNumberValeurCalc_A4.setMode(QtGui.QLCDNumber.Dec)
self.lcdNumberValeurCalc_A4.setObjectName(_fromUtf8(« lcdNumberValeurCalc_A4 »))
self.lcdNumber_A5 = QtGui.QLCDNumber(Form)
self.lcdNumber_A5.setGeometry(QtCore.QRect(15, 300, 106, 40))
self.lcdNumber_A5.setStyleSheet(_fromUtf8(« background-color: rgb(170, 255, 127);\n«
« color: rgb(85, 170, 0); »))
self.lcdNumber_A5.setFrameShape(QtGui.QFrame.Box)
self.lcdNumber_A5.setFrameShadow(QtGui.QFrame.Sunken)
self.lcdNumber_A5.setSegmentStyle(QtGui.QLCDNumber.Filled)
self.lcdNumber_A5.setObjectName(_fromUtf8(« lcdNumber_A5 »))
self.lcdNumberValeurCalc_A3 = QtGui.QLCDNumber(Form)
self.lcdNumberValeurCalc_A3.setGeometry(QtCore.QRect(195, 180, 166, 51))
self.lcdNumberValeurCalc_A3.setStyleSheet(_fromUtf8(« background-color: rgb(255, 255, 0);\n«
« color: rgb(255, 0, 0); »))
self.lcdNumberValeurCalc_A3.setSmallDecimalPoint(True)
self.lcdNumberValeurCalc_A3.setNumDigits(7)
self.lcdNumberValeurCalc_A3.setMode(QtGui.QLCDNumber.Dec)
self.lcdNumberValeurCalc_A3.setObjectName(_fromUtf8(« lcdNumberValeurCalc_A3 »))
self.labelVoie_A0 = QtGui.QLabel(Form)
self.labelVoie_A0.setGeometry(QtCore.QRect(15, 10, 121, 16))
self.labelVoie_A0.setObjectName(_fromUtf8(« labelVoie_A0 »))
self.lcdNumberValeurCalc_A1 = QtGui.QLCDNumber(Form)
self.lcdNumberValeurCalc_A1.setGeometry(QtCore.QRect(195, 70, 166, 51))
self.lcdNumberValeurCalc_A1.setStyleSheet(_fromUtf8(« background-color: rgb(255, 255, 0);\n«
« color: rgb(255, 0, 0); »))
self.lcdNumberValeurCalc_A1.setSmallDecimalPoint(True)
self.lcdNumberValeurCalc_A1.setNumDigits(7)
self.lcdNumberValeurCalc_A1.setMode(QtGui.QLCDNumber.Dec)
self.lcdNumberValeurCalc_A1.setObjectName(_fromUtf8(« lcdNumberValeurCalc_A1 »))
self.labelVoie_A4 = QtGui.QLabel(Form)
self.labelVoie_A4.setGeometry(QtCore.QRect(15, 230, 121, 16))
self.labelVoie_A4.setObjectName(_fromUtf8(« labelVoie_A4 »))
self.labelValeurMaxMin_A1 = QtGui.QLabel(Form)
self.labelValeurMaxMin_A1.setGeometry(QtCore.QRect(125, 70, 71, 16))
self.labelValeurMaxMin_A1.setStyleSheet(_fromUtf8(« font: 6pt \ »DejaVu Sans\ »; »))
self.labelValeurMaxMin_A1.setObjectName(_fromUtf8(« labelValeurMaxMin_A1 »))
self.lineEditValeurMax_A0 = QtGui.QLineEdit(Form)
self.lineEditValeurMax_A0.setGeometry(QtCore.QRect(125, 30, 66, 16))
self.lineEditValeurMax_A0.setObjectName(_fromUtf8(« lineEditValeurMax_A0 »))
self.labelVoie_A1 = QtGui.QLabel(Form)
self.labelVoie_A1.setGeometry(QtCore.QRect(15, 65, 121, 16))
self.labelVoie_A1.setObjectName(_fromUtf8(« labelVoie_A1 »))
self.lineEditValeurMax_A4 = QtGui.QLineEdit(Form)
self.lineEditValeurMax_A4.setGeometry(QtCore.QRect(125, 250, 66, 16))
self.lineEditValeurMax_A4.setObjectName(_fromUtf8(« lineEditValeurMax_A4 »))
self.lineEditValeurMin_A4 = QtGui.QLineEdit(Form)
self.lineEditValeurMin_A4.setGeometry(QtCore.QRect(125, 270, 66, 16))
self.lineEditValeurMin_A4.setObjectName(_fromUtf8(« lineEditValeurMin_A4 »))
self.lineEditValeurMin_A3 = QtGui.QLineEdit(Form)
self.lineEditValeurMin_A3.setGeometry(QtCore.QRect(125, 215, 66, 16))
self.lineEditValeurMin_A3.setObjectName(_fromUtf8(« lineEditValeurMin_A3 »))
self.lineEditValeurMax_A2 = QtGui.QLineEdit(Form)
self.lineEditValeurMax_A2.setGeometry(QtCore.QRect(125, 140, 66, 16))
self.lineEditValeurMax_A2.setObjectName(_fromUtf8(« lineEditValeurMax_A2 »))
self.labelVoie_A2 = QtGui.QLabel(Form)
self.labelVoie_A2.setGeometry(QtCore.QRect(15, 120, 121, 16))
self.labelVoie_A2.setObjectName(_fromUtf8(« labelVoie_A2 »))
self.labelValeurMaxMin_A2 = QtGui.QLabel(Form)
self.labelValeurMaxMin_A2.setGeometry(QtCore.QRect(125, 125, 71, 16))
self.labelValeurMaxMin_A2.setStyleSheet(_fromUtf8(« font: 6pt \ »DejaVu Sans\ »; »))
self.labelValeurMaxMin_A2.setObjectName(_fromUtf8(« labelValeurMaxMin_A2 »))
self.labelValeurMaxMin_A0 = QtGui.QLabel(Form)
self.labelValeurMaxMin_A0.setGeometry(QtCore.QRect(125, 15, 71, 16))
self.labelValeurMaxMin_A0.setStyleSheet(_fromUtf8(« font: 6pt \ »DejaVu Sans\ »; »))
self.labelValeurMaxMin_A0.setObjectName(_fromUtf8(« labelValeurMaxMin_A0 »))
self.lcdNumberValeurCalc_A2 = QtGui.QLCDNumber(Form)
self.lcdNumberValeurCalc_A2.setGeometry(QtCore.QRect(195, 125, 166, 51))
self.lcdNumberValeurCalc_A2.setStyleSheet(_fromUtf8(« background-color: rgb(255, 255, 0);\n«
« color: rgb(255, 0, 0); »))
self.lcdNumberValeurCalc_A2.setSmallDecimalPoint(True)
self.lcdNumberValeurCalc_A2.setNumDigits(7)
self.lcdNumberValeurCalc_A2.setMode(QtGui.QLCDNumber.Dec)
self.lcdNumberValeurCalc_A2.setObjectName(_fromUtf8(« lcdNumberValeurCalc_A2 »))
self.labelValeurMaxMin_A3 = QtGui.QLabel(Form)
self.labelValeurMaxMin_A3.setGeometry(QtCore.QRect(125, 180, 71, 16))
self.labelValeurMaxMin_A3.setStyleSheet(_fromUtf8(« font: 6pt \ »DejaVu Sans\ »; »))
self.labelValeurMaxMin_A3.setObjectName(_fromUtf8(« labelValeurMaxMin_A3 »))
self.lineEditValeurMax_A1 = QtGui.QLineEdit(Form)
self.lineEditValeurMax_A1.setGeometry(QtCore.QRect(125, 85, 66, 16))
self.lineEditValeurMax_A1.setObjectName(_fromUtf8(« lineEditValeurMax_A1 »))
self.lineEditValeurMin_A1 = QtGui.QLineEdit(Form)
self.lineEditValeurMin_A1.setGeometry(QtCore.QRect(125, 105, 66, 16))
self.lineEditValeurMin_A1.setObjectName(_fromUtf8(« lineEditValeurMin_A1 »))
self.lcdNumber_A3 = QtGui.QLCDNumber(Form)
self.lcdNumber_A3.setGeometry(QtCore.QRect(15, 190, 106, 40))
self.lcdNumber_A3.setStyleSheet(_fromUtf8(« background-color: rgb(170, 255, 127);\n«
« color: rgb(85, 170, 0); »))
self.lcdNumber_A3.setFrameShape(QtGui.QFrame.Box)
self.lcdNumber_A3.setFrameShadow(QtGui.QFrame.Sunken)
self.lcdNumber_A3.setSegmentStyle(QtGui.QLCDNumber.Filled)
self.lcdNumber_A3.setObjectName(_fromUtf8(« lcdNumber_A3 »))
self.lineEditUnit_A0 = QtGui.QLineEdit(Form)
self.lineEditUnit_A0.setGeometry(QtCore.QRect(365, 40, 46, 23))
self.lineEditUnit_A0.setObjectName(_fromUtf8(« lineEditUnit_A0 »))
self.lineEditUnit_A1 = QtGui.QLineEdit(Form)
self.lineEditUnit_A1.setGeometry(QtCore.QRect(365, 100, 46, 23))
self.lineEditUnit_A1.setObjectName(_fromUtf8(« lineEditUnit_A1 »))
self.lineEditUnit_A2 = QtGui.QLineEdit(Form)
self.lineEditUnit_A2.setGeometry(QtCore.QRect(365, 155, 46, 23))
self.lineEditUnit_A2.setObjectName(_fromUtf8(« lineEditUnit_A2 »))
self.lineEditUnit_A3 = QtGui.QLineEdit(Form)
self.lineEditUnit_A3.setGeometry(QtCore.QRect(365, 210, 46, 23))
self.lineEditUnit_A3.setObjectName(_fromUtf8(« lineEditUnit_A3 »))
self.lineEditUnit_A4 = QtGui.QLineEdit(Form)
self.lineEditUnit_A4.setGeometry(QtCore.QRect(365, 265, 46, 23))
self.lineEditUnit_A4.setObjectName(_fromUtf8(« lineEditUnit_A4 »))
self.lineEditUnit_A5 = QtGui.QLineEdit(Form)
self.lineEditUnit_A5.setGeometry(QtCore.QRect(365, 315, 46, 23))
self.lineEditUnit_A5.setObjectName(_fromUtf8(« lineEditUnit_A5 »))
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate(« Form », « PyQt + Pyduino : analogRead 6 voies », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMin_A2.setText(QtGui.QApplication.translate(« Form », « 0 », None, QtGui.QApplication.UnicodeUTF8))
self.labelValeurMaxMin_A5.setText(QtGui.QApplication.translate(« Form », « Valeurs max/min », None, QtGui.QApplication.UnicodeUTF8))
self.labelVoie_A3.setText(QtGui.QApplication.translate(« Form », « Voie analogique A3 : », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMin_A5.setText(QtGui.QApplication.translate(« Form », « 0 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMax_A5.setText(QtGui.QApplication.translate(« Form », « 5000 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMin_A0.setText(QtGui.QApplication.translate(« Form », « 0 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMax_A3.setText(QtGui.QApplication.translate(« Form », « 5000 », None, QtGui.QApplication.UnicodeUTF8))
self.labelVoie_A5.setText(QtGui.QApplication.translate(« Form », « Voie analogique A5 : », None, QtGui.QApplication.UnicodeUTF8))
self.labelValeurMaxMin_A4.setText(QtGui.QApplication.translate(« Form », « Valeurs max/min », None, QtGui.QApplication.UnicodeUTF8))
self.labelVoie_A0.setText(QtGui.QApplication.translate(« Form », « Voie analogique A0 : », None, QtGui.QApplication.UnicodeUTF8))
self.labelVoie_A4.setText(QtGui.QApplication.translate(« Form », « Voie analogique A4 : », None, QtGui.QApplication.UnicodeUTF8))
self.labelValeurMaxMin_A1.setText(QtGui.QApplication.translate(« Form », « Valeurs max/min », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMax_A0.setText(QtGui.QApplication.translate(« Form », « 5000 », None, QtGui.QApplication.UnicodeUTF8))
self.labelVoie_A1.setText(QtGui.QApplication.translate(« Form », « Voie analogique A1 : », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMax_A4.setText(QtGui.QApplication.translate(« Form », « 5000 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMin_A4.setText(QtGui.QApplication.translate(« Form », « 0 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMin_A3.setText(QtGui.QApplication.translate(« Form », « 0 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMax_A2.setText(QtGui.QApplication.translate(« Form », « 5000 », None, QtGui.QApplication.UnicodeUTF8))
self.labelVoie_A2.setText(QtGui.QApplication.translate(« Form », « Voie analogique A2 : », None, QtGui.QApplication.UnicodeUTF8))
self.labelValeurMaxMin_A2.setText(QtGui.QApplication.translate(« Form », « Valeurs max/min », None, QtGui.QApplication.UnicodeUTF8))
self.labelValeurMaxMin_A0.setText(QtGui.QApplication.translate(« Form », « Valeurs max/min », None, QtGui.QApplication.UnicodeUTF8))
self.labelValeurMaxMin_A3.setText(QtGui.QApplication.translate(« Form », « Valeurs max/min », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMax_A1.setText(QtGui.QApplication.translate(« Form », « 5000 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditValeurMin_A1.setText(QtGui.QApplication.translate(« Form », « 0 », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditUnit_A0.setText(QtGui.QApplication.translate(« Form », « mV », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditUnit_A1.setText(QtGui.QApplication.translate(« Form », « mV », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditUnit_A2.setText(QtGui.QApplication.translate(« Form », « mV », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditUnit_A3.setText(QtGui.QApplication.translate(« Form », « mV », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditUnit_A4.setText(QtGui.QApplication.translate(« Form », « mV », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditUnit_A5.setText(QtGui.QApplication.translate(« Form », « mV », None, QtGui.QApplication.UnicodeUTF8))
if __name__ == « __main__ »:
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Le fichier d’application *Main.py
- Remarquer comment les fonctions Pyduino sont directement appelées dans le code PyQt : simple et efficace !!
Le code actif nécessaire contenu dans ce fichier est simple et réduit à l’essentiel, et pourtant, il s’agit d’une interface graphique !
# -*- coding: utf-8 -*-
# par X. HINAULT – nov 2012 – Tous droits réservés
# GPLv3 – www.mon-club-elec.fr
# modules a importer
from PyQt4.QtGui import *
from PyQt4.QtCore import * # inclut QTimer..
import os,sys
from pyduino import *
from tuto_pyqt_pyduino_bases_timer_widget_lcd_analogread_lineedit_x6 import * # fichier obtenu à partir QtDesigner et pyuic4
setDebug(True) # active message debug Pyduino
class myApp(QWidget, Ui_Form): # la classe reçoit le Qwidget principal ET la classe définie dans test.py obtenu avec pyuic4
def __init__(self, parent=None):
QWidget.__init__(self) # initialise le Qwidget principal
self.setupUi(parent) # Obligatoire
#Ici, personnalisez vos widgets si nécessaire
#Réalisez les connexions supplémentaires entre signaux et slots
# aucun ici
# code initial
#– initialisation du Timer
self.timer=QTimer() # déclare un timer Qt
self.timer.start(200) # lance le timer – durée en ms
self.connect(self.timer, SIGNAL(« timeout() »), self.timerEvent) # connecte le signal timeOut de l’objet timer à l’appel de la fonction voulue
# NB : le nom de la fonction appelée est ici timerEvent : ce nom est arbitraire et peut être ce que l’on veut…
self.compt=0 # variable de comptage des évènements Timer
#– initialisation des widgets LCD
self.lcdNumber_A0.display(0000) # affiche la valeur dans le LCD
#self.resolutions=[63,63,4095,4095,4095,4095] # pcduino
self.resolutions=[1023,1023,1023,1023,1023,1023] # arduino
# les fonctions appelées, utilisées par les signaux
#– fonction gestion survenue évènement Timer
def timerEvent(self): # fonction appelée lors de la survenue d’un évènement Timer – nom de la fonction indiférrent
print(« —–« )
# MAJ widgets voie A0
valeur=analogRead(A0)
self.lcdNumber_A0.display(valeur) # affiche la valeur de la mesure sur A0 dans le LCD
valeurCalc=rescale(valeur, 0,self.resolutions[0],float(self.lineEditValeurMin_A0.text()),float(self.lineEditValeurMax_A0.text())) # équiv map
self.lcdNumberValeurCalc_A0.display(valeurCalc)
# MAJ widgets voie A1
valeur=analogRead(A1)
self.lcdNumber_A1.display(valeur) # affiche la valeur de la mesure sur A1 dans le LCD
valeurCalc=rescale(valeur, 0,self.resolutions[1],float(self.lineEditValeurMin_A1.text()),float(self.lineEditValeurMax_A1.text())) # équiv map
self.lcdNumberValeurCalc_A1.display(valeurCalc)
# MAJ widgets voie A2
valeur=analogRead(A2)
self.lcdNumber_A2.display(valeur) # affiche la valeur de la mesure sur A2 dans le LCD
valeurCalc=rescale(valeur, 0,self.resolutions[2],float(self.lineEditValeurMin_A2.text()),float(self.lineEditValeurMax_A2.text())) # équiv map
self.lcdNumberValeurCalc_A2.display(valeurCalc)
# MAJ widgets voie A3
valeur=analogRead(A3)
self.lcdNumber_A3.display(valeur) # affiche la valeur de la mesure sur A3 dans le LCD
valeurCalc=rescale(valeur, 0,self.resolutions[3],float(self.lineEditValeurMin_A3.text()),float(self.lineEditValeurMax_A3.text())) # équiv map
self.lcdNumberValeurCalc_A3.display(valeurCalc)
# MAJ widgets voie A4
valeur=analogRead(A4)
self.lcdNumber_A4.display(valeur) # affiche la valeur de la mesure sur A4 dans le LCD
valeurCalc=rescale(valeur, 0,self.resolutions[4],float(self.lineEditValeurMin_A4.text()),float(self.lineEditValeurMax_A4.text())) # équiv map
self.lcdNumberValeurCalc_A4.display(valeurCalc)
# MAJ widgets voie A5
valeur=analogRead(A5)
self.lcdNumber_A5.display(valeur) # affiche la valeur de la mesure sur A5 dans le LCD
valeurCalc=rescale(valeur, 0,self.resolutions[5],float(self.lineEditValeurMin_A5.text()),float(self.lineEditValeurMax_A5.text())) # équiv map
self.lcdNumberValeurCalc_A5.display(valeurCalc)
def main(args):
a=QApplication(args) # crée l’objet application
f=QWidget() # crée le QWidget racine
c=myApp(f) # appelle la classe contenant le code de l’application
f.show() # affiche la fenêtre QWidget
r=a.exec_() # lance l’exécution de l’application
return r
if __name__==« __main__ »: # pour rendre le code exécutable
main(sys.argv) # appelle la fonction main
Utilisation
- Les 2 fichiers suivants sont à enregistrer dans un même répertoire, l’un en nom.py et l’autre en nomMain.py.
- Puis lancer l’application depuis Geany ou équivalent, en exécutant le fichier nomMain.py
- Au lancement, la fenêtre graphique doit apparaître avec l’interface graphique intégrant les 6 afficheurs LCD : faîtes varier la valeur de la résistance variable pour voir la valeur numérique s’actualiser en temps réel !
![PyQt Lab’ : Mini-PC : pcDuino : Le résultat de 6 mesures analogiques est affiché dans une interface graphique avec 6 widgets afficheurs LCD avec champs de conversion en unité de mesure.](/web/20211026203934im_/https://www.mon-club-elec.fr/mes_images/montages_pcduino/analog/pcduino_rvarx1_A2_pyqt_lcd_lineedit_x6_capture.png)
Articles Liés
- Javascript : Afficher 6 widgets graphiques fournis par une librairie graphique externe.
Le Javascript est un langage de programmation très populaire qui permet aux développeurs de créer…
- Javascript : Graphique Dygraphs simple
Le Javascript est un langage de programmation très populaire et puissant qui permet aux développeurs…
- Javascript : Graphique Dygraphs : afficher date à partir unixtime
Le langage de programmation Javascript est très populaire et est utilisé pour créer des applications…