目錄
一、MQTT介紹
二、MQTT概念
? 2.1 訂閱(Subscribtion)
? 2.2?會話(Session)
? 2.3 主題名(Topic Name)
? ?2.4 主題篩選器(Topic Filter)
? ?2.5 消息訂閱
三、MQTT中的角色
3.1 客戶端
3.2 服務器
四、X86平臺安裝mosquitto
4.1 下載?mosquitto 服務器
4.2?下載 mosquitto 客戶端
4.3?mosquitto 命令
? ?4.3.1??mosquitto
? ?4.3.2??mosquitto_pub
? ?4.3.3??mosquitto_sub
五、軟件測試?
六、QT使用MQTT?
? ?6.1 MQTT初始化
? ? 6.1.1 源碼下載
? ? 6.2.1 將源碼添加到工程?
? ?6.3.1 添加頭文件路徑?
?6.4.1 編譯
? 6.5.1 mqtt初始化?
? 6.6.1mqtt信號與槽
? ?6.7.1 MQTT發(fā)布
?
一、MQTT介紹
二、MQTT概念
? 2.1 訂閱(Subscribtion)
? 2.2?會話(Session)
? ? 每個客戶端與服務器建立連接后就是一個會話,客戶端和服務器之間有狀態(tài)交互。會話存在于一個網(wǎng)絡之間,也可能在客戶端和服務器之間跨越多個連續(xù)的網(wǎng)絡連接。
? 2.3 主題名(Topic Name)
? ?2.4 主題篩選器(Topic Filter)
? ?2.5 消息訂閱
消息訂閱者所具體接收的內(nèi)容。
三、MQTT中的角色
?1. Publisher 和 Subscriber 為客戶端,Broker 為服務器端,消息主題為消息類型,Broker 根據(jù) Topic 過濾消息,并將消息向客戶端推送。
3.1 客戶端
1. Publisher 和 Subscriber 都屬于客戶端。2. 發(fā)布應用消息給其它相關(guān)的客戶端。3. 訂閱以請求接受相關(guān)的應用消息。4. 取消訂閱以移除接受應用消息的請求。5. 從服務端斷開連接
3.2 服務器
1. 服務器端即所謂的 MQTT Broker 服務器。2. 接受來自客戶端的網(wǎng)絡連接。3. 接受客戶端發(fā)布的應用消息。4. 處理客戶端的訂閱和取消訂閱請求。5. 轉(zhuǎn)發(fā)應用消息給符合條件的已訂閱客戶端。6. MQTT 提供的公共服務器端( Broker )有:?1) test.mosquitto.org?2) broker.hivemq.com?3) iot.eclipse.org
?
四、X86平臺安裝mosquitto
4.1 下載?mosquitto 服務器
命令:
sudo apt-get install mosquitto
4.2?下載 mosquitto 客戶端
sudo apt-get install mosquitto-clients
4.3?mosquitto 命令
? ?4.3.1??mosquitto
? ?4.3.2??mosquitto_pub
mosquitto_pub -h 192.168.0.137 -t "house" -m "500"
? ?4.3.3??mosquitto_sub
mosquitto_sub -h 192.168.0.137 -t "house" -v

五、軟件測試?

?
?
?
測試結(jié)果:
?
六、QT使用MQTT?
? ?6.1 MQTT初始化
? ? 6.1.1 源碼下載

?
? ? 6.2.1 將源碼添加到工程?
?
添加到network模塊
?
? ?
? ?6.3.1 添加頭文件路徑?
出錯:解決方法
?
?6.4.1 編譯
?
出錯
解決方法:
?
? 6.5.1 mqtt初始化?
QMQTT::Client *mqttClient ;
QString clientID;
qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));
clientID = "XYD-CXX"+QString::number(qrand()); //合成 mqtt id
//mqtt 初始化
mqttClient = new QMQTT::Client(ui->lEditServerIP->text(), 1883);
mqttClient->setClientId(clientID); //ClientId 不能重復,不然會覆蓋之前連接的人的
//mqttClient->setUsername("user"); //服務器賬號密碼,不需要則不用
//mqttClient->setPassword("password");
mqttClient->connect();
? 6.6.1mqtt信號與槽
//mqtt 連接成功
connect(mqttClient,SIGNAL(connected()),this,SLOT(doProcessMqttConnected()));
//mqtt 退出成功
connect(mqttClient,SIGNAL(disconnected()),this,SLOT(doProcessMqttDisconnected()));
//mqtt 訂閱成功
connect(mqttClient,SIGNAL(subscribed(QString)),this,SLOT(doProcessMqttSubscribe(QSt
ring)));
//mqtt 訂閱到消息
connect(mqttClient,SIGNAL(received(QMQTT::Message)),this,SLOT(doProcessMqttReceived
(QMQTT::Message)));
? ?6.7.1 MQTT發(fā)布
if(mqttIsConnected)
{
QMQTT::Message msg;
msg.setTopic(ui->lEditPub->text()); //發(fā)布的主題
//發(fā)布的內(nèi)容,QString 轉(zhuǎn) QByteArray
msg.setPayload(ui->lEditPubPayload->text().toLatin1());
mqttClient->publish(msg);
}
? ?訂閱成功的槽函數(shù):一般不用這個文章來源:http://www.zghlxwxcb.cn/news/detail-542136.html
void MqttForm::doProcessMqttSubscribe(QString topic)
{
//qDebug()<< topic + "is Subscribe";
}
收到信息的槽函數(shù):文章來源地址http://www.zghlxwxcb.cn/news/detail-542136.html
void MqttForm::doProcessMqttReceived(QMQTT::Message msg)
{
qDebug() << "topic:" + msg.topic();
qDebug() << "payload:" + msg.payload();
}
到了這里,關(guān)于嵌入式QT- QT使用MQTT的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!