Lolin nodemcu v3 web server настройка

Компоненты умного дома

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

Компоненты умного дома

Слева-направо: сначала идет ваше устройство на ESP8266, далее это прошивка ESP Easy (ее ставим на ESP8266), прошивку подключаем к MQTT-брокеру (например WQTT.ru или свой брокер на своем сервере), веб-сервис WQTT.ru уже имеет подключение к Алисе (на своем брокере это подключение придется сделать самостоятельно, что в общем несложно, потому что это наша привычная работа программиста), далее сервер логики Node RED, который подключен к MQTT-брокеру и управляет всем умным домом. И в конце можно поставить Homebridge для связи умного дома с Homekit.

Как вы наверное догадались, homebridge с голосовыми помощниками не обязательные компоненты. Главное это MQTT-брокер и Node RED. Эти два сервера вам обеспечат практический полный функционал и доступ к настройке любой логики.

Думаю общая картинка умного дома уже появилась и можно переходить к самим компонентам в отдельности. В этой статье рассмотрим MQTT-брокер и само устройство. В следующих статьях будем рассматривать настройку прошивки ESP Easy и Node RED. Этого будет достаточно, чтобы запустить простейший вариант умного дома.

В качестве устройства у нас будет светодиод, который встроен в ESP8266 и сидит на пине GPIO2. Этот светодиод будет имитировать освещение в гостиной например. Также подключим кнопку, которая будет включать этот светодиод. И еще в нашем устройстве будут два датчика: DHT11 и BMP085 (влажности и барометр с термометром). 

В логику (которая будет хранится в Node RED) заложим управление кнопкой и светодиодом, оповещение по телеграму о резком похолодании в комнате и вывод значений датчиков в Homekit и Алису.

ESP8266 Pinout in Arduino IDE

Keep in mind that labels on NodeMCU silkscreen and that use in Arduino IDE are differed from each other. Consider the following table and the NodeMCU picture to use the right number of the pin in your sketch otherwise you will face the problems in using the correct GPIOs.

Arduino IDE Pins Index ESP-12E ESP8266 GPIO
A0 A0 ADC 0
D3 GPIO 0
1 D10 GPIO 1
2 D4 GPIO 2
3 D9 GPIO 3
4 D2 GPIO 4
5 D1 GPIO 5
12 D6 GPIO 12
13 D7 GPIO 13
14 D5 GPIO 14
15 D8 GPIO 15
16 D0 GPIO 16

Components Required

  • NodeMCU ESP8266
  • LED
  • Resistor 220 Ohms
  • Breadboard
  • Jumper Wire
  • Micro USB cable
  • ESP01

Connection Diagram NodeMCU with LED

Make the circuit diagram on bread board according to connection diagram shown below. Anode of the LED is connected to the D1 pin of the NodeMCU, the cathode of the LED is connected with the one terminal of the resistor and another terminal of the resistor is connected to the ground pin.

STM32 (STM32F103C8T6)

Данная отладочная плата известна также под названием проект “Blue pill”. Опенсорсное решение на базе ARM процессора. Плата призвана заменить собой платформу Arduino Nano и имеет следующие характеристики:

  • Архитектура Микроконтроллера ARM Cotrex M3
  • Разрядность 32 Бит
  • Максимальная частота 72 Мгц
  • Объем памяти программ (FLASH): 64 / 128 кБайт
  • Объем памяти данных (RAM): 20 кБайт
  • Выводы: 37
  • UART: 3
  • SPI: 2
  • I2C: 2
  • CAN: 1
  • USB: 1
  • АЦП: 2 АЦП, 10 каналов, время преобразования 1 мкс
  • Напряжение питания микроконтроллера 2 … 3,6 В
  • Напряжение питания платы 5 В
  • Ток потребления до 50 мА

По сравнению с основным конкурентом — Arduino Nano, характеристики более чем впечатляющие. Да и зона применения этого микроконтроллера гораздо шире. Однако без нюансов не обходится. Стоит учитывать, что напряжение питания у микроконтроллера на этой плате составляет в среднем 3,3 вольта, соответственно и логика работы микроконтроллера трехвольтовая. У Arduino Nano напряжение питания 5 Вольт и логика соответствующая.

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

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

На китайских торговых площадках мне встречались преобразователи на 4 и 8 каналов, стоят копейки, но позволяют избавиться от головной боли :). Вот ссылка на 4х канальный преобразователь:

