簡體   English   中英

AWS IoT-JSON格式不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM