Управление машинкой через WiFi с помощью ESP8266 NodeMCU. Возможности подключения Wi-Fi модуля esp8266 к arduino

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

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

Сейчас большая часть пользователей ардуино уже не беспокоится о цене подобных девайсов, хотя ещё 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.

Добрый день!

Недавно заинтересовался идеей создания «умного дома». Так как из необходимых компонентов в моем распоряжении пока что имеются только arduino и телефон на андроиде, решено было начать с создания пульта управления и связи его с остальной частью системы.

Моё видение системы выглядит так:

Думаю стоит совместить домашний и веб-серверы, прикупив статический айпишник, но на первое время сойдет и так. Начнем с простого – научимся удаленно управлять светодиодом и LCD-дисплеем.

Web-server
На веб-сервере создаем БД с двумя таблицами – leds и texts. Таблица leds содержит 2 поля – id и status. Она содержит одну запись с актуальным состоянием светодиода. Таблица texts содержит 2 поля – id и text. Она также содержит одну запись с текстом, который в данный момент отображается на LCD-дисплее.

Теперь напишем пару скриптов, которые будем вызывать с телефона и передавать информацию для БД. Пишем на php.

Скрипт led.php (управление светодиодом):

Скрипт msg.php (управление LCD-дисплеем):

Я думаю, что из комментариев ясно, как работают эти скрипты. Это все, что находится на веб-сервере. Теперь перейдем к домашнему серверу (или говоря проще, компьютеру, к которому подключен ардуино).

Домашний сервер
На нем будет постоянно работать программка (можно даже назвать ее – демон), посылающая запросы к БД и при изменении находящейся там информации, посылающая на COM-порт с ардуино соответствующую команду. Программку напишем на языке Processing:

Import processing.serial.*; //библиотека для работы с COM-портом import de.bezier.data.sql.*; //библиотека для работы с БД MySQL Serial port; MySQL dbconnection; int prevLEDState = 0; //предыдущее состояние светодиода String prevS = ""; //предыдущий текст, отпаврленный на LCD-дисплей void setup() { port = new Serial(this, "COM4", 9600); //инициализируем COM-порт 4 (на не прицеплена ардуина), скорость обмена - 9600 бод port.bufferUntil("\n"); String user = "имя_пользователя"; String pass = "пароль"; String database = "имя_бд"; dbconnection = new MySQL(this, "ваш_домен.ru", database, user, pass); //соединяемся с БД dbconnection.connect(); } void draw() { //следим за информацией о светодиоде в БД dbconnection.query("SELECT * FROM leds WHERE id = "1""); //делаем запрос к таблице leds while (dbconnection.next()) //обходим выборку из результата запроса { int n = dbconnection.getInt("status"); //получаем значение из поля status if (n != prevLEDState) //если оно изменилось по сравнению с предыдущем "тактом" работы программы, то посылаем команду на COM-порт { prevLEDState = n; port.write("1"); //первый переданный символ будет означать код выполняемой операции: 1 - управление светодиодом, 2 - управление LCD-дисплеем port.write(n); } } //следим за информацией о LCD-дисплее в БД dbconnection.query("SELECT * FROM texts WHERE id = "1""); //делаем запрос к таблице texts while (dbconnection.next())//обходим выборку из результата запроса { String s = dbconnection.getString("text"); //получаем значение из поля text if (s != prevS) { prevS = s; port.write("2"); port.write(s); } } delay(50); //делаем задержку в 50 мс, чтобы не слать запросы непрерывно }
Пояснять этот код я тоже не стану, все и так понятно.
Еще 1 важный момент. Чтобы программа с нашего компьютера могла обращаться к БД, расположенной на удаленном сервере, надо это разрешить. Вводим наш ip в список разрешенных:

Приложение для телефона
Телефон у меня андроиде, для него и пишем. Не буду сильно вдаваться в подробности (очень хорошо как о установке среды программирования, так и о написании первого приложения написано вот в этой статье - ссылка).

Внешний вид приложения выглядит довольно скромненько, но в данном случае это не главное:

Приведу только отрывки кода программы под Android. Функция, вызывающая скрипт, управляющий светодиодом:
public void changeLED() { try { URL url1 = new URL("http://ваш_домен.ru/led.php"); HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection(); try { InputStream in = new BufferedInputStream(urlConnection.getInputStream()); } finally { urlConnection.disconnect(); } } catch (Exception e) { } }
Функция, отсылающая текст для отображения на LCD-дисплее:
public void submitMsg() { final EditText tt = (EditText) findViewById(R.id.editText1); try { URL url1 = new URL("http://ваш_домен.ru/msg.php?msg="+tt.getText()); HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection(); try { InputStream in = new BufferedInputStream(urlConnection.getInputStream()); } finally { urlConnection.disconnect(); } } catch (Exception e) { } }
Ну и главная функция, в которой происходит привязка обработчиков событий к кнопкам:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn1 = (Button) findViewById(R.id.button1); btn1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) // клик на кнопку { changeLED(); } }); final Button btn2 = (Button) findViewById(R.id.button2); btn2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) // клик на кнопку { submitMsg(); } }); }
И еще один важный момент – добавить разрешение приложению на выход в интернет. Для этого в файл AndroidManifest.xml (он находится в директории нашего андроид-приложения) надо добавить строчку:

