Пользователь
0,0
рейтинг
26 ноября 2014 в 18:49

Wi-Fi-лампочка на базе модуля WizFi250 из песочницы

Wi-Fi lamp

Пока лучшие мировые умы спорят о путях развития Интернета Вещей и обещают баснословные прибыли вовлеченным в этот процесс высокотехнологичным компаниям, мы решили тоже не сидеть сложа руки. Под катом – рассказ о макетировании устройства управления лампочкой на базе Wi-Fi-модуля WizFi250.

Сначала немного о самом Wi-Fi-модуле WizFi250. Внешний вид – на фото:

WizFi250



Модуль поддерживает стандарты IEEE 802.11b/g/n и управляется AT-командами через UART (или SPI) или через WEB-интерфейс. Полное описание AT-команд WizFi250 можно найти здесь.

У модуля есть PCB-антенна, но предусмотрено подключение и внешней антенны. Переключение между антеннами — автоматическое или командой AT+WANT. PCB-антенну можно отрезать (перфорация имеется) – тогда размеры модуля уменьшатся до 17 х 20 мм.

Проводные интерфейсы: UART, SPI, GPIO.

Производитель – WizNet, Корея, вот даташит модуля WizFi250.

Для тестирования есть платы в стиле Arduino UNO Wi-Fi шильд:



Но именно «в стиле», так как для совместного с Arduino использования их нужно немного доработать. Вот такую плату мы и будем использовать при макетировании в связке с платой Arduino UNO.

В целом, план такой: для связи по Wi-Fi использовать модуль WizFi250, для управления модулем и лампочкой – Arduino UNO, команды управления передавать с телефона или планшета по Wi-Fi в виде пакетов UDP или TCP.

Да, кстати, у модуля предусмотрены 2 полезных индикаторных вывода:

1) WiFi_STATUS: низкий уровень — Wi-Fi запущен, высокий уровень – Wi-Fi выключен.
2) MODE_STATUS: высокий уровень – режим команд (Command Mode), низкий уровень – режим данных (Data Mode).

На отладочной плате эти сигналы выведены на светодиоды “Wi-Fi” и “Mode” соответственно, что удобно при отладке.

Напряжение питания WizFi250 и входы-выходы – 3,3 В. Arduino UNO – пятивольтовый, т. е. для управления Wi-Fi модулем нужно согласовать уровни. На отладочной плате WizFi250 установлено две микросхемы четырехканальных преобразователей уровней TXS0104EPWR, одна из которых, IC4, используется для интерфейса SPI, другая, IC5 — для сигналов RESET и GPIO14 Wi-Fi модуля. А вот преобразование уровней интерфейса UART на отладочной плате WizFi250 почему-то не предусмотрено… Именно это я и имел ввиду, когда писал про небольшую доработку.

По идее для преобразования уровней линий Rx и Tx UART можно попробовать использовать оставшиеся два канала преобразователя IC5, но припаиваться к тонким ножкам микросхемы преобразователя уровней и модифицировать отладку не хотелось, поэтому мы воспользовались старым дедовским способом преобразования уровней сигналов при помощи пары транзисторов:



Схемы простые, может быть единственная хитрость — в использовании резистора 1кОм (R3) на выходе преобразователя 5В -> 3,3В. При использовании резистора большего номинала схема работает некорректно, всязано это с тем, что в одной точке встречаются два выхода: микросхемы FTDI FT232 и нашей самоделки. Не есть хорошо, но для макета вполне приемлемо.
В результате наша отладочная плата WizFi250 с самодельным Voltage Level Translator выглядела следующим образом:



Модуль может работать в двух режимах: точки доступа (AP, Access Point, когда к нему подключаются другие Wi-Fi-устройства) или клиента (STA, Station, когда он сам подключается к точке доступа).

Можно задавать разные настройки безопасности (шифрования), включать/выключать внутренний WEB-сервер.
Модуль поддерживает режимы UDP Server/Client, TCP Server/Client, TCP Secured Server/Client (используется SSL).
Может устанавливаться или режим данных (Data Mode, прозрачный режим, на UART модуля выдаются чистые данные, которые приходят по TCP или UDP, модуль команды управления не воспринимает), или командный режим (Command Mode, данные посылаются и выдаются на UART в «обертках», модуль продолжает воспринимать команды). Переход из режима данных в режим команд – с помощью традиционных +++.

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

