gpt4 book ai didi

c - Paho MQTT C 客户端与 Beaglebone Black 上的 azure IoT-Hub 连接

转载 作者:行者123 更新时间:2023-11-30 15:07:47 25 4
gpt4 key购买 nike

我正在尝试使用 MQTT 连接 Azure IoT-Hub,并使用 Beaglebone black(操作系统:Debian Wheezy)的 Paho C 客户端发送和接收消息。我在 Ubuntu 机器上使用 eclipse CDT 来开发我的应用程序并远程部署/调试。

当我在 native ubuntu 计算机上运行应用程序(使用 gcc 编译)时,Azure 连接成功并且我能够发送数据包。

我按照指定交叉编译了 OPENSSL here并将相应的目录复制到“/usr/arm-linux-gnueabihf”文件夹中。但是当我使用arm-linux-gnueabihf-gcc-4.7进行编译并在我的beaglebone black(使用gdb-multiarch)上进行远程调试时,我在输出控制台中收到以下错误:

3068126320:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1185:
3068126320:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1185:
Failed to connect, return code -1

请帮我解决这个问题。谢谢。

编辑:可疑链接 - Reg: 可疑重复项中的错误 link是一样的,但是由于证书过期而出现 OPENSSL 错误。但就我而言,它是在与 azure 和 BBB 进行 MQTT 连接期间。此外,该链接中没有我的问题的答案。根据该链接,当我们选择 SSL/TLS 安全连接时,禁用证书验证是没有意义的。

我的代码:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "MQTTClient.h"
#define PAYLOAD "Hello World!"
#define QOS 1
#define TIMEOUT 10000L
#define TOPIC1 "devices/Manoj_Test/messages/events/"
#define ADDRESS "ssl://xxxxxxxx.azure-devices.net:8883"
#define CLIENTID1 "Manoj_Test"

int main(void)
{
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
int rc1;

MQTTClient_create(&client, ADDRESS, CLIENTID1, 1, NULL);
conn_opts.cleansession = 1;
conn_opts.username = "xxxxxxxx.azure-devices.net/Manoj_Test";
conn_opts.password = "SharedAccessSignature sr=xxxxxxxx.azure-devices.net%2fdevices%2fManoj_Test&sig=GyizT%2b7uyIpOkMJjTfN%2fpOZh9CnuQedNB%2bre2NrL1Kg%3d&se=1496395529";


MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered);


if ((rc1 = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc1);
exit(-1);
}

MQTTClient_subscribe(client, TOPIC, QOS);
while(1)
{
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = 1;
pubmsg.retained = 0;
MQTTClient_publishMessage(client, TOPIC1, &pubmsg, &token);
printf("Waiting for up to %d seconds for publication of %s\non topic %s for client with ClientID: %s\n", (int)(TIMEOUT/1000), PAYLOAD, TOPIC1, CLIENTID1);
rc1 = MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("Message with delivery token %d delivered\n", token);
usleep(100000);
}
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
return rc1;
}

最佳答案

您是否考虑过使用 Azure IoT SDK 连接到 IoT 中心? Debian 受到开箱即用的支持,并且建立连接的复杂性被抽象化。您可以阅读此blog了解使用 SDK 的好处。

关于c - Paho MQTT C 客户端与 Beaglebone Black 上的 azure IoT-Hub 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com