Продолжаю осваивать программирование МК.
TCP/IP стэк от tuxgraphics имеет определенные ограничения, прежде всего, на размер передаваемых данных. Все страницы должны помещаться в один TCP пакет. Размер HTML-страницы не должен превышать 550 байт. С одной стороны это мало, с другой, если вдуматься, для такого устройства более чем достаточно. Не порталы же на нем запускать.
Существует другие реализации TCP/IP для AVR. В частности есть порт uIP для AVR, который так и называется avr-uip и даже практически полноценный Web-сервер с поддержкой сетевой конфигурации, DHCP - проект uhttpd-avr. К сожалению, последний рассчитан на Atmega32 и выше. Объем скомпилированной программы составляет 24,5Кб и в Atmega168 не лезет. Особенно из uhttpd-avr ничего не выкинешь, поэтому я сконцентрировал свои усилия на прошивке от tuxgraphics, хотя по сравнению с avr-uip в коде чувствуется несколько пренебрежительное отношение к делу. А, может быть, показалось.
В общем, первым делом я все-таки сделал настройку IP адреса по сети и хранение настройки в EEPROM.
- sc1.jpg (20.46 КБ) 148835 просмотров
Дальше я планирую переделать работу функции, анализирующей URL и GET-запросы, так как в текущем виде с ней работать совершенно неудобно.
А далее вот как я представляю себе функционал прошивки этого устройства:
==
1. Возможность конфигурирования каждого входа и выхода, так как ENC28J60+ATMEGA168 ядро, к которому подключается плата с исполнителями, датчиками, конфигурация которой в зависимости от конечной задачи может быть разной.
2. Возможность отправлять в сеть информацию о (срабатывании датчиков, выхода за определенные пределы (если это аналоговые входы), другие события. Можно с помощью SNMP или любого иного стандартного протокола. Я предполагал вообще HTTP, чтобы центральный сервер получал информацию о всех событиях, происходящих с устройством.
3. Управление по HTTP всеми выходами
4. Конфигурирование входов и выходов таким образом что: Если это вход (скажем датчик сухого контакта) и он сработал, то необходимо п.2 отправить сообщение серверу и какое-то время ждать его ответа. Сервер может ответить какие выходы необходимо переключить или не ответить, тогда МК смотрит собственные настройки по умолчанию и переключает что-то сам.
==
Таким образом устройство получится, как мне кажется, наиболее универсальным.
В системах, где мозгом является ПК, такое устройство будет управляться им.
В распределенных системах, где нет единого мозга, устройство можно настраивать на собственную логику.
В системах с ПК при выходе из строя компьютера мы не останемся без света, так как устройство будет включать свет на основе алгоритма по умолчанию.
В любых системах у нас остается возможность вручную с помощью браузера (компьютера, мобильника, планшетника) управлять освещением при этом в системах с ПК последний будет регистрировать изменение выходов устройства.
==
Я связался с Александром, автором аналогичного девайса, но предназначенного для проигрывания Интернет-радио. Александр сам писал прошивку для Atmega и хорошо разбирается в C. Если у нас возникнут вопросы по программированию AVR, можно попробовать задавать вопросы. Он, кажется, даже зарегистрировался на форуме.
andrushka, Atmega168 имеет в своем распоряжении только 16Кб памяти для программного кода. С такими ресурсами не разбежишься. Опрашивать кнопочки и дергать релюшками - это пожалуйста, а интерпретатор PHP - это через чур.