Управление ардуино по wifi с телефона. Уроки Arduino: управление устройствами со смартфона для чайников. Программирование ESP8266 в Arduino IDE

Передавать прошивки, обновления и прочие данные путём паяльника и проводов – не лучшее решение для Ардуино. Однако микроконтроллеры для arduino wi-fi стоят недёшево, да и нужда в них есть далеко не всегда, отчего пользователи предпочитают их не использовать в своих проектах без надобности.

Но вот очередной китайский продукт захватил рынок, wi-fi jammer esp8266 своими руками можно присоединить к плате Ардуино или другой системе, и вы получите стабильное соединение с рядом других преимуществ. Так давайте разберёмся с arduino uno wi-fi, и стоит ли покупать данный модуль, а также, что вообще собой представляет подобный микроконтроллер на wi-fi ардуино.

Доступные Wi-Fi модули для Arduino

Сейчас большая часть пользователей ардуино уже не беспокоится о цене подобных девайсов, хотя ещё 3 года назад arduino wi-fi модуль считался роскошью. Всё это благодаря wi-fi jammer esp8266, производители которого ввели на рынок совершенно новый продукт, поражающей своей функциональностью и, одновременно с тем, являющийся достаточно дешёвым, что внесло весомую лепту и создало конкуренцию в этом направлении.

Таким образом, arduino wi-fi esp8266 сейчас считается самым доступным модулем на рынке, как и все его собратья. Так, цена на зарубежных площадках стартует от 2-х долларов, что позволяет пачками закупать данные модули и не перепрошивать их тысячу раз, перепаивая контакты, чтобы сохранить работоспособность.

Сначала данный wi-fi модуль ардуино использовался, в основном, как arduino wi-fi shield, так как являлся наиболее дешёвым вариантом и ничем не уступал оригинальному. Устройство действительно практически легендарное, ведь весомых минусов за его стоимость не найти. Имеется множество библиотек, в том числе и пользовательских, а также поддерживает работу через Serial шины и простейшие АТ и АТ+ команды. Благодаря этому никакой семантики пресловутого С99, как это часто бывает с другими сторонними микроконтроллерами, изучать не нужно.

Соответственно, даже новичок разберётся за секунды, а профессионал сможет применить уже заготовленные библиотеки. Среди других достоинств отмечается:

  1. Процессор на 160 МГц, однако он 32-битный, что накладывает определённый отпечаток на производительность. Но стоит помнить, что модуль всё же применяется в связке с платами Ардуино, которые сами по себе режут высокие частоты и съедают большую часть ресурсов неизвестно для чего.
  2. Производитель, выпустивший wi-fi модуль esp8266, интересные проекты на этом не закончил, и сейчас имеется целая линейка микроконтроллеров проверенного качества.
  3. Современные стандарты защиты сети. Конечно, WPA и WPA2 уже давно не столь безопасны, как хотелось бы, но их наличие не может не радовать в таком дешёвом контроллере.
  4. 16 портов вывода, в том числе 10-битный, позволяющий поэкспериментировать с платой.

Что ещё важнее, с коробки вас ждёт постоянная память до 4 мегабайт, в зависимости от типа платы, а это в разы упрощает работу с большими библиотеками и даже некоторыми медиа-файлами. Ведь на большинстве плат ардуино и 1 мегабайт считается непозволительной роскошью.

Характеристики esp8266 wi-fi безусловно радуют, особенно в сравнении с его более дорогими конкурентами, но у пользователя, не имевшего ранее опыта с данными платами, возникнет вопрос о том, как же его подключить. Дело в том, что модуль имеет гораздо больше пинов, чем привыкли видеть новички, а, соответственно, у тех начинается паника. Однако, если разобраться в ситуации, то на деле в этом нет ничего сложного. Достаточно запастись припоем и паяльником и просто почитать инструкцию.

Как подключить Wi-Fi модуль к Arduino

Давайте же рассмотрим подключение esp8266 esp 12e и что такое esp8266 мост wi-fi uart. Ведь именно подключение и настройка модуля вызывают больше всего вопросов.


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

Перед подключением стоит подгрузить последнюю прошивку, позволяющую увеличивать скорость обмена пакетами до 9600 единиц информации в секунду. А проверять соединение мы будем через кабель usb-ttl и соответствующий терминал от CoolTerm.


Пины для подключения вышеописанного кабеля стандартные, а вот питание идёт через 3.3 вольтовый пин с Ардуино. Важно помнить, что максимальную силу тока, которую подаёт плата, невозможно поставить выше 150 мА, а esp8266 esp 07 и esp8266 witty cloud wi-fi модуль для arduino требуют 240 Ма.

Однако, если другого источника тока нет, можете использовать и стандартный вариант от Ардуино, но мощность платы пострадает. Хотя, при не сильной загрузке, достаточно и 70 мА, будьте готовы к внезапным перезагрузкам микроконтроллера в пиковые моменты нагрузки и пишите софт соответственно, чтобы он фильтровал и разбивал файлы, не перегружая плату.


Еще один вариант подключения ниже. Важно - контакты RX-TX соединяются перекрестием. Так как уровни сигналов модуля ESP8266 3.3В, а Arduino 5В, нам нужно использовать резистивный делитель напряжения для преобразования уровня сигнала.

Прописываем Wi-Fi модуль в Arduino

