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