#安装mosquitto mqtt #引入仓库 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa #更新源 sudo apt-get update #安装mosquitto sudo apt install mosquitto #安装客户端 sudo apt-get install mosquitto-clients
######测试 #一个终端开启sub mqtt mosquitto_sub -h localhost -t "test_local" -v #另一个终端发布信息,看能否收到 mosquitto_pub -h localhost -t "test_local" -m "HELLO MQTT" 若sub的中端收到,那么mqtt安装成功。python部分
#api参考网站
https://pypi.org/project/paho-mqtt/#usage-and-api
#安装pip
sudo apt install python-pip
#安装python 的mqtt包
pip install paho-mqtt
publish.single("MQTT Examples", 2); 第一个参数为mqtt的topic第二个是内容。
import paho.mqtt.publish as publish
publish.single("MQTT Examples", 2)
c++部分
#paho.mqtt.c 库
https://github.com/eclipse/paho.mqtt.c
#下载oaho c库
git clone https://github.com/eclipse/paho.mqtt.c.git
#编译安装
make
sudo make install
#编译sub程序
g++ MQTTClient_subscribe.c -o sub -lpaho-mqtt3c
#include通信#include #include #include "MQTTClient.h" #define ADDRESS "localhost" #define CLIENTID "ExampleClientSub" #define TOPIC "MQTT Examples" #define PAYLOAD "Hello World!" #define QOS 1 #define TIMEOUT 10000L volatile MQTTClient_deliveryToken deliveredtoken; void delivered(void *context, MQTTClient_deliveryToken dt) { printf("Message with token value %d delivery /confirm/iedn", dt); deliveredtoken = dt; } int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message) { printf("Message arrivedn"); printf(" topic: %sn", topicName); printf(" message: %.*sn", message->payloadlen, (char*)message->payload); MQTTClient_freeMessage(&message); MQTTClient_free(topicName); return 1; } void connlost(void *context, char *cause) { printf("nConnection lostn"); printf(" cause: %sn", cause); } int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; int rc; if ((rc = MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL)) != MQTTCLIENT_SUCCESS) { printf("Failed to create client, return code %dn", rc); rc = EXIT_FAILURE; goto exit; } if ((rc = MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered)) != MQTTCLIENT_SUCCESS) { printf("Failed to set callbacks, return code %dn", rc); rc = EXIT_FAILURE; goto destroy_exit; } conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %dn", rc); rc = EXIT_FAILURE; goto destroy_exit; } printf("Subscribing to topic %snfor client %s using QoS%dnn" "Press Q to quitnn", TOPIC, CLIENTID, QOS); if ((rc = MQTTClient_subscribe(client, TOPIC, QOS)) != MQTTCLIENT_SUCCESS) { printf("Failed to subscribe, return code %dn", rc); rc = EXIT_FAILURE; } else { int ch; do { ch = getchar(); } while (ch!='Q' && ch != 'q'); if ((rc = MQTTClient_unsubscribe(client, TOPIC)) != MQTTCLIENT_SUCCESS) { printf("Failed to unsubscribe, return code %dn", rc); rc = EXIT_FAILURE; } } if ((rc = MQTTClient_disconnect(client, 10000)) != MQTTCLIENT_SUCCESS) { printf("Failed to disconnect, return code %dn", rc); rc = EXIT_FAILURE; } destroy_exit: MQTTClient_destroy(&client); exit: return rc; }
先执行c++的程序,然后执行python ,能够拿到数据。



