このガイドは、あなたが使用するのに役立ちますクリプトパホクライアントはMQTTブローカーに接続し、メッセージを公開します。 トピックを購読します。 軽量で、C で書かれ、MQTT v3.1.1 と v5.0 をサポート 埋め込まれ、IoTアプリケーションお問い合わせ
開始する前に、次の設定を必ず設定してください。
git クローン --branch v1.3.14 https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
メイク
sudo make インストール
mkdirビルド。 パフォ
cdビルド。 パフォ
"C:\Program Files (x86)\Microsoft を呼び出す ビジュアルスタジオ 14.0\VC\vcvarsall.bat x64
make -G "NMake Makefiles" -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_SAMPLES=TRUE -DPAHO_BUILD_SAMPLES=TRUE -DPAHO_BUILD_FALSE -DPAHO_BUILD_SAMPLES=TRUE -D -DPAHO -D -D -D -D -DPAHO -D -D -D -D -D -D -DPAHO -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -D -DCMAKE_BUILD_TYPE=リリース -DCMAKE_VERBOSE_MAKEFILE=TRUE .
メニュー
このセクションでは、接続する複数の方法について説明しますMQTTについてお問い合わせ ブローカーの詳細(ホスト名、ポート、ユーザー名/パスワード、CA証明書)が便利です。
基本TCP コネクション
#define ADDRESS "tcp://public-mqtt-broker.bevywise.com:1883"
#define CLIENTID "testclient4" は、
MQTTAsyncクライアント;
MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL) の使い方
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
int の rc;
if ((rc = MQTTAsync_connect(client, &conn_opts))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("Connect, return code %d\n", rc" を起動できません)
出口(EXIT_FAILURE);
お問い合わせ
認証と接続
MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL) の使い方
conn_opts.username = "your-mqtt-username";
conn_opts.password = "your-mqtt-password";
TLS/SSL に接続
MQTTAsync_SSLOptions ssl_opts = MQTTAsync_SSLOptions_initializer;
ssl_opts.verify = 0;ssl_opts.slVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.enableServerCertAuth = 1 ;
ssl_opts.verify = 1 ;
conn_opts.sl = &ssl_opts;
WebSocketを介して接続
#define アドレス
"ws://freemqttbroker.sfodo.mqttserver.com:10443" "
#define TOPIC "デバイス/ステータス"
#define PAYLOAD "ON" は、
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
int の rc;
pubmsg.ペイロード = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
パブmsg.qos = 1;
pubmsg.retained = 0;
渡された = 0;
もし(rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &opts)) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf(" sendMessage を開始できなかった, 戻りコード %d\n", rc);
出口(EXIT_FAILURE);
お問い合わせ
#define フィルター "your-topic-filter"
#QOSの定義 1
if ((rc = MQTTAsync_subscribe(client、FILTER、QOS、NULL))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("サブスクリプションに失敗し、コードを%d\n、rcを返す);
出口(EXIT_FAILURE);
お問い合わせ
退会のため:
#define フィルター "your-topic-filter"
if ((rc = MQTTAsync_unsubscribe(client, FILTER, NULL)) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("unsubscribe, 戻りコード%d\n", rc);
お問い合わせ
クリーンな切断により、ブローカーが結びつくリソースを解放します セッションは、リングソケット接続を避けます。
MQTTAsync_disconnect(クライアント、NULL);
MQTTAsync_destroy(&client) ディレクティブ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "MQTTAsync.h" の読み込み
#define ADDRESS "tcp://localhost:1883"
#define CLIENTID "testclientC4" ディレクティブ
#define TOPIC "センサー/温度"
#define PAYLOAD "180"
#QOSの定義 1
#define タイムアウト 10000L
int 通知 = 0;
終了 = 0;
onDisconnect(void*文脈) を変換します。 MQTTAsync_successData* 応答
お問い合わせ
printf("Successful disconnection\n");;;;
終了 = 1;
お問い合わせ
onSubscribe(void*文武) を省略します。 MQTTAsync_successData* 応答
お問い合わせ
printf("Subscribe は成功しました\n");
お問い合わせ
onConnectFailure(void* ́∀`) は、 MQTTAsync_failureの使い方 データ* 応答
お問い合わせ
printf("Connect が rc %d\n", response->code : 0 ); を呼び出します。
終了 = 1;
お問い合わせ
void onConnect(void* 文字列) MQTTAsync_successData* 応答
お問い合わせ
printf("関連成功\n");
お問い合わせ
int msgarrvd(void *context、char *topicName、int トピックレン、MQTTAsync_message *message)
お問い合わせ
コンテンツ
char* のペイロードプター
printf("""""") は、
printf(" トピック: %s\n", トピック名);
printf(") メッセージ: ");
ペイロードプラー=メール-> ペイロード
用(i=0; i<message->payloadlen;i++)
お問い合わせ
パットチャー(* ペイロードプラー++)
お問い合わせ
パチャー('\n');
MQTTAsync_freeMessage(&メッセージ)。
MQTTAsync_free(ユーザー名)
終了 = 1;
リターン1;
お問い合わせ
int main(int argc, char* argv[)] の
お問い合わせ
// クライアント
MQTTAsync クライアント
MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL)の使い方
MQTTAsync_setCallback(クライアント、NULL、NULL、msgarrvd、NULL)
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
ご利用規約 ================================================================================================================================================================================================================================================================ 1) 1
お問い合わせ
conn_opts.username = "dev2";
conn_opts.password = "key2";
お問い合わせ
conn_opts.keepAliveインターバル = 60;
conn_opts.cleansession = 1 ;
conn_opts.onの成功 = onConnect;
電子メール = onConnectFailure
conn_opts.context = クライアント;
の rc の
if ((rc = MQTTAsync_connect(client, &conn_opts))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("Connect, return code %d\n", rc" ) は、
終了(EXIT_FAILURE)
お問い合わせ
睡眠(1);
// リクエスト
MQTTAsync_responseOptions sub_opts = MQTTAsync_responseOptions_initializer;
sub_opts.onの成功 = onSubscribe;
sub_opts.context = クライアント;
if ((rc = MQTTAsync_subscribe(client, TOPIC, QOS, ◀_opts)))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("" に に に に " を を を を を を を を を を を を を を を を を を を を を を を ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); );
終了(EXIT_FAILURE)
お問い合わせ
// 公開
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
ログイン ペイロード
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
if ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, NULL)))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf(" sendMessage を呼び出します。, 戻りコード %d\n", rc);
終了(EXIT_FAILURE)
お問い合わせ
!(!終了)
お問い合わせ
#if 定義(WIN32) | 定義(WIN64)
睡眠(100);
ログイン
usleep(10000L);
よくあるご質問
お問い合わせ
MQTTAsync_destroy(&client) ディレクティブ
アーク
お問い合わせ
コードをそのまま保存mqtt4 クライアント
コンパイル:
mqtt4client mqtt4Client.c -lpaho-mqtt3a -lpaho-mqtt3as
実行:
./mqtt4 クライアント
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "MQTTAsync.h" の読み込み
#define ADDRESS "tcp://localhost:1883"
#define CLIENTID "testClientC5" は、
#define TOPIC "センサー/湿気"
#define PAYLOAD "20.3"
#QOSの定義 1
#define タイムアウト 10000L
int 通知 = 0;
終了 = 0;
onDisconnect(void*文脈) を変換します。 MQTTAsync_successData* 応答
お問い合わせ
printf("Successful disconnection\n");;;;
終了 = 1;
お問い合わせ
onConnectFailure(void* ́∀`) は、 MQTTAsync_failureの使い方 データ* 応答
お問い合わせ
printf("Connect が rc %d\n", response->code : 0 ); を呼び出します。
終了 = 1;
お問い合わせ
void onConnect(void* 文字列) MQTTAsync_successData* 応答
お問い合わせ
printf("関連成功\n");
お問い合わせ
int msgarrvd(void *context、char *topicName、int トピックレン、MQTTAsync_message *message)
お問い合わせ
コンテンツ
char* のペイロードプター
printf("""""") は、
printf(" トピック: %s\n", トピック名);
printf(") メッセージ: ");
ペイロードプラー=メール-> ペイロード
用(i=0; i<message->payloadlen;i++)
お問い合わせ
パットチャー(* ペイロードプラー++)
お問い合わせ
パチャー('\n');
MQTTAsync_freeMessage(&メッセージ)。
MQTTAsync_free(ユーザー名)
終了 = 1;
リターン1;
お問い合わせ
int main(int argc, char* argv[)] の
お問い合わせ
// クライアント
MQTTAsync クライアント
MQTTAsync_createOptions create_opts = MQTTAsync_createOptions_initializer;
create_opts.MQTTVersion = MQTTVERSION_5;
int rc = MQTTAsync_createWithOptions(&client、ADDRESS、CLIENTID、MQTTCLIENT_PERSISTENCE_NONE、NULL、&create_opts)
MQTTAsync_setCallback(クライアント、NULL、NULL、msgarrvd、NULL)
// CONNECT の設定
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer5;
ご利用規約 ================================================================================================================================================================================================================================================================ 1) 1
お問い合わせ
conn_opts.username = "dev2";
conn_opts.password = "key2";
お問い合わせ
conn_opts.keepAliveInterval = 20;
conn_opts.cleanstart = 1 ;
conn_opts.onの成功 = onConnect;
電子メール = onConnectFailure
conn_opts.context = クライアント;
MQTTProperties props = MQTTProperties_initializer;
// // セッションの定義
MQTTプロパティ1;
プロパティ1.identifier = MQTTPROPERTY_CODE_SESSION_EXPIRY_INTERVAL;
プロパティ1.value.integer2 = 90;
MQTTProperties_add(&props、&property1);
プロパティ = &props
if ((rc = MQTTAsync_connect(client, &conn_opts))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("Connect, return code %d\n", rc" ) は、
終了(EXIT_FAILURE)
お問い合わせ
睡眠(1);
// リクエスト
!= MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("" に に に に " を を を を を を を を を を を を を を を を を を を を を を を ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); ); );
終了(EXIT_FAILURE)
お問い合わせ
睡眠(1);
// 公開
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
ログイン ペイロード
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
// 公開ディレクトリ
MQTTAsync_responseOptions pub_opts = MQTTAsync_responseOptions_initializer;
pub_opts.context = クライアント;
MQTTProperties pub_props = MQTTProperties_initializer;
MQTTプロパティ3;
プロパティ3.identifier = MQTTPROPERTY_CODE_TOPIC_ALIAS;
プロパティ3.value.integer4 = 90;
MQTTProperties_add(&pub_props、&property3)。
pub_opts.properties = pub_props;
!= MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf(" sendMessage を呼び出します。, 戻りコード %d\n", rc);
終了(EXIT_FAILURE)
お問い合わせ
睡眠(1);
!= MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("unsubscribe, 後方コード%d\n", rc);
終了(EXIT_FAILURE)
お問い合わせ
!(!終了)
お問い合わせ
#if 定義(WIN32) | 定義(WIN64)
睡眠(100);
ログイン
usleep(10000L);
よくあるご質問
お問い合わせ
MQTTAsync_destroy(&client) ディレクティブ
アーク
お問い合わせ
コードをそのまま保存mqtt5 クライアント
コンパイル:
mqtt5client mqtt5lient.c -lpaho-mqtt3a -lpaho-mqtt3as
実行:
./mqtt5clientの