Экспортируем наше приложение в файл APK и устанавливаем на телефон. Пульт управления умным домом готов!

Arduino
Ну и наконец последнее, но не по значению – подключение ардуино и ее прошивка. Схема подключения LCD-экрана и светодиода к Arduino Uno выглядит следующим образом:

Резистор берем на 220 Ом. Более подробно про подключение LCD-экрана можно прочитать здесь - ссылка

А вот как это все выглядит в реальности:

Правда красиво?

Задача ардуино состоит в прослушивании того, что программа-демон на домашнем сервере посылает на COM-порт, к которому и подключена ардуино (хотя фактически подключение идет по USB-кабелю, но компьютер распознает его как последовательный порт). После получения каких-либо данных с компьютера, контроллер по первому символу переданной информации распознает код команды (т.е. чем сейчас предстоит управлять – LCD-дисплеем или светодиодом). Далее в зависимости от кода и следующей за ним информации выполняется либо включение/выключение светодиода, либо вывод на дисплей переданного сообщения. Итак, вот собственно код:

#include //встроенная библиотека для работы с LCD-дисплеем boolean isExecuting = false; //переменная, отражающая, что уже идет выполнение какой-то команды //Cразу поясню, для чего это нужно. За каждый "такт" цикла loop ардуино считывает с COM-порта код одного символа. //Поэтому строка будет передаваться за несколько тактов. При этом перед каждой из двух возможных команд (смена состояния светодиода и передача текста на дисплей) //передается код этой команды (1 и 2 соответственно). Чтобы отделить коды команд от передаваемой далее информации (состояния светодиода или текста для дисплея), //используется эта переменная. LiquidCrystal lcd(4,5,10,11,12,13); //инициализация дисплея int ledPin = 8; //номер пина ардуино, на к которому подсоединен светодиод int prevLEDStatus = 0; //предыдущий статус светодиода (вкл/выкл) int newLEDStatus = 0; //новый статус светодиода int cmd = 0; //код выполняемой команды void setup() { Serial.begin(9600); //инициализация COM-порта (9600 - скорость обмена в бодах) pinMode(ledPin,OUTPUT); //инициализация 8-го пина ардуино как выхода lcd.begin(20,4); //инициализация LCD-дисплея (4 строки по 20 символов) } void loop() { if (Serial.available() > 0) //если на COM-порт пришла какая-то информация { if (isExecuting == false) //если в данный момент не идет выполнение никакой команды { cmd = Serial.read() - "0"; //считываем код выполняемой команды isExecuting = true; //теперь переменная показывает, что началось выполнение команды } if (cmd == 1) //управление светодиодом { newLEDStatus = (int) Serial.read(); //считываем новый статус светодиода if (newLEDStatus != prevLEDStatus) //если он изменился по сравнению с текущим статусом, то меняем текущий статус { digitalWrite(ledPin,newLEDStatus); prevLEDStatus = newLEDStatus; } } else //управление дисплеем { if (isExecuting == false) //если в данный момент не идет выполнение никакой команды { lcd.clear(); //очищаем экран } else { lcd.print((char)Serial.read()); //выводим символ на дисплей } } } else //если на COM-порт не пришла никакая информация { delay(50); //делаем задержку в 50 мс if (Serial.available() <= 0) //если информации по-прежнему нет isExecuting = false; //считаем, что никакая команда не выполняется } }
Я думаю, пояснений он не требует, так как я очень подробно все расписал в комментариях. Единственное, что стоит отметить, так это некоторые ограничения на передаваемые для вывода на дисплей строки. Они не должны содержать пробелов (это ограничение накладывается несовершенством моего алгоритма) и не должны содержать кириллицы (т.к. она поддерживается не всеми дисплеями, а если и поддерживается, то требует передачи кодов символов в своей собственной кодировке, преобразовывать символы в которую нет никакого желания).

Заключение
Ну вот и все. Оказалось, что это довольно просто.
Видео того как все работает:

Микросхема ESP8266 – один из самых популярных инструментов для организации беспроводной связи в проектах умного дома. С помощью беспроводного контроллера можно организовывать связь по интерфейсу WiFi, обеспечивая проектам Arduino выход в интернет и возможность дистанционного управления и сбора данных. На основе ESP8266 созданы такие популярные платы как WeMos и NodeMcu, а также огромное количество самодельных проектов. В этой статье, мы узнаем, что из себя представляет ESP82266, какие бывают ее разновидности, как работать с ESP8266 в среде Arduino IDE.

ESP8266 – микроконтроллер с интерфейсом WiFi, который имеет возможность исполнять программы из флеш-памяти. Устройство было выпущено в 2014 году китайской фирмой Espressif и практически сразу же стало популярным.

