Ви не увійшли.
Не знаю как в новых версиях Arduino IDE, c библиотекой Serial, но даже в версии 1.6.5. почему то буфер 64 байта (я где то об этом писал). Я решил проблему изменив в файле HardwareSerial.h размер буфера. Может в этом трабл?
Огромное спасибо за наводку) побитная отправка массива и дополнительная заддержка в 200 мс перед отправкой GET-запроса все решила.
http://s18.postimg.org/py6q50gux/sc1.jpg
Всю прошивку снова выкладывать не буду, вот, что добавилось:
char url[70] = "lat=43.669578&lng=-0.997495&tm=20130609130751&stl=11&sp=122.5&crs=120"; /* Тело */ ... Serial2.print("AT+HTTPPARA=\"URL\",\"http://gps.scienceukraine.in.ua/gps.php?"); for (int j=0; j < sizeof(url); j++){ Serial2.print(url[j]); } delay(2000); if ( sendATcommand("\"", "OK", 5000) == 1) ...
Добрый день.
Может кто поможет добрым советом?
Arduino Nano + SIM800L все хорошо, кроме того, что ни как не могу передать в модем полную строку/команду на исполнение.
Делаю так:
Объявляю переменную - char URL[100] = "?api_key=QDGLLN3P678PLNMD&field1=11\"";
Передаю первую часть строки - GSMport.print("AT+HTTPPARA=\"URL\",\"https://api.thingspeak.com/update");
Циклом загоняю переменную в модем:
for (int j=0; j < sizeof(URL); j++) {
GSMport.print(URL[j]);}
В ответе модема получаю - AT+HTTPPARA="URL","https://api.thingspeak.com/update?api_key=QD
Получается что в цикле из 36 символов добавилось только 11.
В чем грабли? Бьюсь уже пару дней.
Association Paroisse Le Bon Pasteur )))))
[ add ]
у вас симпатичный сайт https://scienceukraine.in.ua/ )
да уж, много ньюансов, на которых новичок по невнимательности будет тормозить. Поэтому без добрых пастырей никак))
спасибо за оценку) программим ардуину и несем научный свет в массы)
p.s. если кто желает, можно стать редактором в помощь, всегда рады сотрудничеству
Association Paroisse Le Bon Pasteur )))))
[ add ]
у вас симпатичный сайт https://scienceukraine.in.ua/ )
Огромное спасибо за наводку) побитная отправка массива и дополнительная заддержка в 200 мс перед отправкой GET-запроса все решила.
Всю прошивку снова выкладывать не буду, вот, что добавилось:
char url[70] = "lat=43.669578&lng=-0.997495&tm=20130609130751&stl=11&sp=122.5&crs=120";
/* Тело */
...
Serial2.print("AT+HTTPPARA=\"URL\",\"http://gps.scienceukraine.in.ua/gps.php?");
for (int i=0; i < sizeof(url); i++){
Serial2.print(url[i]);
}
delay(2000);
if ( sendATcommand("\"", "OK", 5000) == 1)
...
Плюс там ещё и задержка в 2 секунды в send_GPRS().
Йожэг имел в виду передачу строки частями
А если забрать кусок кода вот отсюда? https://github.com/DFRobot/GPS-GPRS-GSM … RS_GPS.ino
Так там порядок АТ-команд тот же, только передают всего два параметра широта/долгота. У меня их больше и строка длиннее, отчего проблемы. Или я чего-то не увидел?
привет, не совсем понятно
buffer for "URL" = 500 b
http://www.seeedstudio.com/wiki/images/ … _v1.11.pdf page 222
пробовали побайтно отправлять запрос?
забыли о защите стека )
char response[100];
простой вариант
if ( x < sizeof(response))
response[x] = Serial2.read();
А если забрать кусок кода вот отсюда? https://github.com/DFRobot/GPS-GPRS-GSM … RS_GPS.ino
Всем добрых выходных) Написал скетч, чтобы моя mega 2560 передfвала параметры по GET запросу на сервер.
Результат - работает наполовину: sim900 шлет запрос только если длина URL меньше 70 символов в строке (Установил опытным путем).
Плата Gboard Pro
void http() {
Serial2.println("AT+CPIN=");
Serial.println("Pin is ok))))");
if ( (sendATcommand("AT+CREG?", "+CREG: 0,1", 1000) || sendATcommand("AT+CREG?", "+CREG: 0,5", 1000)) == 1 ) {
Serial.println("NET ONLINE!");
}
if ( sendATcommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\"", "OK", 2000) == 1 ) {
Serial.println("GPRS yes!");
}
if ( sendATcommand("AT+SAPBR=3,1,\"APN\",\"internet\"", "OK", 2000) == 1 ) {
Serial.println("APN yes!");
}
if ( sendATcommand("AT+SAPBR=3,1,\"USER\",\"\"", "OK", 2000) == 1 ) {
Serial.println("User yes!");
}
if (sendATcommand("AT+SAPBR=3,1,\"PWD\",\"\"", "OK", 2000) == 1 ) {
Serial.println("Pass yes!");
}
if (sendATcommand("AT+SAPBR=1,1", "OK", 20000) == 1 ) {
Serial.println("Bearer sent!");
}
delay(1000);
// Initializes HTTP service
if (sendATcommand("AT+HTTPINIT", "OK", 10000) == 1)
{
Serial.println("HTTP ready!");
// Sets CID parameter
if (sendATcommand("AT+HTTPPARA=\"CID\",1", "OK", 5000) == 1)
{
Serial.println("HTTP params set!");
// Sets url
Serial2.print("AT+HTTPPARA=\"URL\",\"http://gps.scienceukraine.in.ua/gps.php?visor=false&latitude=42.669578&longitude=-0.957495&time=20130609130751&satellites=11&speedOTG=122.5&course=120");
/* Serial2.print(""); */
if ( sendATcommand("\"", "OK", 5000) == 1)
{
Serial.println("message formed!");
// Starts GET action
if (sendATcommand("AT+HTTPACTION=0", "+HTTPACTION:0,200", 30000) == 1)
{
Serial.println(F("Done!"));
}
else
{
Serial.println(F("Error getting url"));
}
}
else
{
Serial.println(F("Error setting the url"));
}
}
else
{
Serial.println(F("Error setting the CID"));
}
}
else
{
Serial.println(F("Error initializating"));
}
sendATcommand("AT+HTTPTERM", "OK", 5000);
}
int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout){
uint8_t x=0, answer=0;
char response[100];
unsigned long previous;
memset(response, '\0', 100);
delay(100);
while( Serial2.available() > 0) Serial2.read();
if (ATcommand[0] != '\0')
{
Serial2.println(ATcommand); // Посыл АТ-команды
}
x = 0;
previous = millis();
// this loop waits for the answer
do{
if(Serial2.available() != 0){
response[x] = Serial2.read();
//Serial.print(response[x]);
x++;
if (strstr(response, expected_answer) != NULL) // проверяем порт на наличие "ОК"
{
answer = 1;
}
}
}while((answer == 0) && ((millis() - previous) < timeout)); // Ждем ответа от модуля
return answer;
}
В общем, в таком варианте нихрена не работает. Если сократить строку до такого http://gps.scienceukraine.in.ua/gps.php … =42.669578 уже отсылает. Если больше, то ступорится.
Устанавливал интервал ожидания ответа даже на 120000 мс, ничего не дает. Помогите разобраться, может кто игрался с sim900?