Как известно, при должном опыте можно и шилд esp8266 ex 12e сопрячь со смартфоном, но у новичков и прописка esp8266 esp 12 в системе Ардуино вызывает трудности. На деле достаточно подключить модуль и проверить его работоспособность, скинув несколько штатных команд АТ через меню отладки.

Например, можно добавить мигание штатным светодиодом (для схемы подключения выше):

#define TXD 1 // GPIO1/TXD01 void setup() { pinMode(TXD, OUTPUT); } void loop() { digitalWrite(TXD, HIGH); delay(1000); digitalWrite(TXD, LOW); delay(1000); }

Как только плата подтвердит, что видит микроконтроллер в системе, можно начинать полноценную работу с ним. Однако стоит отметить, что если сама плата ардуино используется в проекте лишь для подключения данного контроллера – это иррационально.

Достаточно USB-UART преобразователя, так как esp8266 не использует «мозги» ардуино, а своей флеш-памяти ему вполне хватит для хранения пары базовых библиотек и прошивок. Соответственно, тратиться лишний раз на вспомогательную плату нет никакого смысла, если вы можете просто подпаять его к преобразователю и дальше использовать в проекте. При этом, подключив вспомогательный источник питания и не беспокоясь, что данные перестанут передаваться в самый ответственный момент из-за недостатка мощности системы.

Важное замечание! Для последней схемы скетч загружаем в Arduino как обычно, но так как модуль ESP8266 подключен к контактам 0 и 1, программирование становится невозможным. Компилятор будет показывать ошибку. Отсоедините провода идущие к ESP8266 от контактов 0 и 1, произведите программирование, а после верните контакты на место и нажмите кнопку сброса в Arduino.

Часть 1. Подготовка ESP8266

Зачем эта статья? На хабре уже есть ряд статей про использование ESP в разных конфигурациях, но почему-то без подробностей о том, как именно все подключается, прошивается и программируется. Типа «я взял ESP, две пальчиковые батарейки, DHT22, закинул в коробку, потряс часик и термометр готов!». В итоге, получается странно: те, кто уже работают с ESP не видят в сделанном ничего необычного, а те, кто хочет научиться - не понимают с чего начать. Поэтому, я решил написать подробную статью о том, как подключается и прошивается ESP, как его связать с Arduino и внешним миром и какие проблемы мне попадались на этом пути. Ссылки на Aliexpress привожу лишь для представления порядка цен и внешнего вида компонентов.

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


Питание

Для работы ESP8266 нужно напряжение 3.3В и ток не ниже 300мА. К сожалению, Arduino Uno не в состоянии обеспечить такой ток, как не в состоянии обеспечить его и переходники USB-UART (программаторы) типа FT232RL - их предел около 50мА. А значит придется организовать отдельное питание. И лучше бы, чтобы Arduino тоже работал от 3.3В, чтобы избежать проблем типа «я подал пятивольтовый сигнал на вывод RX модуля ESP, почему пахнет паленой пластмассой?».

Есть три решения.

2. Купить готовый модуль с регулятором напряжения, понижающий 5В до 3.3В. Пожалуй, это самый удобный вариант.

3. Собрать модуль самому из регулятора AMS1117 и одного танталового конденсатора на 22мкФ.

Я выбрал третий пункт, поскольку мне часто нужно 3.3В, я жадный и я люблю встраивать регуляторы прямо в блоки питания.

С AMS1117 все просто: если положить его текстом вверх, то напряжение на ногах растет слева направо: 0(Gnd), 3.3В (Vout), 5В (Vin).
Между нулем и выходом нужен танталовый конденсатор на 22мкФ (так по инструкции , что будет если поставить электролитический - я не проверял). У танталового SMD-конденсатора плюс там, где полоска. Немного чудовищной пайки совершенно не предназначенных для такого варварства SMD-компонентов и:

Обязательно проверяйте выходное напряжение. Если оно значительно меньше 3.3В (например, 1.17В) - дайте регулятору остыть после пайки и проверьте контакты. Если поставите конденсатор больше, чем на 22мкФ, то мультиметр может показать более высокое напряжение.

Почему именно AMS1117? Он широко используется. Его вы можете найти почти везде, даже в Arduino Uno, как правило, стоит AMS1117-5.0.
Если вы знаете что-то схожих габаритов и цены, еще более простое в использовании - напишите, пожалуйста.

Важный момент. Не знаю уж почему, но AMS1117 крайне капризно относится к качеству соединений. Контакты должны быть надежны. Лучше - пропаяны. Иначе он на тестах выдает 3.3В, но под нагрузкой не выдает ничего.

Подключение ESP8266

Я выбрал модель 07, поскольку у нее отличный металлический экран, который работает как защита от наводок, механических воздействий и как радиатор. Последнее обеспечивает разницу между сгоревшим модулем и просто нагревшимся. Кроме того, есть гнездо под внешнюю антенну.

Чтобы чип запустился нужно соединить VCC и CH_P через резистор 10кОм. Если такого нет, то сгодится любой из диапазона 1-20кОм. Кроме того, конкретно модель 07 еще требует, чтобы GPIO15 (самый ближний к GND) был «на земле» (этого на картинке не видно, потому что соединение с другой стороны).

Теперь берем переходник USB-UART, переключаем его на 3.3В и подключаем RX к TX, TX к RX и GND к «земле» (у меня без этого передача нестабильна). Если вы не можете переключить на 3.3В, то можно использовать простейший резисторный делитель напряжения: соедините ESP RX с TX переходника через сопротивление в 1кОм, а ESP RX с «землей» через 2кОм. Существует масса более сложных и более надежных способов связать 3.3В и 5В, но в данном случае и так сойдет.