Контроллер недорогой, обладает небольшим количеством внешних элементов и имеет следующие технические параметры:

  • Поддерживает Wi-Fi протоколы 802.11 b/g/n с WEP, WPA, WPA2;
  • Обладает 14 портами ввода и вывода, SPI, I2C, UART, 10-бит АЦП;
  • Поддерживает внешнюю память до 16 МБ;
  • Необходимое питание от 2,2 до 3,6 В, потребляемый ток до 300 мА в зависимости от выбранного режима.

Важной особенностью является отсутствие пользовательской энергонезависимой памяти на кристалле. Программа выполняется от внешней SPI ПЗУ при помощи динамической загрузки необходимых элементов программы. Доступ к внутренней периферии можно получить не из документации, а из API набора библиотек. Производителем указывается приблизительное количество ОЗУ – 50 кБ.

Особенности платы ESP8266:

  • Удобное подключение к компьютеру – через USB кабель, питание от него же;
  • Наличие встроенного преобразователя напряжения 3,3В;
  • Наличие 4 Мб флеш-памяти;
  • Встроенные кнопки для перезагрузки и перепрошивки;
  • Все порты выведены на плату на две гребенки с шагом 2,5 мм.

Сферы применения модуля ESP8266

  • Автоматизация;
  • Различные системы для умного дома: Беспроводное управление, беспроводные розетки, управление температурой, дополнение к сигнализационным системам;
  • Мобильная электроника;
  • ID метки;
  • Детские игрушки;
  • Mesh-сети.

Распиновка esp8266

Существует огромное количество разновидностей модуля ESP8266. На рисунке представлены некоторые из них. Наиболее популярным вариантом является ESP 01.

Исполнение программы требуется задавать состоянием портов GPIO0, GPIO2 и GPIO15, когда заканчивается подача питания. Можно выделить 2 важных режима – когда код исполняется из UART (GPIO0 = 0, GPIO2 = 1 и GPIO15 = 0) для перепрошивки флеш-карты и когда исполняется из внешней ПЗУ (GPIO0 = 1, GPIO2 = 1 и GPIO15 = 0) в штатном режиме.

Распиновка для ESP01 изображена на картинке.

Описание контактов:

  • 1 – земля, 8 – питание. По документации напряжение подается до 3,6 В – это важно учесть при работе с Ардуино, на которую обычно подают 5 В.
  • 6 – RST, нужна для перезагрузки микроконтроллера при подаче на него низкого логического уровня.
  • 4 – CP_PD, также используется для перевода устройства в энергосберегающий режим.
  • 7 и 0 – RXD0 и TXD0, это аппаратный UART, необходимый для перепрошивки модуля.
  • 2 – TXD0, к этому контакту подключается светодиод, который загорается при низком логическом уровне на GPIO1 и при передаче данных по UART.
  • 5 – GPIO0, порт ввода и вывода, также позволяет перевести устройство в режим программирования (при подключении порта к низкому логическому уровню и подачи напряжения) .
  • 3 – GPIO2, порт ввода и вывода.

Распиновка ESP-12

Основные отличия Ардуино от ESP8266

  • ESP8266 имеет больший объем флеш-памяти, при этом у ESP8266 отсутствует энергонезависимая память;
  • Процессор ESP8266 быстрее, чем у Ардуино;
  • Наличие Wi-Fi у ESP8266;
  • ESP8266 потребляеn больше тока, чем для Ардуино;

Программирование ESP8266 в Arduino IDE

Программный комплект разработчика esp8266 включает в себя:

  • Компилятор из пакета GNU Compiler Collection.
  • Библиотеки, стеки протоколов WiFi, TCP/IP.
  • Средство загрузки информации в программу контроллера.
  • Операционная IDE.

Изначально модули ESP8266 поставляются с прошивкой от фирмы-изготовителя. С ее помощью можно управлять модулем с внешнего микроконтроллера, реализовывать работу с Wi-Fi как с модемом. Также существует множество других готовых прошивок. Некоторые из них позволяют настраивать работу модуля при помощи WEB-интерфейса.

Можно программировать из среды Arduino IDE. При ее помощи можно легко писать скетчи и загружать их в ESP8266, прошивать ESP8266, при этом не требуется сама плата Ардуино. Arduino IDE поддерживает все виды модулей ESP8266.

