1. 程式人生 > >自己做一個Android的MQTT客戶端

自己做一個Android的MQTT客戶端

這短時間,我做基於STM32f103 的GPRS的連線,每次都要開啟電腦上的mqttfx來進行除錯,感覺很麻煩。所以就用QT forAndroid做了一個Android上的MQTT客戶端,在此分享給各位老鐵。

一、你需要下載官方給的基於QT的MQTT的原始碼https://github.com/emqtt/qmqtt

二、原始碼移植到QT for Android的工程裡,下載完後解壓,把src裡所有的.h和.c檔案都放到一個資料夾下面去

就像這樣

三、現在你就可以寫你的程式碼了,我的是這樣的

mainwindow.h

#ifndefMAINWINDOW_H
#defineMAINWINDOW_H
#include<QMainWindow>
#include"mqtt/qmqtt.h"
namespaceUi{
classMainWindow;
}
classMainWindow:publicQMainWindow
{
Q_OBJECT
public:
explicitMainWindow(QWidget*parent=0);
~MainWindow();
publicslots:
voidonConnected();
quint16onSubscribed(constQString&topic,constquint8qos);
voidonReceived(const
QMQTT::Message&message);
voidondisconnected();
privateslots:
voidon_pushButton_connection_clicked();
voidon_pushButton_subscribe_clicked();
voidon_pushButton_publish_clicked();
voidon_pushButton_clicked();
private:
Ui::MainWindow*ui;
QMQTT::Client*client;
};
#endif//MAINWINDOW_H
mainwindow.c
#include"mainwindow.h"
#include"ui_mainwindow.h"
#include"mqtt/qmqtt.h"
#include<QHostAddress>
#include<QMessageBox>
MainWindow::MainWindow(QWidget*parent):
QMainWindow(parent),
ui(newUi::MainWindow)
{
ui->setupUi(this);
//============設定按鈕樣式================
setStyleSheet("QPushButton{background-color:black;\
color:white;border-radius:10px;border:2pxgroovegray;\
border-style:outset;}"
"QPushButton:hover{background-color:white;color:black;}"
"QPushButton:pressed{background-color:rgb(85,170,255);\
border-style:inset;}"
);
//============================
}
MainWindow::~MainWindow()
{
deleteui;
}
/*連線MQTT的槽*/
voidMainWindow::onConnected()
{
QMessageBox::information(this,"提示","連線伺服器成功");
ui->pushButton_connection->setText("斷開連線");
}
/*訂閱MQTT的主題*/
quint16MainWindow::onSubscribed(constQString&topic,constquint8qos)
{
QMessageBox::information(this,"訂閱",topic);
}
/*接收主題資訊*/
voidMainWindow::onReceived(constQMQTT::Message&message)
{
//QMessageBox::information(this,"收到",QString::fromUtf8(message.payload()));
ui->textBrowser_rev->insertPlainText(message.topic()+":"+'\n'+""+QString::fromUtf8(message.payload())+'\n');
}
/*斷開連線的槽*/
voidMainWindow::ondisconnected()
{
ui->pushButton_connection->setText("連線MQTT伺服器");
}
/*連線按鈕*/
voidMainWindow::on_pushButton_connection_clicked()
{
QHostAddresshost(QString(ui->lineEdit_address->text().trimmed()));//得到MQTT主機地址
quint16port=ui->lineEdit_prot->text().toInt();//得到埠號
client=newQMQTT::Client(host,port);
connect(client,&QMQTT::Client::connected,this,&MainWindow::onConnected);
connect(client,&QMQTT::Client::subscribed,this,&MainWindow::onSubscribed);
connect(client,&QMQTT::Client::received,this,&MainWindow::onReceived);
connect(client,&QMQTT::Client::disconnected,this,&MainWindow::ondisconnected);
client->setClientId(ui->lineEdit_id->text().trimmed());//設定使用者id
client->setUsername(ui->lineEdit_user->text().trimmed());//設定使用者名稱
client->setPassword(ui->lineEdit_pwd->text().trimmed().toLocal8Bit());//設定密碼
client->connectToHost();//連線
}
//訂閱主題按鈕
voidMainWindow::on_pushButton_subscribe_clicked()
{
QStringsub=ui->comboBox_sub->currentText().trimmed();
client->subscribe(sub,0);
ui->label_topic->setText("本機訂閱主題:"+sub);
}
//釋出主題按鈕
voidMainWindow::on_pushButton_publish_clicked()
{
client->publish(QMQTT::Message(1,ui->comboBox_pub->currentText().trimmed(),ui->lineEdit_topic_text->text().toLocal8Bit()));
}
//清空接收區域文字按鈕
voidMainWindow::on_pushButton_clicked()
{
ui->textBrowser_rev->clear();
}

