You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AZ3166开发板连接Azure IoT Hub遇授权错误及编译警告求助

解决Azure IoT Hub连接授权错误与DevKit编译警告问题

先聚焦你遇到的核心错误:Connection Not Accepted: 0x5: Not Authorized——这是导致设备无法和IoT Hub建立有效连接的关键,我给你几个排查方向:

  • 核对设备认证信息
    仔细检查IoT Hub中注册的设备连接字符串/主键,和你在DevKit中配置的内容是否完全一致:有没有大小写错误、多余空格或者字符遗漏?如果用了设备预配服务(DPS),还要确认DPS注册列表里的设备是否正确分配到了目标IoT Hub,设备孪生状态是否正常。
  • 检查认证方式的有效性
    如果是用X.509证书认证,确保DevKit上安装的设备证书未过期,且对应的根证书/中间证书已经正确上传到IoT Hub或DPS的证书存储中,证书链完整无断裂。
  • 排查网络连通性
    确认DevKit所在网络可以正常访问Azure IoT Hub的端点,没有被防火墙、企业代理拦截。可以使用AZ3166自带的WiFi诊断工具测试网络连接状态,验证是否能正常访问IoT Hub的域名。
  • 升级SDK硬件包
    从错误日志的路径能看到你用的是AZ3166\hardware\stm32f4\1.6.0版本的硬件包,这个版本比较老旧,可能存在认证相关的已知bug。建议在Arduino IDE中升级AZ3166硬件包到最新稳定版,修复兼容性问题。

再说说编译时的两个警告问题:

1. toolchain.h has been replaced by mbed_toolchain.h 警告

这个是因为你使用的mbed-os版本较旧,头文件命名规范发生了变更。最稳妥的解决方式是升级AZ3166硬件包到最新版本——新版本会自动更新这些头文件的引用,不需要手动修改代码(手动修改反而容易引发其他编译错误)。

2. ISO C++ forbids converting a string constant to 'char*' 警告

这是C++标准的规范问题:字符串常量默认是const char*类型,直接赋值给非const的char*会触发警告。你只需要修改代码中的变量声明:

// 原代码
char* Global_Device_Endpoint = "global.azure-devices-provisioning.net";

// 修改后
const char* Global_Device_Endpoint = "global.azure-devices-provisioning.net";

这样既符合C++标准,也能消除该警告。

内容的提问来源于stack exchange,提问作者SanV

火山引擎 最新活动