В настоящий момент для ESP8266 можно реализовать следующие функции:

  • Основные функции языка Wiring. Управлять портами GPIO можно точно так же, как и пинами на плате Ардуино: pinMode, digitalRead, digitalWrite, analogWrite. Команда analogRead(А0) позволяет считать значения АЦП. При помощи команды analogWrite (pin, value) можно подключить ШИМ на нужном выходе GPIO. При value=0 ШИМ отключается, максимальное значение достигает константы, равной 1023.С помощью функций attachInterrupt, detachInterrupt можно выполнять прерывание на любом порте GPIO, кроме 16.
  • Тайминг и delay. Используя команды millis и micros можно вернуть мс и мкс, которые прошли с момента старта. Delay позволяет приостановить исполнение программы на нужное время. Также функция delay(…) позволяет поддерживать нормальную работу Wi-Fi, если в скетче присутствуют большие элементы, которые выполняются более 50 мс. Yield() – аналог функции delay(0).
  • Serial и Serial1 (UART0 и UART1). Работа Serial на ESP8266 аналогична работе на ардуино. Запись и чтение данных блокируют исполнение кода, если FIFO на 128 байт и программный буфер на 256 байт заполнены. Объект Serial пользуется аппаратным UART0, для него можно задать пины GPIO15 (TX) и GPIO13 (RX) вместо GPIO1(TX) и GPIO3(RX). Для этого после функции Serial.begin(); нужно вызвать Serial.swap();. Аналогично Serial1 использует UART1, который работает на передачу. Необходимый пин для этого GPIO2.
  • Макрос PROGMEM. Его работа аналогична работе в Ардуино. Позволяет перемещать данные read only и строковые постоянные во flash-память. При этом в ESP8266 не сохраняются одинаковые константы, что приводит к дополнительной трате флеш-памяти.
  • I2C. Перед началом работы с шиной I2C выбираются шины с помощью функции Wire.pins(int sda, int scl).
  • SPI, OneWire – поддерживаются полностью.

Использование esp8266 для связи Ардуино по WiFi

Перед подключением к Ардуино важно помнить, что у ESP8266 напряжение питания не может быть выше 3,6, в то время как на пате Ардуино напряжение равно 5 В. Соединять 2 микроконтроллера нужно с помощью резистивных делителей. Перед подключением модуля нужно ознакомиться с распиновкой выбранного ESP8266. Схема подключения для ESP8266-01 представлена на рисунке.

3,3 В с Ардуино – на Vcc&CH_PD на модуле ESP8266, Земля с Ардуино – к земле с ESP8266, 0 – TX, 1 – RX.

Для поддержки стабильной работы ESP8266 необходим источник постоянного напряжения на 3,3 В и максимальный ток 250 мА. Если питание происходит от конвертера USB-TTL, могут происходить неполадки и сбои в работе.

Работа с библиотекой Wi-Fi для ESP8266 схожа с библиотекой для обыкновенного шилда. Имеется несколько особенностей:

  • mode(m) – для выбора одного из трех режимов: клиент, точка доступа или оба режима единовременно.
  • softAP(ssid) – нужен для создания открытой точки доступа.
  • softAP(ssid, password) – создает точку доступа с паролем, который должен состоять не менее чем из 8 знаков.
  • WiFi.macAddress(mac) и WiFi.softAPmacAddress(mac)– определяет МАС адрес.
  • WiFi.localIP() и WiFi.softAPIP() – определение IP адреса.
  • printDiag(Serial); – позволят узнать данные о диагностике.
  • WiFiUDP – поддержка передачи и приема multicast пакета в режиме клиента.

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

  • Подключение USB-TTL к USB и к ESP.
  • Запуск Arduino IDE.
  • Выбрать в меню инструменты нужный порт, плату, частоту и размер flash-памяти.
  • Файл - Примеры - ESP8266WiFi - WiFiWebServer.
  • Записать в скетче SSID и пароль сети Wi-Fi.
  • Начать компиляцию и загрузку кода.
  • Дождаться окончания процесса прошивки, отсоединить GPIO0 от земли.
  • Поставить скорость 115200.
  • Произойдет подключение, будет записан адрес IP.
  • Открыть браузер, ввести в адресной строке номер IP/gpio/1
  • Посмотреть монитор порта, если к выходу GPIO2 подключен светодиод, он должен загореться.

NodeMCU на базе esp8266

NodeMCU – это платформа, основанная на базе модуля esp8266. Используется для управления схемой на расстоянии при помощи интернета через Wi-Fi. Плата малогабаритная, компактная, стоит дешево, на лицевой стороне имеется разъем для USB. Рядом кнопки для отладки и перезагрузки микроконтроллера. Также установлен чип ESP8266. Напряжение питания – от 5 до 12 В, желательно подавать более 10 В.

Большим преимуществом платы является ее малое энергопотребление. Нередко их используют в схемах с автономным питанием. На плате расположены всего 11 портов общего назначения, из них некоторые имеют специальные функции:

  • D1 и D2 – для интерфейса I2C/ TWI;
  • D5-D8- для интерфейса SPI;
  • D9, D10 – для UART;
  • D1-D10 – могут работать как ШИМ.

Платформа имеет современное API для аппаратного ввода и вывода. Это позволяет сократить количество действий во время работы с оборудованием и при его настройке. С помощью прошивки NodeMCU можно задействовать весь рабочий потенциал для быстрой разработки устройства.

WeMos на базе esp8266

WeMos – еще один вид платформы, основанный на базе микроконтроллера esp8266. Соответственно, имеется Wi-Fi модуль, поддерживается Arduino IDE, имеется разъем для внешней антенны. Плата имеет 11 цифровых входов/выходов, которые (кроме D0) поддерживают interrupt/pwm/I2C/one-wire. Максимальное напряжение питания достигает 3,3 В. Также на платформе присутствует USB разъем. Аналоговый вход 1 с максимальным напряжением 3,2В.

Для работы с модулем нужно установить драйвер CH340 и настроить Ардуино IDE под ESP8266. Для этого нужно в меню настройки в строке «дополнительная ссылка для менеджера плат» добавить адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json.

После этого требуется найти пакет esp8266 by ESP8266 и установить его. Затем нужно выбрать в меню инструменты микроконтроллер Wemos D1 R2 и записать нужный скетч.

Выводы по ESP8266

С помощью плат на основе микросхемы ESP8266 вы можете добавить в свои проекты возможности “большого интернета”, сделав их гораздо более интеллектуальными. Дистанционное управление, сбор и анализ данных на сервере, обработка голоса и работа с изображением – все это становится доступным, когда мы подключаем наш проект по WiFi к интернету. В следующих статьях мы подробно рассмотрим то, как можно программировать устройства на базе esp8266, а также уделим внимание таким популярным платам как WeMos и NodeMcu.

Начнем сначала.

Чип ESP 8266

Чип ESP8266 разработан специально для «интернета вещей». Существует два варианта использования этого чипа. Первый - в качестве моста UART-WIFI для подключения к микроконтроллеру и управления АТ-командами. Второй вариант - чип сам исполняет роль управляющего контроллера. По моим оценкам в среде любителей электроники чип чаще используется как управляющий контроллер.

Возможности чипа:

  • Поддержка 802.11 b/g/n
  • Встроенный 32-bit MCU с низким энергопотреблением
  • Встроенный 10-bit ADC
  • Встроенный стек TCP/IP
  • Встроенный усилитель ВЧ сигнала
  • Поддержка разнесения антенн
  • WiFi 2.4 GHz, поддержка WPA/WPA2
  • Поддержка STA/AP/STA+AP режимов
  • SDIO 2.0, (H) SPI, UART, I2C, I2S, IR Remote Control, PWM, GPIO
  • STBC, 1x1 MIMO, 2x1 MIMO
  • A-MPDU & A-MSDU aggregation & 0.4s guard interval
  • Выходная мощность +20 dBm в 802.11b режиме

Чип является высокоинтегрированным решением для работы с WiFi. Внутри чипа удалось разместить все, что нужно. Типовая минимально необходимая для работы обвязка микросхемы состоит всего из семи элементов.

Фотографии для сравнения количества компонентов аналогичных решений.

По одним данным всей этой прелестью управляет 32-разрядное процессорное ядро Xtensa LX106, по другим данным - Tensilica’s L106 Diamond. Под микроскопом выглядит чип как целый город из связанных элементов.

Одной из самых важных характеристик является энергопотребление. У ESP8266 оно просто поражает:

  • 215mA в режиме непрерывной передачи.
  • 1mA в режиме поддержания связи с точкой доступа
  • 10uA в режиме глубокого сна с работающими часами реального времени
  • 0,5uA в режиме Power OFF

Время необходимое на пробуждение и начало передачи пакета менее 2ms. Например, при измерении температуры каждые 100 секунд и подключении к точке доступа и передаче накопленных данных каждые 300 секунд (все остальное время чип спит) средний ток составит около 1mA. Это более трех месяцев работы от трех пальчиковых аккумуляторов емкостью 2600мА/ч.

О модулях ESP

В настоящее время наиболее популярными модулями на чипах ESP8266 являются ESP-01, ESP-02, ESP-03, ESP-04, ESP-05, ESP-06, ESP-07, ESP-08, ESP-09, ESP-10, ESP-11, ESP-12, ESP-12E. Они отличаются количеством разведенных пинов, наличием разъема для подключения внешней антенны, размерами.

Сейчас уже можно найти в продаже старшего брата ESP8266 - это модуль ESP-32. На Aliexpress пока всего у двух продавцов есть эти модули. Цена около 250 рублей против 110 рублей за ESP-12E. В новом модуле будет еще больше плюшек.

Основные возможности ESP-32. (нажмите для просмотра)

Wi-Fi
- 802.11 b/g/n/e/i
- 802.11 n (2.4 GHz), up to 150 Mbps
- 802.11 i security features: pre-authentication and TSN
- 802.11 e: Multiple queue management to fully utilize QoS traffic prioritization
- Wi-Fi Protected Access (WPA)/WPA2
- Wi-Fi Protected Setup (WPS)
- UMA compliant and certified
- Antenna diversity nd seection
- A-MPDU and A-MSDU aggregation
- WMM power s ve U-APSD
- Fragmentation and defragmentation
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
- Infrastructure BSS Station mode/ Soft AP mode
- Automatic beacon monitoring / scanning
- SSL stacks with hardware accelerators

Bluetooth
- CMOS single-chip fully-integrated radio and baseband
- Bluetooth Piconet and Scatternet
- Bluetooth 4.2 (BR/EDR/BLE)
- Adaptive Frequency Hopping(AFH)
- SMP
- Class-1, class-2 and class-3 transmitter without exter al power amplifier
- +10 dBm tra smitting power
- NZIF receiver with -90 dBm sensitivity
- Up-to 4 Mbps high speed UART HCI
- SDIO / SPI HCI
- CVSD and SBC
- Low power consumption
- Minimum external component

