Индикатор наличия интернета на Arduino + LCD

Ещё со времён использования ADSL модема осталась у меня привычка держать открытой консоль всегда и пинговать что-нибудь. Это нужно было для того, что бы если вдруг что-то случится, видеть, где проблема: в локальной сети или же оборвалось DSL соединение. Интернет мы тогда делили с соседом, и по некоторым причинам иногда отваливалась локалка, тогда приходилсь предпринимать меры со своей стороны. А если отваливалось DSL соединение, то часто приходилось перезагружать модем. Потом это было автоматизировано, программа автоматически перезагружала модем, если вдруг обрывалось соединение, потому что сам модем делал это далеко не всегда…

Это всё предыстория. Всё это в прошлом было, много лет с тех пор прошло. Потом  были и USB модемы, и консоль тоже всегда была открыта, ведь по времени отклика сразу было видно, какая сеть сейчас: 3G или EDGE. Ну, и это бывало полезным, что бы не забивать канал. Но это ладно.

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

Иногда отсутствие интернета замечаю не сразу. А это важно, что бы срочно принять меры и восстановить работоспособность сети.
Поэтому за пол часика собрал и написал простую программулину, которая выводит с помощью Arduino на LCD экран время отклика и текущее время на второй строке дисплея. Всё равно эта строка была пустой, а так и время удобней смотреть будет на внешнем экране. А то вдруг там на весь экран будет что-то открыто на компьютере? )

Программа имеет файл настроек, где задаётся com-порт Ардуины, а так же хост, который нужно пинговать. Раз в секунду программа пингует указанный хост и отправляет ардуине время отклика, а так же текущее время.
Если вдруг интернет оборвётся, то на экране будет мигать сообщение «ALERT!!!» 3 раза в секунду, что должно быть весьма заметно… )

Вот исходный код скетча для ардуино. Проще некуда… )

Символ «Z» является разделителем строк. Когда программа в ардуине встречает его, то переводит курсор дисплея на вторую строку.

Программу можно скачать по этой ссылке.
Программа автоматически при запуске добавляет себя в автозагрузку.
Настройки хранятся в файле pinger.cfg в папке с программой. Если программа не найдёт файл настроек, то она создаст его с дефолтными настройками, но скорее всего будет выведена ошибка, так как ком-порт нужно будет всё же задать самому, и он полюбому будет отличаться от того номера порта, который у меня был.. )
Если не охота создавать файл вручную, то можно запустить программу, она выведет ошибку о том, что не может подключиться к указанному ком-порту и закроется. После этого уже можно будет отредактировать файл настроек и указать нужный хост для пинга и ком-порт.
Настройки хранятся в таком виде: имя_параметра=значение.
А дефолтные настройки такие:
COM_PORT=COM5
ping_host=213.180.204.3

213.180.204.3 — это один из IP-адресов хоста ya.ru
Ввёл именно айпишник, а не имя хоста для того, что бы каждый раз не нужно было преобразовывать имя в адрес.

Я сделал всё как можно проще, не стал делать форму для настроек, и т.д. Но если кому-то пригодится, пишите в комментариях, доделаю, если нужно будет )
Вот и всё 🙂

Вам также может понравиться

About the Author: shpirat

14 комментариев

  1. Также, если надо, то можно доработать всю эту систему и сделать так, что бы текст, выводимый на экран, можно было задавать в файле настроек тоже.
    Или сделать возможность запускать команды, указанные в файле настроек, когда пропадает интернет. А также можно пищать спикером или светодиодиками на ардуине. В общем, возможностей тут много )
    Если будут предложения какие-то, пишите тут, в комментариях. И не забывайте указывать настоящий e-mail для обратной связи )

    1. А как это сделать, можно чуть подробней?, а именно текст на экране дисплея задавать в файле настроек

      1. Ох, уже 9 лет прошло)) Не думал, что эта программа кому-то до сих пор актуальна. Я даже не уверен, что у меня сохранился исходный код этой программы. Хотя там ничего сложного и можно заново воссоздать, да ещё и с новым функционалом, где можно править шаблон текста в файле настроек).

        UPD: ха! В старых архивах нашёл программу эту)
        Раз снова стало актуально, чуть позже займусь доработкой, но и исходный код выложу в открытый доступ в репозиторий, чтоб не потерялось больше)

        1. karamush, стало актуально, в том смысле, что идея замечательная, для отправной точки старта другой идеи просто отлично, а если поделишься исходником, буду очень признателен, с уважением, Михаил

  2. Шикарно, я приписал сервер warfare (альфа), теперь не буду приставать к командной строке.

  3. Скажите, как узнать какой номер ком порта записать? Все время выскакивает «несуществующий порт»

  4. А как же вы тогда ардуинку прошивали? ))
    Вот в настройках программы нужно такой же номер порта задать, что и при прошивке Arduino )
    Если у вас программа загрузилась в Arduino, то посмотреть Com-порт можно в Arduino IDE так: Инструменты -> Порт: … и тут будет выбор)

    Либо можно посмотреть в диспетчере устройств, в разделе «Порты (COM и LPT)». Там будет список COM-портов. Какой-то из них — это и будет нужный вам порт)

      1. «но тогда он пишет порт занят» — тогда, это когда? ))

        Порт занят может быть только в том случае, если он уже используется другой программой (спасибо, Кэп).
        Тут нужно либо убивать pinger_helper процесс, чтоб он не использовал ком-порт, и тогда прошивать спокойно ардуинку, либо может ещё какие-то программы автоматически подключаются по ком-портам и чего-то там ждут, это мне неизвестно, что там у вас на компухтере происходит))

  5. А еще можно купить «Ethernet Shield W5100 R3» и пинговать самой ардуинкой без компьютера.

    1. да, тоже верно 🙂
      Как раз есть такой шилд, но этой пинговалкой я давно уже не пользуюсь. Но можно дальше пойти — использовать также и WiFi шилд )
      Короче, много разных возможностей реализации 🙂

Добавить комментарий

Войти с помощью: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *