This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CC3220SF-LAUNCHXL:CC3220sf-Wifi 门锁演示-无法连接到 MQTT 代理(AWS)

Guru**** 2589300 points
Other Parts Discussed in Thread: CC3220SF, UNIFLASH, CC3220SF-LAUNCHXL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/859345/ccs-cc3220sf-launchxl-cc3220sf-wifi-door-lock-demo--unable-to-connect-to-mqtt-broker-aws

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220SFUNIFLASH

工具/软件:Code Composer Studio

您好,

我正在使用 WiFi 门锁演示开发 CC3220SF Launchpad、作为构建我的应用的参考。

我无法使用经交叉验证的 AWS 证书以安全方式连接到 MQTT 代理(AWS)。

已尝试仍然存在代理连接问题的所有可能方法、但收到以下错误

[MQTT Thread] MQTT 客户端库已成功初始化</r></n></r><9>

[MQTT Thread]连接到代理失败、错误代码:-1</r></n></r>[

我将介绍执行 MQTT 测试所采用的方法

如果有问题、请更正。

步骤1:

我已经从 AWS 代理下载了所需的证书、我正在使用 Uniflash 将其刷写到我的器件中

有3个证书  

1) **** -private.pem.key

2)********* certificate.pem.crt

3)。 ***** RootCA1.pem

步骤2:

接下来、使用 Code Composer Studio、我将调试 WiFi 门锁代码

 代码中的更改如下所示

#define SECURE_CLIENT

#define SERVER_ADDRESS  "******* .amazonaws.com "  //AWS 端点代理
#define PORT_NUMBER 1883
#define secured_port_number 8883
#define loopback_port 1882

安全文件的数量设置为4

#define CLIENT_NUM_SECURE_FILES 4.

安全文件阵列设置如下、并带有证书名称

char * MQTT_Client_SECURE_FILES[client_NUM_SECURE_FILES]={"**** -private.pem.key","***** certificate.pem.crt","**** RootCA1.pem"、NULL};

MQTTClient_ConnParams MQTT_ClientCtx =

MQTTCLIENT_NETCONN_IP4 | MQTCLIENT_NETCONN_SEC |
MQTT_DEV_NETCONN_OPT_SKIP_CERTIFICATE_catalog_verification |
MQTTCLIENT_NETCONN_SKIP_DOMAIN_NAME_VERIFICATION、
服务器地址、
Secured_port_number、
SLNETSOCK_SEC_METHOD_SSLv3_TLSv1_2、
SLNETSOCK_SEC_Cip_full_list、
client_NUM_SECURE_FILES、
MQTT_Client_SECURE_FILES
};

uint16_t  mqttKeepAliveTimeout =43200;// 43200秒= 12小时* 60分钟* 60秒

unsigned char QoS[subscription_topic_count]=
{MQTT_QOS_0、MQTT_QOS_0、MQTT_QOS_0、MQTT_QOS_0};

 

我在没有安全客户端的情况下使用了蚊帐服务器进行了测试,但我需要它使用证书与安全客户端一起工作

不能弄清楚是什么问题。

 

