WiFi (Troyka-модуль)

Wi-Fi (Troyka-модуль) на модуле ESP-12 с чипом ESP8226EX позволит передать данные по Wi-Fi сети.

Видеообзор

Общие сведения

По умолчанию модуль настроен на работу через «AT-команды». Управляющая плата посылает команды — Wi-Fi модуль выполняет соответствующую операцию.

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

Работа с AT командами

Подключение и настройка

В стандартной прошивке Troyka Wi-Fi общается с управляющей платой через «AT-команды» по протоколу UART. Дополнительный сигнальный пин P служит для перевода модуля в режим сна или пониженного энергопотребления.

На всех платах Iskra и Arduino присутствует хотя бы один аппаратный UART — HardwareSerial. Если же по каким то причинам он занят другим устройством, можно воспользоваться программным UART — SoftwareSerial.

HardwareSerial

На управляющей плате Iskra JS и Arduino платах с микроконтроллером ATmega32U4 / ATSAMD21G18, данные по USB и общение через пины 0 и 1 осуществляется через два раздельных UART. Это даёт возможность подключить Wi-Fi модуль к аппаратному UART на пинах 0 и 1.

Список поддерживаемых плат:

При подключении удобно использовать Troyka Shield. С Troyka Slot Shield можно обойтись без лишних проводов. Прошейте управляющую платформу кодом ниже.

Код прошивки
HardwareSerialAT115200.ino
// serial-порт к которому подключён Wi-Fi модуль
#define WIFI_SERIAL    Serial1
 
void setup()
{
  // открываем последовательный порт для мониторинга действий в программе
  // и передаём скорость 9600 бод
  Serial.begin(9600);
  while (!Serial) {
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  }
  Serial.print("Serial init OK\r\n");
  // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод
  WIFI_SERIAL.begin(115200);
}
 
void loop()
{
  // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера
  if (WIFI_SERIAL.available()) {
    Serial.write(WIFI_SERIAL.read());
  }
  // если приходят данные из компьютера - отправим их в Wi-Fi модуль
  if (Serial.available()) {
    WIFI_SERIAL.write(Serial.read());
  }
}

SoftwareSerial

Некоторые платы Arduino, например Arduinio Uno, прошиваются через пины 0 и 1. Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с Wi-Fi модулем. Решение проблемы — программный UART. Подключите пины TX и RX Troyka Wi-Fi к другим контактам управляющей платы и используйте библиотеку SoftwareSerial.

Для примера подключим управляющие пины Wi-Fi модуля TX и RX — на 8 и 8 контакты управляющей платы.

При подключении удобно использовать Troyka Shield. Прошейте управляющую платформу кодом ниже.

Код прошивки
SoftwareSerialAT115200.ino
// библиотека для работы программного Serial
#include <SoftwareSerial.h>
 
// создаём объект для работы с программным Serial
// и передаём ему пины TX и RX
SoftwareSerial mySerial(8, 9);
 
// serial-порт к которому подключён Wi-Fi модуль
#define WIFI_SERIAL    mySerial
 
void setup()
{
  // открываем последовательный порт для мониторинга действий в программе
  // и передаём скорость 9600 бод
  Serial.begin(9600);
  while (!Serial) {
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  }
  Serial.print("Serial init OK\r\n");
  // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод
  WIFI_SERIAL.begin(115200);
}
 
void loop()
{
  // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера
  if (WIFI_SERIAL.available()) {
    Serial.write(WIFI_SERIAL.read());
  }
  // если приходят данные из компьютера - отправим их в Wi-Fi модуль
  if (Serial.available()) {
    WIFI_SERIAL.write(Serial.read());
  }
}

HardwareSerial Mega

На платах форм-фактора Arduino Mega 2560 аппаратный UART, который отвечает за передачу данных через пины 1 и 0, отвечает также за передачу по USB. Это означает невозможность использовать одновременно UART для коммуникации с GPS-модулем и отладки по USB.

Но на платах такого форм-фактора есть ещё дополнительно три аппаратных UART:

  • Serial1: пины 19(RX1) и 18(TX1);
  • Serial2: пины 17(RX2) и 16(TX2);
  • Serial3: пины 15(RX3) и 14(TX3).

