Запускаем встраиваемый Wi-Fi с помощью модуля SPWF01SA.11
9 июня 2014
Необходимо организовать обмен данными между точками получения и обработки информации, т.е. так называемый «Интернет вещей», по сети Wi-Fi? Работающие в стандарте 802.11 b/g/n встраиваемые Wi-Fi-модули производства STMicroelectronics позволят сделать это даже в устройствах с маломощным процессором на борту.
Широкое распространение Wi-Fi-сетей делает эту технологию крайне привлекательной для использования в качестве «последней мили» для автоматизации как в повседневной жизни, так и в промышленности. Wi-Fi находит применение в таких приложениях как торговое оборудование, системы безопасности, медицинские приборы, промышленная телеметрия и бытовая техника.
Несмотря на то, что Wi-Fi-сеть работает на сравнительно небольших расстояниях 10…300 метров, передача данных возможна как на смартфон, расположенный рядом, так и на ПК на другом краю земного шара. Интернет-протоколы, естественным образом интегрированные в стандарт, делают возможной передачу данных с беспроводного Wi-Fi-устройства на любые современные гаджеты – персональные компьютеры, планшеты, ноутбуки и смартфоны – которыми сегодня пользуется большинство населения планеты. Растет число Wi-Fi-сетей на промышленных предприятиях – по данным IDC, в 2013 году рост рынка индустриальных Wi-Fi-сетей (Enterprise WLAN Market) составил около 15%.
До недавнего времени относительная дороговизна и сложность интеграции Wi-Fi-технологии ограничивала ее применение во встраиваемых приложениях. Новые Wi-Fi-модули SPWF01Sx производства компании STMicroelectronics кардинально меняют сложившийся порядок благодаря исключительной простоте интеграции и стоимости, соизмеримой со стоимостью радиомодулей Bluetooth и ZigBee.
SPWF01Sx – кратко о главном
Wi-Fi-модули SPWF01SA.11 и SPWF01SC.11 (рисунок 1) поддерживают стандарт 802.11 b/g/n и предназначены для создания приложений «Интернета вещей» (Internet of Things). Новые модули могут использоваться в промышленной телеметрии, системах безопасности, умном доме, медицине и интеллектуальном освещении. Модули могут работать в режимах Station, P2P (IBSS) и MiniAP, поддерживают различные протоколы безопасности – WEP, WPA-personal, WPA-2 Personal, WPA-Enterprise. Структурная схема модуля приведена на рисунке 2.
Интегрированный стек протоколов TCP/IP и встроенная файловая система позволяют с успехом применять модуль даже в тех устройствах, где на борту имеется относительно маломощный процессор. Для управления модулями используются обычные AT-команды, отправляемые по последовательному UART-интерфейсу. Набор текстовых команд позволяет использовать для управления модулем любую терминальную программу в процессе отладки (рисунок 3). Интересной особенностью модуля является возможность использовать его в качестве M2M WEB-сервера, для чего достаточно загрузить HTML-код страницы во FLASH- или RAM-память. Объем FLASH-памяти, отведенный под пользовательские файлы, равен 512 кбайт. Модуль может хранить и выдавать по запросу файлы любого типа – html, pdf, doc или jpg. Файлы можно размещать и в RAM-памяти, но тогда размер одного файла не может быть более 4096 байт. Файлы в RAM-память загружаются через UART, во FLASH – через Wi-Fi-сеть.
Взаимодействие как с UART, так и с портами GPIO может осуществляться через WEB-интерфейс любого браузера. Очень просто послать на выход UART-модуля текстовую строку, для чего достаточно обратиться к имеющейся в модуле странице cgi_demo.html (по IP-адресу модуля), напечатать в предложенном окне нужные символы и нажать кнопку «Submit» (рисунок 4). Можно управлять через Интернет портами ввода-вывода модуля – конфигурировать, задавать или считывать уровни, обратившись для этого к специальной странице remote.html.
Передача данных возможна через сокетные соединения TCP или UDP, при этом модуль выступает в качестве клиента. Можно одновременно открывать до восьми соединений. Модуль может работать в режиме прямого соединения с другим модулем или Wi-Fi-устройством без использования дополнительной точки доступа. Данный режим реализуется с помощью встроенного функционала MiniAP.
Технические характеристики
Производитель предлагает несколько вариантов исполнения модулей, отличающихся способом подключения антенны и установленным объемом FLASH-памяти (512 кбайт или 1,5 Мбайт).
Wi-Fi-модули SPWF01SA.11 и SPWF01SC.11 работают от единого источника с напряжением 3.1…3.6 В; потребление тока лежит в пределах от 25 мА в режиме сканирования до 250 мА в режиме передачи. Выходная мощность +18 дБм и чувствительность до -96 дБ позволяют оценить ожидаемую дальность связи в несколько сотен метров на открытом пространстве. Модули выполнены в SMD-исполнении с краевым расположением контактов, что делает возможной ручную пайку обычным паяльником. Модули работают в температурном диапазоне -40…85°C и отличаются только типом подключения радиочастотного выхода – на модуле SPWF01SA.11 установлена чип-антенна, в то время как к модулю SPWF01SС.11 через UFL-разъем должна подключаться внешняя антенна.
Технические характеристики модулей приведены в таблице 1.
Таблица 1. Технические характеристики SPWF01Sx.11
Стандарт | 802.11 b/g/n (BSS Station & miniAP) |
Выходная мощность, дБм | TX power: +18.3 (63 мВт) |
Чувствительность, дБм | RX sensitivity: -96 |
Режимы безопасности | None, WEP, WPA/WPA2-PSK, WPA-Enterprise |
Встроенные стеки протоколов | TCP/IP stack (IPv4); TCP/UDP — up to 8 clients; DHCP; DNS; Web Server/HTTP-client |
Программный интерфейс | AT-команды |
Объем FLASH/RAM и драйвер на внешнем микроконтроллере | Нет требований |
Интерфейсы | 16xGPIO, 3xUART, SPI, I2C |
Режимы энергопотребления, мА | 2.5 (Wakeup on event);15 (Standby, radio disabled);25 (Standby, WiFi Scanning); 92 (Connected, RX, Idle); 250 (Connected, TX) |
Напряжение питания, В | 3.1…3.6 |
Стабилизатор питания | Встроенный |
Низкочастотный LPO (32 кГц) | Встроенный |
Размеры, ШхДхВ, мм | 26.92×15.24×2.35 |
Температурный диапазон, °C | -40…85 |
Обновление прошивки | UART/ по эфиру (OTA – Over the Air) |
Сертификация | FCC/IC/CE-certified; RoHS-compliant |
Особенности интеграции SPWF01Sx
С точки зрения схемотехники подключение модуля к внешнему управляющему микроконтроллеру не представляет никакой сложности. Назначение выводов модуля описано в таблице 2. Схема подключения SPWF01SA.11 в минимальной конфигурации приведена на рисунке 5. Основной интерфейс управления – совместимый с уровнями 5 В полный UART с квитированием RTS/CTS и максимальной скоростью 921 кбит/с. При ограничении скорости обмена до 115 кбит/с можно ограничиться только линиями RXD1 и TXD1 (без подключения CTS1_DN, RTS1_DP), однако такое подключение производитель использовать не рекомендует. В будущих прошивках ожидается поддержка SPI c большей скоростью обмена данными.
Таблица 2. Назначение выводов
Имя сигнальной линии | Тип | Номер вывода |
Основная функция | Альтернативная функция1 | Примечание |
GPIO-линии ввода-вывода общего назначения | |||||
GPIO[0] | I/O | 16 | Порт ввода-вывода общего назначения; восстановление заводских настроек2 | SPI MISO | Вход подтянут к земле; вывод совместим с уровнем 5 В |
GPIO[1] | I/O | 17 | Порт ввода-вывода общего назначения | SPI MOSI | Вход подтянут к земле; вывод совместим с уровнем 5 В |
GPIO[2] | I/O | 19 | Порт ввода-вывода общего назначения | SPI Chip Select | Плавающий вход; выход совместим с уровнем 5 В |
GPIO[3] | I/O | 1 | Порт ввода-вывода общего назначения | SPI Clock | Вход подтянут к земле; вывод совместим с уровнем 5 В |
GPIO[6] | I/O | 22 | Порт ввода-вывода общего назначения; запрет режимов Wake Up/Sleep3 | ADC 0 | Вход подтянут к земле; вывод совместим с уровнем 5 В |
GPIO[4] | I/O | 18 | Порт ввода-вывода общего назначения | Вход данных UART34 | – |
GPIO[5] | I/O | 20 | Порт ввода-вывода общего назначения | Выход данных UART34 | – |
GPIO[7] | I/O | 13 | Порт ввода-вывода общего назначения; переключение режимов STA/Mini AP5 | ADC 1 | – |
GPIO[8] | I/O | 4 | Порт ввода-вывода общего назначения | Выход данных UART24; ADC2 | – |
GPIO[9] | I/O | 7 | Порт ввода-вывода общего назначения | Вход данных UART24; ADC3 | – |
GPIO[11] | I/O | 11 | – | I2C SCL | – |
GPIO[12] | I/O | 12 | Порт ввода-вывода общего назначения | I2C SDA | – |
GPIO[15] | I/O | 21 | Порт ввода-вывода общего назначения | DAC | – |
Мониторинг состояния без альтернативных функций | |||||
GPIO[10] | I/O | 5 | Светодиод | – | Мигает в режиме RUN |
GPIO[13] | I/O | 15 | Светодиод | – | – |
GPIO[14] | I/O | 14 | Светодиод | – | Отображение состояния питания |
Выводы интерфейса управления UART1 | |||||
RXD1 | I | 8 | Вход приема данных UART1 | – | Вывод совместим с уровнем 5 В |
TXD1 | O | 6 | Выход передачи данных UART1 | – | Вывод совместим с уровнем 5 В |
CTS1_DN | I | 9 | Вход «Clear To Send» UART1 | – | Активный низкий уровень; вывод совместим с уровнем 5 В |
RTS1_DP | O | 10 | Выход «Request to send» UART1 | – | Активный низкий уровень; вывод cовместим в уровнем 5 В |
Сброс | |||||
RESETn | I | 3 | Вход сброса | – | Для сброса требуется активный низкий уровень в течение 5 мс; вывод имеет внутреннюю подтяжку к 2,5 В и не совместим с уровнем 5 В |
Линии питания и земли | |||||
3.3 V | – | 24 | Напряжение питания | – | Развязывающий конденсатор 10 мкФ |
Ground | – | 23 | Земля | – | – |
Ground Paddle | – | 25 | Земляной полигон | – | Необходимо предусмотреть достаточное количество переходных отверстий для отвода тепла на земляной слой печатной платы |
Встроенный загрузчик (Boot loader) | |||||
BOOT0 | I | 2 | Boot loader6 | – | – |
Примечание:
- Активирование альтернативной функции зависит от версии внутреннего программного обеспечения (FW) модуля и установок переменных конфигураций
- Для возврата к заводским установкам вывод GPIO[0] должен быть в высоком состоянии во время подачи питания
- Функции GPIO работают, когда переменная «low power mode» разрешена
- Начиная с версии FW 3.0 AT FULL STACK
- Начиная с версии FW 3.0 AT FULL STACK. Для разрешения управления режимом STAT/MiniAP на вывод GPIO[7] нужно подать низкий уровень одновременно с подачей аппаратного сигнала сброса
- Для разрешения загрузки FW вывод BOOT должен быть в высоком состоянии во время подачи питания. Линия RESETn должна быть притянута к земле в течение, по меньшей мере, 5 мс для запуска внутреннего загрузчика.
К трем портам GPIO-модуля можно подключить светодиоды, которые будут показывать текущее состояние:
- GPIO[10] – светодиод индицирует режим RUN;
- GPIO[13] – светодиод индицирует режим WiFi Link up;
- GPIO[14] – светодиод показывает присутствие питания.
Сброс модуля производится нулевым уровнем длительностью не менее 5 мс по линии RESET, которая внутри модуля подтянута к источнику напряжения 2.5 В. Вывод RESET не совместим с напряжением 5 В (not 5V tolerant!).
Вывод BOOT0 позволяет активировать процесс обновления внутреннего программного обеспечения (Firmware Update) при подаче питания на модуль. Загрузка начинается в том случае, если при сбросе линия BOOT0 находится в высоком состоянии.
Модули SPWF01Sx имеют 30 краевых контактов с шагом 1.524 мм. Использована шестислойная печатная плата. В документации приводятся рекомендации по выбору профиля пайки.
Центральный полигон модуля Ground Paddle необходимо соединить с земляным полигоном платы с помощью достаточного количества переходных отверстий, т.к. он также выполняет функцию отвода тепла. В связи с тем, что центральный полигон модуля имеет относительно большой размер 10х8 мм, следует консультироваться с технологами при выборе размера переходных отверстий и геометрии паяльной маски.
Вокруг антенны желательно оставлять свободное пространство без элементов и сигнальных/земляных линий. Дополнительные рекомендации и диаграмму направленности можно найти в документации на установленную на модуле антенну A5839.
Управление Wi-Fi-модулем
Управление всеми возможностями модуля производится с помощью текстовых AT-команд и похоже на способ управления GSM-модемом со встроенным TCP-стеком. Перечень AT-команд приведен в таблице 3. Полный перечень интерфейсных сообщений, которые возможны между управляющим микроконтроллером и модулем, состоит из:
- AT-команд;
- конфигурационных переменных (configuration variables);
- переменных статуса модуля (status variables);
- асинхронных незапрашиваемых сообщений (unsolicited responses или WINDS).
На рисунке 6 показаны направления движения различных интерфейсных сообщений.
Асинхронные незапрашиваемые сообщения могут приходить в произвольные моменты времени и имеют следующий вид:
<cr><lf>+WIND:<номер>:<описательная часть><cr><lf>
где
<номер> – это уникальный номер для каждого типа сообщения
<описательная часть> – текстовое пояснение (может отсутствовать)
<cr><lf> – коды 0х13 и 0х10 (HEX)
После подачи питания модуль выдает несколько незапрашиваемых сообщений, которые отражают различные стадии инициализации аппаратной и программной части, например:
+WIND:1:Poweron (140128-caf4b79-SPWF01S)
+WIND:13:ST SPWF01SA IWM: Copyright (c) 2012-2014 STMicroelectronics, Inc. All rights Reserved.
+WIND:3:Watchdog Running
+WIND:0:Console active
+WIND:32:WiFi Hardware Started
+WIND:21:WiFi Scanning
+WIND:35:WiFi Scan Complete (0x0)
+WIND:19:WiFi Join: 6A:09:27:7C:98:D5
+WIND:25:WiFi Association with ‘iPhone POI’ successful
+WIND:51:WPA Handshake Complete
+WIND:24:WiFi Up: 172.20.10.3
Модуль готов принимать AT-команды только после появления сообщения +WIND:0:Console active
AT-команды управления имеют следующий вид:
AT<cd><cr> – посылается от управляющего МК в модуль SPWF
<пусто или несколько линий ответа> – посылается от SPWF к МК (опционально)
<cr><lf><код ответа><cr><lf> – посылается от SPWF к МК (опционально)
<код ответа> может иметь следующий вид:
OK
ERROR: <описательная часть>
Таблица 3. Примеры AT-команд управления модулем
Разные команды | |
AT | Внимание (Attention) |
AT+S.HELP | Вывести страницу подсказки |
AT+S.FWUPDATE | Обновление встроенного ПО |
AT+S.WIFI | Разрешить/Запретить Wi-Fi |
AT+CFUN | Смена текущего режима работы (cброс) |
AT+S.MFGTEST | Тест для процесса производства |
AT+S.PEMDATA | Конфигурирование хранилища серитфикатов |
AT+S.ECHO | Возвращать «ЭХО» на последовательный порт |
AT+S.HTTPDFSUPDATE | Обновить файловую систему static HTTPD |
Конфигурирование | |
AT+S.GCFG | Прочитать текущее конфигурационное значение |
AT+S.SCFG | Установить переменную конфигурации |
AT+S.SSIDTXT | Установить текстовое значение SSID |
AT+S.STS | Получить текущие состояния/статистика |
AT&V | Отобразить все конфигурационные значения |
AT&F | Восстановить заводские настройки |
AT&W | Сохранить текущие настройки |
AT+S.NVW | Записать производственные настройки |
Управление файлами | |
AT+S.FSC | Создать файл |
AT+S.FSA | Добавить к существующему файлу |
AT+S.FSD | Удалить существующий файл |
AT+S.FSL | Показать список имен файлов |
AT+S.FSP | Распечатать содержимое файла |
Сетевые команды | |
AT+S.PING | Послать ping на определенный адрес |
AT+S.SCAN | Сканировать каналы |
AT+S.HTTPGET | Выдать запрос HTTP GET |
AT+S.ROAM | Переподключение к Wi-Fi |
AT-команды можно вводить как в нижнем, так и в верхнем регистре. В аргументах команды прописные и строчные символы различаются (case sensitive). Максимальная длина команды не может превышать 127 символов. После отсылки первого символа AT-команды «A», выдача незапрашиваемых сообщений блокируется и разрешается вновь после завершения ввода команды.
Конфигурационные переменные – это набор значений, которые определяют режим работы модуля. Каждую переменную можно отдельно записывать командой AT+S.SCFG и считывать командой AT+S.GCFG. Пример чтения собственного IP-адреса модуля:
AT+S.SCFG=ip_addr<cr>
# ip_ipaddr = 192.168.240.111
OK
Для вывода списка всех переменных вместе с установленными значениями можно воспользоваться командой AT&V. Выдаваемый список зависит от версии firmware и может выглядеть, например, таким образом:
AT&V
# Dumping All Configuration Keys:
# nv_manuf = ST
# nv_model = SPWF01SA
# nv_serial = 3513D23094
# nv_wifi_macaddr = 00:80:E1:FF:92:7B
# blink_led = 1
# user_desc = anonymous
# localecho1 = 1
# console_uart = 1
# console1_speed = 115200
# console1_hwfc = 0
# console1_enabled = 1
# console2_speed = 115200
# console2_enabled = 0
# localecho2 = 1
# console3_enabled = 0
# console3_speed = 115200
# localecho3 = 1
# wifi_tx_msdu_lifetime = 0
# wifi_rx_msdu_lifetime = 0
# wifi_rts_threshold = 3000
# wifi_ssid = 69:50:68:6F:6E:65:20:50:4F:49:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
# wifi_ssid_len = 10
# wifi_mode = 1
# wifi_auth_type = 0
# wifi_rssi_thresh = 0
# wifi_rssi_hyst = 0
# wifi_ap_idle_timeout = 120
# wifi_beacon_loss_thresh = 10
# wifi_priv_mode = 2
# wifi_wep_keys[0] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
# wifi_wep_keys[1] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
# wifi_wep_keys[2] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
# wifi_wep_keys[3] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
# wifi_wep_key_lens = 00:00:00:00
# wifi_wep_default_key = 0
# wifi_wpa_psk_raw = 38:E1:53:A7:F2:B0:6B:D6:7F:0D:95:4A:65:01:D3:24:62:F7:57:40:72:F9:7F:20:6E:24:E7:99:7B:6F:0D:06
# wifi_wpa_psk_text = oleglena
# ip_use_dhcp = 1
# ip_use_httpd = 1
# ip_mtu = 1500
# ip_hostname = iwm-FF-92-7B
# ip_apdomainname = captiveportal.net
# ip_ipaddr = 192.168.0.50
# ip_netmask = 255.255.255.0
# ip_gw = 192.168.0.1
# ip_dns = 192.168.0.1
# ip_http_get_recv_timeout = 2000
# ip_dhcp_timeout = 20
OK
После установки одной или нескольких конфигурационных переменных с помощью команды AT+S.SCFG<имя переменной>,<значение> их обязательно нужно сохранить в энергонезависимой памяти модуля с помощью команды AT&W. Новые значения будут применены только после перезагрузи модуля, что можно сделать как отключением-включением питания, так и по команде AT+CFUN=1<cr>
Переменные статуса можно только считывать, они отображают статистику и различные параметры текущего состояния модуля – причину последнего сброса, время работы с момента подачи питания, IP-настройки и другие (зависит от версии firmware), например:
AT+S.STS
# Status & Statistics:
# version = 140128-caf4b79-SPWF01S
# reset_reason = 0
# conf_flag = 5
# system_uptime = 2745
# system_sleeptime = 0
# gpio_enable = 0
# captiveportal = 0
# wifi_sup_ratemask = 0x003FFFCF
# wifi_bas_rate_mask = 0x00000540
# wifi_state = 10
# wifi_dtim_period = 3
# wifi_gf_mode = 0
# wifi_channelnum = 1
# wifi_chan_activity2 = 0x00003FFE
# wifi_max_tx_power = 18
# wifi_reg_country = TW
# wifi_num_assoc = 0
# ip_ipaddr = 172.20.10.3
# ip_netmask = 255.255.255.240
# ip_gw = 172.20.10.1
# ip_dns = 172.20.10.1
# free_heap = 25144
# min_heap = 23336
# current_time = 2745
OK
Описание всех AT-команд выходит за рамки данной статьи. Далее на основе реальных примеров рассмотрим порядок настройки и организацию передачи данных с помощью модуля PWF01SA.11 с заводскими настройками («из коробки»).
Сканирование сети
После подачи питания модуль сканирует эфир и пытается подключиться к сети, имя которой (SSID) и параметры шифрования заранее прописаны в модуль. На заводе в модуль заносятся значения по умолчанию. Нужные пользователю настройки можно сделать по UART с помощью команды AT+S.SSIDTXT и соответствующих команд установки конфигурационных переменных.
Посмотреть список окружающих Wi-Fi-сетей типа Infrastructure (AP) и IBSS (Ad-Hoc) позволяет команда AT+S.SCAN, которая отображает имя каждой сети, тип, канал, силу сигнала и т.п (рисунок 7).
Реальный список найденных сетей может выглядеть таким образом:
FOUND: BSS 00:0E:8F:F5:70:A4 CHAN: 01 RSSI: -65 SSID: ‘MGTS_GPON_5199’ CAPS: 0411 WPA: 0 WPA2: 20
FOUND: BSS 00:16:CA:F5:1B:E1 CHAN: 01 RSSI: -89 SSID: ‘Beeline_WiFi’ CAPS: 0421 WPA: 0 WPA2: 0
FOUND: BSS 00:16:CA:F5:1B:E2 CHAN: 01 RSSI: -89 SSID: ‘Beeline_WiFi_WPA’ CAPS: 0431 WPA: 22 WPA2: 24
FOUND: BSS 4C:60:DE:E3:61:F2 CHAN: 05 RSSI: -86 SSID: ‘netgear’ CAPS: 0411 WPA: 22 WPA2: 24
FOUND: BSS 00:1F:C6:27:F9:3D CHAN: 06 RSSI: -51 SSID: ‘WL500gP_UYME’ CAPS: 0411 WPA: 0 WPA2: 20
FOUND: BSS F8:C0:91:13:D1:07 CHAN: 09 RSSI: -82 SSID: ‘Akado458’ CAPS: 0411 WPA: 22 WPA2: 0
FOUND: BSS CC:5D:4E:4D:EE:4A CHAN: 11 RSSI: -87 SSID: ‘ZyXEL_KEENETIC_GIGA_4DEE4A’ CAPS: 0411 WPA: 0 WPA2: 24
Пример работы
После первого включения модуль постоянно сканирует сеть, но не может никуда подключиться, т.к. пользовательские настройки не введены:
+WIND:21:WiFi Scanning
+WIND:35:WiFi Scan Complete (0x0)
+WIND:21:WiFi Scanning
+WIND:35:WiFi Scan Complete (0x0)
…
Первые команды даем, когда модуль сам сканирует сеть, но пока не может никуда подключиться, т.к. настройки модуля по умолчанию не соответствуют найденным Wi-Fi-сетям. Подаем следующие команды:
- Задаем SSID точки доступа: AT+S.SSIDTXT=WL500gP_UYME
- Задаем пароль шифрования: AT+S.SCFG=wifi_wpa_psk_text,abcdef123
- Задаем режим шифрования WPA2-Personal: AT+S.SCFG=wifi_priv_mode,2
- Задаем режим работы – подключение к точке доступа (STA): AT+S.SCFG=wifi_mode,1
- Задаем тип адреса – получать будет по DHCP: AT+S.SCFG=ip_use_dhcp,1
- Сохраняем новые настройки в энергонезависимой памяти: AT&W
- Перегружаем модуль, что бы новые настройки вступили в силу: AT+CFUN=1
- Модуль перегружается:
+WIND:2:RESETð<0>
+WIND:1:Poweron (1203-121218_01-50-g511fab4-stm_demo)
+WIND:13:Sagrad IWM: Copyright (c) 2012 Sagrad, Inc. All rights Reserved.
+WIND:3:Watchdog Running
+WIND:0:Console active
+WIND:46:WPA: Crunching PSK…
+WIND:32:WiFi Hardware Started
+WIND:21:WiFi Scanning
+WIND:35:WiFi Scan Complete (0x0)
+WIND:19:WiFi Join: 00:1F:C6:27:F9:3D
+WIND:25:WiFi Association with ‘WL500gP_UYME’ successful
+WIND:51:WPA Handshake Complete
+WIND:24:WiFi Up: 192.168.1.9
Есть результат! Наш модуль успешно подключился к Wi-Fi-точке доступа и получил IP-адрес 192.168.1.9. Теперь при каждом включении модуль будет искать требуемую сеть и подключаться к ней автоматически. Процесс подключения занимает примерно 5…10 секунд.
Работа с файлами
Файловая система подразумевает манипулирование файлами как в RAM, так и во FLASH-памяти модуля SPWF01Sx. Загрузка файлов во FLASH-память производится по эфиру через внешний HTTP-сервер. Командой AT+S.HTTPDFSUPDATE отправляется запрос HTTP GET к удаленному HTTP-серверу. Полученный файл (или сразу набор файлов) сохраняется во FLASH-памяти. В нее можно загружать файлы любого типа (HTML, PDF, DOC, JPEG). Максимальная емкость файлов составляет 512 кбайт.
Файлы в RAM-память загружаются локально, через UART. Команда AT+S.FSC создает HTML-файл в RAM-памяти модуля. По этой команде файлу лишь присваивается имя и резервируется место в указанном в команде объеме. В связи с ограниченной емкостью RAM максимальная длина файла не может превышать 4096 байт. Создаваемый файл должен включать полноценный заголовок HTTP-ответа и собственно контент страницы, который будет отображаться в WEB-браузере клиента. В модуле есть несколько предустановленных статических файлов, которые нельзя удалить из памяти, но содержимое этих файлов можно менять путем перезаписи. Добавление данных в существующий файл производится с помощью команды AT+S.FSA, в которой указывается имя файла и число записываемых байтов. После подачи команды модуль принимает по UART указанное в команде количество байтов. Команда AT+F.FSD удаляет существующий файл (статический файл удалить нельзя). Просмотреть список всех файлов можно с помощью команды AT+S.FSL, например, он может выглядеть таким образом (зависит от версии firmware):
AT+S.FSL=
I 456 /input_demo.shtml
I 324 /cgi_demo.html
I 167 /message.shtml
I 547 /index.html
I 193 /config.shtml
I 174 /status.shtml
I 213 /404.html
I 2018 /firstset.html
I 2425 /remote.html
OK
Просмотреть содержимое любого файла, сохраненного в модуле, можно локально через UART командой AT+S.FSP. Например:
AT+S.FSP=/message.shtml
<html><head><title>Message</title></head><body bgcolor=«white» text=«black»><h1>Message for client from SPWF01S</h1><pre><!—#message—></pre></body></html>
OK
AT+S.FSP=/input_demo.shtml
<html><head><title>Power Demo</title></head><body bgcolor=«white» text=«black»> <p>Power load: <!—#input—> </p> <p> <br/><br/>Again?<br/> <form name=«CGI Uart» method=«GET» action=«/input.cgi»> <input type=«radio» name=«input» value=«on»/>Yes, one more time. Please<br/> <input type=«radio» name=«input» value=«off»/>No, thanks. Bring me to HomePage<br/> <input type=«submit» name=«submit» value=«Submit» > </form> </p></body></html>
OK
При обращении к главной странице модуля в браузере будет показано следующее (рисунок 8):
Работа с сокетами
Прием и передача данных возможна по протоколам TCP и UDP в качестве клиента. Команда AT+S.SOCKON открывает сокет по заданному IP-адресу и номеру порта. Одновременно можно открыть до восьми сокетов. Каждому открытому сокету присваивается числовой идентификатор (ID), по которому происходит обращение к сокету для записи/чтения данных. Прием и передача данных проходит с помощью AT-команд записи и чтения N-байт, т.е. работа идет не в прозрачном режиме. Для записи данных в сокет в AT-команде указывается ID открытого сокета и число отправляемых байтов. После подачи команды (после кода <CR>) модуль ожидает получения через UART заданного числа символов. Отправка данных через сеть начнется лишь после получения модулем объявленного числа отправляемых байтов.
О поступлении данных модуль уведомляет внешний микроконтроллер с помощью незапрашиваемого сообщения +WIND:55, где указывается ID сокета и число пришедших извне данных (рисунок 9).
Для выдачи данных по UART сначала можно запросить командой AT+S.SOCKQ число байтов в приемном буфере открытого сокета (по ID), а затем командой AT+S.SOCKR вычитать все или часть данных. Задание числа выдаваемых модулем байтов позволяет обрабатывать полученные данные частями, даже с помощью 8-битного управляющего микроконтроллера с ограниченным объемом ОЗУ. Для закрытия сокета c заданным ID предусмотрена команда AT+S.SOCK.
Дополнительные команды
Для проверки прохождения пакетов до конкретного узла используется команда AT+S.PING=192.168.1.1 (адрес может быть любой). Для получения HTML-страницы с какого-либо сайта необходимо сформировать команду HTTP GET с помощью AT-команды AT+S.HTTPGET=host.example.com,/index.html (адрес выбран произвольно). Через UART модуля выводится как отправляемый HTTP GET-запрос, так и полученный ответ – содержимое HTML-страницы или сообщение об ошибке. Следует понимать, что современные страницы имеют достаточно сложную структуру, и получить содержимое всех полей с помощью однократного запроса GET невозможно. Данная команда хорошо работает лишь с простыми страницами.
Режим MiniAP
Режим работы в качестве точки доступа (режим MiniAP) позволяет подключить к модулю другой SPWF01Sx-модуль или любого Wi-Fi-клиента даже вне зоны действия полноценной точки доступа или Wi-Fi-роутера. Этот режим позволяет осуществить прямое соединение модуля с конечным оборудованием. Работающий в режиме MiniAP модуль виден как обычная Wi-Fi-сеть, к которой можно произвести подключение. На момент написания статьи Firmware модуля позволяло подключать только одного клиента. Подключенный к модулю клиент может открывать сохраненные на модуле HTML-страницы, передавать данные на выход UART-интерфейса и управлять GPIO-портами на модуле.
Режим MiniAP можно использовать для настройки параметров модуля через WEB-браузер, как альтернативный вариант для отправки команд локально через UART. В этом случае конечное устройство со встроенным Wi-Fi-модулем может не иметь клавиатуры или иного пользовательского интерфейса управления для ввода SSID и пароля.
Управление GPIO-портами
Удаленное управление портами ввода-вывода возможно через статическую страницу remote.html. Здесь можно настроить направление порта (ввод-вывод), установить или считать значение (рисунок 10).
Локальные манипуляции с выводами GPIO можно производить по UART c помощью команды AT+S.GPIOC.
Обновление внутреннего ПО
Как и любой другой технически сложный продукт, Wi-Fi-модули производства компании STMicroelectronics имеют возможность обновления своего внутреннего программного обеспечения (firmware, прошивки), которое постоянно обновляется. Инженеру рекомендуется обновить имеющиеся у него на руках модули для того чтобы в разработке использовалось самое последнее доступное firmware.
Обновление прошивки производится через последовательный интерфейс UART или удаленно по эфиру, через WEB-сервер.
Для локального обновления через UART существует специальная Windows-утилита FLASH Loader Demonstrator, которую можно найти на сайте производителя. Для инициации процесса загрузки используется специальный вывод модуля «Boot», который нужно притянуть к 3.3 В и затем подать питание на модуль. При этом в модуле инициируется внутренний загрузчик, который взаимодействует с утилитой, запущенной на ПК. Файл прошивки имеет расширение .bin, его размер составляет примерно 420 кбайт. Еще один способ загрузки прошивки – использовать специальную консольную программу 123flash.exe. Файл прошивки можно получить, обратившись в компанию КОМПЭЛ. Разработчику рекомендуется предусматривать возможность локального обновления firmware в конечном изделии, хотя бы в качестве резервного варианта.
Процесс обновление Firmware c помощью утилиты Flash Loader приведен на рисунках 11а-11е.
Рис. 11.Обновление прошивки
Обновление прошивки по эфиру выполняется с помощью команды AT+S.FWUPDATE. В команде указывается путь к сайту, где должен быть выложен файл с новой прошивкой. Модуль формирует единичный запрос HTTP GET, получает файл, проверяет его валидность и сохраняет во временном хранилище в памяти. Для завершения обновления требуется перегрузить модуль.
Заключение
Разумеется, Wi-Fi не является универсальным беспроводным стандартом, который лучше всех подходит для любых приложений. Правильная технология – это всегда компромисс между такими параметрами как дальность, пропускная способность, энергопотребление, топология, цена и совместимость. Достоинства Wi-Fi – в отличной совместимости с существующим оборудованием, криптозащите, высокой скорости передачи данных и, благодаря таким модулям как SPWF01SC.11, простоте интеграции. Оборотной стороной является повышенный ток потребления, ограниченная дальность радиоканала и слабая поддержка спящих режимов, если речь идет о годах работы от батарей. Тем не менее, во многих случаях встроенный Wi-Fi будет лучшим решением, по сравнению с Bluetooth, ZigBee или фирменными протоколами отдельных производителей
Получение технической информации, заказ образцов, заказ и доставка.
Наши информационные каналы