28.01.2017     1076

Arduino PC to LCD - небольшой проект, позволяющий выводить любую информацию на небольшой внешний экранчик. Например, можно мониторить расход оперативной памяти, а так же состояние удаленного сервера. Я использовал Arduino Leonardo + LCD Keypad Shield. Но можно использовать варианты дешевле и компактнее, например, Arduino Nano + LCD 1602. Пока поддерживается только двухстрочный экранчик по 16 символов в строке. Операционная система Linux, но в будущем, возможно, будет поддержка и Windows.

Не буду подробно рассказывать как подключить экранчик к Arduino. Об этом много информации в интернете, но можно спрашивать в комментариях. В случае с шилдом всё просто, нужно только их соединить, без пайки.

После подключения к компьютеру через USB-кабель можно проверить по какому адресу зарегистрировано устройство:

ls /dev/tty*

Затем в командной строке нужно выполнить такую команду для настройки последовательного интерфейса:

stty -F /dev/ttyACM0 cs8 115200 ignbrk \
-brkint -icrnl -imaxbel -opost -onlcr \
-isig -icanon -iexten -echo -echoe \
-echok -echoctl -echoke noflsh -ixon \
-crtscts

Здесь /dev/ttyACM0 - это адрес подключенного Arduino. У вас он может быть другим, например /dev/ttyUSB0.

Теперь можно попробовать с командной строки вывести текст на LCD экране:

echo "Hello Arduino" > /dev/ttyACM0

Пример кода для Arduino можно взять здесь: https://github.com/andchir/arduino_pc2lcd/blob/master/ino/SerialDisplay.ino.
Нужно закачать этот код в микроконтроллер через Arduino IDE.

Далее скачиваем проект https://github.com/andchir/arduino_pc2lcd в папку на своем сервере.

В командной строке переходим в папку проекта и запускаем:

cd /var/www/html/arduino_pc2lcd
php -f index.php

На экранчике должна появиться информация о состоянии сервера (вашего локального компьютера). Эта информацию будет обновляться и сменяться через заданное время. Все действия, которые выводят информацию, находятся в папке "action". Там же находится конфигурационный JSON-файл - data.json. Вот его содержание:

{
    "switch_delay": 10,
    "actions": [
        {
            "name": "ram",
            "active": true,
            "refresh_time": 3
        },
        {
            "name": "hdd",
            "active": true,
            "refresh_time": 3
        },
        {
            "name": "uptime",
            "active": true,
            "refresh_time": 3
        }
    ]
}

switch_delay - Время в секундах, через которое сменяется информация на экране.
actions - Массив со всеми действиями, которые выводят информацию.
name - Название действия и его папки.
active - Активность действия (true/false).
refresh_time - Частота обновления данных текущего действия в секундах.

В данный момент доступны 3 готовых экшена:
ram - Сколько всего оперативной памяти и сколько свободно.
hdd - Сколько всего места на диске и сколько свободно.
uptime - Сколько времени прошло после включения или перезагрузки сервера, сколько сейчас пользователей в системе и нагрузка за последние 1, 5 и 15 минут.

Как видно, можно создавать любые свои экшены, в которых даже можно делать запросы на удаленный сервер. Удобно мониторить какую-то информацию, а подключив к Ардуино какие-нибудь пищалки и мигалки, вы всегда быстро сможете отреагировать на критические значения. Но для этого нужно ещё дорабатывать проект, расскажу об этом в следующий раз.