Linux下QT编程之MQTT实战

应课设要求需要使用MQTT通信协议进行网关开发,所以就花了时间捣鼓一下,也遇到很多的坑所以写了这篇博客记录一下。

1、mqtt服务器有很多在这里我选择EMQ X因为这个是开源并且还有可视化的后台管理便于开发和调试。可以到官网直接下载:点击进去下载 

 

3、接下来就是上传到Ubuntu虚拟机进行解压安装

解压命令:unzip        emqx-ubuntu16.04-4.3.10-amd64.zip

 安装直接进入解压目录:emqx/bin/ 

执行命令:./emqx         start

4、测试服务器:

在浏览器中输入 http://localhost:18083,用户名admin,密码public,进入Dashboard

 

小编使用的测试工具是MQTT.fx,这个工具个人决定还是很好用的建议大家去下载

 

 5、关闭服务器

在目录中输入./emqx stop 即可

6、服务其搭建好了之后接下来就是进行mqtt库的移植了,可以到GitHub下载源码点击下载

这里一定要注意的是版本号跟QT一定要对应否则编译不通过 !!!

7、接下来就是上传到Ubuntu进行解压

 

 8、进入解压目录使用QT打开工程文件编译源码

 打开之后就是直接简单粗暴编译,过程有一丢丢慢(不出意外会报错,下面就会讲怎么修改

显示头文件找不到,是因为头文件路径的目录不正确,要进行修改 使用绝对路径即可

 

 接下来就是反复调试查找要修改的头文件路径直到编译通过,通过之后会生成一个工程文件夹里面就有我们需要使用到的库了,别泄气老铁们到这里已经成功3/4了。需要用的只有include文件夹和lib文件夹。

 接下来就是新建我们自己的QT工程了,把库加进去就可以爽快的进行开发啦,下面是我自己新建的工程,这里可能会有些朋友不熟悉添加外部库(非常简单)

需要把include文件夹拷贝到源码的mqtt目录里面

 下面是把lib文件夹和刚才添加了include源码文件夹的mqtt文件夹放到自己的新建工程自己的工程添加完后的:

 打开工程添加库

 点击工程右键“添加库”

 

 

 选择对应的平台就可以了,小编的是Linux平台,你们按照自己的系统来选择即可。添加成功界面如下:

在头文件目录添加一个文件如下:

 在头文件中添加mqtt相关的文件编译成功,致辞移植成功啦!

 

 9、下面就是懒人图形界面设计

 设计好界面后直接上代码关联后台

.cpp源文件

#include "dialog.h"
#include "ui_dialog.h"
#include <qdebug.h>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    pMqttClient = new QMqttClient(this);//创建一个客户端对象
    connect(pMqttClient,&QMqttClient::stateChanged,this,&Dialog::updateLogStateChange);
    connect(pMqttClient,&QMqttClient::messageReceived,this,&Dialog::recv_message);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::updateLogStateChange()//监测客户端的状态是否发生改变
{
    const QString content = QLatin1String(":state change")
            +QString::number(pMqttClient->state())+QLatin1Char('\n');
    qDebug()<<content;
}

void Dialog::on_connectBt_clicked()//连接服务器
{

    pMqttClient->setHostname(ui->ServerIPEdit->text().trimmed());//设置主机IP
    pMqttClient->setPort(ui->PortEdit->text().trimmed().toUInt());//设置端口号
    updateLogStateChange();
    if(pMqttClient->state()==QMqttClient::Disconnected){
        pMqttClient->connectToHost();
        ui->connectBt->setText(tr("Disconnected"));
    }else{
        pMqttClient->disconnectFromHost();
        ui->connectBt->setText(tr("Connect"));
    }
}

void Dialog::on_PublishBt_clicked()//发布主题
{
    QString topic=ui->topicEdit->text().trimmed();//获取主题
    QString playload = ui->playloadEdit->text().trimmed();
    pMqttClient->publish(QMqttTopicName(topic),playload.toLocal8Bit());
    qDebug()<<"publish: ["<<topic<<"] "<<playload;
}

void Dialog::on_SubscribeBt_clicked()//订阅主题
{
    QString topic = ui->Subscribe_top_Edit->text().trimmed();//获取订阅的主题
    pMqttClient->subscribe(QMqttTopicFilter(topic));
    qDebug()<<"Subscribe:"<<topic;
}

void Dialog::recv_message(const QByteArray &message,const QMqttTopicName &topic)//获取订阅的消息内容
{
    QString receiveTempStr = ui->Subscribe_play_Edit->toPlainText();
    QString receiveStr = receiveTempStr + "\n["+topic.name()+"] "+message;
    ui->Subscribe_play_Edit->setPlainText(receiveStr);
    ui->Subscribe_play_Edit->moveCursor(QTextCursor::End);
    qDebug()<<message<<"\n"<<topic.name();

}
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <mqtt/qmqttclient.h>

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
protected:
    QMqttClient *pMqttClient;
private slots:
    void on_connectBt_clicked();

    void on_PublishBt_clicked();

    void on_SubscribeBt_clicked();

    void updateLogStateChange();//客户端状态发生改变
    void recv_message(const QByteArray &message,const QMqttTopicName &topic);
private:
    Ui::Dialog *ui;
};
#endif // DIALOG_H

至此实验结束啦

解决ESP32烧录MicroPython时esptool.py未识别的错误 当出现esptool.py not recognized错误时,通常是由于环境变量未正确配置或工具未安装。以下是逐步解决方法: 1. 确认esptool.py是否安装 安装命令: Bash pip install esptool # 或使用Python3 pip3 install esptool 如果已安装但版本过旧,可升级: Bash pip install --upgrade esptool 2. 检查环境变量配置 Windows系统: Python脚本默认安装路径为C:\Users\<用户名>\AppData\Local\Programs\Python\PythonXX\Scripts(XX为版本号)。 将此路径添加到系统环境变量PATH中4。 修改后需重启命令行工具或IDE(如VS Code)。 Linux/macOS系统: Bash export PATH="$PATH:$HOME/.local/bin" 可将此命令添加到~/.bashrc或~/.zshrc中永久生效。 3. 通过Python模块直接运行 若环境变量未生效,可显式调用Python模块: Bash python -m esptool --help # 或指定Python3 python3 -m esptool --help 4. 检查开发环境配置 如果使用ESP-IDF框架,确保已执行环境初始化脚本: Bash # Linux/macOS . $IDF_PATH/export.sh # Windows %IDF_PATH%\export.bat 此步骤可能影响工具链路径的识别。 5. 验证命令格式 确保烧录命令正确,典型MicroPython烧录命令示例: Bash esptool.py --port COM3 erase_flash esptool.py --port COM3 --baud 460800 write_flash -z 0x1000 firmware.bin 替换COM3为实际串口号,firmware.bin为固件路径。 6. 重装或修复工具 若问题持续,尝试: 卸载后重装: Bash pip uninstall esptool pip install esptool 检查系统架构兼容性(如32/64位系统或文件损坏问题,参考文件格式错误解决方法35)。第二步的具体步骤
03-14
<think>好的,用户遇到了ESP32烧录MicroPython时出现的“esptool.py未识别的错误”,需要解决这个问题。首先,我得回想一下常见的导致这个错误的原因。通常,这可能是因为esptool.py没有正确安装,或者环境变量配置有问题,导致系统找不到这个工具。另外,有时候用户可能使用了错误的Python版本,或者在虚拟环境中没有激活相关环境,也会导致命令无法识别。 首先,用户的问题中提到环境变量未正确配置或工具未安装。我需要确认用户是否已经正确安装了esptool。用户可能只是输入了命令,但安装过程中可能有错误,或者安装的位置不在系统的PATH环境变量里。比如,在Windows上,Python的Scripts目录如果没有添加到PATH,那么无论怎样输入esptool.py,系统都无法找到这个可执行文件。 接下来,检查环境变量配置。对于不同操作系统,步骤有所不同。Windows用户需要找到Python安装路径下的Scripts文件夹,然后手动添加到系统环境变量中。而Linux或macOS用户可能需要修改shell配置文件,如.bashrc或.zshrc,添加export PATH="$PATH:$HOME/.local/bin"这样的语句。这里需要注意,用户是否知道如何修改这些文件,以及如何应用更改后的配置,比如重启终端或执行source命令。 然后,用户可能已经安装了esptool,但环境变量没有生效,这时候建议他们使用python -m esptool来显式调用模块,这样即使环境变量有问题,也能正确执行。这里需要确认用户使用的Python版本,是否有多个Python版本导致冲突,比如系统自带的Python2和用户安装的Python3。这时候可能需要明确指定python3或者pip3来安装和运行。 另外,如果用户在使用ESP-IDF框架,可能需要初始化环境变量,因为ESP-IDF的export脚本可能会设置一些必要的路径。用户可能没有执行这个步骤,导致工具链路径未被正确识别。这时候需要提醒用户检查是否已经正确配置了ESP-IDF的环境。 还有,用户可能在烧录时使用了错误的命令格式,比如串口号不正确或者固件路径错误。需要提供典型的烧录命令示例,并提醒用户替换实际的串口号和固件路径。此外,用户可能需要检查串口权限,特别是在Linux/macOS下,可能需要sudo权限或者将用户加入dialout组。 如果以上步骤都无效,可能需要重装esptool或者检查系统兼容性问题,比如32位和64位系统的差异,或者文件损坏导致安装不完整。这时候建议用户卸载后重新安装,并确保使用正确的pip版本。 在用户给出的步骤中,第二步是检查环境变量配置的具体步骤,特别是Windows部分。用户提到需要将Python的Scripts路径添加到PATH,并重启命令行工具或IDE。这里可能需要详细说明如何找到Scripts文件夹的路径,如何进入系统环境变量设置界面,如何添加路径,以及重启的重要性,因为不重启的话,新的环境变量不会被已打开的终端会话识别。 同时,需要注意不同Python版本对应的路径可能不同,比如Python38、Python39等,用户需要根据自己安装的版本来替换路径中的XX部分。此外,如果用户使用了虚拟环境,那么esptool可能安装在虚拟环境的Scripts目录下,这时候需要激活虚拟环境才能使用,或者在全局环境中安装。 可能用户遇到的另一个问题是,在安装esptool时使用了pip,但实际调用的pip关联的Python版本不是用户预期的版本,导致esptool安装到了其他位置。这时候需要检查pip和python的路径是否一致,可以使用pip --version来查看。 总结下来,需要一步步引导用户检查安装、环境变量、命令格式等方面,确保每个环节都正确无误。同时,提供具体的命令示例和操作步骤,帮助用户逐一排查问题。可能还需要提醒用户注意操作系统的差异,以及权限问题,比如在Linux下是否需要sudo来执行烧录命令,或者串口设备的使用权限。</think>解决`esptool.py not recognized`错误时,**环境变量配置**是关键步骤之一。以下是针对不同操作系统的详细操作指南: --- ### **第二步:检查环境变量配置(具体步骤)** #### **Windows系统** 1. **定位Python的Scripts目录** - 默认路径为: `C:\Users\<你的用户名>\AppData\Local\Programs\Python\PythonXX\Scripts` (`XX`为Python版本号,例如`Python311`) - 若不确定路径,可通过以下方式查找: ```bash pip show esptool ``` 在输出中查看`Location`字段,Scripts目录通常位于同级路径下的`Scripts`文件夹。 2. **添加路径到系统环境变量** - 按下`Win + S`,搜索“环境变量”,选择**编辑系统环境变量**。 - 点击**环境变量(N)...** → 在“系统变量”中选中`Path` → 点击**编辑** → **新建**。 - 粘贴Scripts目录的完整路径(例如`C:\Users\Alice\AppData\Local\Python\Python311\Scripts`)。 - 逐一点击**确定**保存所有窗口。 3. **验证配置** - 打开新的命令提示符(需重启终端使配置生效),输入: ```bash esptool.py --help ``` - 若显示帮助信息,则配置成功;若仍报错,尝试重启电脑。 --- #### **Linux/macOS系统** 1. **临时添加环境变量** - 在终端执行: ```bash export PATH="$PATH:$HOME/.local/bin" ``` - 验证命令是否生效: ```bash esptool.py --help ``` 2. **永久生效配置** - 编辑shell配置文件(根据使用的Shell类型): ```bash # 对于bash nano ~/.bashrc # 对于zsh nano ~/.zshrc ``` - 在文件末尾添加: ```bash export PATH="$PATH:$HOME/.local/bin" ``` - 保存后执行: ```bash source ~/.bashrc # 或 source ~/.zshrc ``` --- ### **常见问题补充** - **路径错误**:确保Scripts目录实际存在且包含`esptool.py`文件。 - **多Python版本冲突**:若系统有多个Python版本,使用`python3 -m pip install esptool`安装,并通过`python3 -m esptool`调用。 - **IDE未继承环境变量**:如VS Code需重启或新建终端标签页。 --- ### **操作验证** - 执行以下命令测试: ```bash esptool.py chip_id ``` 若输出ESP32芯片信息,则环境配置成功。 通过以上步骤,可解决大部分因环境变量导致的`esptool.py not recognized`问题。若仍报错,请检查工具安装完整性或系统权限。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值