====== 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]]