И соединяемся на скорости 9600 по нужному COM-порту (можно посмотреть в диспетчере устройств).

Я использую SecureCRT, Putty тоже подойдет, а ценители Линукса и так знают, что делать и где смотреть.

(AT+RST перезагружает чип)

Если ничего не происходит - выключите - включите питание, если все равно ничего не происходит - проверьте соответствие TX/RX, попробуйте переставить их местами или припаять к чипу.

Иногда чип в ходе издевательств экспериментов зависает и тогда его надо обесточить, в том числе отключив и переходник (например, вытащив его из USB), поскольку чипу хватает даже поступающих крох питания, чтобы упорно тупить и не работать.

Иногда фокусы с переходником вешают USB-порт. Можно в качестве временного решения использовать другой USB-порт, но вообще лучше перезагрузить компьютер.

Иногда при этом меняется номер COM-порта. Под Linux это можно решить с помощью udev.

Если вместо текста приходит мусор, то проверьте настройки скорости. Некоторые старые чипы работают на 115200.

На старте чип нагревается, но если он реально горячий и продолжает греться - отключайте и проверяйте все соединения. Чтобы на корпус не попадало +3.3В, чтобы 5В к нему вообще никуда не приходили, чтобы «земля» переходника была соединена с «землей» чипа. Модели с металлическим экраном очень трудно сжечь (но нет ничего невозможного), а на модели без экранов жалуются, мол даже небольшая ошибка может стать последней в жизни чипа. Но это я не проверял.

Прошивка

Мой выбор - NodeMCU . У нее проблемы с памятью и поддержкой железа, но это многократно окупается простотой кода и легкостью отладки.

Так же потребуются NodeMCU flasher и LuaLoader (последнее - опционально, есть и другие клиенты для работы с этой прошивкой).

Выключаем чип. Подсоединяем GPIO0 к земле и включаем чип:

Если ничего не происходит и поля AP MAC/STA MAC пустые - проверьте еще раз, чтобы GPIO0 был на «земле».
Если прошивка началась, но зависла - посмотрите в закладке Log, у меня почему-то конкретно этот чип отказался прошиваться на FT232RL, но зато без проблем прошился на PL2303HX на скорости 576000. PL2303HX в указанном варианте не имеет переключения на 3.3В, чтобы им воспользоваться нужно открыть пластиковый корпус и перепаять провод с 5V на 3.3V, есть варианты с пятью выходами : 3.3, 5, TX, RX, Gnd.


Обратите внимание: STA MAC поменялся. Подозреваю, что flasher его неправильно показывал, но требуется проверка.

Для экономии сил и нервов можно взять готовый или полуготовый вариант.

Есть одноразовые адаптеры с удобной разводкой.
Есть

В этой статье информация о том как собрать свой танк, оснащенный Web Камерой и управляемый посредством Wifi роутера.

Необходимые материалы:

  1. Web Camera
  2. Роутер TP-Link TL-MR3020
  3. Сервоприводы SG90 - 2шт
  4. Camera Platform Anti-Vibration
  5. Аккумулятор 7.2V 5000mah
  6. Аккумулятор 5V 2000mah
  7. Nano 3.0 Atmel ATmega328
  8. L298N motor driver
  9. Провода, термотрубки, USB хаб, диоды и другое.
  10. Платформа на ваш вкус, я выбрал DD1-1

Сборка нашего монстра
Настройка Роутера MR3020.
Первым делом начнем с роутера. Я долго думал что выбрать OR-WRT или CyberWRT. OR-WRT гибок в настройках, но все редактирование и внесения своих настроек осуществляется через терминал с помощи программы Putty. А так как Я боялся на тот момет работать через терминал, Я выбрал где есть графический интерфейс это CyberWRT, плюс возможно подключение через USB порт.
Для того что бы изменить прошивку нашего роутера, нужно скачать прошивку CyberWrt MR3020.

Как мы скачали, делаем следующее:

1) Включить роутер и подождать загрузки.
2) Зайти и залогиниться на 192.168.0.254 (по умолчанию admin\admin)
3) Найти в меню слева System Tools, там пункт System Upgrade и залить прошивку через веб-форму
4) Дождаться перезагрузки (порядка 4х минут)
Роутер готов к настройке.

Можно выбрать один из режимов: «Точка доступа» и «Клиент Wi-Fi сети». Для настройки режима Клиента:
- выберите режим «Клиент Wi-Fi сети»
- IP адрес Вашего устройства (по этому адресу будет доступно Ваше устройство. Постарайтесь выбрать незанятый IP. Например: 192.168.1.100)
- Маска подсети (255.255.255.0)
- Шлюз (например, IP Вашего домашнего роутера или шлюза - 192.168.1.1)
- Тип шифрования (тип шифрования, используемый в Вашей домашней сети)
- Пароль (пароль, для доступа к Вашей домашней сети)

Если сделали все правильно, то у вас пойдет RSS строка в нижней части экрана.

Когда все заработала, у вас появятся раздел модули, там вы находите модуль "РОБОТ". Устанавливайте. Готово.

Подключение L298N, Arduino Nano, MR3020, Камера и другое

