Как я купил себе новую игрушку
Как-то раз я решился купить себе немного электронной атрибутики прямо с AliExpress’a. И именно тогда я столкнулся там с этим чудом: NodeMCU V3 на базе ESP8266. Маленькая Arduino Nano не просто загрустила, а вообще перестала кочевать и сейчас застряла в немного другом проекте.
Вообще, я выделил для себя следующие преимущества данного модуля:
- WIFI, который может одновременно быть точкой доступа и быть подключенным к другой точке
- CH340, который позволяет через USB эмулирует все «сладости» COM-порта
- MicroUSB, а не Mini — то есть из коробки можно подкинуть обычный «шнурок» от твоего андроида
- 80MHZ(160MHZ от одной строчки) — 16MHZ Arduino Nano просто сидит на месте по сравнению с NodeMCU
- 4MB Flash-памяти — приятное дополнение, хотя оно может ввести в заблуждение, так это не RAM-память, которой там всего 80 KB
- Цена — 140-150 рублей за штуку. Немного дороже. чем голый ESP8266, но зато тут куча «вкусных плюшек»
Arduino IDE — возможность собирать прошивку прямо из этой среды
Из минусов пока не понравилось следующее:
- Единственный аналоговый порт ввода/вывода, который причем еще и работает в диапазоне 3.3В
Немного про IDE
Когда я начал писать проект под эту плату, я делал это при помощи Arduino IDE. Но эта недоIDE избивает любого: того, кто пытается писать больше 100 строк, того, кто пробует написать что-то нормальное. Достаточно дернуть файл через Notepad++, подправить в нем строки, а затем вернутся обратно, чтобы увидеть прыгающие строки с разными отступами. Про какую-то гибкость, удобство и логику тут вообще нет смысла говорить, потому что в среде отсутствуют многие элементарные настройки.
Вторая попытка была на Visual Studio 2015 с плагином vMicro, позволяющим быстро создать проект под платформу Arduino и ей подобные. Все было неплохо, пока плагин не отвалился после конца Trial-режима.
Слава богу на горизонте появился некий хабровчанин, который призывал всех опомниться и попробовать некую VisualCode Studio. PlatformIO — отличный плагин для этой среды, и он отлично сейчас себя зарекомендовал, без проблем собирая мой проект.
Особенной похвалы заслуживает маленькая панель снизу, которая отвечает за все основное взаимодействие с проектом.
Собрать проект, залить на плату, открыть терминал для подключения к плате — это вызывается либо с хот-кеев, либо отсюда.
Поднимаем Web-сервер на этой малютке
Поднимается сервер буквально в четыре строки:
ESP8266WebServer server(80);
void setup {
...
server.on("/page", method);
server.begin();
...
}
void loop {
...
server.handleClient();
...
}
Перечисляем адреса страниц соответственно необходимым методам, «поднимаем» сервер, а затем уже в loop-методе циклично обрабатываем все события с помощью handleClient().
Перед этим конечно пришлось немного поднастроить WiFi в NodeMCU:
WiFi.setAutoConnect(false);
IPAddress apIP(192, 168, 1, 1);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP(ssid);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
Первая строка здесь имеет очень важное значение. Первые мои версии проекта работали так, что NodeMCU подключалась к моему домашнему WiFi. Потом я конечно убрал эти параметры и начал создавать точку доступа. И тут я заметил небольшую странность: дома мой код работал без единой осечки, а в институте просто творилось нечто, каждые 5-10 секунд все зависало напрочь.
Разгадку я обнаружил через несколько дней — оказывается, что все это время NodeMCU пыталась подключаться к моему домашнему WiFi. А соответственно, если такой точки не было, то плата начинала жутко тупить. Даже не смотря на то, что у меня больше не было ни строчки, намекающей на подключение к WiFi.
Короче — эта строка отвечает за то, чтобы плата не пыталась автоматически подключаться к последней использованной точке.
Все остальное тоже не несет каких-то трудностей: указываем ip точки, gateway и маску, название точки — дальше запускаем нашу точку WiFi.softAPIP(). И на всякий случай, проверяем через ip через Serial.
В следующей части я рассказываю, как передавать данные в реальном времени на несколько клиентов сразу