WIFIモジュールがポストに入っていた。もちろんサンタがくれたわけではないです。 | Qt5、KiCadとモジュールで遊ぶ電子工作の初心

Qt5、KiCadとモジュールで遊ぶ電子工作の初心

このブログでは、Qt5とKiCadを用いた電子工作に焦点を当て、Linux上でのプロジェクト開発を探究します。初心者にも分かりやすい基板設計の指南や、多様なモジュールの活用法を紹介。Qt5のGUIを駆使したインタラクティブな制作過程を体験できます。

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
 

次に QT5で 

と プロジェクトを起動します。  クラス作ってみました。まだまだ空っぽ状態です。

纏めはどこかで固定ページをつくるでしょう。!

プロジェクトファイルに

 

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();
    }
}