CPU and Memory
- Xtensa® Dual-Core 32-bit LX6 micr pr cess rs, up to 400MIPS
- 128 KB ROM
- QSPI Flash/SRAM, up to 4 x 16 MB
- Power supply: 2.5V to 3.6V
- 416 KB SRAM

Clocks and Timers
- 2 MHz to 40 MHz crystal oscillator
- Internal 8 MHz oscillator with calibration
- External 32 kHz oscillator for RTC with calibration
- Internal RC oscillator with calibration
- Two timer groups including 3 x 64-bit timers and 1 x watchdog in each group
- RTC timer with sub-second accuracy
- RTC watchdog

Advanced Peripheral Interfaces
- 12-bit SAR ADC up to 16 channels
- 2 x 10-bit D/A converters
- 10 x touch sensors
- Temperature sensor (-40 +125°C)
- 4 x SPI
- 2 x I2S
- 2 x I2C
- 2 x UART
- 1 host (SD/eMMC/SDIO)
- 1 slave (SDIO/SPI)
- Ethernet MAC interface with dedicated DMA and IEEE 1588 support
- CAN 2.0
- IR (TX/RX)
- Motor PWM
- LED PWM up to 16 channes

Security
- IEEE 802.11 standard security features all supported, including WFA, WPA/ WPA2 and WAPI
- Secure boot
- Flash encryption
- 1024-bit OTP, up to 768-bit for customers
- Cryptographc hardware acceleration:
- AES 128/192/256
- HASH (SHA-2) library
- RSA
- Radom Number Generator

Особенно интересна заявленная поддержка CAN-шины. Скоро управлять системами автомобиля и проводить диагностику можно будет по WiFi прямо с мобильного устройства.

Но вернемся к ESP-12E. На базе этого модуля построена платформа NodeMCU.

О платформе

Платформа использует возможности ESP-12 модуля, собственного микроконтроллера не имеет. Китайцы производят много клонов с разными конвертерами интерфейсов, и сами платформы имеют разные размеры.

По умолчанию в платформу загружена прошивка NodeMCU с поддержкой интерпретатора скриптового языка LUA. Скрипты задают поведение платы.

Я пишу и заливаю программы с помощью Arduino IDE. Для работы с платформой необходимо установить библиотеки. С библиотеками идет большое количество примеров программ.

Установка библиотек в среду Arduino IDE для работы с NodeMCU .

Для установки библиотек необходимо зайти в настройки Arduino IDE и в поле «Additional board» ввести адрес http://arduino.esp8266.com/package_esp8266com_index.json

Пролистываете список вниз и находите ESP8266 by ESP8266 Community, и устанавливаете библиотеки.

Закройте «Boards Manager». Идите в «Инструменты» и выберите плату NodeMCU в соответствии с вашей версией.

Чтобы понять какой модуль у вас установлен и какую версию выбрать, посмотрите на модуль. Если контакты на нем расположены с трех сторон - это ESP-12E, если только с двух - это ESP-12.

Назначение выводов платформы NodeMCU

Функции, поддерживаемые библиотеками для Arduino IDE .

Полное описание можно почитать здесь https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_ru причем на русском языке. Я расскажу об основных функциях.

Управление GPIO осуществляется так же, как и у Arduino. pinMode, digitalRead, digitalWrite, analogWrite функционируют как обычно. analogRead(A0) читает значение АЦП с аналогового входа А0 соответственно. analogWrite включает программный ШИМ. Частота ШИМ порядка 1кГц. Диапазон ШИМ от 0 до 1023, у Arduino, как мы помним, до 255. Прерывания также поддерживаются на любом GPIO, кроме GPIO16. Функции millis() и micros() возвращают миллисекунды и микросекунды, прошедшие со старта модуля. Функция delay() у NodeMCU работает по-другому нежели у Arduino. Здесь применение delay приветствуется и в больших программах даже необходимо. Когда модуль поддерживает WiFi соединение, ему приходится выполнять множество фоновых задач, кроме вашего скетча. WiFi и TCP/IP функции библиотек SDK имеют возможность обработать все события в очереди после завершения каждого цикла вашей функции loop() или во время выполнения delay(...). Если в вашем коде есть фрагменты, которые выполняются более 50 миллисекунд, то необходимо использовать delay(...) для сохранения нормальной работоспособности стека WiFi. А вот delayMicroseconds() блокирует выполнение других задач и не рекомендуется для задержек более 20 миллисекунд. Serial использует аппаратный UART0, работающий на PIO1(TX) и GPIO3(RX).

Программа для управления четырьмя реле с мобильного приложения

