如何将IoT Hub接收到的控制消息转发至Azure Sphere开发板
Azure IoT Hub 控制消息转发到 Azure Sphere 开发板操作指南
你提供的IoT Hub消息接收确认凭证已核验,Web端到IoT Hub的上行链路正常,仅需完成IoT Hub到设备的下行链路配置即可实现控制需求。
操作步骤
- 首先确认Azure Sphere设备与IoT Hub的关联状态
你的Sphere开发板需先通过Azure Sphere安全服务完成设备预配并绑定到当前使用的IoT Hub实例,可通过Azure CLI运行az sphere device show命令查看设备关联状态,确保无身份认证相关报错。 - 第二步:在Sphere高级应用中添加C2D(云到设备)消息接收逻辑
引入Azure IoT SDK提供的C2D消息回调接口,核心代码参考如下:- 注册消息接收回调函数,解析控制指令执行对应电机操作
static void C2DMessageHandler(IOTHUB_MESSAGE_HANDLE message, void* context) { const unsigned char* msgBody; size_t msgLen; if (IoTHubMessage_GetByteArray(message, &msgBody, &msgLen) == IOTHUB_MESSAGE_OK) { // 此处替换为你的电机控制逻辑,例如收到"start"启动电机、"stop"停止电机 Log_Debug("接收到控制指令:%.*s\r\n", (int)msgLen, msgBody); } }- IoT Hub客户端初始化完成后绑定回调
注意需在应用配置文件IoTHubDeviceClient_SetMessageCallback(iotClientHandle, C2DMessageHandler, NULL);app_manifest.json中开启AzureIot权限,以及电机连接引脚对应的GPIO访问权限。 - 第三步:确认Web端发送的是C2D类型消息
首次使用IoT Hub容易混淆消息类型,你从Web应用发送的必须是云到设备消息,而非设备到云的上行消息。Web端调用IoT Hub服务SDK发消息的核心逻辑参考:var serviceClient = ServiceClient.CreateFromConnectionString("你的IoT Hub服务端连接字符串"); var controlMsg = new Message(Encoding.UTF8.GetBytes("电机控制指令内容")); await serviceClient.SendAsync("你的Sphere设备ID", controlMsg); - 第四步:快速测试链路连通性
可以用Azure CLI直接发送C2D消息调试,无需修改Web端代码:az iot device c2d-message send --device-id <设备ID> --hub-name <IoT Hub名称> --data "start"
运行命令后查看Sphere开发板的调试串口输出,确认是否收到对应的指令内容。
内容的提问来源于stack exchange,提问作者MT8935
相关产品推荐
相关产品推荐

