You need to enable JavaScript to run this app. Azure IoT Hub:ESP8266 Arduino示例发遥测显示ASCII数组,如何发送JSON格式?
优惠活动
大模型
产品
解决方案
定价
更多

Azure IoT Hub:ESP8266 Arduino示例发遥测显示ASCII数组,如何发送JSON格式?

ESP8266上报遥测在IoT Explorer显示为ASCII数组问题

问题背景

  • 开发使用的参考代码为Azure官方ESP8266遥测示例仓库,地址:iothub_ll_telemetry_sample
  • 代码未做任何修改,核心发送逻辑为:
const char* telemetry_msg = "test_message";
message_handle = IoTHubMessage_CreateFromString(telemetry_msg);
result = IoTHubDeviceClient_LL_SendEventAsync(device_ll_handle, message_handle, send_confirm_callback, NULL);

现象与疑问

通过Azure IoT Explorer查看遥测消息时,消息主体(body)被显示为ASCII字节数组,实际效果:
遥测数据显示为ASCII数组截图

存在的疑问:

  • 这种ASCII数组的显示格式是否为Azure IoT Explorer的预期行为?
  • 接收端是否必须对该字节数组做解包操作,才能获取原始发送的字符串?
  • 期望达到与Azure设备模拟器一致的展示效果,遥测内容可直接以格式化JSON结构呈现,预期效果:
    Azure设备模拟器JSON遥测效果截图

对应解答

  1. ASCII数组显示的本质
    这是完全正常的预期显示行为。Azure IoT Hub传输的消息本体本质是二进制字节流,IoTHubMessage_CreateFromString接口会将传入的字符串按ASCII编码转换为对应字节序列存入消息体;当消息未声明内容格式属性时,Azure IoT Explorer会默认将原始字节流以ASCII字节数组的形式展示,不存在数据传输损坏的问题。

  2. 接收端处理逻辑
    接收端确实需要对二进制字节流做解码处理,才能拿到原始字符串内容。如果在设备发送消息时显式声明了编码规则,接收端和IoT Explorer会自动完成解码,无需手动逐字节解包。

  3. 实现JSON格式化展示的方法
    达不到设备模拟器的展示效果,核心原因是发送的消息缺少两个关键属性设置:内容类型(Content Type)、内容编码(Content Encoding)。Azure IoT Explorer在解析消息时,会自动识别这两个属性,当检测到内容类型为application/json、编码为utf-8时,就会自动将二进制消息体解码为格式化JSON展示,而非默认显示字节数组。

    修改代码时,只需在创建消息句柄后、调用发送接口前补充属性设置,并将待发送字符串替换为合法JSON格式即可:

const char* telemetry_msg = "{\"temperature\": 25.6, \"humidity\": 58.2}";
message_handle = IoTHubMessage_CreateFromString(telemetry_msg);

// 补充消息属性声明
IoTHubMessage_SetContentType(message_handle, "application/json");
IoTHubMessage_SetContentEncoding(message_handle, "utf-8");

result = IoTHubDeviceClient_LL_SendEventAsync(device_ll_handle, message_handle, send_confirm_callback, NULL);

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 03:15:07