執行之後的介面是這樣的


四、注意我用的是百度雲無接入免費的MQTT伺服器,我在上面設定的三個主題分別是stm32_pub,stm32_sub,stm32_w

這個很簡單,自已先研究,如果需要原始碼可以問我。

相關推薦

自己一個Android的MQTT客戶

這短時間,我做基於STM32f103 的GPRS的連線,每次都要開啟電腦上的mqttfx來進行除錯,感覺很麻煩。所以就用QT forAndroid做了一個Android上的MQTT客戶端,在此分享給各

zabbix學習-如何部署一個agent客戶

自己 sys 簡單 all agen 需要 con zab .com 1、 部署一個agent客戶端很簡單,比如監控服務器本身 yum install zabbix-agent -y 2、配置文件位置: vim /etc/zabbix/zabbix-agend

第二天:給自己一個在線簡歷吧!

7月 負責 移動客戶端 AI 平面設計 2015年 cli 實現 ffice <!doctype HTML><html> <head> <title>楊雄的簡歷</title> </head>

自己一個首頁

到你 incr lin 字體 add clear doctype top and 最近我做了一個屬於自己的首頁,並且,之前只學了一點點web開發的技能,在別人的幫助下,我終於做好了. 代碼先放出來:html: <!DOCTYPE html> <html&g

想擁有屬於自己的名片嗎?用word其實就可以!為自己一個吧!

名片是很多人都需要的東西,去店裡做又貴又麻煩,那麼怎樣用word快速製作名片呢?今天小編教大家制作一款簡易的名片,還沒有名片的小夥伴給自己動手做一個吧!   步驟一:插入一張名片大小的矩形。這裡規定尺寸大小是5.4釐米*9釐米,大家要記好嘍。   步驟

RocketMQ 釋出第一個 Python 客戶,由社群 contributor 貢獻

   Apache RocketMQ 釋出第一個 Python 客戶端,該客戶端基於CPP客戶端的核心,通過使用boost python封裝C語言的API而實現,並由社群開發者貢獻, 該版本提供以下特徵: 支援訊息的可靠同步傳送; 支援可靠的推送消費模式; 支援預設叢集

百度前端技術學院(二)給自己一個線上簡歷吧

一、製作線上簡歷 二、小問題 HTML是什麼,HTML5是什麼? HTML(Htper Text Markup Language)超文字標記語言,不是程式語言,而是一種標記語言,標記語言是一套標記標籤,HTML使用標記標籤來描述網頁。 HTML5是最新的HTML標

利用electron-vue技術實現一個郵箱客戶應用的專案總結

1.electron-vue是利用Chromium瀏覽器、vue-cli腳手架和nodejs來實現跨平臺的桌面應用程式     使用electron-packager或electron-builder打包應用程式,electron-packager打包方式比較簡單,想為哪個平

微信小程式自己一個自定義彈框

因為微信小程式的授權現在需要使用者點選按鈕才能呼叫授權介面,而小程式自帶的彈框的確認按鈕不能繫結bindtap或使用open-type屬性,所以打算自己寫一個自定義彈窗供大家方便使用... 成品: wxml <cover-view class='mask' w

