Использование встроенного TCP/IP-стека WISMO228
GSM-модули WISMO218 и WISMO228 компании Sierra Wireless являются продуктами нижнего ценового диапазона, при этом отличаются высоким качеством и построены на основе проверенных временем решениях [1]. Модули WISMO производятся на фабрике, сертифицированной по стандарту ISO TS 16949, и проходят сборку и выходной контроль качества на том же оборудовании, что и продукты для автомобильных применений. Как и другие продукты Sierra Wireless, модули имеют защиту от возможных претензий в области нарушения прав на интеллектуальную собственность, поскольку компания производит все необходимые отчисления держателям патентов в области GSM/ GPRS. К несомненным достоинствам изделий можно отнести широкий диапазон напряжения питания (3,2-4,8 В) и низкий ток потребления в режиме ожидания 1,3 мА (Idle Mode Paging 9). Более подробную техническую информацию по модулям WISMO можно найти в [2]. Основное различие между ними заключается в том, что WISMO218 является двухдиапа-зонным, в то время как WISMO228 может работать в четырех GSM-диапазонах. Начиная с версии прошивки L22 все модули WISMO содержат встроенный TCP/IP-стек. Для разработки приложений можно использовать недорогой встраиваемый модуль TE-WISMO228, выпускаемый ООО «Терраэлектроника». Достоинством этой платы (рис. 1) является возможность подключения WISMO228 как к COM-порту ПК, так и к внешнему микроконтроллеру. Это облегчает знакомство с управляющими AT-командами с помощью терминальной программы и позволяет затем испытать написанную программу хост-контроллера на том же самом «железе». Доступная принципиальная схема [3] позволяет использовать схемотехнические решения платы в своем устройстве.
Команды встроенного TCP/IP-стека
Встроенный TCP/IP-стек работает со следующими протоколами: UDP, TCP in connect mode (Client), TCP in listen mode (Server). Поддерживается одновременная работа с несколькими сокетами: UDP — восемь сокетов, TCP Clients — восемь сокетов, TCP Servers — четыре сокета.
В М2М-приложениях обычно используется выделенный сервер, принимающий данные телеметрии на один или одновременно несколько сокетов в режиме TCP или UDP. При этом такой сервер должен иметь выделенный внешний статический IP-адрес. Использование публичных почтовых серверов может быть полезно в тех случаях, когда конечным получателем информации являются индивидуальные пользователи (физические лица) либо когда масштабы проекта не позволяют поддерживать свой собственный круглосуточно работающий сервер. Доступ к общедоступным серверам почты (mail.ru, yandex.ru, rambler.ru, gmail. com и др.) бесплатен, сами сервисы работают достаточно стабильно и предлагают гигабайты дискового пространства для хранения сообщений. Для доступа к своему почтовому ящику можно использовать не только веб-интерфейс: поддерживаются протоколы POP3 (чтение почты) и SMTP (для отправки почты). Именно с помощью этих протоколов обеспечивается доступ к почте для программ, установленных на ПК (Outlook, TheBat! и т. д.). Любое M2M-устройство, оснащенное GSM-модулем WISMO228, может работать с почтой по протоколам POP3 и SMTP на основе команд встроенного TCP/ IP-стека. Рассмотрим несколько практических примеров взаимодействия модуля WISMO228 c общедоступными почтовыми серверами. Во всех примерах мы отсылаем AT-команды c программы-терминала, запущенного на ПК. Модуль WISMO228 подключен к COM-порту компьютера через драйвер RS-232. Можно также подключить WISMO228 к USB-порту ПК через подходящий переходник USB/UART.
Во всех примерах далее применяется следующая цветовая маркировка сообщений: Данные, отправляемые в UART WISMO228:
at+wipcfg=1<CR><LF>
Ответы и незапрашиваемые сообщения, получаемые из UART WISMO228:
+WIPREADY: 2,1
Пример 1. Прием сообщений с сервера mail.ru
После включения модуля следует убедиться, что регистрация в сети успешно завершена: в ответ на команду
at+creg?<CR><LF>
мы должны получить сообщение
+CREG 0,1
Далее приступаем к работе с TCP/IP-стеком. Сначала запускаем (активируем) сам TCP/ IP-стек:
at+wipcfg=1<CR><LF>
Определяем физическую среду передачи данных — GPRS Bearer («открываем GPRS-носитель»):
at+wipbr=1,6<CR><LF>
Устанавливаем точку доступа (в данном примере используется SIM-карта «Билайн»):
at+wipbr=2,6,11,»internet.beeline.ru»<CR><LF>
Выполняем подключение к GPRS («стартуем носитель»):
at+wipbr=4,6,0<CR><LF>
После этой команды возникает небольшая пауза (несколько секунд) до получения ответа «OK».
Теперь можно проверить полученный модулем IP-адрес:
at+wipbr=3,6,15<CR><LF>
+WIPBR: 6,15,»10.192.244.192″
Мы получили адрес внутренней сети оператора, к которому невозможно обратиться извне (т. е. с компьютера, подключенного к Интернету). Однако для приема и отправки почты это не имеет существенного значения, т. к. эти процессы будут инициированы самим модулем WISMO228.
Создаем соединение (TCP-клиент) с указанным на сайте почтового сервиса адресом (pop.mail. ru) и номером порта (110):
at+wipcreate=2,1,»pop.mail.ru»,110<CR><LF>
В ответ мы получаем две строки:
+WIPREADY: 2,1
(успешно создан TCP-клиент с идентификатором сессии (индексом) 1) и
+WIPDATA: 2,1,5
(получены 5 байт данных).
Переключаем UART в режим обмена данными в режиме Continuous:
at+wipdata=2,1,1<CR><LF>
После сообщения
CONNECT
мы видим 5 байт данных (c учетом<CR><LF>), которые прислал нам почтовый сервер:
+OK
Ура, мы соединились с почтовым сервером и теперь можем отправлять команды протокола POP3. Вводим адрес почтового ящика:
USER wismo@mail.ru<CR><LF>
+OK
Указываем пароль доступа:
PASS wismo228<CR><LF>
+OK Welcome!
Авторизация на сервере прошла успешно. Теперь можно производить манипуляции с почтовым ящиком. Например, мы можем посмотреть общее количество писем с помощью следующей команды:
STAT<CR><LF>
+OK 2 2048
(в нашем почтовом ящике два сообщения, которые занимают 2048 байт). Прочитаем второе сообщение целиком:
RETR 2<CR><LF> +OK 1262 octets
Return-path:<sierrawireless@rambler.ru>
Received: from [81.19.67.208]
(port=56076 helo=mcgi71.rambler.ru) by mx19.mail.ru with esmtp id 1QDyEA-0001TD-00
for wismo@mail.ru; Sun, 24 Apr 2011 16:15:50 +0400
Received-SPF: pass (mx19.mail.ru: domain of rambler.ru designates 81.19.67.208 as permitted sender)
client-ip=81.19.67.208;
envelope-from=sierrawireless@rambler.ru; helo=mcgi71.rambler.ru;
X-Mru-BL: 0 X-Mru-PTR: off X-Mru-NR: 1
X-Mru-OF: unknown (ethernet/modem) X-Mru-RC: RU
Received: from [109.173.54.73] by mcgi71.rambler.ru with
HTTP (mailimap); Sun, 24 Apr 2011 16:15:50 +0400
From:<sierrawireless@rambler.ru>
To:<wismo@mail.ru>
Subject: Test WISMO228 TCP/IP-stack
Date: Sun, 24 Apr 2011 16:15:50 +0400
MIME-Version: 1.0
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset—»us-ascii»;
format—’flowed»
Message-Id:<808815459.1303647350.90353336.92159@ mcgi71.rambler.ru>
X-Mailer: Ramail 3u, (chameleon), http://mail.rambler.ru X-Spam: Not detected X-Mras: Ok
This mail is just test message for WISMO228 TCP/IP-stack.
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999
0000000000
End of test message.
<CR><LF>
<CR><LF>
Сообщение заканчивается последовательностью кодов: <CR><LF><.><CR><LF>, которые не являются телом письма. Эти байты добавляет почтовый сервер — они являются признаком конца сообщения.
В почтовом ящике может оказаться случайное очень большое сообщение, прием которого может занять продолжительное время. Чтобы не принимать его полностью, можно использовать команду top msg n. По этой команде можно получить n первых строк сообщения с номером msg. РОРЗ-сервер в ответ на данную команду отправляет заголовок сообщения, затем пустую строку, затем требуемое количество строк сообщения (если их количество в сообщении меньше указанного в параметре n, то будет передано все сообщение). В течение сеанса связи не следует допускать больших (более 1 мин.) пауз между отправкой команд протокола POP3, в противном случае сервер может инициативно разорвать соединение. При этом при отправке очередной команды мы получим в ответ последовательность:
<ETX><CR><LF><SHUTDOWN><CR><LF>
У нас более нет интереса к нашей почте, поэтому отключаемся от почтового сервера:
QUIT<CR><LF>
+OK POP3 server at mail.ru signing off
<ETX>
SHUTDOWN
Для корректного завершения GPRS-сессии выполняем следующие команды:
at+wipbr=5,6<CR><LF>
at+wipbr=0,6<CR><LF>
at+wipcfg=0<CR><LF>
Пример 2. Отправка E-mail-сообщений c помощью протокола SMTP
Протокол SMTP (Simple Mail Transfer Protocol) создан для удобной отправки электронных почтовых сообщений (E-mail). Если не вдаваться в подробности, то это просто некоторый набор текстовых ASCII-команд и соответствующих ответов почтового сервера. Для практической отправки E-mail нам потребуется всего пять базовых команд SMTP-протокола. Прежде всего, запускаем TCP/IP-стек WISMO228 точно так же, как и в примере 1:
at+wipcfg=1<CR><LF>
at+wipbr=1,6<CR><LF>
at+wipbr=2,6,11,»internet.beeline.ru»<CR><LF>
at+wipbr=4,6,0<CR><LF>
Создаем соединение (TCP-клиент) с каким-либо почтовым сервером отправки почты. В нашем случае используем адрес smtp.mail. ru и 25 порт.
at+wipcreate=2,1,»smtp.mail.ru»,25<CR><LF>
После получения ответов
+WIPREADY: 2,1
+WIPDATA: 2,1,41
переключаемся в режим обмена данными:
at+wipdata=2,1,1<CR><LF>
CONNECT
Строка CONNECT говорит о том, что мы перешли из режима AT-команд в режим данных. Далее мы получаем приглашение почтового SMTP-сервера:
220 relay2.beelinegprs.ru ESMTP Postfix
Первая команда, отправляемая серверу:
EHLO server<CR><LF>
Строка данных server в команде-приветствии EHLO может быть и любой другой. В ответ мы получаем несколько кодов ответа. Каждый код, начинающийся с цифры 2, говорит об успешной транзакции — подробную расшифровку можно легко найти в Интернете:
250-relay1.beelinegprs.ru
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
Работа с корпоративной SIM-картой «Билайн» не требует дополнительной авторизации, поэтому отправка письма значительно упрощается — нам достаточно задать адреса получателя и отправителя:
MAIL FROM:<anymail@gmail.com><CR><LF>
250 Ok
RCPT TO:<sierrawireless@rambler.ru><CR><LF>
250 Ok
Переходим к отправке содержимого письма:
DATA<CR><LF>
354 End data with<CR><LF><CR><LF>
Далее последовательно заполняем все поля обычного E-mail-сообщения:
from: OlegPushkarev<CR><LF>
to: sierrawireless@rambler.ru<CR><LF>
subject: WISMO228 SMPT Beeline test<CR><LF>
Hello world from WISMO!<CR><LF>My position: http://maps.google.ru/maps?q=55.754000%2c37.620300<CR><LF>END of FILE<CR><LF>.<CR><LF>
Ответ сервера говорит об успешном принятии письма к отправке:
250 Ok: queued as 50EC77215E3
Для корректного завершения сеанса используется команда QUIT:
QUIT<CR><LF>
Вид отправленного нами сообщения в почтовом ящике на Rambler.ru показан на рис. 2.
В текст данного письма мы включили ссылку с местоположением объекта, полученного, например, с помощью ГЛОНАСС-приемника. Получателю письма достаточно «кликнуть» по ссылке, чтобы увидеть на карте Google отметку, где во время отправки письма находился модуль WISMO228.
Пример 3. Использование авторизации
Отправка письма с помощью SIM-карты «МегаФон» требует ввода имени и пароля при открытии GPRS-сессии и дополнительного шага авторизации при подключении к SMTP-серверу. Это сделано для предотвращения рассылки спама или нежелательных анонимных сообщений. Для авторизации необходимо ввести команду
AUTH PLAIN
c логином и паролем, зашифрованным в формате base64. Base64 — это схема, по которой произвольная последовательность байт преобразуется в последовательность печатных ASCII-символов. Алгоритм формирования base64 можно найти в «Википедии». После удачной авторизации выводится сообщение
235 Authentication succeeded
В отличие от примера 2, адрес отправителя должен быть привязан к логину, поэтому подставить произвольный текст в поле «from:» здесь не получится, т. к. это приводит к сообщению:
501 sender address must match authenticated user
Более требователен сервер в этом случае и к содержимому письма. Несколько раз наблюдалось срабатывание антиспамового фильтра на, казалось бы, довольно безобидные сообщения: 550 spam message rejected. Please visit http://mail.ru/notspam/ or report details to abuse@corp.mail.ru. Error code: D8A3EC38E DCF8F8201 59836E676F914F5BE1AA86CA67C58B. Итак, вот как выглядит протокол работы с SMTP-сервером с обычной коммерческой SIM-картой «МегаФон» (ответы модема «OK» опущены):
at+wipcfg=1<CR><LF>
at+wipbr=1,6<CR><LF>
at+wipbr=2,6,11,»internet.ru»<CR><LF>
at+wipbr=2,6,0,»gdata»<CR><LF>
at+wipbr=2,6,1,»gdata»<CR><LF>
at+wipbr=4,6,0<CR><LF>
at+wipbr=3,6,15<CR><LF>
+WIPBR: 6,15,»10.21 5.1 34.95»
at+wipcreate=2,1,»smtp.mail.ru»,25<CR><LF>
+WIPREADY: 2,1
at+wipdata=2,1,1<CR><LF>
CONNECT
EHLO 1 234567890<CR><LF>
220 smtp2.mail.ru ESMTP ready
250-smtp2.mail.ru
250-SIZE 31457280
250-8BITMIME
250-AUTH PLAIN LOGIN
250 STARTTLS
AUTH PLAIN AHdpc21vAHdpc21vMjI4<CR><LF>
235 Authentication succeeded
MAIL FROM:<wismo@mail.ru><CR><LF>
250 OK
RCPT TO:<sierrawireless@rambler.ru><CR><LF>
250 Accepted
DATA<CR><LF>
354 Enter message, ending with «.» on a line by itself
from: wismo@mail.ru<CR><LF>
to: sierrawireless@rambler.ru<CR><LF>
subject: WISMO228 with Megafon SIM<CR><LF>
Шлем письмо с помощью встроенного TCP/IP-стека WISMO228<CR><LF>
в чащах юга жил бы цитрус да но фальшивый экземпляр<CR><LF>
the quick brown fox jumps over the lazy dog<CR><LF> .
<CR><LF>
250 OK id=1QE3DQ-0004pu-00
QUIT<CR><LF>
221 smtp2.mail.ru closing connection
<ETX>
SHUTDOWN
Полученное письмо приведено на рис. 3. Использование GPRS-канала передачи данных является наиболее экономным с точки зрения расходов на трафик. На стоимость влияет используемый тарифный план и величина округления трафика. При стоимости в диапазоне 1-7 руб. за 1 Мбайт передачи данных и округлении объема 1 кбайт отправка коротких E-mail не приводит к заметным расходам на связь. Если размер письма укладывается в 1 кбайт, то стоимость отправки одного почтового сообщения не превысит 0,7 коп. Если ориентироваться на наиболее экономичные тарифные планы, например «Интернет старт» от «МегаФон», то первоначального платежа на SIM-карте (100 руб.) хватит на отправку 100 000 коротких писем. У каждого оператора, как правило, можно подобрать тарифный план, оптимальный для отправки коротких пакетов данных от M2M-устройств.
Заключение
Использование бюджетного GSM-модуля WISMO228 позволяет организовать взаимодействие с почтовыми серверами POP3 и SMTP при помощи простого набора AT-команд встроенного TCP/IP-стека. Использование GPRS минимизирует расходы на трафик, делая этот вид связи существенно более выгодным по сравнению с отправкой SMS и передачей данных в голосовом канале (CSD).
- Пушкарев О. GSM-модуль начального уровня WISMO 218 // Новости электроники. 2009. № 10.
- WISMO228. Техническое описание.
- Описание TE-WISMO228. www.terraelectronica.ru.