Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. аппаратные средства
  4. Железо
  5. Панель управления на ESP8266 и Nextion

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    643

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Панель управления на ESP8266 и Nextion

Geplant Angeheftet Gesperrt Verschoben Железо
3 Beiträge 2 Kommentatoren 4.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • F Offline
    F Offline
    fred17
    schrieb am zuletzt editiert von
    #1

    Решил сделать панель управления умным домом на ESP8266 и монитор Nextion 3.5"

    Что для этого нужно:

    1)Блок питания с 24-12В на 5В

    2)ESP8266

    3)Sensor temp HTU21D

    4)Nextion 3.5"

    5)Распечатка крышки на 3d принтере

    ESP модуль принимает данные с Nexton и датчика температуры, данные отправляет на сервер по MQTT, пока сделал управление температурой, т.к. управлять в комнате больше нечем.

    Но можно настроить экран на любые функции, например управление светом, тогда выключатели в комнате не нужны будут.

    Ссылка на STL файлы крышки + фото + описание комплектующих с ссылками на них:

    https://www.thingiverse.com/thing:2603232

    Все это управляется по MQTT

    Выкладываю пример код как есть на данный момент для ESP8266, его нужно доделывать, но и так работает уже больше месяца, пока без каких либо проблем :) :

    ! ```
    `#include <nextion.h>
    #include <esp8266wifi.h>
    #include <wificlient.h>
    #include <esp8266webserver.h>
    #include <esp8266mdns.h>
    #include <esp8266httpupdateserver.h>
    #include <eeprom.h>
    #include <mqtt.h>
    #include <wire.h>
    #include "Adafruit_HTU21DF.h"
    ! void SendData(String& topic, String& data);
    void myPublishedCb();
    void myDisconnectedCb();
    void myConnectedCb();
    ! // ------------------------------Определяем псевдонимы топиков------------------------------------------------------------------
    #define CLIENT_ID "kitchen"
    #define TEMPOUT "/kitchen/temp_out" //температура снаружи
    #define TEMPEND "/kitchen/temp_end" //выставленная температура
    #define TIME "/kitchen/time" //время
    // #define PIR D1 // gpio 5
    ! Adafruit_HTU21DF htu = Adafruit_HTU21DF();
    ! //----переменные для сервера MQTT---------------
    const uint32_t& port = 1883;
    const char* ip_adr = "..."; //Введите IP сервера MQTT
    ! //--------переменные для Nextion---------------
    String incStr = ""; // Это будет приемник информации от Nextion
    bool serialReadFlag = false; //Флаг проверки сообщения пришедшего от Nextion
    ! //-------------настройки WEB Server
    String webPage = "";
    String str = "";
    boolean conf = false;

    // char pir = 0; //Для датчика движения
    String iphost = "";
    int count = 0;

    ! IPAddress ip(,,,); //Статический IP адресс
    IPAddress gateway(192,168,1,1);
    IPAddress subnet(255,255,255,0);
    MQTT myMqtt(CLIENT_ID, ip_adr, port);
    MDNSResponder mdns;
    ESP8266WebServer server(80);
    ESP8266HTTPUpdateServer httpUpdater;
    ! //-----------------------------------------------------------------------------------------------------------------------
    void setup(void) {
    ! byte len_ssid, len_pass;

    delay(1000);
    Serial.begin(115200);
    Serial.println();

    EEPROM.begin(98);

    ! len_ssid = EEPROM.read(96);
    len_pass = EEPROM.read(97);
    if(len_pass > 64) len_pass = 0;
    ! pinMode(0, INPUT_PULLUP);
    if((len_ssid < 33) && (len_ssid != 0)){
    // --------------------------------------------------------------Режим STATION-------------------------------------------------------------------------
    WiFi.mode( WIFI_STA);
    unsigned char* buf_ssid = new unsigned char[32];
    unsigned char* buf_pass = new unsigned char[64];
    for(byte i = 0; i < len_ssid; i++) buf_ssid[i] = char(EEPROM.read(i));
    buf_ssid[len_ssid] = '\x0';
    const char ssid = (const char)buf_ssid;
    for(byte i = 0; i < len_pass; i++) buf_pass[i] = char(EEPROM.read(i + 32));
    const char pass = (const char)buf_pass;
    buf_pass[len_pass] = '\x0';
    !
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);
    WiFi.begin(ssid, pass);
    WiFi.config(ip, gateway, subnet);

    while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    // count++;
    // if(count<15){
    Serial.print(WiFi.status());}
    // else{
    // EEPROM.write(96,255);
    // EEPROM.commit();
    // EEPROM.end();
    // conf = true;
    // }
    // }

    ! Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());

    if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
    // "Запущен MDNSresponder"
    }
    // pinMode(PIR, INPUT);

    server.on("/", {
    webPage="";
    webPage += "";
    webPage +="";
    webPage +="";
    webPage +="

    ! Температура: "+ String(htu.readTemperature()) +"
    ! "; //-----------------------------------------------------ТЕМПЕРАТУРА
    webPage +="
    ! Влажность: "+ String(htu.readHumidity()) +"
    ! "; //-----------------------------------------------------ТЕМПЕРАТУРА
    server.send(200, "text/html; charset=utf-8", webPage);
    });
    server.on("/setting", {
    webPage="
    ! <form method="POST" action="/saveether" enctype="multipart/form-data">";
    webPage +="<label for="ip">IP адрес:</label>
    ! ";
    webPage +="<label for="gateway">gateway:</label>
    ! ";
    webPage +="<label for="subnet">subnet:</label>
    ! ";
    webPage +="";
    webPage +="</form>
    ! ";
    webPage +="";
    server.send(200, "text/html; charset=utf-8", webPage);
    });
    server.on("/settingmqtt", {
    webPage="
    ! <form method="POST" action="/savemqtt" enctype="multipart/form-data">";
    webPage +="<label for="ip">IP адрес сервера MQTT:</label>
    ! ";
    webPage +="<label for="gateway">Порт сервера MQTT:</label>
    ! ";
    webPage +="";
    webPage +="</form>
    ! ";
    webPage +="";
    server.send(200, "text/html; charset=utf-8", webPage);
    });
    server.on("/savemqtt", saveMqtt);
    server.on("/saveether", saveEther);

    Serial.println("Connecting to MQTT server");

    ! // ---------------------------------- Настройки возврата MQTT----------------------------------------------------------------------
    myMqtt.onConnected(myConnectedCb);
    myMqtt.onDisconnected(myDisconnectedCb);
    myMqtt.onPublished(myPublishedCb);
    myMqtt.onData(SendData);

    Serial.println("connect mqtt...");
    myMqtt.connect();

    ! Serial.println("subscribe to topic...");
    myMqtt.subscribe(TEMPOUT);
    myMqtt.subscribe(TEMPEND);
    myMqtt.subscribe(TIME);
    ! delay(10);

    //--------------------------------------HTTP server подключение------------------------------------------------------------------------
    httpUpdater.setup(&server);
    server.begin();
    Serial.println("HTTP server started");

    ! MDNS.addService("http", "tcp", 80);
    Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", "8266");
    ! //-------------------------------------------------Проверка датчика температуры-----------------------------------------------------------
    Serial.println("21D-F test");
    if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
    }
    }

    else // ---------------------------------------------------------Режим SoftAP--------------------------------------------
      {
        const char *ssid_ap = "ESPap";
        iphost = "ESPap";
        WiFi.mode(WIFI_AP);
    
        Serial.print("Configuring access point...");
    /* You can remove the password parameter if you want the AP to be open. */
    WiFi.softAP(ssid_ap);
    
        delay(2000);
    Serial.println("done");
    IPAddress myIP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(myIP);
    server.on("/", handleRoot);
    server.on("/ok", handleOk);
    server.begin();
    Serial.println("HTTP server started");  
      }
    

    }
    //-------------------------------------------------------Основная функция----------------------------------------------------------------------
    void loop() {
    server.handleClient();

    ! // Перевод модуля в режим конфигурации путем замыкания GPIO0 на массу
    if((digitalRead(0) == LOW) && !conf){
    EEPROM.write(96,255);
    EEPROM.commit();
    EEPROM.end();
    conf = true;
    Serial.println("Please reboot module for coniguration");
    }
    ! //-------------------------------------------------------------------------------------------------
    if(iphost != "ESPap"){
    if (Serial.available()) {
    delay(50);
    uint8_t inn = Serial.read(); // читаем один байт
    if(serialReadFlag) { // Если установлен флаг приема - действуем
    if(inn == 59){ // ASCII : ";" // Находим конец передачи ";"
    if(incStr.length() > 0) { // Проверяем длину сообщения и отправляем в "переработку"
    AnalyseString(incStr); // В этой функции будем парсить сообщение
    }
    serialReadFlag = false; // Сбрасываем флаг приема
    }
    else { // А это нормальный прием
    incStr += (char)inn; // Создаем String от Nextion
    }
    }
    else { // А здесь отлавливается начало передачи от Nextion
    if(inn == 35) { // ASCII : "#"
    serialReadFlag = true; // После # начинаем чтение при следующем заходе
    incStr = ""; // Но до этого очистим стринг приема
    }
    }
    }
    else{
    //getStateParam(digitalRead(PIR),"motionSensor"); //Отправка данных датчика движения в топик
    getStateParam(String(htu.readTemperature()),"Temperature");
    getStateParam(String(htu.readHumidity()),"Humidity");
    SendDataNextioin("temp_in", String(htu.readTemperature()));
    SendDataNextioin("hum_in", String(htu.readHumidity()));
    delay(1000);
    }
    }}
    ! //-------------------------------------------------------Метод отправки топика MQTT на сервер-----------------------------------------------------------------------------
    void getStateParam(String value,String topicval){
    String topic("/");
    topic += CLIENT_ID;
    topic += "/"+topicval;
    // Публикуем
    boolean result = myMqtt.publish(topic, value);
    delay(1000);
    }
    //-------------------------------------------------------------------Nextion----------------------------------------------------------------------------------------------
    void AnalyseString(String incStr) { // Отправка данных
    if (incStr == "btnup") { //При смене значения температура вверх
    getStateParam("1","btnup");
    }
    if (incStr == "btndown") { //При смене значения температура вниз
    getStateParam("1","btndown");
    }
    if (incStr == "gettempend") { //При смене значения температура вниз
    getStateParam("1","gettempend");
    }
    }
    //-----------------------------------------------Метод формирует данные для отпраки на монитор Nextion--------------------------------------------------------------------------
    //--отправка от датчика температуры--------------
    void SendDataNextioin(String dev, String data)
    {
    if(dev=="hum_in"){
    String hum = """ + data + "%"";
    Serial.print(dev+".txt");
    Serial.print("=");
    Serial.print(hum);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    }
    else if(dev=="temp_in"){
    String temp_in = """ + data + "C"";
    Serial.print(dev+".txt");
    Serial.print("=");
    Serial.print(temp_in);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    }
    }
    //--отправка с сервера--------------
    void SendData(String& dev, String& data)
    {
    String per ="";
    for(int i=9;i<dev.length();i++) {per/+="dev[i];}" if(per="="hum_in"){" string/hum="" "/data/"%"";/serial.print(per+".txt");/serial.print("=");
    Serial.print(hum);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    }
    else if(per==" time"){/time="" """;/""/"c"";/connected/to/mqtt/server");/}/void/mydisconnectedcb()/{/serial.println("disconnected./try/reconnect...");/delay(500);/mymqtt.connect();/mypublishedcb()/serial.println("published.");/--------------------------------------------Функции/настройки/wifi------------------------------------------------------------------/handleroot()/str/;/content-type"/content="&quot;text/html;" charset="utf-8&quot;">

    <title>ESP8266 Settings</title>

    ";
    str += "\

    ! <form method="&quot;POST&quot;" action="&quot;ok&quot;">
    WIFI Net

    Password
    !

    </form>
    !

    ";
    server.send ( 200, "text/html", str );
    }

    void handleOk(){
    String ssid_ap;
    String pass_ap;
    unsigned char* buf = new unsigned char[64];

    String str = "";
    str += "


    <title>ESP8266 Settings</title>

    ";
    str += "";

    EEPROM.begin(98);

    ssid_ap = server.arg(0);
    pass_ap = server.arg(1);

    if(ssid_ap != ""){
    EEPROM.write(96,ssid_ap.length());
    EEPROM.write(97,pass_ap.length());
    ssid_ap.getBytes(buf, ssid_ap.length() + 1);
    for(byte i = 0; i < ssid_ap.length(); i++)
    EEPROM.write(i, buf[i]);
    pass_ap.getBytes(buf, pass_ap.length() + 1);
    for(byte i = 0; i < pass_ap.length(); i++)
    EEPROM.write(i + 32, buf[i]);
    EEPROM.commit();
    EEPROM.end();

    str +="Configuration saved in FLASH
    


    Changes applied after reboot

    !
    Return to settings page
    ";
    }
    else {
    str += "No WIFI Net

    Return to settings page
    ";
    }
    str += "";
    server.send ( 200, "text/html", str );
    }
    //--------------------------------------------Сохранение настроек MQTT--------------------------------------------------------------
    void saveMqtt(){

    char ip_serv;
    uint32_t port;
    unsigned char* buf = new unsigned char[64];

    String str = "";
    str += "


    <title>ESP8266 Settings mqtt</title>

    ";
    str += "";

    // EEPROM.begin(98);

     str += "";
    

    server.send ( 200, "text/html", str );
    }
    //--------------------------------------------Сохранение настроек Ethernet--------------------------------------------------------------
    void saveEther(){

    String ip_adr;
    String subnet;
    String gateway;
    unsigned char* buf = new unsigned char[64];

    String str = "";
    str += "


    <title>ESP8266 Settings ethernet</title>

    ";
    str += "";
    str += "";
    server.send ( 200, "text/html", str );
    }
    //----------------------------------------------------------------------------------------------------------------------------------</dev.length();i++)></wire.h></mqtt.h></eeprom.h></esp8266httpupdateserver.h></esp8266mdns.h></esp8266webserver.h></wificlient.h></esp8266wifi.h></nextion.h>`

    ! Пример проекта для Nextion
    ! https://drive.google.com/open?id=1_Y7V- ... jgWCZdzip1
    ! Видео пример работы:
    ! https://youtu.be/fr3qQaji5Vk[/i][/i][/i][/i][/i]

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      Pooh
      schrieb am zuletzt editiert von
      #2

      Не хватает проекта для самого nextion…

      Тоже хотел заюзать такой дисплейчик, но резистивный тачскрин (ёмкостной только у 7" расширенной модели) и цена... остановился пока на старом планшете

      а вот почему Вы не использовали родную библиотеку? она конечно прожорливая, но вполне надежная и удобная

      https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
      https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
      https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
      https://www.timestope.com/freepooh - witness code: freepooh

      1 Antwort Letzte Antwort
      0
      • F Offline
        F Offline
        fred17
        schrieb am zuletzt editiert von
        #3

        Добавил пример проект для nextion.

        Большие экраны это хорошо, но не критично :), данный экран считаю справляется со своей задачей, все комплектующие с рамкой обошлись примерно в 2000р. Если поставить блок ac-dc с 220 на 5v то его можно воткнуть вместо выключателя.

        Не использовал родную библиотеку для Nextion?

        1 Antwort Letzte Antwort
        0

        Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

        Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

        Mit deinem Input könnte dieser Beitrag noch besser werden 💗

        Registrieren Anmelden
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        224

        Online

        32.7k

        Benutzer

        82.6k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe