Wi-Fi модуль WizFi210. Часть 2. АТ-команды

Содержание

UART
Подключаемся к UART модуля, ставим в терминалке скорость 115200 (остальные настройки по умолчанию). Если все сделано правильно — то можно начинать баловаться.
В плане управления, разработчики WizFi210 ничего мудрить не стали и организовали все на АТ-командах, типа как на различных GSM-модулях: шлем команду, далее символ возврата каретки (0x0D) и модуль в ответ дает результаты выполнения команды.
Для проверки жизнеспособности модуля традиционно можно использовать команду АТ. В ответ должны получить [OK]
AT   // это мы шлем в модуль

AT   // а эти 2 строчки модуль нам возвращает
[OK]

Для отключения эха служит команда ATE0. Для включения ATE1. Эхо обычно отключают в случае, когда модулем управляет хост-контроллер. Для работы в ручном режиме (управление с терминалки) его удобнее оставить.

Есть так же режим, когда вместо строковых ответов ([OK], [ERROR] и пр.) модуль будет отвечать кодами длиной 1 символ (байт) в диапазон от '0'(0х30) до '9'(0х39) и в довесок есть код 'A'. Список возможных ответов (а так же их строковое и символьное представление) можно найти в «Programmers Guide».
ATV0   // режим ответа в кодах
ATV1   // режим ответа сроками

Режим ответа в кодах, так же удобнее использовать при управлении от хоста.
Для начала достаточно знать, что символ '0' = [OK], остальное не ОК.

Команды для настройки UARTа вынесены в отдельный раздел в Programmers Guide. Опишу только команду установки скорости, как наиболее часто требующуюся:
ATB=baudrate
baudrate: 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600
Таким образом для установки скорости 9600, нужно послать в модуль команду
ATB=9600

Профили
Все изменяемые настройки сохраняются до отключения питания модуля. Что бы использовать необходимые настройки после отключения питания, нужно сохранить их в профиль командой AT&Wn, где n — номер профиля, в который хотим сохранить текущие настройки модуля.
Всего доступно два профиля: №0 и №1. Вот некоторые команды, управления профилями:
AT&Wn   // сохранить текущие настройки модуля в профиль n
ATZn    // использовать настройки профиля n в качестве текущих настроек модуля
AT&Yn   // изменить настройки профиля n на значения по умолчанию

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

Сохранение профиля позволяет избежать необходимости конфигурить модуль каждый раз при включении питания. А наличие двух разных профилей дает возможность «не лету» одной командой менять настройки модуля. Вторую возможность я использовал чисто в отладческих целях: один профиль был настроен для управления от хоста (без эха, ответы кодами), другой профиль — для ручного (тестового) управления с терминалки (с эхом, ответы строковые), однако, думаю, что фишку с профилями вполне можно применить и в какой-нибудь прикладной задаче.

Про форматы команд и ответы на них
Лирическое отступление. Был у меня некогда опыт работы с GSM-модемом от фирмы Quectell. Так вот у них есть строго определенный формат АТ-команд, который очень помогает в работе:
AT+COMMAND=? — возвращает список параметров и их диапазоны для данной команды.
AT+COMMAND? — возвращает текущее значение параметров данной команды
AT+COMMAND=values — устанавливает значения параметров для данной команды


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

Есть некоторые команды на вход которым можно подавать помимо обязательных параметров, еще и необязательные. Рассмотрим этот случай на примере уже известной нам команды для установки скорости последовательного порта. Команда имеет следующий формат в документации:
ATB=baudrate[[,bitsperchar][,parity][,stopbits]]
Параметр вне квадратных скобок (baudrate) обязателен, остальные указываем в случае необходимости через запятую. Например так:
ATB=9600,8

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

Ответ на все команды в общем случае состоит из двух частей: необязательный результат выполнения команды плюс обязательный статус выполнения команды.
Примером результата может быть список доступный Wi-Fi сетей, получаемый после сканирования эфира. Результат не возвращается либо когда команда задана с ошибкой либо когда результат в принципе не предполагается для данной команды.
Статус выполнения возвращается всегда. Это может быть [OK] или какой-либо [ERROR].

