#1 2016-01-09 20:26:54

Solaris
Учасник
З Львов
Зареєстрований: 2015-08-08
Повідомлень: 13
Сайт

Танцы с SIM900

Всем добрых выходных) Написал скетч, чтобы моя 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?

Неактивний

#2 2016-01-09 23:00:47

Йожэг
Учасник
Зареєстрований: 2015-12-30
Повідомлень: 97

Re: Танцы с SIM900

А если забрать кусок кода вот отсюда? https://github.com/DFRobot/GPS-GPRS-GSM … RS_GPS.ino

Неактивний

#3 2016-01-09 23:14:20

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Танцы с SIM900

привет, не совсем понятно
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();

Неактивний

#4 2016-01-09 23:19:34

Solaris
Учасник
З Львов
Зареєстрований: 2015-08-08
Повідомлень: 13
Сайт

Re: Танцы с SIM900

Йожэг пише:

А если забрать кусок кода вот отсюда? https://github.com/DFRobot/GPS-GPRS-GSM … RS_GPS.ino

Так там порядок АТ-команд тот же, только передают всего два параметра широта/долгота. У меня их больше и строка длиннее, отчего проблемы. Или я чего-то не увидел?

Неактивний

#5 2016-01-09 23:33:14

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Танцы с SIM900

Йожэг  имел в виду  передачу строки частями

Неактивний

#6 2016-01-09 23:46:50

Йожэг
Учасник
Зареєстрований: 2015-12-30
Повідомлень: 97

Re: Танцы с SIM900

Плюс там ещё и задержка в 2 секунды в send_GPRS().

Неактивний

#7 2016-01-10 00:39:40

Solaris
Учасник
З Львов
Зареєстрований: 2015-08-08
Повідомлень: 13
Сайт

Re: Танцы с SIM900

Огромное спасибо за наводку) побитная отправка массива и дополнительная заддержка в 200 мс перед отправкой GET-запроса все решила.

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)
          ...

Неактивний

#8 2016-01-10 01:11:29

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Танцы с SIM900

Association Paroisse Le Bon Pasteur )))))
[ add ]
у вас симпатичный сайт  https://scienceukraine.in.ua/ )

Остання редакція NoName (2016-01-10 01:14:13)

Неактивний

#9 2016-01-10 02:40:31

Solaris
Учасник
З Львов
Зареєстрований: 2015-08-08
Повідомлень: 13
Сайт

Re: Танцы с SIM900

NoName пише:

Association Paroisse Le Bon Pasteur )))))
[ add ]
у вас симпатичный сайт  https://scienceukraine.in.ua/ )

да уж, много ньюансов, на которых новичок по невнимательности будет тормозить. Поэтому без добрых пастырей никак))

спасибо за оценку) программим ардуину и несем научный свет в массы)
p.s. если кто желает, можно стать редактором в помощь, всегда рады сотрудничеству

Неактивний

#10 2016-12-02 11:28:30

Михаил_С
Гість

Re: Танцы с SIM900

Solaris пише:

Огромное спасибо за наводку) побитная отправка массива и дополнительная заддержка в 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.

В чем грабли? Бьюсь уже пару дней.

#11 2016-12-02 12:22:37

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Танцы с SIM900

Не знаю как в новых версиях Arduino IDE, c библиотекой Serial, но даже в версии 1.6.5. почему то буфер 64 байта (я где то об этом писал). Я решил проблему изменив в файле HardwareSerial.h  размер буфера. Может в этом трабл?

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму