• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Управление нагрузкой на NodeMCU с помощью мобильного приложения

15 августа, 2017

Нам понадобится:

Сама плата nodemcu: http://ali.pub/1qdz7a

nodemcu shield: http://ali.pub/1qdzd4

Реле: http://ali.pub/1qrtft

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

В данной статье показан пример использования платы NodeMCU. А именно управление нагрузкой с помощью релейного модуля из 4 реле и приложения на мобильный телефон андроид.

 

Подключаем все контакты по схеме

 

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

#include <ESP8266WiFi.h>

// Имя и пароль вашей сети WiFi
const char* ssid = "test";
const char* password = "test";

// Создаем сервер и порт для прослушки 80

WiFiServer server(80);

void setup() {
 Serial.begin(115200);
 delay(10);

 // Подготовка GPIO
 pinMode(5, OUTPUT);
 digitalWrite(5, 1);
 pinMode(4, OUTPUT);
 digitalWrite(4, 1);
 pinMode(0, OUTPUT);
 digitalWrite(0, 1);
 pinMode(2, OUTPUT);
 digitalWrite(2, 1); 

 // присваиваем статичесий IP адрес
 WiFi.mode(WIFI_STA); // режим клиента
 WiFi.config(IPAddress(192,168,1,131),IPAddress(192,168,1,111),IPAddress(255,255,255,0),IPAddress(192,168,1,1));
 

 WiFi.begin(ssid, password);
// Ожидание подключения
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 }
 Serial.println("");
 Serial.println("WiFi connected");
 
 // Запуск сервера
 server.begin();
 Serial.println("Server started");
 
 // Вывод полученного IP адреса
 Serial.println(WiFi.localIP());
}
 


void loop() {

 // Проверка подключения
 WiFiClient client = server.available();
 if (!client) {
 return;
 }

 // Ожидание данных
 Serial.println("new client");
 while (!client.available()) {
 delay(1);
 }

 // Чтение первой строки запроса
 String req = client.readStringUntil('\r');
 Serial.println(req);
 client.flush();

 // Работа с GPIO
 if (req.indexOf("/1/0") != -1)
 digitalWrite(5, 0);
 else if (req.indexOf("/1/1") != -1)
 digitalWrite(5, 1);
 else if (req.indexOf("/2/0") != -1)
 digitalWrite(4, 0);
 else if (req.indexOf("/2/1") != -1)
 digitalWrite(4, 1);
 else if (req.indexOf("/3/0") != -1)
 digitalWrite(0, 0);
 else if (req.indexOf("/3/1") != -1)
 digitalWrite(0, 1);
 else if (req.indexOf("/4/0") != -1)
 digitalWrite(2, 0);
 else if (req.indexOf("/4/1") != -1)
 digitalWrite(2, 1);
 else if (req.indexOf("/5") != -1) {
 Serial.println("TEST OK");
 String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nTest OK. Uptime: ";

 // Подстчет UpTime
 int Sec = (millis() / 1000UL) % 60;
 int Min = ((millis() / 1000UL) / 60UL) % 60;
 int Hours = ((millis() / 1000UL) / 3600UL) % 24;
 int Day = ((millis() / 1000UL) / 3600UL / 24UL);
 s += Day;
 s += "d ";
 s += Hours;
 s += ":";
 s += Min;
 s += ":";
 s += Sec;
 s += "</html>\n";
 client.print(s);
 client.stop();
 return;
 }
 else
 // Если неверный запрос написать об ошибке
 {
 Serial.println("invalid request");
 String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nInvalid request";
 s += "</html>\n";
 client.print(s);
 client.stop();
 return;
 }

 client.flush();



 // Формирование ответа
 String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO set OK";
 s += "</html>\n";

 // Send the response to the client
 client.print(s);
 delay(1);
 Serial.println("Client disonnected");

}

 

Ссылка на скетч: https://yadi.sk/d/XU-WI08r3M32gF
Сначала в этом скетче нужно изменить

 

// Имя и пароль вашей сети WiFi
const char* ssid = "test";
const char* password = "test";

 

Затем в строчке меняем ip адрес на свой:

 

WiFi.mode(WIFI_STA); // режим клиента
 WiFi.config(IPAddress(192,168,1,131),IPAddress(192,168,1,111),IPAddress(255,255,255,0),IPAddress(192,168,1,1));

 

Где первое это ip адрес устройства, 2 это шлюз, 3 это маска подсети, 4 это адрес dhcp сервера

После заливки скетча, переходя по адресу http://192.168.1.131/1/0 и http://192.168.1.131/1/1 мы будем включать и выключать реле, и следовательно меняя 1 на 2,3,4 мы будем управлять другими реле, например http://192.168.1.131/3/1

 

Теперь давайте перейдем к созданию приложения:

перейдя по ссылке: http://ai2.appinventor.mit.edu и залогинившись, мы поподаем в программу создания приложений для андроид.

Мое приложение выглядит так:

Тяжело здесь описать, что нужно добавлять, постараюсь перечислить что нужно накидать на экран.

Для управления 4мя реле нам нужно:

Из вкладки слева User interface накидать на экран 8 Button, для надписей над кнопками нам нужно 4 Label 

Из вкладки слева Connectivity Добавить блок Web

Для установки двух кнопок в одной плоскости нам понадобится блок HorizontalArrangement в вкладке слева Layout

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

И в вкладке справа Properies раскроются все настройки которые применимы к этому объекту.

 

Общее окно выглядит вот так:

После косметических настроек перейдем в правом верхнем углу во вкладку Blocks

Здесь будем программировать с помощью блок-схем.

Для начала в вкладке слева Blocks выберем первую кнопку с которой будем работать и выберем блок: when Button1 . Click

Далее  в тойже вкладке Blocks нажмем на Web  и почти в самом низу выберем блок set Web1. Url to

и добавим его к when Button1 . Click

Далее перейдем в туже вкладку Blocks далее Text и выберем самый первый блок который выглядит вот так   ” ”  присоединим его к et Web1. Url to и напишем в нем адрес для включения реле “http://192.168.1.131/1/0”

Далее  в тойже вкладке Blocks нажмем на Web выберем пурпурного цвета блок call Web1. Get и присоединим его к when Button1 . Click 

На этом настройка кнопки закончена, такие же действия нужно проделать со всеми кнопками и должно получиться вот так:

 

Само приложение можно скачать по ссылке:https://yadi.sk/d/BY4kEIYQ3M36LL

Исходники можно посмотреть по этой ссылке: https://yadi.sk/d/ehabE3C_3M36Yo по этой ссылке скачается файл с расширением .aia и его можно добавить в MIT app invertor и посмотреть полностью из чего состоит программа.

 

Ну а кому лень читать и интересно смотреть видео:

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·