TinyGsmClient. Кто то работал?

Тема в разделе "Arduino & Shields", создана пользователем SergeiL, 13 окт 2019.

  1. SergeiL

    SergeiL Гуру

    Использую sabj в попытке создать низкопотребляющего клиента MQTT over GPRS.
    Железо Sim800C+Mega_Iskra. Вроде все нормально.
    Но тестовый пример виснет через пару дней работы.
    Казалось бы все учтено, в моем коде ошибки быть не должно.
    Кто то использовал? Были зависания?
     
  2. Andrey12

    Andrey12 Гик

    А виснет Sim800C? Или непонятно?
    У меня месяц отработал Sim800C без зависаний, Но у меня правда только SMS пока.
    Работает Sim800C + Atmega 1284P
    Схема подключения какая?
     
  3. SergeiL

    SergeiL Гуру

    Второй раз зависла Мега.
    После первого зависания, у меня на Меге, встроенный светодиод работает как индикатор.
    Переменная перекидывается в таймере, значение в порт выводится в loop().
    Мигать перестал... :(
    Sim800C похоже продолжает нормально работать.
    Перезагрузил Мегу, и все нормально продолжило работать. Питание не отключал.
    Из библиотек только EEPROM.h, TimerOne.h, PubSubClient.h и TinyGsmClient.h.
    Первые три проверены, без единого сбоя пашут уже не один год. Грешу на последнюю.
    Как назло, ноут с монитором порта отключил, брал с собой. Хотя что туда бы вывелось? Вывод только по событиям.
    Сегодня пройду по коду, еще раз проверю.
    Посмотрю, что добавить для отладки.
     
  4. Andrey12

    Andrey12 Гик

    Что плохо практически во всех библиотеках для работы с GSM модулями, никто не ждет ответ от модуля GSM все ставят задержку в надежде что ответ придет корректный. Понятно что на команды типа AT или ATE модуль отвечает практически мгновенно. Но вот на запрос соединения с брокером тут по разному. Может здесь какие проблемы?
     
    SergeiL и arkadyf нравится это.
  5. SergeiL

    SergeiL Гуру

    Да, согласен на 100%!
    Искал что то готовое, как TinyGsmClient.h поддерживающее IP.
    Прикольно что стандартный PubSubClient.h работает через него.

    Очень хочется сделать устройство, работающее чрез IP и подключающееся к тому же брокеру, но не сильно потребляющее.
    Пока вижу один вариант - SIM800.
     
  6. SergeiL

    SergeiL Гуру

    Ну вроде все заработало, пока все надежно, сам виноват, нашел ошибку.
    Связка <TinyGsmClient.h> + <PubSubClient.h> пока работает нормально! Продолжаю тестирование.

    ни одного сбоя, даже по MQTT переподключений нет, когда плата на месте стоит.
    Только когда в лифте проверял - теряет сеть, потом, при появлении, нормально подключается.
    Публикации от платы в OH идут каждые 2 минуты, реакция на переключение выключателя в OH (доставка подписки на плату, переключение реле и публикация результата в OH) - 1-2 секунды.

    Тут ответы от модема ожидаются, и обрабатываются. Правда ожидаются с блокировкой.
    Но во время ожидания вызывается функция:
    Код (C++):
    #define TINY_GSM_YIELD() { Input_Process(); delay(2); }
    В принципе, для многих приложений - это не проблема.
    В loop() сидят только:
    Код (C++):
    void loop()
    {
        Input_Process();
        check_connectivity();
        mqtt_publish_changes();
        mqtt.loop();
    }
    Все остальное по событиям, обработка входов - в таймере (там все коротко, только флаги).
    В Input_Process(); только реакция по входам, пока, для отладки, печатаю в порт по флагам изменение входных сигналов.
    Вызываю ее и в yield() и в loop()
    Специально проверял - входы отрабатывают без каких либо задержек, как в моменты подключения к GSM сети так подключения или передачи по GPRS.
    Подключу в машине, покатаюсь проверю как будет вести себя по надежности.
     
    Andrey12 и ИгорьК нравится это.