[LinuxFocus-icon]
Домой  |  Карта  |  Индекс  |  Поиск

Новости | Архивы | Ссылки | Про LF
эта страница доступна на следующих языках: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

[Photo of the Author]
автор Guido Socher (homepage)

Об авторе:

Гвидо любит Linux не только за удовольствие исследовать огромные возможности этой системы, но и из-за людей, вовлеченных в ее создание.



Перевод на Русский:
Алексей Отвагин <forlelik(at)yahoo.com>

Содержание:

 

ЖК-панель управления для Вашего сервера на Linux

[Illustration]

Резюме:

В этой статье мы создадим ЖК-панель управления, построенную на ЖК-дисплее Hitachi HD44780 и AT90S4433 AVR 8-Bit RISC микроконтроллере фирмы Atmel. Оба этих компонента являются очень распространенными и недорогими. Панель управления включает в себя сторожевой таймер для администрирования компьютера и две кнопки для осуществления диалога с пользователем. Вы можете установить IP-адрес, маску подсети, адрес шлюза, остановить систему, прочитать статистику, сделать практически все, что угодно, поскольку почти вся логика реализована скриптом perl и может быть легко изменена. Панель соединяется с Вашим компьютером последовательной связью через RS232.

Для работы Вам необходима как минимум частичная установка среды разработки Linux AVR. О том, как ее установить, описано в статье: Программирование микроконтроллера AVR с помощью GCC.



 

Введение

Это устройство в основном комбинирует функциональность аппаратуры, уже использованной в предыдущих статьях: Наша новая конструкция, однако, идет несколько далее предыдущих. Она имеет дополнительные кнопки для взаимодействия с пользователем и содержит аппаратный сторожевой таймер для администрирования сервера. К тому же аппаратура предоставляет ему аналоговый канал ввода. Здесь мы его не используем, но Вы можете присоединить к нему, например, датчик температуры.

Чтобы создать устройство, у Вас должны быть некоторые навыки радиолюбителя. Используемые детали недороги и вместе стоят не более 40 Euro.

Идея этой панели заключается в возможности позволить Вам управлять сервером без монитора и клавиатуры. Linux является очень надежной ОС для сервера, которой можно легко управлять удаленно. Однако, когда Вы подключаете ее в сеть в первый раз, Вам нужно установить IP-адрес, адрес шлюза и маску подсети. Панель позволяет Вам установить эти адреса. Она также позволяет Вам остановить сервер, даже не находясь в серверной комнате.

Конструкция панели - классическая. Все "специфичные для сервера" части реализованы в скрипте на perl. Вся аппаратура, состояние кнопок, текст на дисплее, светодиоды... управляются посредством команд ASCII. Вы можете использовать эту конструкцию для создания mp3-плейера или управления тостером, как Вам заблагорассудится.  

Что Вам понадобится

Для создания панели Вам понадобятся следующие детали:

1 x микроконтроллер Atmel At90S4433
1 x 28pin 7.25 mm гнездо для ИС
1 x 16pin гнездо для ИС
1 x MAX232
1 x небольшое реле 5V
1 x кварц 4MHz
2 x светодиоды (зеленый и красный)
1 x BC547 NPN-транзистор
1 x BC557 PNP-транзистор
4 x конденсатор 1uF
2 x керамический конденсатор 27pF
1 x конденсатор 10nF
1 x конденсатор 100nF
3 x резистор 4k7
2 x резистор 2k2
1 x резистор 10K
1 x резистор 3k3
2 x резистор 100 Ohm
3 x резистор 470 Ohm
3 x резистор 1k
1 x резистор 220 Ohm
1 x потенциометр 4K7 (как можно меньший)
1 x Z-диод 4.3V
2 x маленькие кнопки
1 x малый обычный диод (типа 1N4148, любой дешевый)
1 x 2-хстрочный 20-символьный ЖК-дисплей с интерфейсом, совместимым с HD44780.

Все ЖК-дисплеи с 14 или 16 контактами, которые мне приходилось видеть, были совместимы с HD44780. Вы можете также использовать 3-х или 4-х строчный дисплей, но тогда Вам нужно слегка изменить программу.

В дополнение к этому Вам понадобится несколько проводов и соединителей для питания и RS232. Если у Вас 2-х строчный дисплей, Вы можете закрепить его на тонком алюминиевом листе, подогнав его к гнезду 5.25" на Вашем сервере.  

