从CJSON转换valuestring或valueint使用UART_WRITE_BYTES发送失败



因此,当前,我正在发送一条JSON消息,其中包含我需要从ESP32 UART UART_WRITE_BYTES发送的值,但不确定转换中我会出错的位置。目前,如果我发送234,它将UART以50、51、52,而不是234。想法?我正在使用gcc编译器而不是arduino的ESP-IDF。

char hex[8] = {0xff, 0xff, 0xff, 0xff};
cJSON* message'
int intValue = 0;
char *stringValue= "999";
if ((message = cJSON_GetObjectItem(root->child, "msg")) != NULL)
{
    if((intValue = cJSON_GetObjectItem(message, "Number")->valueint) != NULL)
    {
        ESP_LOGI(LOG_TAG, " this is the Number %i ", intValue);
    }
    if((stringValue = cJSON_GetObjectItem(message, "Number")->valuestring) != NULL)
    {
       ESP_LOGI(LOG_TAG, " This is NumberString %s ", stringValue);
    }   
}
char numStrStr[3];
sprintf(numStrStr, "%s", stringValue );
for(int j = 0; j < sizeof(str); j++)
{
    hex[j] = numStrStr[j];
}
int checkIt = uart_write_bytes(UART_NUM_2, (const char *)hex, strlen(hex));

这是因为字符2('2')的ASCII代码为50,字符3('3')为51,字符4('4')为52。

int checkit = uart_write_bytes(uart_num_2,(const char *)hex, strlen(hex));

如果您观察到上述行,您已经明确地铸造了十六进制,以基本上编码ASCII(假设GCC编译器)中的数据,该数据是通过UART传输的。

在UART接收设备或程序中,您需要将传入数据视为ASCII编码数据。您可以使用Coolterm等终端程序来查看ASCII编码和/或原始数据。

要发送原始数据,您可以避免使用const char *的明确类型铸造 *假设在十六进制中存储的数据为[0x02,0x03,0x04],而不是['2','3','3','4']

我让它与以下更改一起工作:我忘了提到我想一次发送一个角色,所以这意味着将" 234"发送为char,然后将其转换为int,然后进行有趣的数学,将其分解为1,10和100发送到串行。

cJSON *message;
int intValue = 0;
const char *buffValue = "999";
hex[0] = 0xfe;
hex[1] = 0x01;
hex[2] = 0x01;
hex[3] = 0x00;
if((buffValue = cJSON_GetObjectItem(message, "NUmber")->valuestring) != NULL)
{
   ESP_LOGI(LOG_TAG, " This is Value String %s ", buffValue);
   ESP_LOGI(LOG_TAG, "strtol %ld ", strtol(buffValue, NULL, 10));
   intValue = strtol(buffValue, NULL, 10);
    int valueArray[3] = {0};
    int increment = 0;
    while(intValue > 0)
    {
        int digitValue = intValue % 10;
        valueArray[increment] = digitValue;
        intValue /= 10;
        increment ++;
    }
    hex[3] = valueArray[2];
    hex[4] = valueArray[1];
    hex[5] = valueArray[0];
}   

int checkIt = uart_write_bytes(UART_NUM_2, (const char *)hex, strlen(hex)); 

相关内容

  • 没有找到相关文章

最新更新