本篇讲述开发板MQTT通讯。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布订阅(Publish/Subscribe)模式的“轻量级”通讯协议。下表是MQTT服务器,使用到HiveMQ。

1.在ubuntu终端安装mosquitto 工具
sudo apt-get install mosquitto-clients

2.代码
这里将开发板作为客户端,发布消息。代码如下
int main(int argc, char **argv)
{
struct _Params params;
int ret = -1;
int status = 0;
memset(¶ms, 0, sizeof(params));
if (parse_parameter(¶ms, argc, argv) == false) {
printf("Please try --help to see usage.\n");
exit(-1);
}
signal(SIGINT, sig_handle);
ret = mosquitto_lib_init();
if (ret != MOSQ_ERR_SUCCESS) {
printf("mosquitto lib init failed!\n");
exit(-1);
}
mosq = mosquitto_new("client1", true, ¶ms);
if (mosq == NULL) {
printf("Create new mosquitto client instance failed!\n");
exit(-1);
}
mosquitto_connect_callback_set(mosq, mqtt_connect_callback);
mosquitto_disconnect_callback_set(mosq, mqtt_disconnect_callback);
mosquitto_publish_callback_set(mosq, mqtt_publish_callback);
mosquitto_message_callback_set(mosq, mqtt_message_callback);
ret = mosquitto_connect(mosq, params.host, params.port, keepalive);
if (ret != MOSQ_ERR_SUCCESS) {
printf("mosquitto connect failed!\n");
status = -1;
goto error;
}
if (params.mode == MQTT_PUBLISH) {
mosquitto_loop_start(mosq);
while (!g_quit) {
if (is_connect == false) {
usleep(100000);
continue;
}
ret = mosquitto_publish(mosq, NULL, params.topic, strlen(params.message), params.message, 0, false);
if (ret) {
printf("Error: Publish returned %d, disconnecting.\n", ret);
mosquitto_disconnect(mosq);
}
break;
}
mosquitto_loop_stop(mosq, false);
} else if (params.mode == MQTT_SUBSCRIBE) {
mosquitto_loop_forever(mosq, -1, 1);
}
error:
mosquitto_destroy(mosq);
mosquitto_lib_cleanup();
return status;
}
工程如下

3.开发板插上网线,连接上网络。前面已有讲过。这里将可执行文件mqtt_client传输到开发板。
scp mqtt_client root@192.168.3.218:/user_app/

4.上位机订阅,开发板发布。
这里在ubuntu订阅MQTT主题。
mosquitto_sub -h broker.hivemq.com -p 1883 -t test/data
开发板发布消息
./mqtt_client -h broker.hivemq.com -p 1883 -M publish -t test/data -m 'www.tronlong.com'
可以看到上位机从MQTT服务器收到订阅的消息。

至此,实现开发板MQTT通讯功能。同上所述,亦可开发板订阅/上位机发布。