После того, как библиотеки установлены, к платформе подключаем блок из 4 реле к пинам D1, D2, D3, D4, что соответствует GPIO 5, 4, 0, 2 соответственно. Затем подключаем питание к платформе и к блоку реле. У имеющегося у меня блока реле есть одна особенность. Для включения реле необходимо подтянуть пин к земле. То есть логический 0 включает реле, а 1 выключает.

Я рассмотрю три варианта программы управления блоком реле.

Первая программа использует популярную библиотеку aRest https://github.com/marcoschwartz/aREST

Это API handler библиотека, позволяет управлять GPIO через http-запросы вида http://192.168.0.10/digital/6/1 ее возможности: устанавливать GPIO в Digital или Analog (ШИМ), устанавливать 0 или 1 на пин в режиме Digital, возвращать переменные и читать состояние пинов.

Программу я откомпилировал и загрузил из примеров, идущих вместе с библиотекой. С точки зрения использования - проще некуда.

В Setup’е устанавливается соединение с точкой доступа, о чем сообщается через COM порт. А loop выглядит вот так:

void loop() {

WiFiClient client = server.available();

if (!client) {

return;

}

while(!client.available()){

delay(1);

}

rest.handle(client);

}

Все. Что там происходит не понятно. Работает, но фактически мы не программируем ничего. Просто запускаем программу, все остальное делает библиотека. Но интереснее научиться работать с GPIO «руками». Да, кстати, программа у меня зависала через неопределенное время. Иногда через 40 минут, иногда через 5-6 часов. Приходя домой после 8 часового рабочего дня, я всегда обнаруживал, что программа не работает. При этом роутер показывает, что клиент WiFi подключен и ему выдан IP адрес. Интерес у меня к библиотеке быстро пропал. На зависания aRest’а на русскоязычных форумах жалоб не встречал. Я уж грешил на NodeMCU или на нестабильное питание, но дальнейшие эксперименты доказали, что в моем случае виновата была программа. Скорее всего, у меня частный случай. Я не утверждаю, что библиотека не рабочая.

С aRest’ом разобрались.

Вторая программа написана самостоятельно, использует всего одну подключаемую библиотеку #include . Программа проста и наглядно показывает, как управлять пинами через веб-запросы. Данная программа умеет управлять только логическими состояниями на выводах D1-D4 и выводить информацию о времени работы программы в качестве тестового запроса. Если есть необходимость, можно дописать программу для остальных GPIO, «научить» ее выдавать ШИМ и т.д. К выводу D4 подключен синий светодиод, находящийся на модуле ESP-12E. После мучений с зависаниями aRest’а я временно отсоединил реле 4 от D4 и в своей программе дописал пару строк для мигания этим светодиодом. Пришел домой после работы смотрю - мигает, значит, работает. Проверил с мобильного - точно работает. Программа отработала 8 дней без зависаний, отработала бы и дольше, но NodeMCU у меня один, поэтому я продолжил его изучение и выполнение программы пришлось остановить.

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

Для управления блоком реле для этих двух программ было создано приложение на мобильный с ОС Android. Приложение очень простое, создавалось в App Inventor 2. Процесс создания приложения я опишу позже. Сначала третий вариант решения управления реле.

Третий вариант комплексный. Прошивка платформы и программа для Android от одного разработчика. Я использовал сервис Blynk. Он представляет собой облачный сервис для создания графических пультов управления и подходит для широкого спектра микрокомпьютеров и микроконтроллеров.

Для создания собственного проекта с управлением через Blynk нужно совсем немного: установить приложение (доступны версии для iOS и Android) или воспользоваться веб-формой. Тут потребуется регистрация в один шаг — ввод e-mail и пароля. Дело в том, что Blynk — облачное решение, и без регистрации контроль над железкой может получить любой пользователь.

Желающие могут установить сервер локально . В таком случае доступ в интернет не нужен.

Опишу сам процесс. Он состоит из двух частей.

Первая часть. Скачиваете Blynk с Google Play. Устанавливаете и запускаете программу

  1. Нажимаете «Create New Project»
  2. Вписываете название проекта и выбираете NodeMCU в поле «Hardware model». Auth Token учите наизусть или записываете на бумажку, отсылаете себе на почту. Жмете «Create».
  3. Жмете «+» в углу.
  4. Выбираете «Button». Как вы уже обратили внимание, каждый элемент, добавляемый в проект, стоит энергию. По умолчанию вам ее дается 2000. По мере добавления виджетов энергия будет расходоваться. Если вам нужно будет разместить больше виджетов, то энергию придется покупать за деньги.

  1. Вот и появилась наша кнопка. Нажмите на нее. Откроются ее настройки.
  2. Выберите название, пин, на который она будет действовать, режим кнопки или переключателя, название для состояний «включено» и «выключено». В приложении инвертировать сигнал с кнопки нельзя. Для моих реле: кнопка выключена - 0 на выходе, реле включено и наоборот. Прописывать правила работы логики можно установив сервер на локальном компьютере.
  3. Далее нажимаете треугольничек справа вверху. Программа переходит из режима редактирования в работу.
  4. Кнопки работают. Что примечательно поддерживается мультитач. Я пробовал одновременно нажимать 6 кнопок. Все работает (у телефона по описанию 10 точек нажатия).