На картинке все наглядно показано, но на всякий случай напишу.

Вывод Arduino DIGITAL 4 - к IN1 пину модуля.
Вывод Arduino DIGITAL 5 - к IN2 пину модуля.
Вывод Arduino DIGITAL 6 - к IN3 пину модуля.
Вывод Arduino DIGITAL 7 - к IN4 пину модуля.
Вывод Arduino GND - к GND клеме модуля.
GND клема модуля - Минус аккумулятора.
7.2V клема модуля - Плюс аккумулятора.
RM клема модуля - Правый моторчик.
LM клема модуля - Левый моторчик.
USB порт Arduino - Подключаем к USB хаб
Web Камера - Подключаем к USB хаб
USB хаб - Подключаем к USB роутера

Питание так скажем логистики, осуществляется вторым аккумулятором. Емкость 2000 mA/h 5v, дабы не спалить роутер. Да и с двумя аккумуляторами робот стабильней работает. Так вот, его мы подключаем просто в разъем микро USB. Через USB хаб который подключен к роутету питанию уже получает и камера и наша ардуинка.

Скетч для Arduino Nano
Вам необходима скачать библиотеку CyberLib , она предназначена только для Atmega 328.

/* Версия 1.5 WIFI Tanka на DD1-1 Реализовано: 1) Движение камеры по X и Y 2) Гудок 3) Фары 4) Звук при включении */ #include // Подключаем библиотеку #include // Подключаем библиотеку сервоприводов Servo myservo1; Servo myservo2; long previousMillis; // Нужно для таймера int LedStep = 0; // Счетчик для LED int i; #define robot_go {D4_High; D5_Low; D6_Low; D7_High;} #define robot_back {D4_Low; D5_High; D6_High; D7_Low;} #define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;} #define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;} #define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;} #define LED_ON {D13_High;} #define LED_OFF {D13_Low;} #define Headlamp_ON {D8_Low;} #define Headlamp_OFF {D8_High;} #define Buzzer {tone(11, 494, 500);} #define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D13_Out;} uint8_t inByte; void setup() { myservo1.attach(9); // Подключение сервоприводов к порту myservo2.attach(10); // Подключение сервоприводов к порту D11_Out; D11_Low; // Динамик Headlamp_OFF; // Фары выкл по умолчанию for(uint8_t i=0; i<12; i++) beep(80, random(100, 2000)); //звуковое оповещение готовности робота init; // Инициализация портов //Buzzer; // Инициализация портов динамика UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); // Обновление таймера if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LED_ON; // Включить LedStep = 1; // Счетчик шагов } if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LED_OFF; // Выключить LedStep = 2; // Счетчик шагов } if (LedStep == 2 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. LedStep = 0; // Счетчик шагов } if (UART_ReadByte(inByte)) //Еесли что то пришло { switch (inByte) // Смотрим какая команда пришла { case "x": // Остоновка робота robot_stop; break; case "W": // Движение вперед robot_go; break; case "D": // Повопорт влево robot_rotation_left; break; case "A": // Поворот вправо robot_rotation_right; break; case "S": // Движение назад robot_back; break; case "U": // Серво поднимается myservo1.write(i -= 20); break; case "J": // Серво опускается myservo1.write(i += 20); break; case "H": // Серво поворачивается влево myservo2.write(i += 20); break; case "K": // Серво поворачивается вправо myservo2.write(i -= 20); break; case "Y": // Серво поворачивается 85 myservo1.write(85); myservo2.write(85); break; case "F": // Включить фары Headlamp_ON; break; case "V": // Выключить фары Headlamp_OFF; break; case "I": // Гудок Buzzer; break; } } wdt_reset(); }

Внесение изменений в роутер
Для того что бы управлять камерами были внесены изменения в библиотеку роутера. Вам нужно будет скачать измененный код и заменить исходные файлы ним.

В процессе изучения и проектирования всё более сложных проектов приходит время, когда возникает необходимость и желание научиться работать с таким распространенным видом связи как WiFi. Так как именно такой вид связи может позволить комфортно создать единую сеть для ваших умных домашних устройств и управлять ими, например, с мобильного телефона, планшета или компьютера, то есть другими словами создать самый настоящий умный дом, который обойдется вам в десятки раз дешевле, чем покупать готовые решения в магазине. Применение WiFi конечно не ограничивается на этом и примеров использования данного вида связи настолько много, что перечислять их нет смысла, и если Вы попали на эту страницу, значит, использование WiFi вам уже зачем-то понадобилось, осталось только разобраться, как правильно с ним работать.

Разбираться мы будем на основе самого дешевого и популярного WiFi модуля ESP8266-01 . Купить WiFi модуль ESP8266-01 можно у нас на сайте.

Один из главных плюсов такого модуля это наличие памяти и своего микроконтроллера на плате, что позволяет работать ему самостоятельно, загрузив скетч непосредственно в сам модуль.

Модификаций WiFi модуля ESP8266 на самом деле достаточно много и перечислять их здесь мы не будем, научившись работать с одним, Вы без проблем сможете начать работать и с другими. Хочется сразу отметить, что работа с WiFi может показаться довольно не простым занятием, и если в Вашем багаже мало законченных проектов, лучше пока отказаться от WiFi связи и использовать в своих проектах радиосвязь, работа с которой гораздо проще для понимания. По работе с WiFi модулями создают целые сообщества и тематические форумы, что лишний раз доказывает насколько большинству людей трудно сразу разобраться с данным видом связи, а перечитывая всю информацию, у большинства людей просто опускаются руки. Скорей всего и мне не удастся всю важную информацию вместить в рамках только одной этой статьи, да и нет в этом смысла, иначе получится очередная путаница. Я попытаюсь пойти по пути строгой последовательности самых важных моментов, чтобы Вы смогли начать понимать принцип работы данного вида связи и далее уже просто развивать самостоятельно свои навыки в этом направлении.

