Использование контроллеров AVR для дозвона через модем

advertisement
Современные информационные технологии/Компьютерная инженерия
Мясищев А.А.
Хмельницкий национальный университет, Украина
Использование wifi роутеров для управления
устройствами через Интернет
В работах [1] и [2] рассматривалась возможность использования
микроконтроллеров для создания web – серверов для удаленного управления
устройствами.
В
первом
случае
рассматривалась
совместная
работа
микроконтроллера ATmega128L и контроллера Ethernet enc28j60. Несмотря на
возможность управления не менее тремя устройствами и снятия показаний с
трех портов о состоянии устройств и температурного датчика по шине
OneWire, размер web-странички не мог превышать максимального размера
Ethernet пакета. Поэтому возникали проблемы о предоставлении необходимой
информации через web – интерфейс по управляемым устройствам. Во втором
случае рассмотрен вопрос о создании полнофункционального web – сервера, но
на контроллере Ethernet w5100 c возможностью подключения к нему
управляющих устройств, однако была отмечена ненадежность его работы
(периодические зависания), а также недостаточная скорость работы сервера при
считывании данных с sd карты памяти. Также в этих работах не рассматривался
вопрос об ударенной работе с устройствами через Интернет. Решение
представлено только для работы в локальной сети предприятия с локальными
ip – адресами.
Здесь рассматривается возможность использования для этих целей
одноплатных компьютеров, установленных в wifi роутерах, например, фирмы
TP-LINK. Эти компьютеры имеют значительный объём оперативной памяти,
Ethernet порт, wifi адаптер, возможность подключения через UART к
микроконтроллерам, могут работать с версией операционной системы Linux –
OpenWRT. По стоимости использования их в качестве “Ethernet удлинителей”
они выигрывают по сравнению с Ethernet и wifi адаптерами, которые
предлагаются проектом Arduino[3]. Существенным недостатком одноплатных
компьютеров
является незначительный объём
флеш памяти, которая
используется для загрузки системы, хранения файлов и данных. В этой работе
рассматривается установка ОС OpenWRT на роутере с загрузкой с USB флеш
памяти. Устройство должно работать как полнофункциональный web – сервер,
имеющий
постоянное доменное имя
для работы в Интернете. Вопрос
взаимодействия компьютера с микроконтроллером по порту UART для
управления устройствами и снятий показаний с датчиков будет рассмотрен в
следующей работе.
Рассмотрим установку
прошивки Openwrt на внешнюю USB флеш
память (флешку). В качестве роутера (рис.1) будет использоваться TP-Link TLMR3020[4]. В результате Openwrt должна будет загружаться не с внутренней
памяти роутера, которая имеет размер всего 4Мбайта, а с флешки, что позволит
ставить на нее неограниченное количество приложений и хранить большое
количество данных. Рассмотрим установку на роутер прошивки Openwrt при
условии, что на нем была установлена оригинальная заводская прошивка.
Рис.1. Роутер TL-MR3020
Открываем
в
браузере
роутер
по
адресу
http://192.168.0.254/.
Авторизируемся с именем: admin, паролем: admin. Используя левую
навигационную панель, нажимаем на System Tools. Если роутер был ранее
настроен, необходимо сначала перейти в - Factory Defaults и нажать на Restore.
Далее переходим в - Firmware Upgrade. Выбираем для прошивки заранее
загруженный файл - *.factory.bin в роутере. Нажимаем на кнопку Upgrade и
ожидаем перезагрузки роутера. Далее открываем в браузере роутер по адресу
http://192.168.1.1 и заходим по логину
root. Для изменения пароля root
необходимо зайти на роутер по команде telnet 192.168.1.1 и в открывшемся
сеансе набрать команду
passwd root
Далее по запросу поставить дважды новый пароль. Как только буден
задан новый пароль, telnet консоль больше
доступна не будет, поэтому
необходимо использовать SSH для соединения с роутером. Прошивка
находится
по
адресу
rc1/ar71xx/generic/.
Имя
http://downloads.openwrt.org/attitude_adjustment/12.09прошивки
-
openwrt-ar71xx-generic-tl-mr3020-v1-
squashfs-factory.bin
Если на роутере уже установлена OpenWRT прошивка, то необходимо
загрузить образ новой прошивки на роутер в папку /tmp например с помощью
scp(Linux) под названием code.bin, после чего подключиться к роутеру с
помощью консоли и выполнить команды:
cd /tmp
mtd -e firmware -r write code.bin firmware
Повторная прошивка находится по тому же адресу, но ее имя openwrt-ar71xxgeneric-tl-mr3020-v1-squashfs-sysupgrade.bin
Предполагается, что на роутер успешно установлена прошивка openWRT
(в данном случае ATTITUDE ADJUSTMENT).
Накопитель на флеш памяти разбиваем на два раздела:
1-й - для системных файлов и пользовательских данных (~200МБайт)
2-й - файл подкачки (~64МБайт).
В работе рассматривается использование 256-х Мбайтного флеш - накопителя.
Разбивка накопителя выполнялась программой fdisk,
mkswap и mkfs.ext4.
Устанавливаем пакеты:
opkg update
форматирование -
opkg install kmod-usb-storage
opkg install kmod-fs-ext4
opkg install block-mount
opkg install fdisk
Вставляем в USB флеш память в роутер и создаем разделы:
fdisk /dev/sda
Выполняем следующие команды:
Command (m for help): d
Partition number (1-4): 1
Command (m for help): d
Partition number (1-4): 2
Command (m for help): d
Partition number (1-4): 3
Command (m for help): d
No partition is defined yet!
Далее создаем сначала второй раздел для Swap:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
[B] Partition number (1-4): 2
First cylinder (xx-xxx, default xx): нажимаем клавишу Enter
Using default value xx
Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): +64M Enter
Создаем основной раздел, используем для него ~200Мбайт пространства на
флешке:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (xx-xxx, default xx): Enter
Using default value xx
Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): Enter
Второй раздел должен быть Swap, поэтому меняем для него тип:
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap / Solaris)
Command (m for help): a
Partition number (1-4): 1
Смотрим, что получилось:
Command (m for help): p
Device Boot
Start
End
Blocks Id System
/dev/sda1 *
133120
511997
189439 83 Linux
/dev/sda2
2048
133119
65536 82 Linux swap / Solaris
Выходим и записываем изменения:
Command (m for help): w
Далее необходимо отформатировать созданные разделы. Для этого
переставляем флеш - накопитель на Linux машину. На openWRT это сделать не
удастся, так как пока недостаточно памяти для установки пакета e2fsprogs на
роутере. На Linux, зайдя под superuser, выполняем команды:
mkswap -f -L swap /dev/sda2
mkfs.ext4 -L over /dev/sda1
-L - присвоение метки разделу.
"swap" - это метка для /dev/sda2
"over" - это метка назначается разделу /dev/sda1
Изменяем файл конфигурации для монтирования системы на внешний
диск. Для этого файл /etc/config/fstab
переписываем в виде:
config global automount
option from_fstab 1
option anon_mount 1
config global autoswap
option from_fstab 1
option anon_swap 0
config mount
option target /
option device /dev/sda1
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0
ophion is_rootfs 1
config swap
option device /dev/sda2
option enabled 1
Переносим систему на флеш накопитель. С этой целью монтируем новый
диск и копируем на него все необходимое:
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
mkdir /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xvf sync ; umount /mnt/sda1
umount /tmp/cproot
Перезагружаемся:
reboot
После перезагрузки необходимо убедиться, что флешка подключилась в
качестве корневой файловой системы.
По команде
df
для операционной системы openWRT версии ATTITUDE ADJUSTMENT вывод
должен быть примерно такой:
root@OpenWrt:~# df
Filesystem
1K-blocks Used
Available Use% Mounted on
rootfs
187424
24374 153579 14%
/dev/root
2048
2048
0
100%
/rom
tmpfs
14608
88
14520
1%
/tmp
tmpfs
512
0
512
0%
/dev
/dev/sda1
187424
24374 153579 14
/
/
root@OpenWrt:~#
Выполняем проверку, подключился ли файл своппинга (Swap):
root@OpenWrt:~# free
Mem:
total
used
free
shared
buffers
29212
27064
2148
0
2032
25032
4180
-/+ buffers:
Swap:
65532
0
65532
root@OpenWrt:~#
Видно, что операционная система загружается с флеш - накопителя.
Далее создаем каталог /www/home, где будут находиться документы web сервера:
mkdir /www/home
и делаем изменения в файле /etc/uhttpd.
Вместо строк
list listen_http
option home
0.0.0.0:80 # Порт, на котором работает web - сервер
/www
# Домашний каталог с web - документами
вводим следующие
list listen_http
0.0.0.0:8080
option home
/www/home
Далее перегружаем web сервер:
/etc/init.d/uhttpd restart
После этого при обращении к серверу по адресу
http://192.168.1.10:8080
будет
загружаться
страничка,
находящаяся
на
сервере
в
файле
/www/home/index.html или /www/home/index.htm.
Рассмотрим
далее
присвоение
созданному
серверу
уникального
доменного имени. Предположим, что web – сервер подключен к провайдеру
Интернет через, например, ADSL модем - маршрутизатор. Некоторые
провайдеры (например, Укртелеком) предоставляют своим пользователям
динамический IP адрес, который постоянно изменяется при переподключении.
Если необходимо подключиться, например, к web-серверу удаленно из
Интернета, этого сделать невозможно, поскольку неизвестно, какой новый
динамический адрес присвоил провайдер маршрутизатору. Обойти эту
проблему можно с помощью технологии DynamicDNS(DDNS), позволяющей
связать внешний динамический ip-адрес и постоянное доменное имя. Причем в
настоящее время воспользоваться DDNS-сервисом можно бесплатно.
Для обычного пользователя, пожелавшего воспользоваться DDNS, на
практике это выглядит следующим образом. Клиент регистрируется в системе
DDNS, выбирает имя для своего хоста и домен второго уровня. Положим, имя host56, домен - no-ip.biz. Если на компьютере запущен web-сервер, то к нему
можно будет обратиться по адресу host56.no-ip.biz (если провайдер не
блокирует входящие запросы по 80-му порту). Таким образом, технология
DDNS предусматривает создание
специального DNS-сервера, который
обслуживает несколько зон (обычно для раздачи имен регистрируется
несколько доменов второго уровня). А клиенту предоставляется возможность
самому изменять на этом DNS-сервере записи, относящиеся к его хосту с
помощью программы - клиент. В результате, когда кто-то попытается
обратиться из Интернета к машине по имени, DNS-сервер выдаст текущий IPадрес. Редактирование записей DNS может быть организовано по-разному.
Например, после смены IP-адреса на машине нужно зайти на сайт, ввести логин
и пароль, а затем вручную прописать новый IP. Однако это неудобно:
провайдеры ADSL могут ограничивать длительность одного сеанса связи
(например - 24 часа). По истечении данного периода сессия закрывается, а при
повторной авторизации клиенту выдается другой IP-адрес. Это необходимо для
экономии IP адресов, т.е. IP адресов, выделенных для ADSL, меньше, чем
клиентов у провайдера Интернет. Поэтому гораздо удобнее пользоваться
специальными
программами,
которые
при
смене
IP-адреса
машины
автоматически изменяют запись на сервере DNS (Программа - клиент).
Некоторые из таких программ используют обычный протокол HTTP, а другие свой собственный.
Существует также некое "усовершенствование" всей рассматриваемой
системы
DDNS
- это сервисы Dynamic DNS, которые организуют
перенаправление входящих запросов на разные порты. Делается это в том
случае, когда Интернет-провайдеры блокируют входящие запросы по широко
используемым портам, например 80-му (HTTP), 25-му (SMTP) и 21-му (FTP). В
этом случае на локальной машине можно запустить web-сервер на 8000-м
порту (открытом провайдером порту), а извне к нему можно обращаться по
адресу host56t.no-ip.biz:80 (в данном случае указание порта необязательно и
выбрана такая запись для наглядности).
Рассмотрим процесс регистрации динамического имени DNS. Для этого
набираем в браузере адрес: http://www.no-ip.com, и на открывшейся страничке
выбираем Sign In (рис.2).
Далее появляется форма регистрации, которую необходимо заполнить.
Этот сервер надежно принимает e-mail, зарегистрированные на почтовом
сервере gmail.com. А, например mail.ru он не воспринимает. Внизу формы
необходимо ввести имя хоста, например host56. На этой же строчке
высветиться имя домена no-ip.biz. Его изменять не нужно, иначе сервис будет
платным. Внизу формы нажимаем Sign Up.
Рис.2. Страница по адресу http://www.no-ip.com
На адрес электронной почты, указанный при регистрации, будет
отправлено письмо, которое нужно
подтвердить. Как только будет нажата
ссылка для активации аккаунта, откроется страница, оповещающая, что аккаунт
активизирован и после этого можно авторизироваться. На страничке находим
наверху справа Sign In и в открывшуюся форму вводим адрес email и пароль.
Далее появиться новая форма, в которой необходимо дать сведения о себе.
После этого появиться страничка, подобная показанной на рисунке 3.
Рис.3. Страница после правильной регистрации имени DNS.
Для изменения параметров хоста необходимо нажать на иконку Manage
Hosts и далее перейти на страничку Modify.
Ранее было принято, что ADSL модем, подключенный к провайдеру,
выполняет функцию маршрутизатора и NAT сервера. В качестве web-серверов
для примера может использоваться два устройства: одноплатный компьютер с
установленной системой OpenWRT(Linux) и локальным адресом 192.168.1.10, и
миниатюрный web - сервер на микроконтроллере с адресом 192.168.1.100.
Необходимо на модеме модели ZXV10H108L выполнить проброс портов так,
чтобы при обращении извне по порту 8080 и 22 подключение выполнялось по
http и ssh к узлу 192.168.1.10, по порту 80 - к узлу 192.168.1.100. На рисунке 4
показан результат настройки для модема.
Рис.4. Страница настройки перенаправления портов.
После такой настройки для обращения к web-серверу на одноплатном
компьютере извне необходимо набрать адрес http://host56.no-ip.biz:8080, а при
обращении к
web-серверу на микроконтроллере - http://host56.no-ip.biz.
Можно сделать так, чтобы обращение к серверу было не http://host56.noip.biz:8080, а http://host56.no-ip.biz. Для этого необходимо выбрать радиокнопку
Port 80 Redirect и в появившейся строке ввести 8080 (это значение стоит по
умолчанию, рис.5.). Однако после этого web - сервер на микроконтроллере
необходимо отключить.
Для того чтобы сервер DDNS знал, что при новом подключении к
провайдеру адрес поменялся, необходимо с клиента (проще с одноплатного
компьютера) отправить запрос
http://dynupdate.no-ip.com/dns?username=alex180456@gmail.com
&password=140190ab&hostname=host56.no-ip.biz,
например,
с
программы wget, которая установлена в ОС OpenWRT.
Рис.5. Страница модификации.
Для этого на OpenWRT создаем исполняемый скрипт /etc/ddns:
#!/bin/ash
while [ 5 -lt 10 ]
do
sleep 900
/usr/bin/wget 'http://dynupdate.no-ip.com/dns?username=alex180456
@gmail.com&password=1401908ab&hostname=host56.no-ip.biz'
done
помощью
и помещаем его для выполнения в файл загрузки /etc/rc.local:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
/etc/ddns &
exit 0
Теперь каждые 900 секунд на сервер DDNS будет отправляться информация о
клиенте.
Литература
1. Мясищев А.А. Web-сервер на ENC28J60 и микроконтроллере AVR для
управления устройствами по TCP/IP сети. [Electronic resource]. -
Mode of
access: http://www.rusnauka.com/Page_ru.htm, 2013.
2. Мясищев А.А. О возможности построения универсального Web-сервера на
Arduino для отображения информации и управления по TCP/IP сети. [Electronic
resource]. - Mode of access: http://www.rusnauka.com/Page_ru.htm, 2013.
3.Arduino. Официальный сайт.
[Electronic resource]. -
Mode of access:
http://arduino.cc/ , 2013.
4. OpenWRT. TP-Link TL-MR3020. [Electronic resource]. - Mode of access:
http://wiki.openwrt.org/ru/toh/tp-link/tl-mr3020, 2013.
Download