WIZSmartScript
С сайта WizNet можно скачать утилитку, для работы с модулем. Называется она WIZSmartScript. По сути это такая хитрая терминальная программа со скриптами. Она позволяет в несколько кликов производить базовые настройки модуля. Может быть довольно полезна на начальном этапе, для того что бы «палить» последовательность команд для различных операций с модулем. Вдаваться в подробности не стану, утилита весьма понятна в использовании, плюс есть AppNote AP310 в которой описана её работа.
WIZSmartScript
Добавлю, что с помощью этой же утилиты можно производить перепрошивку модуля (см. AP320).

Конфигурирование модуля через Wi-Fi
Путем определенных махинаций можно перевести модуль в режим конфигурирования через сеть. В первом случае модуль становится точкой доступа и становится доступен WEB-интерфейс для его настройки. Во втором случает модуль переходит в режим ad hoc (как я понимаю, это что-то типа режима «точка-точка») и для конфигурации нужно использовать еще одну утилиту производителя под названием WizFi Configuration-Tool. Естественно, для возможности конфигурирования нужно компьютером подключиться к созданной модулем сети.
Сам я этими штуками не пользовался (ИМХО это совсем какое-то баловство), кому интересно может почитать аппноту AP420 Easy Provisioning via WiFi.

P.S.:
В этой части я изначально планировал уже начать освещать всякие вкусности (типа коннекта к сети, создание своей точки доступа и пр.) но введение так затянулось, что я решил выделить его отдельно:)
  • +3
  • 26 августа 2013, 15:40
  • Den1s

Комментарии (19)

RSS свернуть / развернуть
Тема больше продолжаться не будет???
А то много вопросов…
0
Задавайте вопросы. Чем сможем — подскажем.
0
Опишу что в итоге я хочу сделать:
Есть два модуля WizFi220, каждый модуль будет управляться STM32F103 (пока так). Стоит такая задача — один МК принимает данные по UART и должен передать их другому МК по WIFI и наоборот.
Сразу у меня есть 2 вопроса, даже три:
1) Какой режим использовать (Infrastructure,Ad-hoc или Limited-AP) и чем эти режимы отличаются друг от друга?
2) Какие необходимые и достаточные настройки чтобы это заработало (то есть как я понимаю на одном модуле подымается точка доступа как сервер а на другом как клиент).
3) Как передавать данные в модуль и считывать из него, с AT командами то все понятно и заработало сразу а вот данные...???
0
У меня аналогичная связка используется (STM32F103+WizFi220).
Касательно вопросов:
1. Про эти режимы проще почитать в интернете, довольно подробно всё изложено, повторяться нет смысла.
2. Ниже пример для подъема сервера в режиме точки доступа

printf("AT\r");                                              //Проверка принятия AT команд модулем
delay(1000);
printf("ATE0\r");                                            //Выключение эха
delay(1000);
printf("AT+WD");                                             //Отключение от всех точек доступа, если были
delay(1000);
printf("AT+WM=2\r");                                         //Модуль в режим "limited AP"
delay(1000);
printf("AT+WAUTH=1\r");                                      //Режим аутентификации
delay(1000);
printf("AT+WWEP1=1234567890\r");                             //Ключ сети
delay(1000);
printf("AT+NDHCP=0\r");                                      //DHCP выключен
delay(1000);
printf("AT+NSET=192.168.1.1,255.255.255.0,192.168.1.1\r");   //AT+NSET=<Src Address>,<Net-mask>,<Gateway>
delay(1000);
printf("AT+WA=test_wifi_server\r");                          // SSID сети
delay(1000);
printf("AT+NAUTO=1,1,192.168.1.200,5000\r");                 //Сервер, TCP, IP и порт сервера
delay(1000);
printf("ATA2\r");                                            //Старт сервера
delay(1000);

Задержки можно убрать, если аппаратно контролировать получение ответа от модуля.