Схема и плата

Я использовал eagle for Linux для разработки схемы и платы. Это прекрасная программа, но Вам понадобится некоторое время, чтобы научиться ею пользоваться. Вы можете получить бесплатную версию для частного пользования по адресу cadsoftusa.com.

Схема (нажмите на нее для увеличения):
[Schematic]

Плата (нажмите на нее для увеличения):
[board]


Рисунок платы на белом фоне для лучшей печати: плата с белым фоном (Внимание: Это не файл для создания печатной платы.)

Файлы eagle (сжатые gzip, отметьте, что некоторые умные броузеры распакуют их во время скачивания):  

Схема

Я кратко поясню приведенную выше схему. У AT90S4433 есть 3 порта: PB, PC и PD. PC может использоваться в качестве аналогового или цифрового порта ввода. Все порты могут использоваться как цифровые входы и выходы. Этим управляет программа через DDR (Data direction register)(Регистр направления данных). Мы используем в качестве цифровых все контакты, кроме 23 (0 или 5 V). Max232 - это преобразователь уровня напряжения. Интерфейс RS232 использует +-10V, а Max232 преобразует их в 0-5V. На контакте 1 (контакт сброса) AT90S4433 Вы обнаружите нечто, называемое Brownout circuit (монитор питания). Эта схема поддерживает низкий уровень на сбросе (активный), когда питания недостаточно, чтобы защитить процессор от выполнения неверных операций или выхода из строя. Это может произойти за несколько миллисекунд во время включения или выключения. Схема обеспечивает корректный запуск программы на микроконтроллере.

Некоторые из вас могут удивиться, для чего нужен диод, включенный параллельно катушке реле в такой полярности, что кажется, что он ничего не делает. Этот диод очень важен! Когда Вы переключаете реле, катушка генерирует очень высокое напряжение. Оно может разрушить микроконтроллер. Это напряжение имеет полярность, противоположную к питающему напряжению катушки. Диод может быть очень дешевым, ничего особенного, но важно, чтобы он присутствовал.

Две кнопки, которые нужно присоединить через коннектор, обозначены схематично как "DIGITAL IN PUSH BUTTON". При нажатии они замыкают PD3 или PD6 на землю.  

Как сделать печатную плату

Чтобы протравить печатную плату, вначале Вам нужно напечатать этот файл postscript (linuxlcdpanel.ps.gz) на прозрачной пленке. В строительном магазине Вы можете взять немного полупрозрачной пленки Sinolit. Ее выпускает Regulus, и она используется для офсетной печати. Еще одной альтернативой является 60-граммовая бумага + прозрачный лак (pausklar 21 от Kontakt Chemie). Преимущества бумаги и Sinolit в том, что тонер лазерных принтеров действительно прилипает к бумаге/пленке и обеспечивает хороший контраст.
Я преобразовал файл postscript в PDF, если у Вас нет системы для печати postscript. Однако, качество вышло несколько хуже.
Время экспозиции для фотоплат на медной основе зависит от источника света. В нормальном домашнем солярии оно составляет около 1-2 минут. Вы можете также использовать дневной свет, но избегайте прямых солнечных лучей (они слишком сильные). Вы можете немного поэкспериментировать с небольшими кусочками фотоплат, чтобы определить наилучшее время экспозиции, прежде чем использовать реальную плату.
[before etching]
Экспонированная и разработанная плата перед травлением


Экспонированные платы должны быть обработаны в течение нескольких минут в NaOH (едкий натр). После этого Вы должны внимательно проверить результат и внести исправления черным маркером Edding 780 (это не перманентный маркер, это маркер с действительно тонким стержнем). Обычно я делаю подложки немного больше, поскольку я обнаружил, что подложки из Eagle слишком малы для любительского использования.
[after etching]
Готовая плата перед просверливанием отверстий


Замечание: Иногда производители не могут согласовать общую раскладку контактов и систему обозначения для реле. Я использую маленькое реле 5V производства Matsushita. Ваше реле может иметь другую раскладку контактов, поэтому могут понадобиться изменения в плате (с помощью маркера, устойчивого к травлению).

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

