На самом деле в вашем коде есть две ошибки. Вы видите ошибку, потому что вы создаете массив char
без указания длины. Другая ошибка состоит в том, что конкатенация строк с +
является частью библиотеки Arduino String, она не является частью c ++ и, следовательно, не является допустимым оператором для типа данных char
.
Есть два способа сделать это: 1) использовать оператор конкатенации строк +
из библиотеки String (все, что вам нужно, это изменить код с char http_cmd[]
на String http_cmd
); 2) используя массив символов. Но обычно считается более безопасным использовать массив символов, чем библиотеку String. Вы можете использовать sprintf()
для создания массива строк, это работает для всех типов данных, за исключением плавающей запятой в Arduino.
Для простоты расчета длины полезной нагрузки json и для удобочитаемости, лучше разбить команду на несколько строк. Кстати, я предположил, что tracker
и height
действительно int
, которые могут быть закодированы в JSON напрямую.
int tracker = 2222;
int height = 42;
// create json payload
char json[30];
sprintf(json, "{\"trackerId\":%d,\"height\":%d}", tracker, height);
char http_post_request[] = "POST /tracker/ HTTP/1.1\r\n";
char http_content_type[] = "Content-Type: application/json\r\n";
// calculate payload length
char http_content_length[20];
sprintf(http_content_length, "Content-Length:%lu\r\n", strlen(json));
char http_host[] = "Host: haul1.herokuapp.com\r\n\r\n";