И так, давайте приступим и для начала разберем выводы WiFi модуля ESP8266-01 .

VCC - питание модуля от 3V до 3.6V

GND - земля.

RST - вывод Reset отвечающий за перезагрузку модуля.

CH_PD - "chip power-down" при подаче питания на него активизируется работа модуля.

TX - передача данных (UART интерфейс)

RX - прием данных (UART интерфейс)

GPIO0

GPIO2 - порт ввода/вывода общего назначения

Выводы GPIO0 и GPIO2 - это точно такие же цифровые выводы, с которыми мы работаем на платах Arduino для взаимосвязи с различными датчиками, и применяются они в случае реализации самостоятельной работы на внутреннем микроконтроллере WiFi модуля ESP8266-01.

Для надежного питания модуля ESP8266-01 используйте внешний стабилизированный источник питания на 3.3V и лучше не пытайтесь брать питание от своей платы Arduino, так как модуль потребляет ток до 215mA и это может плохо закончится для вашей отладочной платы. Где взять стабилизированный источник питания на 3.3V надеюсь для вас не проблема, в противном случае вам явно еще рано заниматься данным модулем. Мне, например, нравится использовать для быстрого сбора схем на макетных платах вот такой модуль питания 3.3V и 5.0V YWRobot , который позволяет быстро получить стабилизированное напряжение на 3.3V или 5V на соответствующих дорожках питания макетной платы.

Подключаем плюс (+) от нашего источника питания 3.3V к выводу VCC модуля ESP8266-01, а минус (-) источника питания подводим к выводу GND . В таком состоянии на модуле включится красный светодиод, сигнализирующий нам о правильном подключении питания. Для того чтобы модуль активизировался, необходимо также соединить плюс (+) источника питания с выводом CH_PD модуля ESP8266-01 и желательно это сделать сразу через резистор 10кОм. Теперь, когда мы включим питание, на модуле должен загореться красный светодиод и пару раз быстро мигнуть синий светодиод. Если у вас так все и происходит, значит все отлично, вы правильно все подсоединили и ваш модуль рабочий. В противном случае еще раз проверьте подключение, либо замените модуль, так как он скорей всего не рабочий.

Идем дальше. Для работы с WiFi модулем ESP8266 нам необходим переходник USB-UART. Переходники бывают разные, например: FT232RL , CP2102 , PL2303 . Но мы предположим, что у вас нет таких переходников, и будем в качестве переходника USB-UART использовать плату Arduino. Я буду использовать для этого плату Arduino NANO, а вы можете использовать любую другую имеющуюся в вашем распоряжении. Подключение на любой плате один в один идентично. Производим подключение согласно следующей схеме.

Давайте рассмотрим, что мы здесь сделали. Сразу обратите внимание на то, что мы замкнули перемычкой на плате Arduino выводы RST и GND . Такая манипуляция отключает микроконтроллер и позволяет сделать из нашей платы Arduino самый настоящий переходник USB-UART.

Так как WiFi модуль ESP8266-01 мы питаем от отдельного внешнего источника питания, незабываем, что мы должны всегда соединять между собой землю всех источников питания в наших проектах. Поэтому мы соединяем вывод GND платы Arduino c землей (-) нашего внешнего источника питания 3.3V, предназначенного для питания модуля ESP8266-01.

Вывод TX вашей платы Arduino соединяем с выводом TX модуля ESP8266-01. По этой линии будут передаваться данные от WiFi модуля к плате Arduino. Кто знаком с UART интерфейсом, может задуматься: "Но как же так? Везде учили, что TX должен соединяться с RX. TX передает информацию, а RX принимает". И Вы будете правы. Всё верно всегда TX соединяется с RX, но именно в случае, когда мы делаем из Arduino переходник UART, необходимо подключать устройства напрямую. Считайте это исключением из правил.

Линию RX вашей платы Arduino подключаем так же напрямую к линии RX модуля ESP8266-01. По этой линии будет передаваться информация от платы Arduino на плату WiFi модуля. Но делаем это соединение через так называемый делитель напряжения, состоящий из двух резисторов номиналами 1кОм и 2кОм. Уменьшить напряжение на этой линии с помощью двух резисторов (делителя напряжения) нам необходимо, так как плата Arduino передает логический сигнал напряжением 5V, а WiFi модуль работает с напряжением 3.3V. Для преобразования логического сигнала мы могли бы использовать специальную платку преобразователя логических уровней, что было бы конечно правильней, но опять же предположим, что у вас ее нет, и нам пришлось пойти более простым путем и сделать это с помощью делителя напряжения.

Всё необходимое для дальнейшей работы мы пока подключили, но у нас остаются не задействованные ещё 3 вывода (GPIO0 , GPIO2 и RST ) на WiFi модуле ESP8266-01 . Для стабильной работы WiFi модуля нам необходимо эти оставшиеся не задействованные выводы подтянуть к плюсовой (+) линии питания модуля через резисторы в 10кОм.

