Ви не увійшли.
Сторінки 1
Всем добрых выходных) Написал скетч, чтобы моя 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?
Неактивний
А если забрать кусок кода вот отсюда? 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
Так там порядок АТ-команд тот же, только передают всего два параметра широта/долгота. У меня их больше и строка длиннее, отчего проблемы. Или я чего-то не увидел?
Неактивний
Огромное спасибо за наводку) побитная отправка массива и дополнительная заддержка в 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)
          ...Неактивний
Association Paroisse Le Bon Pasteur )))))
[ add ]
у вас симпатичный сайт  https://scienceukraine.in.ua/ )
Остання редакція NoName (2016-01-10 01:14:13)
Неактивний
Association Paroisse Le Bon Pasteur )))))
[ add ]
у вас симпатичный сайт https://scienceukraine.in.ua/ )
да уж, много ньюансов, на которых новичок по невнимательности будет тормозить. Поэтому без добрых пастырей никак))
спасибо за оценку) программим ардуину и несем научный свет в массы)
p.s. если кто желает, можно стать редактором в помощь, всегда рады сотрудничеству
Неактивний
Огромное спасибо за наводку) побитная отправка массива и дополнительная заддержка в 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.
В чем грабли? Бьюсь уже пару дней.
Не знаю как в новых версиях Arduino IDE, c библиотекой Serial, но даже в версии 1.6.5. почему то буфер 64 байта (я где то об этом писал). Я решил проблему изменив в файле HardwareSerial.h размер буфера. Может в этом трабл?
Неактивний
Сторінки 1