Ви не увійшли.
Сторінки 1
Вот и используйте, JOSON формат {"переменная1":"значение1","переменная2":"значение2",..., "переменнаяN":"значениеN"}. Имена переменных сделайте покороче. Ну а вообще мне не понятно, Вам что нужна отправка по какому то формату не от Вас зависимому? Ну например на narodmon.ru? И Вы используете библиотеку ардуино для модема или нет? При использовании библиотеки не должно быть подобных траблов.
Суть та же, на длину строки не повлияет...
DangerD пише:Nefreemen пише:Спасибо буду знать . хотя можно было сообразить 2^8 .
С модемом не работал поэтому не пойму что это и зачем:
int str_tlen;
for(i=0;i<=16;i++) {
str_tlen = http_cmds[ i ].length() + 1;
char http_cmd[str_len];
http_cmds[ i ].toCharArray(http_cmd, str_tlen);
Serial.println(http_cmd);
sim900_send_cmd(http_cmd);
}
Похоже на создание const char*, но почему в цикле и по 16 и почему по байтно с добавлением непечатного .
Но это вопрос наверное к ТС.Это костыль) (Кол-во элементов String http_cmds[])
Короче говоря фунцкия sim900_send_cmd(http_cmd) понимает только char array (char[])
У меня данные приходят с различных сенсоров (температура влажность координаты и т.п.) и их надо отправить.
Надо в общем всё перевести в char array каким-то раком, а так как я пхпшник, то для меня это проблема))Давеча глянул стандартный пример в ИДЕ по модему и вообще Ваш код не понял. Как для меня то слишком много "непоняток" куда отправлять (что отправлять понятно ) и какое управление модемом, такое впечатление что на уровне SDK модема ). Если это не в облака (где нужен какой то определенный формат) а куда то себе, то слепите вручную (или используйте библиотеку соответствующую) JSON строку и "пульните" что хотите.
String http_cmd_str = "GET /send.php?gpsCoords="+urlencode(gpsCoords)+"&humidity="+urlencode(humidity)+"&temperature2="+urlencode(temperature2)+"&pressure="+urlencode(pressure)+"&altitude="+urlencode(altitude)+"&temperatureGround="+urlencode(temperatureGround)+"&temperature="+urlencode(temperature)+" HTTP/1.0\r\nHost: test.org\r\n\r\n"
Вот строка, только толку от неё нет так как длина строки очень большая и не хватает памяти...
Спасибо буду знать . хотя можно было сообразить 2^8 .
С модемом не работал поэтому не пойму что это и зачем:
int str_tlen;
for(i=0;i<=16;i++) {
str_tlen = http_cmds[ i ].length() + 1;
char http_cmd[str_len];
http_cmds[ i ].toCharArray(http_cmd, str_tlen);
Serial.println(http_cmd);
sim900_send_cmd(http_cmd);
}
Похоже на создание const char*, но почему в цикле и по 16 и почему по байтно с добавлением непечатного .
Но это вопрос наверное к ТС.
Это костыль) (Кол-во элементов String http_cmds[])
Короче говоря фунцкия sim900_send_cmd(http_cmd) понимает только char array (char[])
У меня данные приходят с различных сенсоров (температура влажность координаты и т.п.) и их надо отправить.
Надо в общем всё перевести в char array каким-то раком, а так как я пхпшник, то для меня это проблема))
Не используйте класс String. В таких микроскопических компьютерах нужно делать сборку и отправку длинных строк, как говорится, на лету. Например с помощью fprintf(...). Но сделать это в Ардуино весьма затруднительно.
Можете скинуть пример как переписать?
Уже задолбался, надо отправить длинную строку с данными с метеостанции, понятное дело что длинная строка не катит так как в ардуине памяти нету...
Так работает
char http_cmd[] = "GET /send.php?test=1 HTTP/1.0\r\n\r\n";
sim900_send_cmd(http_cmd);
Так памяти не хватает:
String http_cmd_str = "GET /send.php?gpsCoords="+urlencode(gpsCoords)+"&humidity="+urlencode(humidity)+"&temperature2="+urlencode(temperature2)+"&pressure="+urlencode(pressure)+"&altitude="+urlencode(altitude)+"&temperatureGround="+urlencode(temperatureGround)+"&temperature="+urlencode(temperature)+" HTTP/1.0\r\nHost: test.org\r\n\r\n"
В итоге пытаюсь сделать что-то типа:
String http_cmds[] = {
F("GET /send.php?"),
F("gps="),
gpsCoords,
F("&hm="),
humidity,
F("&t1="),
temperature,
F("&t2="),
temperature2,
F("&pr="),
pressure,
F("&alt="),
altitude,
F("&gnd="),
temperatureGround,
F(" HTTP/1.0\r\nHost:"),
F("dangerd.org\r\n\r\n")
};
int str_tlen;
for(i=0;i<=16;i++) {
str_tlen = http_cmds[i].length() + 1;
char http_cmd[str_len];
http_cmds[i].toCharArray(http_cmd, str_tlen);
Serial.println(http_cmd);
sim900_send_cmd(http_cmd);
}
gprs_send();
Но не работает по непонятной причине...
У кого какие идеи как отослать много переменных на сервер за раз?
День добрый, никогда раньше не сталкивался с программированием под микроконтроллеры.
В общем надо в готовый проект https://github.com/stawel/cheali-charger впилить библиотеку с поддержкой русских символов:
https://github.com/ssilver2007/LiquidCrystal_1602_RUS
Скетчи готовой либы для ардуины и для атмел студии немного отличаются:
https://github.com/ssilver2007/LiquidCr … 02_RUS.cpp
https://github.com/stawel/cheali-charge … rystal.cpp
В итоге я вконец с этим всем запутался...
в либе русской есть функция:
void LiquidCrystal_1602_RUS::print(const wchar_t *_str){
в cheali-charger:
uint8_t LiquidCrystal::print(const char str[])
уже типы не совпадают
В итоге застрял на этом:
D:/Cheali/cheali-charger-master/src/core/drivers/LiquidCrystal.cpp: In member function 'uint8_t LiquidCrystal::print(const char*)':
D:/Cheali/cheali-charger-master/src/core/drivers/LiquidCrystal.cpp:359:12: warning: case label value exceeds maximum value for type
case 1041: //╨С
uint8_t LiquidCrystal::print(const char str[])
{
uint8_t rus_[8];
int current_char = 0;
int size = 0;
//Определяем длину строки (количество символов)
/*while(str[size] != NULL)
{
size++;
}*/
size = strlen(str);
while(current_char < size)
{
switch(str[current_char])
{
//Русский алфавит, требующий новых символов
//Единовременно может быть заменено только 8 символов
case 1041: //Б
memcpy_PF(rus_, (uint32_t)rus_B, 8);
CharSetToLCD((uint8_t *)rus_, &index_rus_B);
break;
Валится на case 1041
Как букву в этот код перевести?
Сторінки 1