第二課 給自己一個在線簡歷吧

一個 關於 成了 html標簽 通過 使用 一份 sch 還需要 用時:3h 內容: 在w3school學習了118個元素標簽的定義和使用方法 閱讀了一些關於web語義化的文章,在我的理解來看,web語義化的目的是讓機器更高效的服務於web,因為web很多數據的規模早已超

第二課 給自己一個線上簡歷吧

用時:3h 內容: 在w3school學習了118個元素標籤的定義和使用方法 閱讀了一些關於web語義化的文章,在我的理解來看,web語義化的目的是讓機器更高效的服務於web,因為web很多資料的規模早已超出了人腦所能處理的範圍,不僅人需要懂的語義,機器也需要懂語義 完成一份線上簡歷: 3.1

使用mutt+msmtplinux郵件客戶

之前一直用sendmail+mailx來發郵件,但是突然在一臺伺服器上遇到個問題,一開啟sendmail,負載暴漲,iowait 40-60,所以,嘗試用下mutt+msmtp,在網上找了相關資料,根據自己配置,總結以下 安裝msmtp <span style="

用PHP伺服器介面客戶用http協議POST訪問安全性一般怎麼

我的問題是,如果不做安全相關處理的話,一些可能改變資料庫的操作可能會遭遇垃圾資料提交什麼的,畢竟要找到這些資訊只要找個http包就可以了 系統無使用者登入 新手問題(從來沒做過服務端開發),如果可以,給幾個主流方法的連結,多謝 直觀總結方法二: 1.請求頭裡帶使用

【WebRTC】自己一個簡單的sfu視訊通訊demo

由於p2p視訊通訊不支援定向ip流量, 所以,做了一個基於mediasoup框架的sfu轉發伺服器和簡單的web客戶端(給安卓端和ios端提前踩坑) 涉及到的技術: mediasoup(官網) Nodejs React WebPack

用.Net打造一個移動客戶(Android/IOS)的服務框架NHM(一)

本文的目的 隨著移動網際網路的迅猛發展,關於移動客戶端技術解決方案的討論越來越多,本系列文章將試圖針對移動客戶端開發中的伺服器端開發,提供一個.NET平臺的框架解決方案。 由於本文是探討針對.Net服務端程式設計,所以理論上與手機端平臺無關,但為了方便描述,本文所提供的例子均為Android平臺,服務端程式

使用c++實現一個FTP客戶(三)

  一、gethostbyname(),inet_ntoa()等函式已經過時     使用上面兩個函式時編譯器會報錯並提示函式已經是過時的了(obsolete),應該用getaddrinfo()與InetNtop()代替,這兩個函式都是協議無關的,同時支援IPv4和I

Axis的Service客戶部署在weblogic上相容問題

昨天部署應用時才發現問題,應用中新加的Axis做的客戶端在WebLogic Server 版本: 10.3.5.0上報錯具體的堆疊資訊如下: 2013-05-18 13:23:49,580 [TIBCO EMS Session Dispatcher (9350847568)

自己一個計算器

#第零版 ``` #include int main() { double tot,i,j; char ch; printf("請輸入第一個數:") ; scanf("%f",&i); printf("請輸入運算子;"); scanf("%c",&ch);

如何一個簡易的新聞客戶

android1,下載一個服務端 tomcat下載後開始運行,將需要瀏覽的東西,放在webapps-root文件下這裏假設有一個xml小文件,接下來就開始上代碼了,在同一個包下給mainactivity創造兩個class文件,一個用來解析xml文件(解析方式多種,有興趣可以上網查閱資料),一個用於存放數據1,

python---》客戶與服務的基礎(一個簡單的客戶與服務

python 今天我們分享的內容是python簡單的客戶端與服務端,此處僅介紹一些簡單的函數,並作出來一個玩兒玩兒。 在開始之前呢,先用一張圖表示他們之間的關系 我們來按照這個步伐依次介紹:服務端:import socketserver=socket.socket()#此處是為了創建