WIFIモジュールが届いた ESP32 +CH340シリアルコンバータ が TXD/RXDでつながってるタイプだ 最高通信速度は2MBPIぐらいに制限されるはずです。
僕のパソコンは リナックスなので つぎのように接続をチエックします。 なんどか同じことをしていますが
[root@fedora liveuser]# ls /dev/ttyUSB*
/dev/ttyUSB0
[root@fedora liveuser]# ls /dev/ttyUSB*
/dev/ttyUSB0
[root@fedora liveuser]# dmesg |grep ch34
[ 6002.024638] ch341 2-1.2:1.0: ch341-uart converter detected
[ 6002.025515] usb 2-1.2: ch341-uart converter now attached to ttyUSB0
[root@fedora liveuser]# ls /dev/ttyUSB*
ls: cannot access '/dev/ttyUSB*': No such file or directory
と プロジェクトを起動します。 クラス作ってみました。まだまだ空っぽ状態です。
纏めはどこかで固定ページをつくるでしょう。!
プロジェクトファイルに
sudo usermod -a -G dialout $USER
QT += core gui
QT += serialport
が必要です。
#include <QObject>
#include <QSerialPort>
class SerialPortHandler : public QObject {
Q_OBJECT
public:
SerialPortHandler(QObject *parent = nullptr);
~SerialPortHandler();
void openSerialPort();
void closeSerialPort();
void writeData(const QByteArray &data);
void readData();
private slots:
void handleError(QSerialPort::SerialPortError error);
private:
QSerialPort *serial;
};
SerialPortHandler::SerialPortHandler(QObject *parent)
: QObject(parent), serial(new QSerialPort(this)) {
connect(serial, &QSerialPort::errorOccurred, this, &SerialPortHandler::handleError);
connect(serial, &QSerialPort::readyRead, this, &SerialPortHandler::readData);
connect(this, &QObject::objectNameChanged, this, [this]() {
// objectNameが変更されたときの処理
});
}
SerialPortHandler::~SerialPortHandler() {
closeSerialPort();
}
void SerialPortHandler::openSerialPort() {
serial->setPortName("/dev/ttyUSB0");
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
if (serial->open(QIODevice::ReadWrite)) {
// ポートが開けた場合の処理
} else {
// ポートが開けなかった場合のエラー処理
}
}
void SerialPortHandler::closeSerialPort() {
if (serial->isOpen())
serial->close();
}
void SerialPortHandler::writeData(const QByteArray &data) {
serial->write(data);
}
void SerialPortHandler::readData() {
const QByteArray data = serial->readAll();
// 受信データの処理
}
void SerialPortHandler::handleError(QSerialPort::SerialPortError error) {
if (error == QSerialPort::ResourceError) {
// シリアルポートエラーの処理
closeSerialPort();
}
}