此致、

Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sanath、

    您是否在 SDK 中运行了 MQTT_CLIENT 示例? 您应该在此处使用 AWS 插件

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jesu、

    我的应用要求主要是 AP 配置和 MQTT。

    无线网门锁设计具有这两种设计,这就是我在此基础上构建应用程序的原因。。

    我不必连接 MQTT 的 AWS 服务器...it 现在可以是任何代理,我需要连接到代理并交换消息...

    此致、

    Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sanath、

    您还应该能够使用安全连接使用蚊帐来测试代理。 不过、您只会执行服务器验证。 如果您只需要这些信息,您可以在此处获取服务器(根 CA)的信息:

    https://test.mosquitto.org/

    只需确保禁用"skip_certificate_catalog_verification"步骤、因为他们的自签名证书不在我们的受信任目录中。

    您可能希望尝试进行相互身份验证、这就是您使用 AWS 和客户端证书的原因。 MQTTClient 的选项看起来非常正确。 一个可能出错的问题是"MQTCLIENT_NETCONN_IP4"。 您似乎正在尝试基于代理的 URL 而不是 IP 地址进行连接。 在这种情况下、应使用 MQTTCLIENT_NETCONN_URL。

    通常、您必须查看 SimpleLink 主机驱动程序 API"连接"函数中的实际返回代码、而不是 MQTT 任务中的高级返回代码、以确定证书/密钥的使用是否存在更深层次的问题。 它应与"sl_error_bsd_ESEC_..."保持一致 errors.h 文件中的错误( \source\ti\drivers\net\wifi \errors.h")。

    此致、

    本·M

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ben、

    是的、我正在寻找相互身份验证。

    您能解释一下什么是相互身份验证吗?

    我的理解是 、服务器和客户端都需要有受尊重的证书、然后服务器(代理) 和客户端之间的连接才可能正确?

    例如、我现在希望连接到 AWS 服务器、这意味着我有三个来自 AWS (代理)端的证书、与 cc3220 (客户端)端的证书相同、有一些虚拟证书正在使用 uniflash 刷写到器件中、对吧?

    指出后、我需要更改 MQTTCLIENT_NETCONN_URL、因为我仅使用 AWS 的端点 URL、错误如下所示

    [MQTT Thread] MQTT 客户端库已成功初始化</r></n></r>

    sl_socket_ASYNC_EVENT 套接字事件2、请重新启动</r></n></r>

    [sock event]-意外事件[20x]</r></n></r><9>

    [MQTT Thread]连接到代理失败、错误代码:-688</r></n></r>

    电桥断开连接</n></r></r></r></n></r>

     

    我在 error.h 上发现-688错误如下所示

    #define SL_ERROR_BSD_ESEC_ASn_NO_signer_E                 (-688L)/* ASN 无签名者确认失败*/

    此外、在我读取的其中一个线程中、错误的证书可能会导致问题。要检查它、我复制了 sl_wi_callbacks.c 中的以下代码

    void SimpleLinkSockEventHandler (SlSockEvent_t *插槽)

    if (pSock->Event == sl_socket_TX_FAILED_EVENT)

    /*套接字错误重启 OTA */
    // uart_print ("sl_socket_TX_failed_event socket event %d、do restart \n\r\n、pSock->Event);
    display_printf (display、0、0、"sl_socket_TX_failed_event socket event %d、do restart \n\r\n [%x0x]"、
    pSock->Event);
    //SignalEvent (APP_EVENT_RESTART);

    否则(pSock->Event == sl_socket_ASYNC_EVENT)

    交换机(pSock->SocketAppoed.Sock.Data)

    案例 SL_SSL_notification_wrong_root_CA:
    /*套接字错误重启 OTA */
    display_printf (display、0、0、"sl_socket_ASYNC_EVENT:错误-错误的根 CA\n\r\n);
    Display_printf (display、0、0、"请安装以下根证书:\n\n");
    Display_printf (display、0、0、"%s\n\r\n、pSock->SocketAppoint.Sockn 数据.pExtraInfo);

    // uart_print ("sl_socket_ASYNC_EVENT:错误-错误根 CA\n\r\n);
    // uart_print ("请安装以下根证书:\n\n");
    //uart_print ("%s\n\r\n、pSock->SocketEvent.Sock3数据.pExtraInfo);
    //SignalEvent (APP_EVENT_RESTART);
    中断;

    默认值:
    /*套接字错误重启 OTA */
    //uart_print ("sl_socket_ASYNC_EVENT 套接字事件%d、请重新启动\n\r\n、pSock->Event");
    //SignalEvent (APP_EVENT_RESTART);
    中断;

    /*套接字错误重启 OTA */
    // uart_print ("sl_socket_ASYNC_EVENT 套接字事件%d,请重新启动\n\r\n,pSock->Event");
    //g_intNetworkState = network_State_NULL;
    //SignalEvent (APP_EVENT_RESTART);

    其他

    /*在此应用程序中未使用*/
    // uart_print (“意外的套接字事件%d\n\r\n,pSock->Event);
    //SignalEvent (APP_EVENT_ERROR);

     

    这样、我就得到了以下误差

    SL_SOCKET_ASYNC_EVENT:错误-根 CA \n></r></r></r></r></n></r>
    请安装以下根证书:</n></r></r></r></n></r>
    Starfield Class 2认证机构</n></r></r></r></n></r><9>
    [MQTT Thread]连接到代理失败、错误代码:-688</r></n></r>
    电桥断开连接</n></r></r></r></n></r>

    Uniflash 中还有一个问题  

    开发模式-文件>可信根证书目录

    我是否需要使用 默认的受信任根证书目录中的目录

    C:\ti\simplelink_cc32xx_sdk_3_30_01_02\tools\cc32xx_tools\certificate-catalog

    我已经插入了它的屏幕截图


     

    由于我不熟悉这一领域,我对这些问题有许多疑问

     

    谢谢、

    Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ben、

    这是我上一个帖子后的更新。

    最后、我连接到 AWS 服务器.Root CA 是问题所在。

    我知道需要将哪个根刷写到从 AWS 站点下载的证书并刷写到器件中的器件中

    它已连接、我与代理进行了通信。

    非常感谢您的建议。

    现在、我将处理我的应用。

    谢谢、

    Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ben、

    有关 AWS 设置的一个小更新。

    我在从设备到 AWS 代理端的消息发布问题中遇到问题。

    我能够从 AWS 端接收到设备的消息

    我已订阅 AWS 代理中的主题。但是、当我从设备发布消息时、消息将作为桥接断开和板载客户端断开消息发送。

    此致、

    Sanath

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:CC3220SF-LAUNCHXL

    工具/软件:Code Composer Studio

    您好!

    我正在使用  WiFi 门锁演示来开发 CC3220SF Launchpad、以作为我的应用的参考。

    对于 MQTT 应用 程序,我已使用所需的证书以安全方式连接到 AWS 代理。

    我能够将消息从 AWS 代理端发布到订阅的主题、并且可以在串行终端端口中看到来自设备端的消息。

    问题:

    我 在将消息 从 CC3220发布到 AWS 代理端时遇到问题(我在 AWS 代理中订阅 了我要发布的主题)

    下面是尝试从 cc3220发布时在串行端口中看到的错误

    sl_socket_ASYNC_EVENT 套接字事件2、请重新启动</r></n></r>[sock event]-意外事件[20x]</r></n></r>

    桥接断开连接</n></r></r></n><9>[MQTT Thread]板载客户端已断开连接</r></n></r><9>

    此致、

    Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sanath Rai、

    我已将您的新帖子合并到这里。 请将所有答案保留在一个主题上。

    谢谢、

    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sanath、

    这是奇数。 如果您可以连接并订阅、您应该能够发布。 我也不知道在主题格式方面有任何限制。 您能否分享一个片段、介绍如何使用所有参数的当前值来调用 publish?

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jesu、

    我觉得我遇到的错误与下面的帖子有关。

    我的情况是、我没有更改代码。

    我将发布代码片段。

    此致、

    Sanath

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sanath、

    您为什么认为这与该帖子有关? 用户正在尝试订阅4个主题、默认情况下 MQTT 客户端允许的最大值为4。 如果我理解正确,您订阅时不会遇到问题-问题是您的设备尝试发布设备时断开连接。

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jesu、

    好的。

     我将在到达办公室后发布代码片段。

     任何与保持活动超时相关的东西

    我在这个帖子中提到了类似的问题

    Sanath

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jesu、

    以下是我发布 MQTT 的代码

    #define publish_topic_count 1.
    #define publish_data_count 2.

    #define  RETAIN_ENABLE  1.

    #define publish_TOPIC0       "锁定"

    #define publish_TOPIC0_locked "{\"state\":\" locked\"}"
    #define publish_TOPIC0_unlocked "{\"state\":\" unlocked\"}"

     

    char msg[30]={'\0'};

    strcpy (msg, (App_CB.locked=true)?  publish_TOPIC0_locked: publish_TOPIC0_unlocked);

    char * publish_topic[publish_topic_count]={publish_TOPIC0};


    lRetVal = MQTTClient_publish (
             app_bc.mqttClientHandle、(char*) publish_topic[0]、
             strlen((char*) publish_topic[0]),(char*) msg,
             strlen((char*) msg)、MQTT_QOS_0 |(retain_enable)? MQTT_publish_retain :0);

     

    此致、

    Sanath Rai

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jesu、

    关于发布问题、我发现了另一个问题

     我刚刚配置了一个新 AP、发现 只要 MQTT 成功连接到 BRIker 并立即订阅主题 、就会立即出现以下错误

    电桥断开

    [MQTT Thread]板载客户端已断开连接

    [MQTT Thread]订阅错误

     

    此致、

    Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jesu、

    今天,我再次使用防蚊剂进行了测试,没有进行安全测试。

    我能够成功连接 、而且我也可以使用相同的设置(代码)发布和订阅两种方式、唯一的区别是没有证书。

    这证明我的代码中的"发布"部分是可以的。问题必须是其他问题吗?

    此致

    Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sanath、

    您有什么物联网政策适合您的"事物"的云? 您可能在云上有一些不允许发布的配置。

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的同事刚刚测试过。 事实证明、AWS 不支持 RETAIN_ENABLE、因此将其设置为0、并且它们也不支持 QoS 2、因此将其更改为1或0。

    这应该像刚刚测试的那样工作。

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jesu、

    它起作用了。这就是问题所在。

    非常感谢您的支持和建议。

    它的 MQTT 部分。

    我还有几个与我的应用相关的问题。如果这不是问题、我将继续并在这里自行询问。

    1) 1)立即在门锁参考项目中、一旦器件在配置文件添加后进行 AP 配置、它将存储在串行闪存中、此后、器件每次重新启动时都会自动配置到存储的配置文件。

    我的问题是、如果我需要配置新 AP、该怎么办?如何再次进入 AP 模式?

    2) 2)现在、我正在通过 Code Composer Studio 调试和转储代码、但无法通过 uniflash 转储项目的.bin 文件。

    尝试在 uniflash 中添加文件时、我不知道原因  

     在  发生错误时使用 UNIFLASH 的 bin 文件(507Mb)

    错误:MCU 映像文件超出此器件的最大大小

    我将在此处附加映射文件  

    e2e.ti.com/.../map.txt

    此致、

    Sanath Rai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sanath、

    我看到您创建了一个新主题、其中包含 您的新问题 https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/861924。 我将关闭这一个、并继续在另一个上为您提供支持。

    Jesu