Это избавит нас от различных помех (наводок) и сделает работу модуля стабильной. Лучше это делать сразу. В противном случае не удивляйтесь, что ваш модуль постоянно перегружается, выдает не понятную информацию, либо вообще не хочет работать. Использовать подтягивающие резисторы на незадействованных выводах микроконтроллера должно быть, как правило, если хотите стабильной работы в ваших проектах.

И снова проверяем работоспособность модуля WiFi ESP8266-01. Включаем питание и смотрим, чтобы зажегся красный светодиод и пару раз мигнул синий. Если всё так происходит, значит отлично, идем дальше. В противном случае проверяем правильность соединений, а так же качество всех контактов. Может быть просто банальная ситуация, когда десять раз все перепроверили и убедились, что все правильно подключили, но включая модуль, видите, что синий светодиод ведет себя не адекватно, постоянно горит, постоянно мигает или вообще не на что не реагирует. Это может происходить из-за плохого контакта на какой-то линии. Например, собирая схему на макетной плате, какой-нибудь из резисторов неплотно сидит на своем месте и это вызывает помехи. Проверяйте качество соединений. Модуль очень чувствителен. Не пренебрегайте этим. Это частая причина не стабильной работы.

В общем, с подключением мы закончили. Сейчас нам необходимо подготовить программу Arduino IDE для работы с WiFi модулем ESP8266-01. Для этого нам надо скачать и установить в Arduino IDE необходимый архив с библиотеками, примерами и платами ESP, который впоследствии позволит нам заливать скетчи прямо в микроконтроллер модуля ESP8266-01, менять прошивку и т.д. В рамках этой статьи нам скорей всего эти настройки и не понадобятся, но мне кажется, что после того, как мы разобрались с подключением модуля, порядок действий будет правильным, если мы сразу скачаем все необходимое для работы с Arduino IDE. Тут все в принципе просто.

Запускаем программу Arduino IDE и переходим в меню "Файл" - "Настройки"

В появившемся окне в верхнем поле пишем "esp8266". В итоге в окне у нас останется только нужная прошивка. При нажатии на прошивку появится кнопка "Установка" . Нажимаем на кнопку "Установка" и ждем, пока все установится. Архив достаточно большой, около 150 мегабайт, так что придется подождать.

После окончания установки. Перезагружаем Arduino IDE и видим, как появились новые платы ESP в меню "Инструменты" - "Платы". На этом всё. С настройкой Arduino IDE мы закончили. Пока нам эти настройки не нужны, но в дальнейшей работе нам без них не обойтись.

Всё мы подключили и подготовились, теперь можем начать разбираться с управлением. На самом деле, сейчас будет продолжение проверки и настройки модуля с помощью AT команд и без этого ни как не обойтись. WiFi модули реализованы так, что всё общение с ними происходит с помощью так называемых AT команд, которые зашиты в прошивке модуля. Мы не будем здесь перечислять все AT команды, их достаточно много и если захотите все тщательно изучить, можете без труда их найти в интернете. А мы будем использовать сейчас только самые необходимые для начала работы.

И так, подключаем нашу плату Arduino через USB кабель к компьютеру. А внешний источник питания, который питает WiFi модуль ESP8266-01 пока включать не надо. Запускаем программу Arduino IDE, выбираем в меню "Инструменты" нашу плату Arduino, в моем случае это Arduino NANO, а вы выбираете свою. Так же не забываем выбрать порт к которому подключена наша Ардуинка. Надеюсь все это вы понимаете и делать умеете.

Открываем мониторинг порта "Инструменты" - "Монитор порта" . Выбираем скорость порта 74880 (на такой скорости происходит запуск модуля) и слева в списке выбираем "NL & CR"

Вот теперь подключаем внешний источник питания который питает наш WiFi модуль. После чего вы должны увидеть в мониторе порта примерно такую информацию.

Здесь мы видим некоторую информацию по нашему WiFi модулю (скорость, количество памяти на борту и т.д.). Полученная информация может отличаться в зависимости от версии прошивки WiFi модуля. Не будем на этом заострять внимание. Важно другое. Внизу мы видим набор бессмысленных символов, это означает, что скорость порта (74880 бод), которую мы выставили, подходит только для начальной загрузки модуля, чтобы увидеть нормально эту информацию, но эта скорость не подходит для нормального общения с WiFi модулем.

Чтобы подобрать правильную скорость порта, будем просто изменять скорость порта и посылать в порт (поле сверху и кнопка отправить) символы AT пока не получим ответ ОК . Если Вы попробуете прямо сейчас послать символы AT в порт на скорости 74880, то будете получать очередные один-два бессмысленных символа в ответ.

Попробуйте сразу выставить скорость 115200 бод и послать команду AT. Чаще всего модули прошиты на эту скорость.

Вот такую картину вы должны увидеть в вашем мониторе порта. Если все равно в ответ пришел непонятный набор символов, понижайте скорость и повторяйте отправку AT команды, пока в ответ не вернется ОК . Если вы перепробовали все скорости и не добились правильного ответа, значит вам не повезло и модуль прошит прошивкой с нестандартной скоростью. Тогда остается только перепрошить модуль нормальной прошивкой, но это тема отдельной статьи.

