GPRS отправка данных

DangerD
Offline
Зарегистрирован: 23.08.2014

Уже задолбался, надо отправить длинную строку с данными с метеостанции, понятное дело что длинная строка не катит так как в ардуине памяти нету...

Так работает

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();

Но не работает по непонятной причине...

У кого какие идеи?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

сразу пришло 2 идеи, отправлять 2 запросами раздельными, и второй вариант увеличеть буфер сериала с 64 бай к примеру до 256 (как сделать в гугле есть примеры)

b707
Offline
Зарегистрирован: 26.05.2017

DangerD пишет:

У кого какие идеи?

Во-первых, не вполне понятно, почему во втором примере вы кодируете URLстроку. а в первом и третьем -нет. как все-таки правильно?

В третьем варианте не работает потому, что GPRS запрос должен посылаться одной комундой, а каждый вызов sim900_send_cmd() - это новая команда

b707
Offline
Зарегистрирован: 26.05.2017

Как надо сделать.

1. Забудьте про  String

2. Инициализируйте буфер char http_cmd[256]

3. Создайте свой запрос в этом буфере, как вы это делали во втором варианте, только теперь в виде массива символов, а не String

4. Отправьте запрос одной командой

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Baks пишет:

(как сделать в гугле есть примеры)

Есть-то они может и есть, только низзя!