Устройства на базе STM32 в последние годы все больше и больше набирают популярность. На них строят как примитивные устройства, так и квадрокоптеры. А с выходом marlin 2.0 количество 3Д принтеров на подобной платформе значительно увеличится.

Свои модули STM32  (STM32F103C8T6) я заказывал вот тут:

Ну а теперь поговорим о модулях на микроконтроллерах с WIFI.

Так или иначе рано или поздно любому радиолюбителю или инженеру становится скучно и не интересно разрабатывать автономные устройства, либо обстоятельства вынуждают разрабатывать устройства взаимодействующие друг с другом или через интернет. У Адруино есть шилды, которые позволяют подружить микроконтроллер с сетью, но прогресс не стоит на месте и был разработан новый микроконтроллер уже имеющий у себя на борту интерфейс wifi. Представляю Вашему вниманию микроконтроллер ESP8266.

Основные характеристики ESP8266 следующие:

  • Тактовая частота 80 МГц с возможностью разгона до 160 МГц без гарантии стабильности работы
  • Платформа 32 Бит
  • Поддержка Wifi стандартов b/g/n
  • Количество портов GPIO 14, из них доступно 11
  • Количество аналоговых входов 1
  • АЦП 10 Бит
  • Питания от 2,6 до 3,6 В
  • Потребляемая мощность до 215 мА в режиме передачи, 100 мА в режиме приема, 70 мА в режиме ожидания.
  • Поддерживаются три режима пониженного потребления, все без сохранения соединения с точкой доступа: Modem sleep (15 мА), Light sleep (0.4 мА), Deep sleep (15 мкА)

Имеются следующие интерфейсы:

  • UART
  • SPI
  • I2C

Вот основные особенности данного микроконтроллера. Как видим, есть свои достоинства и недостатки. К достоинствам можно отнести:

  • Производительная платформа
  • Наличие Wifi
  • Наличие поддержки самых востребованных интерфейсов
  • Наличие режимов низкого энергопотребления
  • Совместимость со средой Arduino IDE

К недостаткам можно отнести следующее:

  • Мало количество портов GPIO
  • Только один аналоговый вход
  • Высокое энергопотребление в режиме передачи

Однако, недостатки не такие уж и критичные и для ряда проектов просто несущественные.

За счет своей функциональности микроконтроллер ESP8266 приобрел широкую популярность в среде разработчиков устройств и модулей для умного дома и интернета вещей. О чем свидетельствует популярность модулей Sonoff, обзоры которых я делал ранее. (Обзоры модулей Sonoff). Также данные микроконтроллеры используются во всяких устройствах с Wifi на борту, таких как кондиционеры, роботы-пылесосы и т.д.

A Simple Webpage Server using ESPlorer

Set SSID and PASSWORD to your WiFi name and password.

— NodeMCU Examples— Simple Web page serverwifi.setmode(wifi.STATION)station_cfg={ssid=»SSID»,pwd=»password»}station_cfg.save=truewifi.sta.config(station_cfg)srv=net.createServer(net.TCP)srvlisten(80,function(conn)connon(«receive»,function(conn,payload)print(payload)connsend(«<h1>This is a simple webserver</h1>»)connsend(«<h2>Hello</h2>»)connsend(«Hello, Lolin NodeMCU V3.»)end)end)

Save the above text as simple_webserver.lua.

Now go to your router and find out the IP address assigned to the ESP
module (or use some more lua code shown as another example below to do
this) and then go to a browser and type that IP into the URL bar and
you should see something like this (the IP address will be different for
your system):

Served as a webpage.

Note: To stop the webserver as a program instruction rather than a hard reset use the lua code:

net.server:close()

Tools¶

Transferring application code to ESP8266/8285 is an essential task, one that you’ll perform quite frequently. Hence, it does make sense to try a few different uploading tools until you find one you feel comfortable with. https://frightanic.com/iot/tools-ides-nodemcu/ lists almost a dozen classical uploaders — in addition to IDEs or IDE-like applications which of course transfer code as well.

The NodeMCU firmware team does not give any recommendations as for which uploader to use nor are there any «NodeMCU approved» tools. The below listed tools are just three, in no particular order, which seem popular and/or reasonably well maintained.

ESPlorer

Source: https://github.com/4refr0nt/ESPlorer

Supported platforms: macOS, Linux, Windows, anything that runs Java

nodemcu-uploader.py

Source: https://github.com/kmpm/nodemcu-uploader

Supported platforms: macOS, Linux, Windows, anything that runs Python

NodeMCU-Tool