Надеюсь, что все хорошо и скорость правильную вы подобрали. Кстати если вы попробуете выключить и снова включить WiFi модуль, после того как подобрали правильную скорость, то уже вместо той самой первоначальной информации, которая корректно отображалась на скорости 74880 бод, вы наоборот, увидите беспорядочный набор символов, но в конце вы увидите слово "ready". Но у нас есть возможность посмотреть эту первоначальную информацию в нормальном виде на правильной скорости, для этого необходимо программно перезагрузить модуль с помощью AT-команды AT+RST .

Чтобы узнать версию прошивки вашего WiFi модуля ESP8266-01, необходимо в монитор порта отправить команду AT+GMR и в ответ вы получите примерно следующую информацию:

WiFi модуль ESP8266-01 может работать как в режиме точки доступа, так и в режиме клиента. Чтобы разрешить модулю работать сразу во всех режимах, отправьте в монитор порта команду AT+CWMODE=3 и в ответ вы должны получить ОК .

Команда AT+CWLAP позволит посмотреть все WiFi точки доступа, которые видит в данный момент ваш модуль. Мой модуль, например, видит на данный момент в зоне своего покрытия всего три WiFi точки доступа. Ответ должен быть примерно таким:

Например, мы знаем пароль к третьей точке доступа и чтобы подключиться к ней выполняем команду AT+CWJAP="имя","пароль" , в моем случае эта команда выглядит AT+CWJAP="dsl_unlim_512_home","11111111" , на что получаем успешный ответ:

Параметры команды записываются на флеш память WiFi модуля ESP8266-01, и если мы выключим модуль и опять его включим, он автоматически подключится к этой точке доступа. Смотрите случайно в команде не допустите пробел, иначе получите в ответ ERROR . Необходимо обратить внимание, что в последних версиях прошивки рекомендуют использовать команду AT+CWJAP_CUR , то есть команда будет выглядеть AT+CWJAP_CUR="имя","пароль". Если вдруг мы забыли, к какой точке доступа подключен наш модуль, необходимо послать команду AT+CWJAP? или AT+CWJAP_CUR? и в ответ получим ту точку доступа, к которой подключен WiFi модуль на данный момент.

С подключением и первоначальной настройкой WiFi модуля ESP8266-01 мы разобрались. Модуль работает и готов для реализации ваших дальнейших проектов. Разобрать все возможные примеры работы с данным модулем в рамках одной статьи просто не возможно и мы этим займемся в следующих статьях. А для тех, кто не очень дружит с программированием, но очень хочет побыстрей начать управлять своими проектами с помощью WiFi, рекомендую познакомить с конструктором WiFi проектов RemoteXY . Этот сайт поможет вам без особого труда создать интерфейс управления для вашего мобильника или планшета и с помощью него управлять своим устройством, к которому вы подключите WiFi модуль.

Часть 1

Последовательный WIFI модуль для Arduino

Это первая из трех инструкций, которая поможет вам использовать ESP8266 с Arduino. В этом первом руководстве вы узнаете, как установить и протестировать работу модуля, подсоединенного к Arduino.

ESP8266 – это, наверное, самый универсальный модуль с последовательным интерфейсом для соединения различных физических предметов («вещей») с интернетом, поэтому он так популярен в сфере «Интернета вещей». Это законченный модуль, который состоит из микропроцессора, доступного для программирования напрямую через ArduinoIDE (C++), или в любой другой среде программирования (обычно используется язык высокого уровня “LUA”).

Для управления «вещами» не нужна сама плата Arduino в качестве интерфейса, потому что ESP8266 уже имеет 2 GPIO (Интерфейс ввода/вывода общего назначения). Множество дополнительной важной информации вы сможете найти на форуме, посвященном ESP8266.

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

  • 802.11 b / g / n
  • Wi-FiDirect (P2P), программная точка доступа soft-AP
  • Интегрированный стек протоколов TCP / IP
  • Интегрированный TR свитч, балун, LNA, усилитель мощности и согласующая сеть (matchingnetwork)
  • Интегрированные PLL, регуляторы, DCXO и системы управления мощностью
  • + 19.5 дБ выходная мощность в режиме 802.11b
  • Отключение при превышении утечки тока <10uA
  • 1MB флэш память
  • Интегрированный 32-битный центральный процессор с низким энергопотреблением, может быть использован как процессор приложений
  • SDIO 1.1 / 2.0, SPI, UART STBC, 1 × 1 MIMO, MIMO 2 × 1
  • A-MPDU и A-MSDU агрегирование, 0.4 мс пустой промежуток
  • Wakeup пакеты и передача <2мс
  • Потребление энергии в режиме ожидания <1.0мВт (DTIM3)

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

До сих пор я изучал только ESP8266 в соединении с Arduino, заменяя необходимость в более дорогих WiFi шилдах. (Шилд – это печатная плата, которую вы устанавливаете на Arduino для увеличения его функциональности).

Шаг 1: ESP 8266 характеристики и пины