Список поддерживаемых плат:

Подключите Wi-Fi модуль к объекту Serial1 на пины 18 и 19 на примере платы Arduino Mega 2560 Прошейте управляющую платформу кодом ниже.

Код прошивки
HardwareSerialAT115200.ino
// serial-порт к которому подключён Wi-Fi модуль
#define WIFI_SERIAL    Serial1
 
void setup()
{
  // открываем последовательный порт для мониторинга действий в программе
  // и передаём скорость 9600 бод
  Serial.begin(9600);
  while (!Serial) {
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  }
  Serial.print("Serial init OK\r\n");
  // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод
  WIFI_SERIAL.begin(115200);
}
 
void loop()
{
  // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера
  if (WIFI_SERIAL.available()) {
    Serial.write(WIFI_SERIAL.read());
  }
  // если приходят данные из компьютера - отправим их в Wi-Fi модуль
  if (Serial.available()) {
    WIFI_SERIAL.write(Serial.read());
  }
}

Примеры работы

Рассмотрим несколько примеров по работе с «AT-командами»

Тестовая команда «AT»

Откройте монитор порта. Настройте скорость соединения — 9600 бод. Конец строки — NL & CR. Введите команду AT и нажмите «Отправить». Это — базовая команда для проверки работы Wi-Fi модуля. В ответ получим «OK»: Если ответа нет или появляются непонятные символы — проверьте правильность подключения и настройки скорости обмена данными.

Настройка режима работы

Wi-Fi модуль умеет работать в трёх режимах:

  • Режим точки доступа
  • Режим клиента
  • Смешанный режим

Переведём чип в смешанный режим командой:

AT+CWMODE_DEF=3

После установки модуль должен ответить «OK»:

В отличии от аппаратного UART (HardwareSerial), за работу программного UART (SoftwareSerial) отвечает микроконтроллер, который назначает другие пины в режим работы RX и TX, соответственно и данные которые приходят от Wi-Fi модуля обрабатывает сам микроконтроллер во время программы. По умолчанию скорость общения Troyka Wi-Fi равна 115200, что значительно выше чем позволяет библиотека SoftwareSerial. В итоге часть информации которая приходит с Wi-Fi модуля будет утеряна. Если вы используете плату с HardwareSerial подключением модуля можете пропустить пункт настройки скорости и сразу перейти к дальнейшей работе с модулем.

AT установка скорости общения

Для корректной работы с большими объемами необходимо понизить скорость соединения модуля и микроконтроллера. Для этого используйте «AT-команду»:

AT+UART_DEF=9600,8,1,0,0

После проделанной операции, измените скорость программного UART в скетче программы и прошейте плату.

SoftwareSerialAT9600.ino
// библиотека для работы программного Serial
#include <SoftwareSerial.h>
 
// создаём объект для работы с программным Serial
// и передаём ему пины TX и RX
SoftwareSerial mySerial(8, 9);
 
// serial-порт к которому подключён Wi-Fi модуль
#define WIFI_SERIAL    mySerial
 
void setup()
{
  // открываем последовательный порт для мониторинга действий в программе
  // и передаём скорость 9600 бод
  Serial.begin(9600);
  while (!Serial) {
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  }
  Serial.print("Serial init OK\r\n");
  // открываем Serial-соединение с Wi-Fi модулем на скорости 9600 бод
  WIFI_SERIAL.begin(9600);
}
 
void loop()
{
  // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера
  if (WIFI_SERIAL.available()) {
    Serial.write(WIFI_SERIAL.read());
  }
  // если приходят данные из компьютера - отправим их в Wi-Fi модуль
  if (Serial.available()) {
    WIFI_SERIAL.write(Serial.read());
  }
}

По итогу программный UART успеет обработать каждый пришедший байт с Wi-Fi модуля.

AT сканирование WI-FI сетей

Откройте Serial-порт и отправьте на модуль «AT-команду» для сканирования всех доступных Wi-Fi сетей:

AT+CWLAP

При наличии доступных WI-FI сетей в ответ получим сообщение:

