A partir du Qt5, le Module Qt Serial Port a été ajouté afin de gérer la communication par le biais du bus RS232, Le module fournit un ensemble de fonctionnalité de base, qui comprend la configuration, les opérations d’E / S, l’obtention et le paramétrage des signaux de contrôle des broches RS-232.
Pour utiliser ce module dans vos projets, il faudra d’abord modifier le fichier .pro en ajoutant la ligne suivante :
QT += serialport
Pour utiliser le port série dans votre application, ajoutez l’instruction d’inclusion suivante :
#include <QSerialPort>
Et si vous désirez obtenir plus d’informations sur les ports série disponibles, utilisez l’instruction suivante:
#include <QSerialPortInfo>
La librairie QSerialPortInfo permet d’obtenir des informations sur les ports série disponibles sur votre PC, pour cela Utilisez les fonctions statiques pour générer une liste d’objets QSerialPortInfo. Chaque objet QSerialPortInfo de la liste représente un seul port série. Cet objet contiendra le nom du port, l’emplacement du système, la description du matériel connecté et le fabricant. La classe QSerialPortInfo peut également être utilisée pour paramétrer la méthode setPort () de la classe QSerialPort.
Cette classe est très utile pour obtenir le nom correct du port série que vous souhaitez utiliser dans vos programmes.
Les fonctions utiles pour récupérer configurer le port USB (RS232) :
QList <QSerialPortInfo> QSerialPortInfo :: availablePorts ()
Renvoie une liste des ports série disponibles sur le système.
QString QSerialPortInfo :: description () const
Renvoie sou forme de chaîne de caractère (de type QString) la description du port série, si disponible ; sinon renvoie une chaîne vide.
QString QSerialPortInfo :: fabricant () const
Renvoie sou forme de chaîne de caractère (de type QString) le nom du fabricant du port série, si disponible ; sinon renvoie une chaîne vide.
[static]QList<qint32> QSerialPortInfo::standardBaudRates()
Renvoie une liste des débits en bauds standard disponibles pris en charge par la plate-forme cible.
les configurations possibles sont illustrées dans le tableau suivant :
Constant | Évaluer | Description |
QSerialPort::Data5 | 5 | Le nombre de bits de données dans chaque caractère est de 5. Il est utilisé pour le code Baudot. Cela n’a généralement de sens qu’avec des équipements plus anciens tels que les téléimprimeurs. |
QSerialPort::Data6 | 6 | Le nombre de bits de données dans chaque caractère est de 6. Il est rarement utilisé. |
QSerialPort::Data7 | 7 | Le nombre de bits de données dans chaque caractère est de 7. Il est utilisé pour le vrai ASCII. Cela n’a généralement de sens qu’avec des équipements plus anciens tels que les téléimprimeurs. |
QSerialPort::Data8 | 8 | Le nombre de bits de données dans chaque caractère est de 8. Il est utilisé pour la plupart des types de données, car cette taille correspond à la taille d’un octet. Il est presque universellement utilisé dans les nouvelles applications. |
QSerialPort::UnknownDataBits | -1 | Nombre de bits inconnu. Cette valeur est obsolète. Il est fourni pour que l’ancien code source fonctionne. Nous vous déconseillons fortement de l’utiliser dans un nouveau code. |
- setStopBits() : choisir le nombre de bits d’arrêt à utiliser
Constant | Évaluer | Description |
QSerialPort::OneStop | 1 | 1 bit d’arrêt. |
QSerialPort::OneAndHalfStop | 3 | 1,5 bits d’arrêt. Ceci est uniquement pour la plate-forme Windows. |
QSerialPort::TwoStop | 2 | 2 bits d’arrêt. |
QSerialPort::UnknownStopBits | -1 | Nombre inconnu de bits d’arrêt. Cette valeur est obsolète. Il est fourni pour que l’ancien code source fonctionne. Nous vous déconseillons fortement de l’utiliser dans un nouveau code. |
Et pour les opération de lecture et d’écriture, on utilisera par exemple les méthodes read()
et write()
.
#include <QSerialPort> #include <QSerialPortInfo> #include <QDebug> int main() { QList<QSerialPortInfo> listePorts; QStringList listePortsDisponibles; QSerialPort *port; listePorts = QSerialPortInfo::availablePorts(); for (int i=0; i < listePorts.size();i++) { QSerialPortInfo info = listePorts.at(i); if(!info.manufacturer().isEmpty()) listePortsDisponibles << info.manufacturer() + " (" + info.portName() + ")"; else listePortsDisponibles << info.portName(); } // instanciation du port port = new QSerialPort(listePorts.at(0).portName()); // TODO : paramètrer le port (débit, ...) port->setBaudRate(BAUD9600); port->setDataBits(DATA_8); port->setParity(PAR_NONE); port->setStopBits(STOP_1); port->setFlowControl(FLOW_OFF); // ouverture du port port->open(QIODevice::ReadWrite); qDebug("<debug> etat ouverture port : %d", port->isOpen()); // TODO : réceptionner et/ou envoyer des données QByteArray data = port->readAll(); qDebug() << "message recu :" << data; // fermeture du port port->close(); qDebug("<debug> etat ouverture port : %d", port->isOpen()); delete port; return 0; }