Wi-Fi (Troyka-модуль)

Двухюнитовый Troyka-модуль для работы с Wi-Fi на чипе ESP8226.

Видеообзор

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

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

HardwareSerial

Для работы с модулем удобно использовать Troyka Shield. Если хотите избавиться от проводов — возьмите Troyka Slot Shield.

Некоторые платы Arduino прошиваются через пины 0 и 1 (Arduinio Uno, Arduino ADK и Iskra Mini). Перед прошивкой таких плат отключите Wi-Fi-модуль от пинов RX и TX. Если необходимо одновременно работать с беcпроводной сетью и подключать контроллер к компьютеру, подключите пины TX и RX WI-FI модуля к другим контактам управляющей платы и используйте библиотеку SoftwareSerial. Если вы используете Arduino Mega 2560 достаточно просто подключить Wi-Fi-модуль к пинам TX1 RX1, TX2 RX2 или TX3 RX3.

SoftwareSerial

Для примера подключим управляющие пины Wi-Fi-модуля RX и TX — на 8 и 9 пины Arduino UNO через Troyka Shield.

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

В стандартной прошивке WI-FI модуля используются AT команды. Передавать эти команды можно как самостоятельно, так и при помощи библиотек.

AT HardwareSerial

Некоторые платы, такие как Arduino Mega 2560 или Iskra Neo имеют несколько Serial-портов. С ними удобно передавать данные из UART-модулей в компьютер.

Подключим WI-FI модуль к RX и TX пинам Serial1 (для Iskra Neo это пины 0 и 1, для Arduino Mega 2560 — 19 и 18) и прошьём следующим скетчем.

HardwareSerialAT115200.ino
void setup()
{
// Откроем Serial для связи с компьютером, установим скорость и подождём пока установится соединение
  Serial.begin(9600);
  while (!Serial) {
  }
// Откроем Serial1 для связи с модулем и установим скорость общения с ним
// Скорость по умолчанию для модуля Wi-Fi равна 115200 бод
  Serial1.begin(115200);
  delay(1000);
}
 
void loop()
{
  // Если приходят данные из Serial1 — отправим их в монитор порта Arduino IDE
  if (Serial1.available()) {
    Serial.write(Serial1.read());
    }
  // Если приходят данные c компьютера - отправим их в модуль
  if (Serial.available()) {
    Serial1.write(Serial.read());
    }
}

AT SoftwareSerial

Платы Arduino, такие как Arduinio Uno, Arduino ADK и Iskra Mini, имеют лишь один аппаратный последовательный порт. Для передачи данных из модуля на компьютер, придётся программно эмулировать дополнительный последовательный порт. В этом нам поможет библиотека SoftwareSerial.

SoftwareSerialAT115200.ino
// Подключим библиотеку для работы программного Serial
#include <SoftwareSerial.h>
 
// Дадим программному Serial имя и укажем на каких пинах он расположен (RX, TX)
// Подключите пин TX модуля к пину 8, а RX — к пину 9
SoftwareSerial mySerial(8, 9);
 
void setup()
{
//Откроем Serial для связи с компьютером, установим скорость и подождем пока установится соединение
  Serial.begin(9600);
  while (!Serial) {
  }
// Откроем программный Serial для связи с модулем и установим скорость общения с ним
// Скорость по умолчанию для модуля WI-FI равна 115200 baud
  mySerial.begin(115200);
  delay(1000);
}
 
void loop()
{
  // Если приходят данные из программного Serial - отправим их в порт компьютера
  if (mySerial.available()) {
    Serial.write(mySerial.read());
    }
  // Если приходят данные из компьютера - отправим их в программный Serial
  if (Serial.available()) {
    mySerial.write(Serial.read());
    }
}

Проверка AT команд

Откройте монитор порта. Настройте скорость соединения — 9600 бод. Конец строки — NL & CR. Введите команду AT и нажмите «Отправить».

В ответ получим:

Настройка режима работы при помощи АТ-команд

Следующая АТ-команда настраивает режим работы wi-fi-модуля:

AT+CWMODE_DEF=<режим>

1=Station (WiFi клиент), 2=SoftAP (точка доступа), 3=Оба режима (Station+SoftAP)

AT+CWMODE_DEF=3

После установки получим ответ:

AT+CWMODE_DEF=3

OK

В отличии от аппаратного Serial соединения за работу программного Serial отвечает микроконтроллер, который назначает другие пины в режим работы RX и TX, соответственно и данные которые приходят от модуля WI-FI обрабатывает сам микроконтроллер. Так как по умолчанию скорость общения WI-FI модуля с Arduino выше чем скорость общения микроконтроллера с компьютером, плата Arduino не успевает отправить большой поток информации, который приходит с модуля WI-FI. Если вы используете плату с HardwareSerial подключением модуля можете пропустить пункт настройки скорости и сразу перейти к дальнейшей работе с модулем.

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

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

AT+UART_DEF=<новая скорость>,8,1,0,0

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

После установки новой скорости общения модуля WI-FI, изменим скорость программного Serial в скетче программы на Arduino

SoftwareSerialAT9600.ino
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(8, 9);
 
void setup()
{
  Serial.begin(9600);
  while (!Serial) {
  }
// После установки с помощью AT команд новой скорости общения модуля WI-FI,
// изменим скорость программного Serial на соответствующую текущей скорости общения с WI-FI модулем
  mySerial.begin(9600);
  delay(1000);
}
 
void loop()
{
  if (mySerial.available()) {
    Serial.write(mySerial.read());
    }
  if (Serial.available()) {
    mySerial.write(Serial.read());
    }
}

Теперь все готово для получения больших порций данных и отправки их на компьютер в сериал монитор.

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

Откроем сериал монитор и отправим на модуль 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

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

