Ви не увійшли.
Да ладно если Вы так хотите оставить в тайне куда Вы хотите отправить себе на сервер или в облако, и даже то что можно ли менять формат для меня секрет. А для Вас имя переменной temperature1 имеет одинаковую длину как и имя t1 тогда извиняйте, и позвольте откланяться .
Вот и используйте, JOSON формат {"переменная1":"значение1","переменная2":"значение2",..., "переменнаяN":"значениеN"}. Имена переменных сделайте покороче. Ну а вообще мне не понятно, Вам что нужна отправка по какому то формату не от Вас зависимому? Ну например на narodmon.ru? И Вы используете библиотеку ардуино для модема или нет? При использовании библиотеки не должно быть подобных траблов.
Суть та же, на длину строки не повлияет...
Вот и используйте, 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"
Вот строка, только толку от неё нет так как длина строки очень большая и не хватает памяти...
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 строку и "пульните" что хотите.
Спасибо буду знать . хотя можно было сообразить 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 каким-то раком, а так как я пхпшник, то для меня это проблема))
Спасибо буду знать . хотя можно было сообразить 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 и почему по байтно с добавлением непечатного .
Но это вопрос наверное к ТС.
DangerD, на мой взгляд Вы попали на то что и я, что бы найти причину я потратил два вечера. И я думаю что Вы увидите все своими глазами если подключитесь к ардуинке сериал монитором что она шлет в модем, не поленитесь посчитайте символы . И причина не в классе Serial , и в размере памяти . Вы где то встречали в описании класса String или массива char[] ограничение на количество символов? Может оно и существует но я не встречал.
Не используйте класс String. В таких микроскопических компьютерах нужно делать сборку и отправку длинных строк, как говорится, на лету. Например с помощью fprintf(...). Но сделать это в Ардуино весьма затруднительно.
Можете скинуть пример как переписать?
Буфер сериал по умолчанию 64 байта и по идее должен зависеть от МК, но по неизвестной причине даже для Atmega2560 он все равно устанавливается в 64 . Поправьте в библиотеке Serial, поставьте 256 байт.
Уже задолбался, надо отправить длинную строку с данными с метеостанции, понятное дело что длинная строка не катит так как в ардуине памяти нету...
Так работает
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();
Но не работает по непонятной причине...
У кого какие идеи как отослать много переменных на сервер за раз?