Source: https://github.com/andidittrich/NodeMCU-Tool

Supported platforms: macOS, Linux Windows, anything that runs Node.js

Introduction¶

NodeMCU firmware is an IoT project («the Project») which implements a Lua-based runtime for SoC modules based on the Espressif ESP8266 and ESP32 architectures. This NodeMCU Reference Manual (NRM) specifically addresses how the NodeMCU Lua implementation relates to standard Lua as described in the two versions of the Lua language that we currently support:

  • The Lua 5.1 Reference Manual and
  • The Lua 5.3 Reference Manual (LRM)

Developers using the NodeMCU environment should familiarise themselves with the 5.3 LRM.

The Project provides a wide range of standard library modules written in both C and Lua to support many ESP hardware modules and chips, and these are documented in separate sections in our online documentation.

The NRM supplements LRM content and module documentation by focusing on a complete description of the differences between NodeMCU Lua and standard Lua 5.3 in use. It adopts the same structure and style as the LRM. As NodeMCU provides a full implementation of the Lua language there is little content herein relating to Lua itself. However, what NodeMCU does is to offer a number of enhancements that enable resources to be allocated in constant program memory — resources in standard Lua that are allocated in RAM; where this does impact is in the coding of C library modules and the APIs used to do this. Hence the bulk of the differences relate to these APIs.

One of our goals in introducing Lua 5.3 support was to maintain the continuity of our existing C modules by ensuring that they can be successfully compiled and executed in both the Lua 5.1 and 5.3 environments. This goal was achieved by a combination of:
— enabling relevant compatibility options for standard Lua libraries;
— back porting some Lua 5.3 API enhancements back into our Lua 5.1 implementation, and
— making some small changes to the module source to ensure that incompatible API use is avoided.

Further details are given in the section below. Notwithstanding this, the Project has now deprecated Lua 5.1 and will soon be moving this version into frozen support.

As well as providing the ability to building runtime firmware environments for ESP chipsets, the Project also offers a cross compiler that can be built for common platforms such as Windows 10 and Linux, and this enables developers to compile source modules into a binary file format for download to ESP targets and loading from those targets.

ESP-07

Особенности этого модуля — керамическая антенна и разъем для внешней антенны, металлический экран.

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

Аппаратная часть

Работа с этим модулем, к сожалению, прошла не слишком гладко. Ни один из возможных вариантов подключения не сработал, и я, уже отчаявшись, решила удалять его описание из статьи. Но тут мне дали новый модуль и сказали попробовать еще раз — о чудо, он заработал с первого раза! В чем было дело и как сломался первый модуль, который я мучила, — неизвестно, но скорее всего он был убит нещадной статикой. Мораль этого лирического отступления такова — если у вас что-то не заработало по инструкции, написанной ниже, не вините инструкцию — сначала прозвоните и проверьте все контакты, а потом попробуйте на другом модуле.

1) Собираем схему

ESP-07

USB-Serial

VCC

VCC

CH_PD (рекомендуется через резистор)

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 (рекомендуется через резистор)

GND

GPIO 0 — сначала не подключен, но будет использоваться для перевода в режим программирования далее, поэтому к нему уже подведен провод

все остальные контакты не подключены

RTS, CTS — не подключены

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

2) Переводим в режим программирования (необходимо каждый раз выполнять перед прошивкой модуля)

2.1) Отключаем питание от модуля2.2. Подключаем пин GPIO 0  к GND

2.2) Подключаем пин GPIO 0  к GND

ESP-07

USB-Serial

VCC

VCC

CH_PD

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 

GND

GPIO 0

GND

все остальные контакты не подключены

RTS, CTS — не подключены

2.3) Подключаем модуль к питанию

2.4) Железо готово, приступаем к программной части.

Программная часть

1) Выбираем плату: Tools (Инструменты) -> Board(Плата) Generic ESP8266 Module.

2) Вставляем подготовленный код.

3) Задаем данные для подключения Wi-Fi и идентификатор своего объекта на платформе.

4) Компилируем и загружаем скетч на плату.

5) Для обычной работы модуля (не для режима прошивки) пин GPIO 0 должен быть свободен, поэтому отключаем его от GND.

6) Переподключаем питание ESP-07 (например, вытаскиваем и вставляем обратно адаптер).

7) Видим появление данных на платформе.

В Китае

Introduction to NodeMCU V3

NodeMCU V3 is an open-source firmware and development kit that plays a vital role in designing your own IoT product using a few Lua script lines.