Помимо всего прочего WI-FI тройка модуль можно программировать через Arduino IDE и использовать его как самостоятельный микроконтроллер. При этом, если капнуть немного припоя на обратной стороне модуля, возле дополнительных выходов, мы получим доступ к пинам GPIO, которые можно использовать для управления другими устройствами, например реле с подключенной нагрузкой.

После того, как вы капнули припой на контактные площадки возле выходов с обратной стороны модуля, вы не сможете его использовать со SlotShield!

Настройка Arduino IDE

Для начала настроим среду для работы с модулем Wi-Fi. Для этого откройте пункт «Настройки» в меню «Файл» Arduino IDE.

В окне настройки введите дополнительную ссылку для Менеджера плат

http://arduino.esp8266.com/stable/package_esp8266com_index.json

После этого откройте менеджер плат В поле для ввода введите

esp8266

Щелчком мыши активируйте появившееся окно esp8266 by ESP8266 Community, выберите последнюю доступную версию и нажмите «Установка» Теперь среди доступных плат выберите «NodeMCU 1.0(ESP-12E Module)» Остальные настройки выполните в соответствии с картинкой Теперь Arduino IDE готова к работе с модулем Wi-Fi.

Подключение и прошивка Wi-Fi модуля

Помимо Wi-Fi с внешним миром модуль общается через UART интерфейс. Его мы и будем использовать для подключения и прошивки модуля. Своего собственного USB-UART преобразователя на модуле нет, поэтому мы будем использовать для прошивки USB-Serial адаптер. Можно воспользоваться и USB-UART преобразователем Arduino UNO, вынув из платы контроллер ATMEGA328P или соединив пин RESET с пином GND. Выберите порт к которому подключен USB-Serial адаптер или Arduino UNO.

Переведите модуль в режим перепрошивки. Для этого сначала зажмите кнопку PROG и не отпуская ее нажмите и отпустите кнопку RESET на модуле WI-FI, после этого отпустите кнопку PROG. Теперь модуль готов к прошивке.

На модуле распаяны 5 цифровых GPIO входов-выходов: 4, 5, 12, 13, 14. Для примера прошьем модуль приведенным ниже скетчем и подключим Troyka светодиод к группе контактов 14–12–13 модуля Wi-Fi.

WiFi_blink.ino
void setup()
{
  // настраиваем пин №14 в режим выхода и устанавливаем на нем «низкий сигнал»
  pinMode(14, OUTPUT);
  digitalWrite(14, LOW);
  // настраиваем пин №12 в режим выхода и устанавливаем на нем «высокий сигнал»
  pinMode(12, OUTPUT);
  digitalWrite(12, HIGH);
  // настраиваем пин №13 в режим выхода
  pinMode(13, OUTPUT);
}
 
void loop()
{
  // подаём на пин 13 «высокий сигнал»
  digitalWrite(13, HIGH);
 
  // задерживаем на 100 миллисекунд
  delay(100);
 
  // подаём на пин 13 «низкий сигнал»
  digitalWrite(13, LOW);
 
  // замираем в этом состоянии на 900 миллисекунд
  delay(900);
}

Перепрошивка

После программирования через Arduino IDE может понадобиться востановить на модуле стандартную AT-прошивку. Для этого необходимо скачать файл прошивки, программу для установки и следовать следующей инструкции.

  1. Распакуйте архив с программой для установки прошивки.

    При этом конечный путь к программе и файлу прошивки не должен содержать кириллических символов.

  2. Запустите файл ESPFlashDownloadTool_v3.4.4
  3. В появившемся окне выберите ESP8266 DownloadTool.
  4. Укажите путь к файлу AT-прошивки, отметьте выбранный файл галочкой в чекбоксе напротив и укажите адрес 0х00, по которому будет записан файл в память модуля.
  5. Выберите СОМ порт к которому подключен ваш модуль и установите Baud rate 115200.
  6. Настройте оставшиеся поля и чекбоксы, как показано на картинке.
  7. Переведите модуль в режим перепрошивки. Для этого сначала зажмите кнопку PROG и не отпуская ее нажмите и отпустите кнопку RESET на модуле WI-FI, после этого отпустите кнопку PROG. Теперь модуль готов к установке прошивки.
  8. Теперь, когда модуль готов к прошивке — нажмите кнопку старт и дождитесь окончания прошивки.

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

Wi-Fi модуль ESP-12E

Основа устройства — модуль ESP12E компании AI-thinker с 32-х битным процессором Tensilica L106.

Troyka контакты

1 группа

  • Земля (G) — соедините с землёй микроконтроллера
  • Питание (V) — соедините с питанием микроконтроллера
  • Сигнальный (TX) — подключите к пину RX микроконтроллера

2 группа

  • Сигнальный (P) — подключите к сигнальному пину микроконтроллера
  • Сигнальный (RX) — подключите к пину TX микроконтроллера

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

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

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

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

Управляющие кнопки

Для упрощения работы с модулем мы предусмотрели две управляющие кнопки:

  • prog — переводит модуль в режим перепрошивки
  • reset — перезагружает модуль

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

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

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

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

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

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

  • Напряжение питания: 3,3–5 В
  • Потребляемый ток: до 250 мА
  • Чип: ESP8266 (ESP-12E)
  • Интерфейс: последовательный порт
  • Поддерживаемые стандарты: Wi-Fi 802.11 b/g/n 2,4 ГГц
  • Максимальная выходная мощность: 20 дБ (в режиме 802.11b )
  • Номинальное напряжение: 3,3 В
  • Максимальный потребляемый ток: 250 мА
  • Портов ввода-вывода свободного назначения: 5
  • Габариты: 50,8×25,4 мм

Ресурсы