Gprs-логгер для теплицы

Тема в разделе "Arduino & Shields", создана пользователем Сирин, 23 мар 2024.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Если зависает только шильд - Ардуина должна выводить сообщение об ошибке инициализации шильда. Получается у вас и Ардуина зависает ?
     
  2. Сирин

    Сирин Нерд

    возможно, возможно что ждет чегото...вот только как это понять? монитор то ничего не показывает
     
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Тогда это делается вставлянием перед каждым этапом работы кода - команды вывода сообщения в монитор. Типа -
    Serial.println("делаю то-то");
    И так вычисление конкретной сбоящей функции методом "исключения - погружения в глубь кода". Порой приходится внутри библиотек вставлять, пока найдешь конкретную не работающую операцию. Я вам писал - монтаж железа - это оч. малая часть возможной е*ни с отладкой кода.
     
  4. Сирин

    Сирин Нерд

    так есть такие команды
    Код (C++):
      // включаем GPRS шилд
      gprs.powerOn();
      // проверяем есть ли связь с GPRS устройством
      while (!gprs.init()) {
        // если связи нет, ждём 1 секунду
        // и выводим сообщение об ошибке
        // процесс повторяется в цикле
        // пока не появится ответ от GPRS устройства
        delay(1000);
        Serial.print("GPRS Init error\r\n");
      }
      // вывод об удачной инициализации GPRS Shield
      Serial.println("GPRS init success");
      delay(3000);
     
    при первой передаче в мониторе все видно...а вот последующая...
    по логике, то что шилд включился (после 5минутного таймаута) и инициализировался, слышно по шумам в акустике (идет инициализация в сотовой сети), а в мониторе тишина. может я както не правильно монитором порта пользуюсь?
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Команда gprs.init() - это не заклинание. В библиотеке - это функция, состоящая из 7-ми (точно не скажу - я щас на чужом компе сижу) отдельных АТ-комманд. На какой код зависает - это и есть погружение вглубь.
    2. По логике вещей - каждое включение шильда - для него ПЕРВОЕ, поскольку он не может помнить - что его только что выключили. А коль со "второго включения" он не работает - значит он не был выключен по-настоящему. Надо бы проверить - пропадает ли питание "до нуля" на SIM900- й во время паузы 5 мин.
    ПС. Короче говоря - вам попалась задачка для профессионального электронщика-программиста.
     
    Последнее редактирование: 1 апр 2024
  6. parovoZZ

    parovoZZ Гуру

    садись ЛА на интерфейс и смотри, что там происходит.
     
  7. Сирин

    Сирин Нерд

    Эх... и это пример из вики...
     
  8. Сирин

    Сирин Нерд

    можно поподробнее...
     
  9. parovoZZ

    parovoZZ Гуру

    upload_2024-4-1_12-9-52.png
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ну Вики же не может предусмотреть, например, глюки (mal-functions) шильда. К тому же одноименных библиотек существует туева хуча. И не все они работоспособны.
    ПС. Если у вас есть комплект проводков с коннекторами (такие на Али продаются для макетирования) - подключите шильд к Ардуине через проводки. В Ардуинных магазинах они всегда в наличии, но ессно Вам не отщиплют пяток, а предложат купить комплект. Вам нужны 6-7 проводков. Когда шильд успешно отработает первый цикл и уйдет на 5мин паузу - отключите на 10 сек его питание с Vin. Не выключая Ардуины ессно. И включите снова. По окончании 5 минут - смотрите что будет дальше. Отпишитесь.
    ППС. Повредиться шильд не может. Но в любом случае - я не виноват. )))
    Логический анализатор обычно находится между ушей. ))))
     
    Последнее редактирование: 2 апр 2024
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Вот исполняемый код команды gprs.init()
    bool GPRS::init(void)
    {
    if (!sim900_check_with_cmd("AT\r\n","OK\r\n",CMD))
    return false;


    if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD))
    return false;


    if (!checkSIMStatus())
    return false;

    if (!sim900_check_with_cmd("AT+CNMI?\r\n", "+CNMI: 2,2,0,0,0\r\nOK\r\n", CMD)) {
    if (!sim900_check_with_cmd("AT+CNMI=2,2,0,0,0\r\n","OK\r\n", CMD)) {
    return false;
    }
    }

    if (!sim900_check_with_cmd("AT+CMGF?\r\n", "+CMGF: 1\r\nOK\r\n", CMD)) {
    if (!sim900_check_with_cmd("AT+CMGF=1\r\n","OK\r\n", CMD)) {
    return false;
    }
    }

    if (!sim900_check_with_cmd("AT+CLIP=1\r\n","OK\r\n", CMD)) {
    return false;
    }
    return true;
    }
    Он состоит из 6-ти проверок. Причем две из них имеют вложенную проверку. Вставьте перед каждой проверкой вывод на монитор - и смотрите где код зависнет. Примерно так -
    bool GPRS::init(void)
    {
    Serial.println(Test on AT comand"); //Вот
    if (!sim900_check_with_cmd("AT\r\n","OK\r\n",CMD))
    return false;

    Serial.println(Test on AT+CFUN=1 comand"); //Вот
    if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD))
    return false;

    Serial.println(Test on ... ") // и тд

    И впредь везде делайте именно так.
    ПС. Прежде не забудьте сохранить оригиналы файлов, чтоб было куда "вернуться." !!!!!!!
    ППС. Кстати именно так устроена аппаратная само-проверка (POST) любого компа. Просто надо уметь ее увидеть.
     
    Последнее редактирование: 2 апр 2024
  12. parovoZZ

    parovoZZ Гуру

    я не про него.
     
  13. Сирин

    Сирин Нерд

    интересный момент... если монитор оставить включёным или не открывать вообще (отключен от компа), зависает как описывал. НО если монитор закрыть и потом открыть...шилд оживает и передает данные. походу какаято завязка на монитор идет
     
  14. parovoZZ

    parovoZZ Гуру

    при открытии порта дурина перегружается. Давно бы пора это знать.
     
    Ariadna-on-Line нравится это.
  15. Сирин

    Сирин Нерд

    яж писал...я пока начинающий
     
  16. parovoZZ

    parovoZZ Гуру

    я тоже начинающий... Поизучал её недели две, понял, что шляпа какая-то и больше мне она не интересна.
     
  17. Сирин

    Сирин Нерд

    в исполняемый код команды gprs.init? а где он хранится? в библиотеке gprs шилда не нашел
     
  18. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не знаю как у вас, у меня - здесь. Именно в библиотеке.
     

    Вложения:

    Сирин нравится это.
  19. Сирин

    Сирин Нерд

    зависает на AT+CFUN=1
     

    Вложения:

  20. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Я так и думал. Могу посоветовать для начала только закомментировать эти 2 строчки -

    // if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD))
    // return false;

    ПС. В симуляторной модели GPRS модуля - в перечне нет поддержки именно этой функции.