![](/img/trans.png)
[英]Publishing JSON object through MQTT to AWS IoT from ESP32 using C and ESP-IDF framework
[英]AWS IoT - JSON incorrect format
我正在嘗試將此JSON數據包發送到AWS IoT,但AWS無法識別它。 我正在使用示例ESP32 AWS FreeRTOS代碼,但無法通過以下代碼了解JSON數據包的正確格式:
#define echoMAX_DATA_LENGTH 20
char cDataBuffer[ echoMAX_DATA_LENGTH ];
(void) snprintf(cDataBuffer, echoMAX_DATA_LENGTH, "{\"state\":{\"reported\":%.*d}, \"clientToken\":\"%d\"}", x, x, x);
/* Setup the publish parameters. */
memset( &( xPublishParameters ), 0x00, sizeof( xPublishParameters ) );
xPublishParameters.pucTopic = echoTOPIC_NAME;
xPublishParameters.pvData = cDataBuffer;
xPublishParameters.usTopicLength = ( uint16_t ) strlen( ( const char * ) echoTOPIC_NAME );
xPublishParameters.ulDataLength = ( uint32_t ) strlen( cDataBuffer );
xPublishParameters.xQoS = eMQTTQoS1;
AWS測試頁,無法顯示該消息並將其轉換為UTF-8(此錯誤消息如下)
將echoMAX_DATA_LENGTH
增加到足夠大以適合您的整個JSON消息。
代碼中JSON的靜態部分(不包含snprintf()
填充的值)為34個字符,因此,將echoMAX_DATA_LENGTH
設置為20 echoMAX_DATA_LENGTH
不可能, echoMAX_DATA_LENGTH
它總是產生JSON片段,而不是整個片段JSON對象。
請記住, snprintf()使用的長度包括C字符串終止字符'\\ 0'的字節,因此您需要使echoMAX_DATA_LENGTH
比最大JSON消息總長度echoMAX_DATA_LENGTH
。
當增加echoMAX_DATA_LENGTH
,請嘗試在snprintf()
之后添加調試消息,以便可以看到正在生成的JSON。 如果您的代碼已設置為已使用Serial
,請添加:
Serial.println(cDataBuffer);
在snprintf()
之后,因此您可以確認已正確生成了JSON。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.