====== Wi-Fi (Troyka-модуль): распиновка, схема подключения и программирование ======
[[amp>product/troyka-wi-fi?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki|Wi-Fi (Troyka-модуль)]] на модуле ESP-12 с чипом ESP8266EX позволит передать данные по Wi-Fi сети.
{{ :продукты:troyka-wi-fi:troyka-wi-fi.1.jpg?600 |}}
===== Видеообзор =====
{{youtube>QE06lxUOq9Y?large}}
===== Общие сведения ======
По умолчанию модуль настроен на работу через «AT-команды». Управляющая плата посылает команды — Wi-Fi модуль выполняет соответствующую операцию.
Но под металлической крышкой прячется целый микроконтроллер, который является самодостаточным устройством. Прошивать модуль можно на разных языках программирования. Но обо всё по порядку.
===== Подключение и настройка =====
В стандартной прошивке Troyka Wi-Fi общается с управляющей платой через «AT-команды» по протоколу [[видеоуроки:6-serial-и-processing|UART]]. Дополнительный сигнальный пин ''P'' служит для перевода модуля в режим сна или пониженного энергопотребления.
На всех платах Iskra и Arduino присутствует хотя бы один аппаратный UART — [[https://www.arduino.cc/en/Reference/Serial|HardwareSerial]]. Если же по каким-то причинам он занят другим устройством, можно воспользоваться программным UART — [[https://www.arduino.cc/en/Reference/SoftwareSerial|SoftwareSerial.]]
=== HardwareSerial ===
На управляющей плате [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Iskra JS]] и платах Arduino с микроконтроллером ''ATmega32U4 / ATSAMD21G18'' данные по USB и общение через пины ''0'' и ''1'' осуществляется через два раздельных ''UART''. Это даёт возможность подключить Wi-Fi модуль к аппаратному ''UART'' на пинах ''0'' и ''1''.
Список поддерживаемых плат:
* [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Iskra JS]]
* [[amp>product/iskra-neo?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Iskra Neo]]
* [[amp>product/arduino-leonardo?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Leonardo]]
* [[amp>product/arduino-leonardo-eth?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Leonardo ETH]]
* [[amp>product/arduino-leonardo-eth-poe?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Leonardo ETH PoE]]
* [[amp>product/arduino-yun?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Yún]]
* [[amp>product/arduino-tian?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Tian]]
При подключении удобно использовать [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki|Troyka Shield]].
{{ :продукты:troyka-wi-fi:troyka-wi-fi_scheme_troyka-shield.png?nolink |}}
С [[amp>product/arduino-troyka-slot-shield?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki|Troyka Slot Shield]] можно обойтись без лишних проводов.
{{ :продукты:troyka-wi-fi:troyka-wi-fi_scheme_troyka-slot-shield.png?nolink |}}
Прошейте управляющую платформу кодом ниже.
== Код прошивки ==
// 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, например [[amp>product/arduino-uno|Uno]], прошиваются через пины ''0'' и ''1''. Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с Wi-Fi модулем. Решение проблемы — программный ''UART''. Подключите пины ''TX'' и ''RX'' Troyka Wi-Fi к другим контактам управляющей платы и используйте библиотеку [[https://www.arduino.cc/en/Reference/SoftwareSerial|SoftwareSerial]].
Для примера подключим управляющие пины Wi-Fi модуля ''TX'' и ''RX'' — на ''8'' и ''9'' контакты управляющей платы.
При подключении удобно использовать [[amp>/product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki|Troyka Shield]].
{{ :продукты:troyka-wi-fi:troyka-wi-fi_scheme_troyka-shield_soft.png?nolink |}}
Прошейте управляющую платформу кодом ниже.
== Код прошивки ==
// библиотека для работы программного Serial
#include
// создаём объект для работы с программным 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 ===
На платах форм-фактора [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Mega 2560]] аппаратный UART, который отвечает за передачу данных через пины ''1'' и ''0'', отвечает также за передачу по USB. Это означает невозможность использовать одновременно ''UART'' для коммуникации с модулем Wi-Fi и отладки по USB.
Но на платах такого форм-фактора есть ещё дополнительно три аппаратных UART:
* **Serial1:** пины ''19(RX1)'' и ''18(TX1)'';
* **Serial2:** пины ''17(RX2)'' и ''16(TX2)'';
* **Serial3:** пины ''15(RX3)'' и ''14(TX3)''.
Список поддерживаемых плат:
* [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Mega 2560]]
* [[amp>product/arduino-adk?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino ADK]]
* [[amp>product/arduino-due?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Arduino Due]]
Подключите Wi-Fi модуль к интерфейсу ''Serial1'' на пины ''18'' и ''19'' на примере платы [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki | Mega 2560]]{{ :продукты:troyka-wi-fi:troyka-wi-fi_scheme_mega.png?nolink |}}
Прошейте управляющую платформу кодом ниже.
== Код прошивки ==
// 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-командами» при подключении к Uno.
=== Тестовая команда «AT» ===
Откройте монитор порта. Настройте скорость соединения — 9600 бод. Конец строки — ''NL & CR''. Введите команду ''AT'' и нажмите «Отправить». Это — базовая команда для проверки работы Wi-Fi модуля.
{{ :продукты:troyka-wi-fi:troyka-wi-fi_at.1.png?nolink |}}
В ответ получим «OK»:
{{ :продукты:troyka-wi-fi:troyka-wi-fi_at.2.png?nolink |}}
Если ответа нет или появляются непонятные символы — проверьте правильность подключения и настройки скорости обмена данными.
=== Настройка режима работы ===
Wi-Fi модуль умеет работать в трёх режимах:
* Режим точки доступа
* Режим клиента
* Смешанный режим
Переведём чип в смешанный режим командой:
AT+CWMODE_DEF=3
После установки модуль должен ответить «OK»:
{{ :продукты:troyka-wi-fi:troyka-wi-fi_at.3.png?nolink |}}
В отличии от аппаратного ''UART'' (HardwareSerial), за работу программного ''UART'' (SoftwareSerial) отвечает микроконтроллер, который назначает другие пины в режим работы ''RX'' и ''TX'', соответственно и данные которые приходят от Wi-Fi модуля обрабатывает сам микроконтроллер во время программы. По умолчанию скорость общения Troyka Wi-Fi равна ''115200'', что значительно выше чем позволяет библиотека [[https://www.arduino.cc/en/Reference/SoftwareSerial|SoftwareSerial]]. В итоге часть информации которая приходит с Wi-Fi модуля будет утеряна. Если вы используете плату с HardwareSerial подключением модуля можете [[продукты:troyka-wi-fi#at_сканирование_wi-fi_сетей|пропустить]] пункт настройки скорости и сразу перейти к дальнейшей работе с модулем.
=== AT установка скорости общения ===
Для корректной работы с большими объемами необходимо понизить скорость соединения модуля и микроконтроллера. Для этого используйте «AT-команду»:
AT+UART_DEF=9600,8,1,0,0
После проделанной операции, измените скорость программного ''UART'' в скетче программы и прошейте плату.
// библиотека для работы программного Serial
#include
// создаём объект для работы с программным 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
{{ :продукты:troyka-wi-fi:troyka-wi-fi_at.4.png?nolink |}}
Для продолжение работы используйте {{:продукты:troyka-wi-fi:esp8266_at_commands.pdf| перечень «AT-команд»}}
===== Wi-Fi модуль как самостоятельный контроллер =====
Wi-Fi (Troyka-модуль) — очень умный модуль. Под металлической крышкой прячется целый микроконтроллер, который можно программировать на языке C++ через [[:продукты:troyka-wi-fi#программирование_на_c|Arduino IDE]] и JavaScript через [[:продукты:troyka-wi-fi#программирование_на_javascript|Espruino Web IDE]].
==== Настройка железа ====
- Ввиду отсутствия у платформы Troyka WiFi собственного USB-порта, подключите её к компьютеру, используя один из перечисленных способов:
- через платформу [[amp>product/arduino-uno?utm_source=man&utm_campaign=wifi-slot&utm_medium=wiki|Arduino Uno]]{{ :продукты:troyka-wi-fi:troyka-wi-fi_scheme_arduino-uno.png?nolink |}}
- через [[amp>product/usb-serial-converter?utm_source=man&utm_campaign=wifi-slot&utm_medium=wiki|USB-Serial адаптер]]{{ :продукты:troyka-wi-fi:troyka-wi-fi_scheme_usb-serial-converter.png?nolink |}}
- через [[amp>product/troyka-usb-uart?utm_source=man&utm_campaign=wifi-slot&utm_medium=wiki|USB-UART преобразователь]]{{ :продукты:troyka-wi-fi:troyka-wi-fi_scheme_troyka-usb-uart.png?nolink |}}
- Переведите модуль в режим программирования:
Необходимо каждый раз выполнять перед прошивкой модуля.
- Зажмите кнопку ''PROG'';
- Нажмите и отпустите кнопку ''RESET'';
- Отпустите кнопку ''PROG''
- Железо готово, приступайте к программной части.
[[:продукты:troyka-wi-fi#дополнительные_контакты|Получите доступ к пинам GPIO]], которые можно использовать для управления или считывание данных с других устройств.
==== Программирование на C++ ====
{{ :продукты:troyka-wi-fi:troyka-wi-fi_c.png?nolink&600 |}}
- Для начала работы с платформой Troyka Wi-Fi на языке C++ [[articles:arduino-ide-install|скачайте и установите]] на компьютер интегрированную среду разработки Arduino IDE.
- По умолчанию среда программирования настроена только на AVR-платы. Для платформы Troyka Wi-Fi добавьте в [[articles:arduino-boards-manager|менеджере плат]] поддержку платформ на модуле ESP8266.
- В пункте меню
Инструменты
//Плата// выбирайте ''Generic ESP8266 Module''.{{ :продукты:troyka-wi-fi:troyka-wi-fi_arduino_ide.1.png?nolink |}}
После выполненных действий платформа Troyka Wi-Fi готова к программированию через Arduino IDE.
Подробности о функциях и методах работы Troyka Wi-Fi (ESP8266) на языке C++ читайте на [[https://arduino-esp8266.readthedocs.io|ESP8266 Arduino Core’s]].
==== Программирование на JavaScript ====
{{ :продукты:troyka-wi-fi:troyka-wi-fi_js.png?nolink&600 |}}
- Для старта с платформой Troyka Wi-Fi на языке JavaScript [[:js:ide|скачайте и установите]] интегрированную среду разработки Espruino Web IDE.
- [[:js:espruino:esp8266|Установите прошивку-интерпретатор JavaScript на ESP8266]].
После выполненных действий платформа Troyka Wi-Fi готова к программированию через Espruino Web IDE.
Подробнее о функциях и методах работы ESP8266 на языке JavaScript читайте на [[http://www.espruino.com/EspruinoESP8266|Espruino]].
===== Восстановление стандартной АТ-прошивки =====
После программирования платформы в режиме самостоятельного контроллера может понадобиться восстановить на модуле стандартную AT-прошивку. Для этого необходимо воспользоваться утилитой [[:продукты:esp8266:flash-download-tool|Flash Download Tool]].
===== Элементы платы =====
{{ :продукты:troyka-wi-fi:troyka_wifi_annotation.png |}}
==== Мозг платформы ====
Troyka Wi-Fi основан на модуле {{:продукты:troyka-wi-fi:esp-12e_datasheet.pdf|ESP-12}} с чипом {{:продукты:troyka-wi-fi:esp8266_datasheet.pdf|ESP8266EX}} от Espressif.
{{ :продукты:troyka-wi-fi:troyka-wi-fi_composed.png?nolink |}}
=== Чип ESP8266EX ===
Чип {{:wifi-slot:esp8266_datasheet.pdf|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.
{{ :wifi-slot:esp12_without_cap_annotation.png?nolink |}}
==== Troyka контакты ====
//Первая группа//
* Сигнальный (TX) — цифровой выход Wi-Fi модуля. Используется для передачи данных в микроконтроллер. Подключите к пину RX микроконтроллера.
* Питание (V) — соедините с рабочим напряжением микроконтроллера.
* Земля (G) — соедините с пином GND микроконтроллера.
//Вторая группа//
* Сигнальный (P) — используйте для перевода модуля в режим сна. Подключите к любому цифровому пину микроконтроллера.
* Сигнальный (RX) — цифровой вход Wi-Fi модуля. Используется для приёма данных из микроконтроллера. Подключите к пину TX микроконтроллера.
==== Дополнительные контакты ====
Через Troyka-контакты вы можете получить доступ к ''4'', ''5'', ''12'', ''13'' и ''14'' пину модуля ESP-12. Для этого достаточно капнуть припой на контактные площадки с обратной стороны устройства.
{{ :продукты:troyka-wi-fi:troyka-wi-fi_add_pins.png?nolink |}}
Обратите внимание, на плате версии ''B8'' и ниже, шёлк на контактах ''4'' и ''5'' перепутан местами.
{{ :продукты:troyka-wi-fi:troyka-wi-fi-fix.png?nolink |}}
==== Светодиодная индикация ====
^ Имя светодиода ^ Назначение ^
| RX и TX |Мигают при обмене данными между Wi-Fi модулем и управляющим устройством.|
| POWER |Горит, если на модуль подано питание|
==== Кнопка RESET ====
Кнопка предназначена для ручного сброса прошивки — аналог кнопки ''RESET'' обычного компьютера.
==== Кнопка PROG ====
Кнопка служит для перевода модуля в режим прошивки:
- Зажмите кнопку ''PROG'';
- Нажмите и отпустите кнопку ''RESET'';
- Отпустите кнопку ''PROG''
==== Стабилизатор напряжения ====
Стабилизатор {{:продукты:troyka-wi-fi:mc33275st-3.3t3g_datasheet.pdf|MC33275ST-3.3T3G}} с выходом 3,3 вольта, обеспечивает питание модуля ESP-12. Максимальный выходной ток составляет 300 мА.
На плате так же присутствует необходимая обвязка для сопряжения устройств с разными питающими напряжениями.
В нашем случае это может быть управляющая плата Arduino с 5 вольтовой логикой и Wi-Fi модуль с 3,3 вольтовой логикой.
===== Принципиальная и монтажная схемы =====
{{:продукты:troyka-wi-fi:troyka-wi-fi_schematic.png?direct&350 |}}
{{ :продукты:troyka-wi-fi:troyka-wi-fi_layout.png?direct&300|}}
===== Характеристики =====
* Модуль: 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 мА
===== Ресурсы =====
* [[amp>product/troyka-wi-fi?utm_source=man&utm_campaign=troyka-wi-fi&utm_medium=wiki|Troyka Wi-Fi]] в магазине.
* [[https://github.com/amperka/hardware-drawings/blob/master/troyka-wi-fi.svg|Векторное изображение Troyka Wi-Fi]]
* {{:продукты:troyka-wi-fi:esp-12e_datasheet.pdf|Datasheet на модуль ESP-12}}
* {{:продукты:troyka-wi-fi:esp8266_datasheet.pdf|Datasheet на чип ESP8266EX}}
* {{:продукты:troyka-wi-fi:esp8266_at_commands.pdf|Список АТ-команд}}
* [[js:wifi|Описание библиотеки для Iskra JS]]