Вот пара примеров инициализации модуля:

1. Если нам нужен режим точки доступа, UDP сервер и режим данных, последовательность команд инициализации будет такая:
  • AT+WSET=1,WizFi250 – задаем режим точки доступа с названием WizFi250
  • AT+WSEC=1,WPA2,12345678 – задаем режим безопасности и пароль
  • AT+WNET=0,192.168.10.1,255.255.255.0,0.0.0.0 – прописываем IP-адрес и маску подсети (в случае точки доступа первый и последний параметры игнорируются)
  • AT+WJOIN – запускаем Wi-Fi
  • AT+SCON=O,USN,,,7777,1 – запускаем UDP сервер, порт 7777, режим данных.


2. Если нужен режим клиента, TCP сервер и режим команд:
  • AT+WSCAN=WizFi250 – сканирование точки доступа с именем WizFi250
  • AT+WSET=0,WizFi250 – задаем режим станции, название точки доступа
  • AT+WSEC=0,WPA2,12345678 – прописываем режим безопасности, пароль
  • AT+WNET=0,192.168.10.2,255.255.255.0,192.168.10.1 – DHCP выключен, IP-адрес, маска подсети, шлюз
  • AT+WJOIN – соединяемся с точкой доступа
  • AT+SCON=O,TSN,,,7777,0 – запускаем TCP сервер, порт 7777, режим команд

После инициализации Wi-Fi-модуля нам остается только анализировать данные, поступающие от модуля по UART, и включать или выключать нашу лампочку в случае поступления соответствующих команд.
Ардуиновский скетч вряд ли имеет смысл здесь приводить: он максимально упрощенный и не думаю, что кому-то будет полезен/интересен.

Схема коммутации лампочки состоит из пятивольтового реле, транзисторного ключа и пары дискретных компонентов:



В качестве управляющего выхода Arduino использовался GPIO 13 (строка инициализации: pinMode(13, OUTPUT);)
В целом макет получился такой:



В черной коробочке – источник питания ~220В -> =9В.

Для быстрого тестирования управления лампочкой с планшета или смартфона под Android можно использовать готовые программы, способные отсылать пакеты TCP/UDP, например UDP Sender или TCP/UDP Server. Аналогично – для iOS.
В целом тестирование показало, что даже при использовании простейших алгоритмов можно добиться устойчивой работы системы.

Другие варианты – использование возможностей встроенного WEB-сервера модуля по управлению GPIO (5 шт.) и возможность кастомизации прошивки модуля производителем. Оба варианта интересны тем, что позволят обойтись без внешнего контроллера/процессора. Но это уже другая история.

*Небольшое видео — в комментариях.
@ZAQWERTY
карма
9,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

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

  • 0
    Похожее делаю на модуле ESP8266.
    Одним из существенных плюсов — возможность создания собственной прошивки для модуля. Сразу отбрасывается ардуинка.
    По Вашему проекту:
    Конвертер уровней нужен в 1 сторону — от TX ардуины на RX модуля. В обратном направление хватает уровня 2.7 — 3.3v.
    Реле используете для развязки высоковольтной сети?
    • 0
      Да, вероятно, 3,3В хватит, но сделали «по-честному»)
      Реле — для развязки. Если подскажите другой вариант — с удовольствием почитаю/попробую!
      • 0
        оптопара + симистор — вот первое что приходит на ум.
        • 0
          Спасибо, Fill.
          Если не ошибаюсь, так, как Вы описали, твердотельные реле и устроены?
          Твердотельное реле как раз недавно заказали, ждем-с!
  • 0
    Меня во всём этом всегда печалит необходимость в преобразовании 220В в постоянный ток приемлемого напряжения. Есть у всемогущих китайцев что-то взамен «черной коробочки», компактное и достаточно безопасное?
    • +1
      Вместо черной коробки как вариант: Arch
      • 0
        Неплохо.
  • 0
    Обещанное небольшое видео:

  • 0
    Мда… На самом деле на ESP8266 без всяких ардуин легко реализуется при минимуме движений. Главное размер схемы будет намного меньше.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.