Multiple GPIO pins on the board allow you to connect the board with other peripherals and are capable of generating PWM, I2C, SPI, and UART serial communications.

The interface of the module is mainly divided into two parts including both Firmware and Hardware where former runs on the ESP8266 Wi-Fi SoC and later is based on the ESP-12 module.

The firmware is based on Lua – A scripting language that is easy to learn, giving a simple programming environment layered with a fast scripting language that connects you with a well-known developer community.

And open source firmware gives you the flexibility to edit, modify and rebuilt the existing module and keep changing the entire interface until you succeed in optimizing the module as per your requirements.

USB to UART converter is added on the module that helps in converting USB data to UART data which mainly understands the language of serial communication.

Instead of the regular USB port, MicroUSB port is included in the module that connects it with the computer for dual purposes: programming and powering up the board.

The board incorporates status LED that blinks and turns off immediately, giving you the current status of the module if it is running properly when connected with the computer.

The ability of module to establish a flawless WiFi connection between two channels makes it an ideal choice for incorporating it with other embedded devices like Raspberry Pi.

gpio.pulse.build¶

This builds the object from the supplied argument (a table as described below).

Parameter

this is view as an array of instructions. Each instruction is represented by a table as follows:

  • All numeric keys are considered to be pin numbers. The values of each are the value to be set onto the respective GPIO line.
    For example would set pin 1 to be high.
    Note this that is the NodeMCU pin number and not the ESP8266 GPIO number. Multiple pins can be
    set at the same time. Note that any valid GPIO pin can be used, including pin 0.
  • specifies the number of microseconds after setting the pin values to wait until moving to the next state. The actual delay may be longer than this value depending on whether interrupts are enabled at the end time. The maximum value is 64,000,000 — i.e. a bit more than a minute.
  • and can be used to specify (along with ) that this time can be varied. If one time interval overruns, then the extra time will be deducted from a time period which has a or specified. The actual time can also be adjusted with the API below.
  • and allow simple looping. When a state with and is completed, the next state is at (provided that has not decremented to zero). The count is implemented as an unsigned 32 bit integer — i.e. it has a range up to around 4,000,000,000. The first state is state 1. The is rather like a goto instruction as it specifies the next instruction to be executed.

Example

This will generate a square wave on pins 1 and 2, but they will be exactly out of phase. After 10 seconds, the sequence will end, with pin 2 being high.

Note that you must set the pins into output mode (either gpio.OUTPUT or gpio.OPENDRAIN) before starting the output sequence, otherwise
nothing will appear to happen.

NodeMCU, подключение к WiFi,http сервер и т.д. в Arduino IDE.

Продолжаем работать с платой NodeMCU в Arduino IDE. Как там говориться , так привычнее и ближе к сердцу. Поехали…

Подключение к WiFi.

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

Немного подробней о функциях. WiFi.status() возвращает статус подключения , может пригодиться :

  • WL_CONNECTED: если подключение выполнено успешно.
  • WL_IDLE_STATUS: когда WiFi-сеть переключается с одного статуса на другой.
  • WL_NO_SSID_AVAIL:если заданный SSID находится вне зоны доступа.
  • WL_CONNECT_FAILED: если неправильный пароль.
  • WL_DISCONNECTED: если модуль не находится в режиме станции.

Функция WiFi.mode()задает режим работы WiFi модуля :

  • WIFI_AP: точка доступа.
  • WIFI_STA: клиент.
  • WIFI_AP_STA: оба режима одновременно.

Включение HTTP сервера :

К сети мы подключились, давайте теперь настроим простой Web сервер. Для этого нам потребуется библиотека ESP8266WebServer. Сразу перейдем к скетчу :

Может немного изменить нашу функцию ответа сервера. Пусть будет html:

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

источник

Как все это еще улучшить?

Улучшать можно бесконечно (в тех пределах, которые позволит оперативка, конечно)

Alertmanager-bot — telegram бот для отправки PUSH уведомлений в Telegram
 

cAdvisor — мониторинг ресурсов занятых каждым контейнером
 
Можно прикрутить на алармы amixr чтобы получать уведомления в виде звонков на телефон и SMS.
 
Добавить в prometheus мониторинг и статистику nginx
 
Добавить в prometheus мониторинг influx

 
Добавить в prometheus мониторинг чего-нибудь еще 🙂
 
Добавить контейнер Loki для просмотра логов в Grafana
 
Добавить контейнер с сервером OpenVPN, чтобы ходить в интернет через облако Oracle
 
