Обзор платы NodeMCU ESP8266 и ее использование в Arduino IDE

imageNodeMCU — платка за 200 рублей, которая после небольшого шаманства превратится в повторитель WiFi.

Ссылка на товар: в Aliexpress.

Описание

Эта платка должна быть знакома радиолюбителям, играющим с Arduino. Подключается к компьютеру через USB, имеет несколько цифровых входов-выходов и управляется контроллером в виде сборки ESP8266-12F. Эта сборка является WiFi-модулем, и может работать в режиме точки доступа, клиента и одновременно в обоих режимах, являясь клиентом для одной сети и точкой доступа для другой.

Вот платка во всей красе:

image

image
image
image
image
image
image
image
image
image

О том, как эту плату используют радиолюбители в интернете написано немало. Но далеко не все знают, что эта штука может работать еще и удлинителем сети WiFi, или «повторителем».

Повторитель WiFi

Как Вы могли догадаться, стандартная прошивка ничего такого не позволяет. Но есть один пытливый немец Martin Ger, который разработал свою прошивку, превращающую NodeMCU в повторитель WiFi.

Кто умеет читать по английски, вот ссылка на оригинальную инструкцию вместе с файлами прошивки: https://github.com/martin-ger/esp_wifi_repeater

А кто не умеет, читает дальше)

Краткая инструкция или «7 шагов к счастью»

1. Подключтить модуль NodeMCU к USB порту и запомнить какое имя COM порта ему присвоено.

2.  Два файла для прошивки 0x00000.bin и 0x20000.bin надо скачать отсюда и запомнить куда сохранили. (В устаревших версиях прошивки второй файл назывался 0x00000.bin и 0x10000.bin)

3. Далее, кто использует Windows, понадобится программа ESPFlashDownloadTool. Скачать можно с официального сайта производителя модулей ESP8266. Для этого надо скачать продукт с названием «Flash Download Tools (ESP8266 & ESP32)».

4. После распаковки архива надо запустить исполняемый файл «flash_download_tools_*.exe» (на месте звездочки указана версия программы), нажать на кнопку «ESP8266 DownloadTool». Когда программа откроется, надо выбрать для прошивки оба файла 0x00000.bin и 0x20000.bin, и указать для них адреса 0x00000 и 0x20000. Выбрать тычку 32MBit. В списке COM: выбрать номер COM порта платы. В поле BAUD выбрать 115200. В общем, надо сделать как на следующей картинке.

image

Теперь можно нажать кнопку START и ждать когда запишется прошивка.

5. После окончания процесса записи плату надо настроить. Есть три способа:

а) (Человеческий способ) Подключиться к WiFi сети устройства (ssid: «MyAP», сеть без пароля) и зайти через Веб-интерфейс по адресу http://192.168.4.1/.

б) (Способ для бородатых админов, а также для случаев, когда надо восстановить доступ при неправильной конфигурации или забытом пароле. Подключаться надо по USB) Стандартной программой HyperTerminal на виртуальный COM-порт платы со скоростью 115200 бод.

в) (Способ для бородатых админов, надо подключиться к WiFi сети «MyAP») В консоли «cmd» надо выполнить команду:

telnet 192.168.4.1 7777

6.  Далее, в зависимости от выбранного способа предыдущего пункта:

а) Тут вроде всё понятно 🙂 но вот первоисточник.

image

STA Setting — сюда вводят данные роутера, который раздаёт интернет. Тычка Automesh означает режим повторения, при котором плата будет расширять сеть с тем же самым SSID роутера и его же паролем. Это удобно, и в этом режиме можно несколько повторителей выстроить в удлиняющую цепочку. Если нужен именно этот режим, то ставим эту галку (Automesh) и нажимаем кнопку Connect — на этом настройка будет закончена. Если же нужен режим с другим названием новой сети, то галку не ставим, а тычем Connect и после перезагрузки устройства продолжаем настройку дальше: AP Settings — сюда пишем название (SSID) и пароль (Password) для новой сети, выбираем нужное шифрование сети. Дальше тычем Set. Опционально можно поиграться с Lock (заблокировать конфигурацию от изменений под пароль), но это лучше только после того, как всё заработает.  Дальше жмём Restart.

б, в) В консоли выбранной программы пишем и выполняем семь команд:

set ssid DLINK3783 set password 123456 set ap_ssid REPEATER set ap_password PASSWORD show save reset

Где DLINK3783 — название сети вашего основного WiFi-роутера, а 123456 — пароль этой сети; REPEATER — название новой точки доступа, PASSWORD — её пароль.