AT+CWLAP

+CWLAP:(0,"AI-THINKER_03842B",-65,"62:01:94:03:84:2b",1,1,-40)
+CWLAP:(3,"PiRExternal",-90,"f0:29:29:26:b8:31",1,-12,0)
+CWLAP:(3,"PiRGroup",-84,"44:ad:d9:87:c8:f0",1,-4,0)
+CWLAP:(4,"corp.Catherine.ru",-82,"f8:1a:67:4c:bf:59",2,10,0)
+CWLAP:(3,"PiRGroup",-87,"f0:29:29:26:b8:30",1,-11,0)
+CWLAP:(3,"Amperka",-44,"6c:3b:6b:ff:0f:4d",6,8,0)
+CWLAP:(3,"SEC_LinkShare_ddd43e",-79,"d0:66:7b:08:93:dd",6,23,0)
+CWLAP:(3,"DIT_AMPP",-82,"1c:b9:c4:25:13:68",1,32767,0)
+CWLAP:(3,"MZPK",-89,"24:a2:e1:eb:5d:08",11,-16,0)
+CWLAP:(0,"Arduino-Yun-B4218AF05F28",-62,"b4:21:8a:f0:5f:28",11,25,0)
+CWLAP:(3,"PiRExternal",-85,"44:ad:d9:87:c8:f1",1,-4,0)

OK

Для продолжение работы используйте перечень «AT-команд»

Wi-Fi модуль как самостоятельный контроллер

Wi-Fi (Troyka-модуль) — очень умный модуль. Под металлической крышкой прячется целый микроконтроллер, который можно программировать на языке C++ через Arduino IDE и JavaScript через Espruino Web IDE.

Настройка железа

  1. Ввиду отсутствия у платформы Troyka WiFi собственного USB-порта, подключите её к компьютеру, используя один из перечисленных способов:
    1. через платформу Arduino Uno
  2. Переведите модуль в режим программирования:

    Необходимо каждый раз выполнять перед прошивкой модуля.

    1. Зажмите кнопку PROG;
    2. Нажмите и отпустите кнопку RESET;
    3. Отпустите кнопку PROG
  3. Железо готово, приступайте к программной части.

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

Программирование на C++

  1. Для начало работы с платформой Troyka Wi-Fi на языке C++ скачайте и установите на компьютер интегрированную среду разработки Arduino — Arduino IDE.
  2. По умолчанию среда Arduino IDE настроена только на AVR-платы. Для платформы Troyka Wi-Fi — добавьте в менеджере плат поддержку платформ на модуле ESP8266.
  3. В Arduino IDE в пункте меню Инструменты Плата выбирайте Generic ESP8266 Module.

После выполненных действий платформа Troyka Wi-Fi готова к программированию через Arduino IDE.

Подробности о функциях и методах работы Troyka Wi-Fi (ESP8266) на языке C++ читайте на ESP8266 Arduino Core’s.

Программирование на JavaScript

  1. Для старта с платформой Troyka Wi-Fi на языке JavaScript скачайте и установите интегрированную среду разработки — Espruino Web IDE.

После выполненных действий платформа Troyka Wi-Fi готова к программированию через Espruino Web IDE.

Подробнее о функциях и методах работы ESP8266 на языке JavaScript читайте на Espruino.

Восстановление стандартной АТ-прошивки

После программирования платформы в режиме самостоятельного контроллера может понадобиться восстановить на модуле стандартную AT-прошивку. Для этого необходимо воспользоваться утилитой Flash Download Tool.

Элементы платы

Мозг платформы

Troyka Wi-Fi основан на модуле ESP-12 с чипом ESP8266EX от Espressif.

Чип ESP8266EX

Чип ESP8266 — выполнен по технологии SoC (англ. System-on-a-Chip — система на кристалле). В основе кристалла входит процессор семейства Xtensa — 32-х битный Tensilica L106 с частой 80 МГц с ультранизким энергопотреблением, радиочастотный трансивер с физическим уровнем WiFi IEEE 802.11 b/g/ и блоки памяти SRAM. Мощности процессорного ядра хватает для работы сложных пользовательских приложений и цифровой сигнальной обработки.