Можно сделать стартовые скрипты создания пользователей, брать пароли из защищенного хранилища…
 
и много чего еще — было бы желание 🙂
 
 
 
 
Эта статья написана специально для пользователей мобильного приложения IoT Manager (telegraf ожидает сообщения MQTT в JSON формате)
Обсуждение этой статьи у нас на форуме

Обсуждение этой статьи в telegram канале Дмитрия Борисенко 
 
Спасибо, что дочитали до конца.

Recent Articles

  1. Learn how to use the TP4056 properly. There’s a right way, and a wrong way, to use it to safely charge Lithium Ion batteries.

  2. A tutorial on using the ADS1115 precision 16 bit ADC for low power use.

  3. Arduino Nano ISP: How to program an ATmega328P using an Arduino Nano as the ISP programmmer. One common problem: Programming a sketch into the chip without a reset control — solved here.

  4. I2C tutorial: Learn all about the 2 wire I2C serial protocol. Learn how easy it is to use, how it works and when to use it…

  5. How to test and use an Arduino Joystick including a new library to make it super easy.

  6. How to use the MCP4728, a versatile four channel DAC with built in voltage reference.

    The MCP4728 chip is a four channel 12 bit DAC, with memory that outputs voltage that you can use for calibration, anywhere you want a fixed voltage.

Доступ к веб-серверу

После загрузки скетча откройте монитор последовательного порта со скоростью 115200 бит/с и нажмите кнопку RESET на NodeMCU. Если всё в порядке, он выведет динамический IP адрес, полученный от вашего маршрутизатора, и покажет сообщение о том, что HTTP сервер запущен.

Рисунок 5 – Монитор последовательного порта – сервер запущен

Затем загрузите браузер и введите IP адрес, указанный в мониторе последовательного порта. ESP8266 NodeMCU должен выдать веб-страницу, показывающую температуру и относительную влажность.

Рисунок 6 – Веб-страница с температурой и влажностью с датчика DHT11/DHT22/AM2302 на веб-сервере ESP8266 (без CSS)

Создание веб-сервера NodeMCU ESP8266 с использованием режима WiFi Station (STA)

Как следует из заголовка, мы собираемся настроить наш ESP8266 NodeMCU в режим Station (STA) и создать веб-сервер для обслуживания веб-страниц для любого подключенного клиента в существующей сети.

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

const char* ssid = "YourNetworkName";  // Введите SSID
const char* password = "YourPassword";  //Введите пароль

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

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"

// Раскомментируйте одну из строк ниже для того типа DHT датчика, который вы используете!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

/*Укажите SSID & пароль*/
const char* ssid = "YourNetworkName";  // Enter SSID here
const char* password = "YourPassword";  //Enter Password here

ESP8266WebServer server(80);

// DHT датчик
uint8_t DHTPin = D8; 
               
// Инициализация датчика DHT
DHT dht(DHTPin, DHTTYPE);                

float Temperature;
float Humidity;
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  pinMode(DHTPin, INPUT);

  dht.begin();              

  Serial.println("Connecting to ");
  Serial.println(ssid);

  // подключаемся к локальной сети Wi-Fi
  WiFi.begin(ssid, password);

  // проверка подключения Wi-Fi 
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");

}
void loop() {
  
  server.handleClient();
  
}

void handle_OnConnect() {

 Temperature = dht.readTemperature(); // Получает значения температуры
  Humidity = dht.readHumidity(); // Получает значения влажности
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP8266 Weather Report</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP8266 NodeMCU Weather Report</h1>\n";
  
  ptr +="<p>Temperature: ";
  ptr +=(int)Temperaturestat;
  ptr +="°C</p>";
  ptr +="<p>Humidity: ";
  ptr +=(int)Humiditystat;
  ptr +="%</p>";
  
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Flashing with esptool

Get the esptool Python-based flasher

Connect GPIO 0 to gound and restart the ESP-8266 to enter flashing mode.

Flash with esptool

This is set to run rather slow to reduce the likelyhood of errors. It may take a few minutes to flash (7 when I did it), during which you should see the ESP-8266 serial transmit LED flash every few seconds.

After the esptool command exits, disconnect GPIO 0 from ground and restart to go back to run mode.

The interpreter can be accessed over serial with 9600 baud rate and CR+LF line ending. To see it do something basic, run

On startup, NodeMCU checks its internal memory for a file named init.lua and runs it if found. There are lua commands for writing this file without needing to reflash the firmware, and the luatool utility offers a streamlined way to do this.