#1 Re: Програмування Arduino » GPRS отправка данных » 2017-07-30 23:24:45

Nefreemen пише:

Вот и используйте, JOSON формат {"переменная1":"значение1","переменная2":"значение2",..., "переменнаяN":"значениеN"}. Имена переменных сделайте покороче. Ну а вообще мне не понятно, Вам что нужна отправка по какому то формату не от Вас зависимому? Ну например на narodmon.ru? И Вы используете библиотеку ардуино для модема или нет? При использовании библиотеки не должно быть подобных траблов.

Суть та же, на длину строки не повлияет...

#2 Re: Програмування Arduino » GPRS отправка данных » 2017-07-30 00:16:06

Nefreemen пише:
DangerD пише:
Nefreemen пише:

Спасибо буду знать  smile . хотя можно было сообразить 2^8  smile .
С модемом не работал поэтому не пойму что это и зачем:
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);
  }
Похоже на создание const char*, но почему в цикле и по 16 и почему по байтно с добавлением непечатного  roll .
Но это вопрос наверное к ТС.

Это костыль) (Кол-во элементов  String http_cmds[])

Короче говоря фунцкия sim900_send_cmd(http_cmd) понимает только char array (char[])
У меня данные приходят с различных сенсоров (температура влажность координаты и т.п.) и их надо отправить.
Надо в общем всё перевести в char array каким-то раком, а так как я пхпшник, то для меня это проблема))

Давеча глянул стандартный пример в ИДЕ по модему и вообще Ваш код не понял. Как для меня то слишком много "непоняток" куда отправлять (что отправлять понятно smile ) и какое управление модемом, такое впечатление что на уровне SDK модема smile ). Если это не в облака (где нужен какой то определенный формат) а куда то себе, то слепите вручную (или используйте библиотеку соответствующую) JSON строку и "пульните" что хотите.

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"

Вот строка, только толку от неё нет так как длина строки очень большая и не хватает памяти...

#3 Re: Програмування Arduino » GPRS отправка данных » 2017-07-29 23:38:52

Nefreemen пише:

Спасибо буду знать  smile . хотя можно было сообразить 2^8  smile .
С модемом не работал поэтому не пойму что это и зачем:
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);
  }
Похоже на создание const char*, но почему в цикле и по 16 и почему по байтно с добавлением непечатного  roll .
Но это вопрос наверное к ТС.

Это костыль) (Кол-во элементов  String http_cmds[])

Короче говоря фунцкия sim900_send_cmd(http_cmd) понимает только char array (char[])
У меня данные приходят с различных сенсоров (температура влажность координаты и т.п.) и их надо отправить.
Надо в общем всё перевести в char array каким-то раком, а так как я пхпшник, то для меня это проблема))

#4 Re: Програмування Arduino » GPRS отправка данных » 2017-07-28 16:00:35

Вячеслав Азаров пише:

Не используйте класс String. В таких микроскопических компьютерах нужно делать сборку и отправку длинных строк, как говорится, на лету. Например с помощью fprintf(...). Но сделать это в Ардуино весьма затруднительно.

Можете скинуть пример как переписать?

#5 Програмування Arduino » GPRS отправка данных » 2017-07-28 10:20:29

DangerD
відповідей: 10

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

Так работает

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

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

У кого какие идеи как отослать много переменных на сервер за раз?

#6 Програмування Arduino » Перенос кода Arduino LiquidCrystal_1602_RUS на проект Atmel Studio » 2016-05-18 22:52:53

DangerD
відповідей: 1

День добрый, никогда раньше не сталкивался с программированием под микроконтроллеры.
В общем надо в готовый проект https://github.com/stawel/cheali-charger впилить библиотеку с поддержкой русских символов:
https://github.com/ssilver2007/LiquidCrystal_1602_RUS

Скетчи готовой либы для ардуины и для атмел студии немного отличаются:
https://github.com/ssilver2007/LiquidCr … 02_RUS.cpp
https://github.com/stawel/cheali-charge … rystal.cpp

В итоге я вконец с этим всем запутался...

в либе русской есть функция:
void LiquidCrystal_1602_RUS::print(const wchar_t *_str){
в cheali-charger:
uint8_t LiquidCrystal::print(const char str[])
уже типы не совпадают

В итоге застрял на этом:
D:/Cheali/cheali-charger-master/src/core/drivers/LiquidCrystal.cpp: In member function 'uint8_t LiquidCrystal::print(const char*)':
D:/Cheali/cheali-charger-master/src/core/drivers/LiquidCrystal.cpp:359:12: warning: case label value exceeds maximum value for type
       case 1041: //╨С


uint8_t LiquidCrystal::print(const char str[])
{
  uint8_t rus_[8];
  int current_char  = 0;
  int size = 0;
 
  //Определяем длину строки (количество символов)
  /*while(str[size] != NULL)
  {
    size++;
  }*/
  size = strlen(str);
  
  while(current_char < size)
  {
    switch(str[current_char])
    {
      //Русский алфавит, требующий новых символов
      //Единовременно может быть заменено только 8 символов
      case 1041: //Б
        memcpy_PF(rus_, (uint32_t)rus_B, 8);
        CharSetToLCD((uint8_t *)rus_, &index_rus_B);
      break;

Валится на case 1041
Как букву в этот код перевести?

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