Программное приложение пользователя должно храниться на внешней микросхеме Flash-памяти и загружаться в ESP8266EX через один из доступных интерфейсов (SPI, UART, SDIO и др.) каждый раз в момент включения питания системы.

Чип ESP8266 не содержит в себе Flash-память и многих других компонентов для пользовательского старта. Микросхема является основой на базе которой выпускаются модули с необходимой периферией, например ESP-12.

Модуль ESP-12

ESP-12 — плата-модуль WiFi на базе популярного чипсета ESP8266EX. Под металлическим кожухом находится микросхема Flash-памяти объёмом 2 МБ, чип ESP8266EX и кварцевый резонатор. Flash-память необходима для хранения программного обеспечения. При каждом включении питания, ПО автоматически загружается в чип ESP8266EX.

Рядом с кожухом расположен индикаторный светодиод и миниатюрная антенна из дорожки на верхнем слое печатной платы в виде змейки. Металлический кожух экранирует компоненты модуля и тем самым улучшает электромагнитные свойства.

По периметру платы расположены 22 пина через которые модуль ESP-12 взаимодействует с внешним миром. В нашем случае коммуникация с компонентами и модулями на платформе Troyka Wi-Fi.

Troyka контакты

Первая группа

  • Сигнальный (TX) — цифровой выход Wi-Fi модуля. Используется для передачи данных в микроконтроллер. Подключите к пину RX микроконтроллера.
  • Питание (V) — соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — соедините с пином GND микроконтроллера.

Вторая группа

  • Сигнальный (P) — используйте для перевода модуля в режим сна. Подключите к любому цифровому пину микроконтроллера.
  • Сигнальный (RX) — цифровой вход Wi-Fi модуля. Используется для приёма данных из микроконтроллера. Подключите к пину TX микроконтроллера.

Дополнительные контакты

Через Troyka-контакты вы можете получить доступ к 4, 5, 12, 13 и 14 пину модуля ESP-12. Для этого достаточно капнуть припой на контактные площадки с обратной стороны устройства.

Актуально в режиме использования модуля как самостоятельного контроллера.

Обратите внимание, после этой процедуры модуль нельзя использовать с платой расширения Troyka Slot Shield.

Светодиодная индикация

Имя светодиода Назначение
RX и TX Мигают при обмене данными между Wi-Fi модулем и управляющим устройством.
POWER Горит, если на модуль подано питание

Кнопка RESET

Кнопка предназначена для ручного сброса прошивки — аналог кнопки RESET обычного компьютера.

Кнопка PROG

Кнопка служит для перевода модуля в режим прошивки:

  1. Зажмите кнопку PROG;
  2. Нажмите и отпустите кнопку RESET;
  3. Отпустите кнопку PROG

Стабилизатор напряжения

Стабилизатор MC33275ST-3.3T3G с выходом 3,3 вольта, обеспечивает питание модуля ESP-12. Максимальный выходной ток составляет 300 мА.

На плате так же присутствует необходимая обвязка для сопряжения устройств с разными питающими напряжениями.

В нашем случае это может быть управляющая плата Arduino с 5 вольтовой логикой и Wi-Fi модуль с 3,3 вольтовой логикой.

Принципиальная и монтажная схемы

Характеристики

  • Модуль: ESP-12 с чипом ESP8266EX
  • Выходной интерфейс: UART
  • Объём Flash-памяти: 2 МБ
  • Беспроводной интерфейс: Wi-Fi 802.11 b/g/n 2,4 ГГц
  • Режимы работы:
    • Клиент (STA)
    • Точка доступа (AP)
    • Клиент + Точка доступа (STA + AP)
  • Напряжение питания: 3,3–5 В
  • Потребляемый ток: до 250 мА
  • Габариты: 50,8×25,4 мм

В режиме контроллера

  • Тактовая частота: 80 МГц
  • Портов ввода-вывода всего: 5
  • Портов с ШИМ (Программный): 10
  • Разрядность ШИМ: по умолчанию 10 бит
  • Максимальный ток с пина или на пин: 12 мА

Ресурсы