GPRS Shield: Как получить данные с веб-сервера

Тема в разделе "Arduino & Shields", создана пользователем abrikos, 13 июн 2013.

  1. abrikos

    abrikos Нерд

    Часть кода моего регулятора температуры:
    Код (C):

    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(7, 8);
    ...
    mySerial.println("AT+HTTPPARA=\"URL\",\"mysite.com/arduino.php?temp="+String(t)+"\"");// setting the httppara, the second parameter is the website you want to access
     delay(1000);
     ShowSerialData();
    ...
    void ShowSerialData()
    {
     while(mySerial.available()!=0)
       Serial.write(mySerial.read());
    }
     
    Система конектится к сайту, получает данные, пишет в консоли. Но нужно данные с сервера обработать в скетче. Подскажите как записать ответ сервера в строку для дальнейших манипуляций?
     
  2. warman

    warman Гик

    посмотрите внимательнее, в коде показано, что в консоль пишется и откуда берется.
    подсказка - смотрим на тело функции void ShowSerialData()

    Рассуждаем так:
    в консоль пишется некая строка функцией write(stroka).
    в коде написано в аргументе mySerial.read(). Значит эта функция возвращает нам строку, которую write "пуляет" в консоль.
    эквивалент тела функции:
    Код (C):

    {
    string stroka;
    stroka=mySerial.read();
    Serial.write(stroka);
    }
     
     
  3. abrikos

    abrikos Нерд

    String webresult;
    Код (C):

    void ShowSerialData()
    {
     while(mySerial.available()!=0)
     {
       webresult = webresult + mySerial.read();
     }
    }
     
    Почему-то в webresult получается набор цифр вместо текста?
     
  4. abrikos

    abrikos Нерд

    Сейчас только заметил:
    Код (C):

    while(mySerial.available()!=0)
     {
       Serial.write(mySerial.read());
     }
     
    Этот код не все данные пишет в конслоь. Часть полученной строки обрезается.
     
  5. warman

    warman Гик

    webresult - у вас не объявлен тип. неявно считается тип - "целое число" int
    Вот поэтому вы и не видите желаемую строку.

    длина получаемой строки какая?
    Код (C):

    Serial.println(mySerial.available());
    update:
    и попробуйте mySerial.readBytes(stroka,mySerial.available()) вместо простого read
    и не забываем про кодировку символов, ибо любой символ есть число.
     
  6. Mitrandir

    Mitrandir Гуру

    разве такое скомпилируется?