Когда плата будет готова, уберите маркер Edding с помощью скипидара. Вы можете оставить "чернила" фоторезиста. Он испарится, когда Вы будете паять и защитит медь.  

Программы для микроконтроллера

Программы для микроконтроллера содержатся в следующих файлах: Чтобы детально разобраться с программой, я рекомендую Вам прочесть справочную информацию для микроконтроллера. Она находится в справочном разделе в конце статьи (или на www.atmel.com)
Однако, для использования панели Вам не нужно разбираться с программой, Вам достаточно просто распаковать архив с исходным кодом (возьмите linuxlcdpanel-0.7.tar.gz с страницы) и введите:

make
make load

либо используйте уже скомпилированную программу, загрузив ее командой
make loadprebuild

Очень легко. Вы найдете описание программирования микроконтроллера в первой статье: Программирование микроконтроллера AVR с помощью GCC.  

Тестирование ЖК-панели

ЖК-панель создана для работы от внутреннего источника питания 5V Вашего сервера (красный провод=5V, черный провод=ground). Однако, Вы никогда не должны соединять ее в первый раз с компьютерным источником питания. Вы можете сделать небольшую ошибку во время пайки и сборки. Источник питания компьютера очень мощный, поэтому Ваш компьютер и плата могут скрыться в облаках дыма, если Вы допустите ошибку. Сначала протестируйте ее с внешним стабилизированным и ограниченным по току источником питания! Теперь запишите программу в ПЗУ, как описано выше. После этого Вы должны увидеть бегущую строку "linuxfocus.org" на ЖК-дисплее. Теперь присоедините интерфейс RS232:

MAX232 контакт 14 к CTS (DB-9 контакт 8)
MAX232 контакт 7 к RXD (DB-9 контакт 2)
MAX232 контакт 13 к TXD (DB-9 контакт 3)
Вам нужно также присоединить DTR, DSR и CD (DB-9 контакты 4, 6 и 1)

Это хорошо видно на схеме выше.

[общение с ЖК-дисплеем через последовательный порт] Чтобы использовать последовательный порт, Вам нужно инициализировать его. Архив исходных кодов linuxlcdpanel-0.7.tar.gz содержит программу ttydevinit, которая производит инициализацию. Пусть Вы присоединили панель к порту COM2(ttyS1), тогда Вам нужно запустить команду:

./ttydevinit /dev/ttyS1

Теперь драйвер последовательного порта инициализирован для использования скорости 9600 Бод и Вы можете начать "общение" с Вашей ЖК-панелью. Откройте 2 окна xterm. В одном Вы вводите "cat /dev/ttyS1", а в другом - "cat > /dev/ttyS1". Теперь Вы можете ввести команду, например l=11 (включить светодиод 1) или l=10 (выключить светодиод 1). Вы увидите в первом xterm, что Ваша ЖК-панель подтверждает Вашу команду "ok".
Все доступные команды объяснены в файле README.commands.

Архив исходных кодов содержит скрипт ttytest.pl, который ничего не делает, а периодически переключает красный светодиод. Он может использоваться, как простой пример программы, показывающей, как управлять ЖК-панелью. Вы можете использовать его как основу для собственных программ. Взгляните на исходный код. Это требует некоторых знаний perl, но это короткая программа.  

Присоединение сторожевого таймера

По умолчанию сторожевой таймер отключен. Вы можете включить его командой w=1 и установить тайм-аут командой s=x, где x - это величина между 1 и 255. Например, s=10 установит тайм-аут сторожевого таймера на 10*16sec=160sec. Программа-драйвер должна периодически устанавливать тайм-аут, чтобы избежать срабатывания сторожевого таймера. Если Ваш сервер вдруг должен заблокироваться, то драйвер не должен больше устанавливать тайм-аут, тогда сработает сторожевой таймер. Я знаю, что серверы на Linux практически никогда не зависают. Однако, если сервер все же завис и стал недоступен, то обычно на месте нет никого, кто мог бы нажать сброс или никто не знает, где находится сервер, поскольку за последние два года с ним не было проблем.

Сторожевой таймер сконструирован так, что он срабатывает лишь однажды. Это сделано, чтобы избежать повторного срабатывания во время проверки файловой системы, которая может последовать за перезагрузкой. Когда сервер вновь поднимется, драйвер снова разрешит таймеру работать.

Чтобы физически присоединить сторожевой таймер, Вам нужно найти два провода, которые идут к кнопке сброса Вашего сервера. Параллельно с кнопкой сброса Вы должны включить реле от сторожевого таймера.  

Как использовать сторожевой таймер

Сторожевой таймер гарантирует, что система всегда будет выполнять программу. Он не может гарантировать, что веб-сервер или приложение базы данных будут всегда запущены и активны. Чтобы проверять это, Вам необходимо использовать задание crontab или другую программу. Вы можете быть уверены, что crontab наверняка работает, поскольку сторожевой таймер обеспечивает, что в общем программы продолжают выполняться.

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

Кроме приложений Вы также должны контролировать использование дискового пространства. Приведенная команда shell сообщит что-либо, если один из разделов диска заполнен более чем на 80%:

df | egrep ' (8.%|9.%|100%) '

Это также можно внести в crontab для регулярной проверки использования дисков.  

Скрипты на сервере

Почти вся логика нашей ЖК-панели реализована скриптом llp.pl, который надо скопировать в /usr/sbin/. Посшле этого скопируйте программу ttydevinit в /usr/bin, а файл ifconfig_llp.txt (из каталога etc архива исходных кодов) в /etc. Теперь отредактируйте ifconfig_llp.txt и смените адреса на нужные:

NETMASK=255.255.255.0
IPADDR=10.0.0.4
GATEWAY=10.0.0.2

Сделайте копию Вашего оригинального скрипта /etc/rc.d/init.d/network и перенесите etc/network script из архива исходных кодов в /etc/rc.d/init.d/network. Этот скрипт и имена каталогов подходят только для Redhat и Mandrake. Скрипт etc/network_all_distributions более общий и будет работать с любым дистрибутивом Linux, но Вы должны представлять себе, где Ваш Linux содержит каталоги init-rc. Их расположение отличается в разных дистрибутивах.

Измените в файле /etc/rc.d/init.d/network строку

/usr/sbin/llp.pl /dev/ttyS1&

если Вы используете не COM2.

Теперь Вы можете запустить

/etc/rc.d/init.d/network start

и оценить свою ЖК-панель в действии. Замечание: Сейчас можно потренироваться и изменить IP-адрес. Изменения вступят в силу только после следующей перезагрузки. Поэтому попробуйте, а затем смените его обратно перед остановом сервера(Вы можете также отредактировать /etc/ifconfig_llp.txt, чтобы отменить изменения).  

Логи

Скрипт llp.pl пишет лог-файл /var/log/llp.log. Этот лог растет очень медленно. Обычно его не нужно прокручивать автоматически. Вы можете прокрутить его программой типа logrotate, если Вам это нужно. После прокрутки ничего делать не надо. Конфигурационная строка для logrotate может быть такой:

/var/log/llp.log {
nocompress
monthly
}

Лог будет содержать события, когда система была остановлена вручную, сменялся IP-адрес (IP, шлюз, маска подсети), либо сторожевой таймер вызвал перезагрузку. Естественно, Вы не можете записать тайм-аут таймера, когда он наступит (вследствие зависания системы), но вместо этого он будет записан при следующей загрузке.  

Панель в действии

Здесь представлены несколько "снимков с экрана" работы ЖК-панели. Это не все функции, предлагаемые этой панелью. Их гораздо больше и Вы можете добавить свои собственные.

Главный экран. Показывает какое-то название (в нашем случае linuxfocus), время работы и загрузку. Обновляется периодически.
[основное окно]

Меню конфигурации IP
[меню конфигурации IP]

Пример IP-адреса, который был только что сменен
[смена IP]

Как сменить адрес шлюза(способ по умолчанию)
[шлюз]  

Заключение

[готовая панель] Чтобы создать эту ЖК-панель, требуются некоторые навыки радиолюбителя, но это не очень сложная схема. Наша ЖК-панель для Linux предлагает большую функциональность, чем все другие панели управления, которые я видел, и является более дешевой и простой.

Удачной пайки :-)
 

Ссылки

 

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей.
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Guido Socher, FDL
LinuxFocus.org

Click here to report a fault or send a comment to LinuxFocus
Translation information:
en --> -- : Guido Socher (homepage)
en --> ru: Алексей Отвагин <forlelik(at)yahoo.com>

2002-05-03, generated by lfparser version 2.19