Итак, сначала необходимо протестировать модуль AT командами, которые являются стандартными. Как правило, модуль поставляется от производителя с установленными настройками скорости передачи данных в 115200 бодов. Иногда это создает неудобства, например, в случае с ArduinoUNO, только однажды HWSerial “0” (пины 0 и 1) мог работать на такой скорости. Проблема в том, что программа SerialMonitor для PC также использует этот последовательный порт. («PC» используется здесь как усредненный термин, надеюсь, мой Macне слышит меня;) Решение для ArduinoUNO нашлось в виде использования библиотеки "SoftwareSerial", чтобы заставить два других универсальных пина (GPIO) работать в режиме последовательного порта (SW). Это хорошо работает тогда, когда скорость передачи данных не превышает 19200 бодов. Отлично! Но что делать, если ESP8266 изначально запрограммирован на работу с более высокой скоростью? Решением может быть перепрограммирование. Но не все прошивки, которые загружены в устройство на заводе, поддерживают перепрограммирование модуля. Таким образом, сначала нужно обновить прошивку. В некоторых постах в интернете описывается, как это сделать. Я не буду загружать вас перепрошивкой, скоростью и т.д., для упрощения процесса будет использована плата ArduinoMEGA, на которой есть 4 аппаратных последовательных порта (4 HWserialports) .

Порты на плате MEGA:

  • TX0 / RX0 ==> Pin 1, 0 (то же, что UNO) ==> "Serial 0"
  • TX1 / RX1 ==> Pin 18, 19 ==> "Serial1"
  • TX2 / RX2 ==> Pin 16, 17 ==> "Serial2"
  • TX3 / RX3 ==> Pin 14, 15 ==> "Serial3"

Для моих тестов я буду использовать последовательный порт 2 (Serial 2) (пины 16 и 17).

Давайте подробнее рассмотрим модуль:

  • Питание: 3.3 В. Это важно, т.к. модуль не работает с напряжением в 5 В, и может сгореть. Входные пины также не поддерживают напряжение 5 В, поэтому при получении сигнала Arduino важно использовать конвертер уровня напряжения (как раньше их называли «делитель напряжения»). Другая важная вещь – это иметь независимый источник питания на 3.3 В, т.к. не всегда Arduino выдает требуемый ток для корректной работы модуля.
  • Модуль имеет 6 пинов:
    • TX: он будет подсоединен к RX2 на плате MEGA (может быть соединен напрямую, т.к. MEGA интерпретирует 3.3 В как HIGH)
    • RX: TX2 подсоединен к MEGA через конвертер уровня напряжения
    • VCC: 3.3В
    • GND: Земля. Важно помнить, что необходимо подсоединять GND платы ESP8266 к GND на плате MEGA.
    • CH_PD (*) : подсоединен к пину 4 последовательного порта на плате MEGA, сброс для начала обмена данными
    • RST: Сброс, обычно подсоединяется к VCC
    • GPIO0: свободно (Интерфейс ввода/вывода общего назначения)
    • GPIO2: свободно (Интерфейс ввода/вывода общего назначения)

(*)На некоторых сайтах в интернете показано, что этот пин напрямую подсоединен к VCC. В моем случае без «сброса» по последовательному порту SW (устанавливает пин в значение LOW) ESP8266 не работает.

Продаются адаптеры для включения модуля в макетную плату, т.к. физически расстояние между пинами ESP8266 не совпадает с отверстиями на макетной плате. Для соединения я использовал обычный кабель «мама/папа» типа FTDI (см. ниже). Цвета совпадают с диаграммой соединений.

Шаг 2: Цепь, которая будет использована в тестах

Ничего особенного в диаграмме аппаратных последовательных соединений (HW). Красная пластина – это независимый источник питания 3.3 В, смонтированный на макетной плате. Обратите внимание, что желтый провод соединен с TX2 на Arduino, проходит через делитель напряжения (1K и 2.2K резисторы), таким образом TX2 – это HIGH (5В), ESP8266 получает примерно 3.3В (для него это HIGH).

Шаг 3: Тестирование ESP8266 с помощью AT-команд

Идея этого скетча состоит в тестировании и настройке модуля, который позволяет вводить AT-команды и видеть вывод в программе SerialMonitor.

В части «комментарии» перечислены основные AT-команды. В начале загрузки программы после имени модуля вы увидите много ненужного для нас текста в окне SerialMonitor, затем слово «ready». С этого момента вы можете вводить AT-команды.

Начните с простого «АТ», модуль должен ответить «ОК», протестируйте другие команды.

Картинка показывает, что должно появляться в окне SerialMonitor после того, как вы ввели различные команды.

  • AT для тестовых примеров:
    • AT =====> ESP8266 возвращает OK
    • AT + RST =====> ESP8266 рестарт и возврат OK
    • AT + GMR =====> ESP8266 возвращает версию AT; SDK version; id; OK
    • AT + CWMODE? => ESP8266 возвращает режим работы
    • AT + CWLAP ===> ESP8266 возвращает обнаруженные точки доступа
    • AT + CIFSR ===> ESP8266 возвращает установленный IP
    • AT + CIPMUX = 1 ==> Устанавливает плате ESP8266 режим работы с несколькими соединениями
    • AT + CIOBAUD = 9600 ==> Изменить скорость обмена данными ==> ESP8266 возвращает OK
    • AT + CIPSERVER = 1.80 ==> Устанавливает режим SERVER порт: 4040
    • AT + CWMODE = 3 ==> Работа ESP8266 в комбинированном режиме (точка доступа (2) и сервер (1))
    • AT + CWSAP = "Acc_Point_name", "password", wifi_Channel, cript # ==> j.
    • AT + CWSAP = "ESP_8266_AP," 1234 ", 3.0
    • AT + CWJAP = "SSID", "password" ==> Подключается к сети WiFi
    • * = AT + CWJAP "ROVAI TIMECAP", "-1 mjr747"

****************************************************************** /