После команды reset платка перезагрузится, подключится к точке доступа «DLINK3783» и создаст собственную точку доступа «REPEATER».

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

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

Содержание

  • Технические характеристики модуля
  • Подключение 
  • Пример использования
  • Часто задаваемые вопросы FAQ

Wi-Fi модуль ESP-01 – самый популярный модуль серии ESP8266. Общение с компьютером или микроконтроллером осуществляется с через UART с помощью набора AT-команд. Кроме того, модуль можно использовать как самостоятельное устройство, для этого необходимо в него загрузить свою прошивку. Программировать и загружать прошивки можно через Arduino IDE версии выше 1.6.5. Для прошивки модуля понадобится переходник UART-USB. Модуль ESP-01 может получить широкое распространение для использования в устройствах IoT (Интернет вещей).

Технические характеристики модуля

  • Wi-Fi 802.11 b/g/n
  • Режимы WiFi: клиент, точка доступа
  • Выходная мощность — 19,5 дБ
  • Напряжение питания — 1.8 -3.6 В
  • Ток потребления — 220 мА
  • Портов GPIO : 4
  • Тактовая частота процессора — 80 МГц
  • Объём памяти для кода
  • Оперативная память — 96 КБ
  • Размеры — 13×21 мм

Подключение

Рассмотрим режим AT-команд. Для этого подключим модуль к компьютеру через переходник USB-UART. Назначение выводов модуля (см. рисунок 1):

  • VCC — +3.3 В
  • GND — земля
  • RX, TX — выводы UART
  • ВыводCH_PD  — Chip enable
  • GPIO0, GPIO2 — цифровые контакты

Модулю требуется внешнее питание   3.3 В.

image

Рисунок 1. Назначение контактов модуля ESP-01

Схема подключения для общения с модулем в режиме AT-команд (рисунок 2):

image

Рисунок 2. Схема подключения модуля ESP-01 к компьютеру по последовательному порту

Рисунок 3. Схема в сборе

Для отправки команд AT-команд в ОС Mac OS X можно использовать программу CoolTerm, в операционной системе Windows программу Termite. Узнать скорость COM-порта для соединения с модулем можно только экспериментально, для разных прошивок она может быть разной. Для моего модуля скорость оказалась равной 9600 бод. Кроме того установить обмен удалось только после отключения и повторного подключения к питанию вывода  CH_PD. После подключения набираем в терминале  AT и должны получить в ответ от модуля OK. Команда AT+GMR выдает номер версии прошивки модуля, команда AT+RST — перезагружает модуль (см. рис. 4). Список основных AT-команд можно посмотреть в этом документе (ESP8266ATCommandsSet.pdf).

Рисунок 4. Отправка AT-команд в модуль из программы Termite

Если режим AT команд для вас не удобен, плату можно настроить с помощью программы AppStack  ESP8266 Config, скачать которую  можно по ссылке http://esp8266.ru/download/esp8266-utils/ESP8266_Config.zip. Внешний вид программы представлен на рисунке 5. Настройка модуля осуществляется с помощью графического интерфейса, при этом выполнение команд можно видеть в мониторе программы (см. рис. 6). В мониторе также можно послать AT-команды из командной строки.

Рисунок 5. Программа AppStack ESP8266 Config

Рисунок 6. Serial monitor программы AppStack ESP8266 Config

Есть два варианта использования данного модуля:

  • в связке с микроконтроллером (например Arduino), который будет управлять модулем по UART;
  • написание собственной прошивки для использования ESP8266 в качестве самостоятельного устройства.

 

Пример использования

