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.

[参考译文] CC3220SF-LAUNCHXL:Azure IoT Hub MQTT 示例无法正常工作

Guru**** 2553450 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/885109/cc3220sf-launchxl-azure-iot-hub-mqtt-example-not-working

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

实际上、我遇到了确切的问题、如 https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/802877?RTOS-SIMPLELINK-CC3220-SDK-mqtt-not-working-for-cc3220-communication-via-the-Azure-IoT-Hub-client-SDK-in-C 所示

但我将 ServicePack 和 SDK 更新到了最后一个版本。 运行该示例会导致以下日志:

[Cortex_M4_0]启动 iiohub_client_sample_mqTT 示例
当前时间 :2020年3月3日01:36:38

CC32XX 已连接到 AP 并获取 IP 地址。
IP 地址:192.168.0.110
IoTHubClient_LL_SetMessageCallback...成功。
IoTHubClient_LL_SendEventAsync 接受的消息[0]用于传输到物联网集线器。
IoTHubClient_LL_SendEventAsync 已接受消息[1]、用于传输到物联网集线器。
IoTHubClient_LL_SendEventAsync 已接受消息[2]、用于传输到物联网集线器。
IoTHubClient_LL_SendEventAsync 已接受消息[3]、用于传输到物联网集线器。
IoTHubClient_LL_SendEventAsync 已接受消息[4]、用于传输到物联网集线器。

我在 Azure 活动日志中看不到任何日志。 我确定连接字符串是正确的。 我缺少什么吗?

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

    您好!

    您能告诉我您使用的是哪个版本的 SimpleLink CC32XX SDK、Service Pack 和 Azure 插件吗?

    谢谢、
    Gerardo

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

    SDK:3.40

    服务包:3.14

    Azure 插件:3.30

    据我所知、所有这些都是最新版本。

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

    我刚刚尝试使用这些相同的版本、示例工作正常、因此这不应该成为问题。

    您是否对该示例进行了任何修改? 您能否确保示例正在调用 IoTHubClient_LL_DoWork()? 在调用此函数之前(有时多次)不会调用回调、以允许底层库处理消息。

    BR、
    Gerardo

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

    除了 WiFi 和连接字符串信息之外、我没有做任何修改。

    在调试器下、我可以看到该示例确实是在第188行中调用 IoTHubClient_LL_DoWork。 我重新导入了该示例以确保、但这也不起作用。

    还有什么可以检查的吗?

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

    我们需要在基础 Azure 库中启用日志、以查看是否显示任何错误。 要启用日志、请执行以下操作:

    1.链接到 Azure 库的调试版本而不是版本。 在链接库中修改:

    ${COM_TI_Azure_CC32XX_INSTALL_DIR}/source/third_party/azure-iot-pal-simplelink/build_all/pal/lib/ccs/m4/pal_sl_release.
    至:
    ${COM_TI_Azure_CC32XX_INSTALL_DIR}/source/third_party/azure-iot-pal-simplelink/build_all/pal/lib/ccs/m4/pal_sl_debug.a
    同样、对于中的任何其他链接库、从发布更改为调试、请执行相同的操作:
    ${COM_TI_Azure_CC32XX_INSTALL_DIR}/source/third_party/azure-iot-pal-simplelink/build_all/sdk/lib/ccs/m4… "

    2.在您的应用程序中启用运行时日志选项,此选项在示例中默认启用,因此只需确保其存在。 这是通过以下调用完成的:

    bool traceOn = true;
    IoTHubClient_LL_setOption (iotHubClientHandle、option_log_trace、&traceOn);
    

    在启用日志后发布运行示例的输出、以便我们进行检查。

    此致、
    Gerardo

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

    好的、这生成了一些有望有用的日志:

    [Cortex_M4_0]启动 iiohub_client_sample_mqTT 示例
    当前时间 :2020年3月5日01:42:06日

    CC32XX 已连接到 AP 并获取 IP 地址。
    IP 地址:192.168.0.100
    IoTHubClient_LL_SetMessageCallback...成功。
    IoTHubClient_LL_SendEventAsync 接受的消息[0]用于传输到物联网集线器。
    错误:时间:Thu Mar 5 01:42:08 2020文件:../../pal/src/tlsio_sl.c Func:tlsio_sl_open Line:371 SlNetSock_startSec 无法启动会话

    错误:时间:Thu Mar 5 01:42:08 2020文件:../../sdk/iothub_client/src/iothubtransport_mqtt_common.c Func:SendMqttConnectMsg Line: 2262连接到地址 CapPaper.azure-devices.net 失败。
    IoTHubClient_LL_SendEventAsync 已接受消息[1]、用于传输到物联网集线器。
    错误:时间:Thu Mar 5 01:42:11 2020文件:../../pal/src/tlsio_sl.c Func:tlsio_sl_open Line:371 SlNetSock_startSec 无法启动会话

    错误:时间:Thu Mar 5 01:42:11 2020文件:../../sdk/iothub_client/src/iothubtransport_mqtt_common.c 函数:SendMqttConnectMsg Line: 2262连接到地址 CapPaper.azure-devices.net 失败。
    IoTHubClient_LL_SendEventAsync 已接受消息[2]、用于传输到物联网集线器。
    错误:时间:Thu Mar 5 01:42:13 2020文件:../../pal/src/tlsio_sl.c Func:tlsio_sl_open Line:371 SlNetSock_startSec 无法启动会话

    错误:时间:Thu Mar 5 01:42:13 2020文件:../../sdk/iothub_client/src/iothubtransport_mqtt_common.c 函数:SendMqttConnectMsg Line: 2262连接到地址 CapPaper.azure-devices.net 失败。
    IoTHubClient_LL_SendEventAsync 已接受消息[3]、用于传输到物联网集线器。
    IoTHubClient_LL_SendEventAsync 已接受消息[4]、用于传输到物联网集线器。
    错误:时间:Thu Mar 5 01:42:17 2020文件:../../pal/src/tlsio_sl.c Func:tlsio_sl_open Line:371 SlNetSock_startSec 无法启动会话

    错误:时间:Thu Mar 5 01:42:17 2020文件:../../sdk/iothub_client/src/iothubtransport_mqtt_common.c 函数:SendMqttConnectMsg Line: 2262连接到地址 CapPaper.azure-devices.net 失败。
    错误:时间:Thu Mar 5 01:42:25 2020文件:../../pal/src/tlsio_sl.c Func:tlsio_sl_open Line:371 SlNetSock_startSec 无法启动会话

    错误:时间:Thu Mar 5 01:42:25 2020文件:../../sdk/iothub_client/src/iothubtransport_mqtt_common.c 函数:SendMqttConnectMsg Line: 2262连接到地址 CapPaper.azure-devices.net 失败。

    这是否与某些 TLS 设置相关? 我是否需要指定证书?

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

    是的、这是 TLS 问题、我相信这是由于使用了错误的证书集合。 要解决此问题、请执行以下操作:

    确保您的 CC32XX LaunchPad 使用包含巴尔的摩网络信任根 CA (即不是游乐场目录)的证书目录进行更新。 使用 TLS 与 Azure 服务器安全连接时、此根 CA 针对证书目录进行验证、如果目录不包含此特定根 CA、则会导致连接错误。 UniFlash 项目的默认行为是使用游乐场目录、因此您需要确保更改该目录。 有关更新证书目录的信息、请查看以下链接上的"更改受信任的根证书目录"部分:
    http://dev.ti.com/tirex/explore/node?node=AH9w8QwBrpt-RLlf.VRAvg__fc2e6sr__LATEST

    谢谢、
    Gerardo

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

    是的、就是这样。 谢谢!