Вторая часть - это прошивка NodeMCU. Скачиваете и устанавливаете библиотеки Blynk https://github.com/blynkkk/blynk-library . Запускаете Arduino IDE - Файл - Образцы - Blynk - BoardsAndShields - ESP8266_Standalone.

Вписываете в пример Auth Token с секретной бумажки почты. А также SSID вашей сети WiFi и пароль доступа к ней.

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

Создание приложения в App Inventor .

App Inventor - среда визуальной разработки android-приложений, требующая от пользователя минимальных знаний программирования. Первоначально разработана в Google Labs, после закрытия этой лаборатории была передана Массачусетскому технологическому институту. Для программирования в App Inventor используется графический интерфейс, визуальный язык программирования очень похожий на язык Scratch и StarLogo TNG. Разобраться с написанием приложения не так сложно. Полезной документации на русском я не нашел, а вот видео на ютубе очень много.

У сервиса две основных вкладки. Первая - это «Designer», здесь в визуальном редакторе размещаются компоненты. Скорость разработки интерфейса очень высока благодаря одной особенности сервиса App Inventor. На мобильный девайс необходимо установить приложение MIT App Inventor 2 Companion. Запустить его. На сайте выбрать Connect - AI Companion. Будет сгенерирован и выведен на экран QR код. В приложении надо нажать «scan QR code» и отсканировать код. Через пару секунд приложение появится на экране мобильного девайса. Новые элементы или любые измененные данные буквально через секунду становятся доступными для проверки на мобильном устройстве.

На экране размещаются: поле ввода для ввода IP адреса, кнопка установки адреса и отправки тестового запроса. Ниже располагается компонент «WebViewer», в нем будет отображаться присланная в ответ от NodeMCU страница. Ниже идут 4 группы по две кнопки, которые включают и выключают реле. Также нужен компонент «TinyDB», в нем будем хранить переменную для построения запроса. Также я для пробы добавил компонент распознавания голоса, чтобы можно было управлять реле голосовыми командами. Описывать алгоритм действий при распознавании текста не буду, так как пользоваться этой функцией крайне неудобно. Сначала нужно нажать на кнопку, потом выводится окошко от гугла с надписью «говорите», потом произносится команда. Причем после окончания произношения команды система распознавания ждет некоторое время, потом соображает, что все уже сказано. Затем идет распознавание речи и приходит текстовый ответ. Его надо сравнить с заранее заготовленными фразами. И только после этого команда будет выполнена. Проще тапнуть кнопку.

Вторая вкладка называется «Blocks». Здесь в виде блоков задается вся «программная» часть приложения.

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

  • When SET.Click - когда нажата кнопка «сет», вызвать функцию IP
  • Далее идет сама функция IP. Она сохраняет в TinyDB IP адрес из поля ввода, дописывая вначале «http://». Потом WebViewer.GoToUrl берет адрес из TinyDB, дописывает «/test» в конце и переходит по этому адресу. У меня получается «http://192.168.0.1/test». В WebViewer на экране загружается информация о том, что тест пройден, и выводится время непрерывной работы NodeMCU. Если IP адрес был введен неверно, то получаем сообщение о невозможности открыть страницу.
  • When ON1.Click (ON1 это название кнопки) вызывает функцию ON1.
  • Функция ON1 берет адрес из TinyDB, дописывает к нему «/D1/0», получается «http://192.168.0.1/D1/0», и посылает запрос. NodeMCU, получив данный запрос, соображает, что на пин D1 нужно установить 0. Выполняет и отсылает ответ «GPIO set OK», который мы и видим в WebViewer.
  • Следующая кнопка OFF1 проделывает то же самое, только в конце дописывает «/D1/1». Устанавливает логическую 1 на пин D1. Реле выключается.

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

После того, как все проверено и работает, нажимаете Build - App (save .apk to my computer). Идет компиляция и скачивание apk-файла приложения. Его необходимо установить на мобильное устройство, предварительно в настройках разрешив установку приложений из сторонних источников. Теперь приложение запускается самостоятельно. AI Companion уже не нужен и связь с интернетом тоже.

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

NodeMCU и мобильный телефон подключены к домашнему роутеру. Там, где нет точки доступа WiFi, NodeMCU может выполнять функции точки доступа для подключения мобильного устройства напрямую к ESP8266. Например, управление открытием гаражной двери и включением света в гараже.

P.S. Поднять точку доступа на платформе мне пока не удалось. Пример, идущий с библиотеками, не компилируется. Arduino IDE просто виснет в процессе компиляции. С этим мне еще предстоит разобраться.

P.P.S. Точку на платформа поднял, но адекватной работы пока не добился. Команды выполнялись или с задержкой в пару секунд либо не выполнялись совсем. Пока исследование модуля приостановлено. Занят обслуживанием авто.

В этой статье информация о том как собрать свой танк, оснащенный 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(); }

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

В продолжение темы:
Windows

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

Новые статьи
/
Популярные