3. После подключения к точки доступа и к серверу на IP 192.168.1.200:5000 можно напрямую писать в UART, на приемной стороне будут те же данные. В дальнейшем работа получается как будто 2 устройства соединены напрямую по UART.
0
1) Опишу особенности режимов применительно к твоей задаче:
Infrastructure. Есть смысл использовать если оба твоих девайса будут подключаться в роутеру. Режим удобен тем, что для отладки можно к девайсам подключаться с компа TCP-клиентом.
Ad-hoc. Не юзал никогда, не занаю преимуществ.
Limited-AP. Удобно использовать если роутер в системе не предполагается (только 2 твоих девайса). При этом в данном режиме будет работать только одно из устройств (выполняя роль роутера, к которому можно подключить до 4-х абонентов). Второй девайс будет работать в режиме Infrastructure. В данном случае, так же можно компом подключаться к первому из девайсов (который в режиме Limited-AP)
2) Да один из вариантов TCP-сервер/TCP-клиент. Но он приемлем только если у сервера всегда один и тот же IP и клиент его знает. В частной задаче это легко обеспечить и тогда такой вариант самый простой. Иначе придется искать обходные пути (например, поиск бродкастом по UDP). Приведенный выше список команд поднимет точку доступа и TCP-сервер на одной из сторон. На другой стороне — нужно подключиться к этой сети и серверу. Последовательность команд похожа.
3) Тут зависит от задачи. Если IP сервера всегда постоянен, то проще всего использовать «прозрачный режим». В этом случае mrKirill , прав и «работа получается как будто 2 устройства соединены напрямую по UART»
0
Я прошу прощения за возможно глупые вопросы, просто я пока плохо ориентируюсь во всех этих делах…
Давайте подытожим:
На одном модуле подымаю TCP сервер в режиме Limited-AP, а на другом модуле TCP клиент в режиме Infrastructure, так?
Допустим что IP у сервера постоянен и известен.
Это и будет так называемый «прозрачный режим»?
0
Да, совершенно верно, один модуль Limited-AP, второй — Infrastructure, и будет «прозрачный режим».
0
Нет, вообще-то. Прозрачный режим это когда используется автоматический старт TCP сервера/клиента (команда ATA или ATA2). К способам аасоциации с сетью это не имеет отношение.
0
Тут некоторое недопонимание в мыслеизложении. Часть "… будет «прозрачный режим» немного не верно изложил, но комментарии редактировать нельзя.
0
Для упорядочивания понимания:
1.Infrastructure,Limited-AP и Ad-hoc это способы (режимы) ассоциации с сетью вайфай. Т.е. выбирая один из них ты определяешь кто будет точкой доступа, кто абонентам. Но не накладывает обязательств на то кто будет TCP сервером или клиентом.
2.TCP клиент или сервер — это уже способы взаимодействия в TCP/IP стеке.
3. «Прозрачный» и «обычный» это режим взаимодействия с самим wizfi.
0
Ниодин из этих пунктов не влияет на другой. Это типа… разные уровни что ли)))
0
Да как-то в связи с отсутствием интереса, энтузиазма поубавилось, вот и не дописал((.
Виноват… не по-пацански поступил. На вопросы ответил ниже.
0
Спасибо Вам за ответы!

Чем отличаются команды ATA и ATA2?
0
Навскидку не помню в чем отличие, но у меня для режима Limited-AP используется ATA2, а для Infrastructure — ATA.

Вообще, что касается команд, скачайте с официального сайта документ, там все расписано от и до.
0
ATA — сначала подключиться к вайфай сети а затем поднять TCP сервер (или клиент)

ATA2 — то же, но без подключения к вайфай сети
0
Еще раз всем спасибо!!!
Вроде бы разобрался… Сейчас жду второй модуль… Как придёт, буду стыковать их вместе и отпишусь что получилось.
Хотя наверняка в процессе появятся еще вопросы)))
0
А кстати, если ты не используешь роутер, а только закрытую экосистему из двух твоих устройств, то зачем тебе вообще вайфай? Подошел бы и радиоканал.
0
Просто в дальнейшем (лет эдак через 300-400))) планирую использовать несколько абонентов, а также возможность работы в уже развернутых WIFI сетах.
0
Не прошло и года))) все заработало!!! Данные побежали!!! Всем спасибо!
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.