Рассмотрим пример подключения к модулю ESP-01 датчика влажности и температуры DHT11 и отправки данных в облачный сервис ThingSpeak (https://thingspeak.com/). Нам понадобятся следующие детали:

  • модуль ESP-01
  • макетная плата
  • датчик влажности и температуры DHT11
  • резистор 10 кОм
  • соединительные провода
  • блок питания 3 — 3.6В

Сначала подключим датчик DS18B20 к модулю ESP-01. DS18B20 – цифровой датчик температуры, работающий по однопроводному интерфейсу 1-Wire. Схема подключения датчика DS18B20 к модулю показана на рис. 7.

Рисунок 7. Схема подключения датчика DHT11 к модулю ESP-01.

Затем необходимо завести профиль в сервисе ThingSpeak. В сервисе есть инструкции для отправки данных в сервис и получения данных из сервиса.

Рисунок 8. Схема в сборе.

Программу будем писать в среде Arduino IDE для ESP8266. Будем использовать библиотеки ESP8266WiFi.h (встроенную) и OneWire.h. Загрузим на плату Arduino скетч из листинга 1 – получение данных с датчика температуры и отправка данных в сервис ThingSpeak. Необходимо внести свои данные для WiFi точки доступа для модуля ESP-01:

  • const char *ssid;
  • const char *password;

а также параметр privateKey для вашего приложения в сервисе ThingSpeak. Листинг 1

// 3d-diy.ru  // Подключаем библиотеку для работы с esp8266  #include    // Подключаем библиотеку DHT для работы с DHT11   #include    // пин подключения контакта DATA  #define DHTPIN 4  // датчик DHT11  #define DHTTYPE DHT11    // создание экземпляра объекта DHT  DHT dht(DHTPIN, DHTTYPE);    // ssid WiFi сети подключения  const char ssid = "********";   // Пароль  WiFi сети подключения   const char password = "******";   // Сервер ThingSpeak  const char* host = "184.106.153.149";   // API KEY вашего приложения ThingSpeak  const char* privateKey = "****************";   // переменные для хранения температуры и влажности  float temp;   float humidity;   // переменная для интервала измерений  unsigned long millis_int1=0;    void setup() {    // запуск последовательного порта     Serial.begin(115200);     delay(10);    Serial.print("Connect to WiFi");     Serial.println(ssid);    // Соединяемся по WiFi    WiFi.begin(ssid, password);        while (WiFi.status() != WL_CONNECTED) {      delay(500);    }    Serial.println("WiFi connected");     // запуск dht    dht.begin();   }      void loop() {  // ждем интервал 10 минут  if(milis()-millis_int1>=10*60000) {    Serial.print("connect to ThingSpeak");    Serial.println(host);        // Используем WiFi клиент     WiFiClient client;  if (!client.connect(host, 80)) {      Serial.println("connection failed");          return;    }    // получить данные температуры    temp = get_data_temperature();    humidity = get_data_humidity();         // Создаем URL с запросом для сервера    String url = "/update?key=";    url += privateKey;    url += "&temp=";     url += temp;    url += "&humidity=";     url += humidity;      // Отправляем запрос на сервер    client.print(String("GET ") + url + " HTTP/1.1rn" + "Host: " + host + "rn" + "Connection: closernrn");    delay(10);        // ответ сервера ThingSpeak    while(client.available()){      String req = client.readStringUntil('r');      Serial.print(req);    }   }  }

Теперь в сервисе ThingSpeak мы можем смотреть график показаний нашего датчика температуры DHT11 (рисунок 9).

Рисунок 9. График показаний датчика температуры DS18B20 в сервисе ThingSpeak.

Часто задаваемые вопросы FAQ

     1.  Модуль не отвечает на AT-команды

  • Проверьте правильность подключения модуля;
  • Проверьте правильность подключения контактов Rx,Tx к переходнику UART-USB ;
  • Проверьте подключение контакта CH_PD к 3.3 В;
  • Подберите экспериментально скорость обмена по последовательному порту.

     2. Модуль ESP-01 не получает данные температуры от датчика DHT11

  • Проверьте правильность подключения датчика DHT11 к модулю.

     3. Не передаются данные в сервис ThingSpeak

  • Проверьте подключение модуля к точке доступа WiFi;
  • Проверьте подключение точки доступа WiFi к сети интернет;
  • Проверьте правильность запроса к сервису ThingSpeak.
image

Но, когда у нас всего одна точка WiFi, как покрыть всё пространство большого дома или квартиры? Каждый шаг удаляет нас от сильного сигнала, та же история повторяется в многоэтажных домах.

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

Но такое устройство громоздко и дорого стоит. Поэтому, с помощью NodeMCU (IoT), мы можем соорудить свой ретранслятор WiFi.

Что такое NodeMCU? Это опенсорсное железо и набор для сборки, которые позволяют спроектировать свой собственный продукт из мира интернета вещей (IoT) и настроить его с помощью языка Lua. Для подробного знакомства с NodeMCU, зайдите на страничку на Гитхабе.

Заметка: Чем дальше от основного источника WiFi будет ваш модуль, тем медленнее будет соединение, но большая скорость далеко не всегда нужна предметам из интернета вещей. Мне нужен был дешевый способ расширения зоны покрытия WiFi, чтобы устройство оповещения в моём доме могло выходить в интернет и высылать уведомления мне на телефон. Я случайно нашел сборку для роутера на основе модуля WiFi ESP8266 от Мартина Гера, залил её на мой дешевый модуль ESP-01 и он заработал без ошибок. Роутер, к которому подключается мой расширитель, раздаёт WiFi в районе всего 6 метров из-за стены. Но с расширителем, подключенным в районе 3-15 метров от роутера, зона покрытия увеличивается до 95 метров.

Шаг 1: Скачиваем файлы

image

Скачайте файлы по этой ссылке. Они содержат информацию о железе и нужном софте.

Разархивируйте их и найдите «ESPFlashDownloadTool_v3.4.1.exe». Откройте файл двойным кликом.

Шаг 2: Приобретите нужные элементы

image
  1. Небольшой пластиковый корпус (для защиты железа)
  2. NodeMCU (IoT) доступен в онлайн-магазинах
  3. WiFi антенна (можете скрутить её с вашего старого роутера)
  4. Немного проводов, чтобы соединить NodeMCU с антенной
  5. USB кабель (для питания NodeMCU)
  6. Зарядник на 5V (можно взять любой зарядник от телефона) или можно использовать павербанк

Заметка: Зарядник должен быть меньше 1A. Зарядник больше чем на 1A можете перегреть NodeMCU и он сгорит.

Шаг 3: Устанавливаем драйвера

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

Подпапка из архива, который вы скачали и распаковали, называется «CH341SER_win» для Windows и «CH34x_Install_mac» для Mac. Просто откройте программу в нужной папке и установите драйвер.

Шаг 4: Прошейте железо расширителя WiFi на ESP8266

imageimage

Подключите ESP01 к USB адаптеру, вставьте в компьютер и переключите физический рычажок в режим программирования «Prog», вместо режима «UART».

Откройте программу в подпапке, называющейся «flash_download_tools_v3.4.1_win». Откройте следующую подпапку «_MACOSX», если у вас Mac, или подпапку «FLASH_DOWNLOAD_TOOLS_V3.4.1_WIN» для Windows.

Если у вас Windows, запустите приложение «ESPFlashDownloadTool_v3.4.1» выберите в нём «ESP8266».

Если вы используете ESP01, то настройте программу, как показано в приложенных скриншотах.

  1. Если вы используете модули NodeMCU или Wemos D1 Mini вместо ESP01 или ESP07, переключите режим «8Mbit» на «32Mbit»
  2. Для модулей ESP01 и ESP07, в пункте «Download Path Config» кликните по кнопке с тремя точками и найдите»firmware_sdk_1.5.4″. Кликните на каждый и впишите их имена справа, как показано на скриншоте, например «0x00000» и «0x40000». Если вы используете вариант модуля ESP8266, отличный от ESP01, я полагаю, что нужно использовать папку «firmware» и файлы .bin в ней, соответственно с их именами в правой части.
  3. Выберите нужный COM-порт и установите значение BAUD на 115200, затем нажмите «start», «flash» или «connect».
  4. Когда программа напишет «Finish», отсоедините адаптер и модуль ESP8266 от компьютера.
  5. Переключите физическую кнопку на адаптере USB обратно в непрограммируемый режим. Это важно!

Шаг 5: Настройка расширителя сигнала

Для того, чтобы настроить расширитель, нужно соединить его с компьютером. Можно осуществить это с помощью программы серийного соединения, так как ИДЕ Ардуино настроила показатель BAUD на 115200 с NL&CR.

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

Отключите расширитель и на этом настройка wifi повторителя завершена!

Советы: Вам нужно подождать пару секунд после отправки каждой команды, и, возможно, лучше отправлять команду save после каждой команды. Если вам нужно восстановить все настройки обратно до заводских, пошлите команду reset и затем save. Для просмотра списка всех доступных команд, отправьте help, а для просмотра текущей конфигурации отправте show

Шаг 6: Упаковываем ваш расширитель

imageimage
imageimageimage

Для размещения оборудования можно использовать любой пластиковый контейнер. Я установил расширитель (NodeMCU и антенну) в разрезанную пополам маленькую коробочку. Затем, чтобы защитить железо от дождя, я прошелся по соединениям горячим клеем.

Используемые источники:

  • https://alipad.ru/wifi-repeater-nodemcu/
  • https://3d-diy.ru/wiki/arduino-moduli/wi-fi-modul-esp-01/
  • https://masterclub.online/topic/14561-wifi-repiter

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации