• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Установка псево домена.

benderko

New member
Пишу небольшой скетч, с помощью которого дистанционно управляю адресной светодиодной лентой. Модуль подключается к роутеру, далее идет работа через IP 192, 168, 0, 100 и тут в принципе все терпимо.
Если подключится не удается, создается точка доступа. Присваивается ИП 192.168.4.1. Можно ли сделать так, что бы при создании новой точки, не нужно было вбивать IP 192.168.4.1., а допустим адрес led.ru.
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
IPAddress apIP(192, 168, 4, 1);
MDNSResponder mdns;
// Определяем переменные
String _ssid = "tplink"; // Для хранения SSID
String _password = "Dkh123456"; // Для хранения пароля сети
String _ssidAP = "LedLamp"; // SSID AP точки доступа
String _passwordAP = "55556666"; // пароль точки доступа
ESP8266WebServer server(80);
String webPage = "";
#include "FastLED.h" // библиотека для работы с лентой
#define LED_COUNT 13 // число светодиодов в кольце/ленте
#define LED_DT 0 // пин, куда подключен DIN ленты
int max_bright = 220; // максимальная яркость (0 - 255)
int ledMode = 1;
int regim = 0;
Стартовый режим
0 - все выключены
1 - все включены
3 - кольцевая радуга
888 - демо-режим
// цвета мячиков для режима
byte ballColors[3][3] = {
{0xff, 0, 0},
{0xff, 0xff, 0xff},
{0 , 0 , 0xff}
};
int BOTTOM_INDEX = 0; // светодиод начала отсчёта
int TOP_INDEX = int(LED_COUNT / 2);
int EVENODD = LED_COUNT % 2;
struct CRGB leds[LED_COUNT];
int ledsX[LED_COUNT][3]; //-ARRAY FOR COPYING WHATS IN THE LED STRIP CURRENTLY (FOR CELL-AUTOMATA, MARCH, ETC)
int thisdelay = 20; //-FX LOOPS DELAY VAR
int thisstep = 10; //-FX LOOPS DELAY VAR
int thishue = 0; //-FX LOOPS DELAY VAR
int thissat = 255; //-FX LOOPS DELAY VAR
int thisindex = 0;
int thisRED = 0;
int thisGRN = 0;
int thisBLU = 0;
int idex = 0; //-LED INDEX (0 to LED_COUNT-1
int ihue = 0; //-HUE (0-255)
int ibright = 0; //-BRIGHTNESS (0-255)
int isat = 0; //-SATURATION (0-255)
int bouncedirection = 0; //-SWITCH FOR COLOR BOUNCE (0-1)
float tcount = 0.0; //-INC VAR FOR SIN LOOPS
int lcount = 0; //-ANOTHER COUNTING VAR
// ---------------СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ-----------------

void setup()
{
delay(1000);

webPage += "<meta charset=\"utf-8\"> <style type=\"text/css\"> button {display: inline-block; color: white; text-decoration: none; padding: .5em 2em; outline: none; border-width: 2px 0; border-style: solid none; border-radius: 6px; background: linear-gradient(#69A7FD, #0F71F7) #E38916; transition: 0.2s;}button:hover { background: linear-gradient(#69A7FD, #356EBD) #f5ae00; }button:active { background: linear-gradient(#F0FF60, #f5ae00) #B5C42D; } p {margin-left: 30} body { background-color: #B0D1FD; margin: 0; font-size: 150%;} #hed { border-radius: 7px; background: #0649A7; color: #FFFFFF; height: 80;} #hed H3 { color: #FFFFFF; margin: 20; padding-top: 25px;} </style><body><p><h2>&nbsp</h2></p><div id=\"hed\"><h3>Панель управления</h3></div><p>Режим освещения <a href=\"LED0On\"><button>ON</button></a>&nbsp;<a href=\"LED0Off\"><button>OFF</button></a>";
webPage += "<p> <a href=\"id2\"><button>Плавная смена цветов</button></a>&nbsp <a href=\"id3\"><button>Радуга цветов</button></a></p>";
webPage += "<p> <a href=\"id4\"><button>Случайная смена</button>

delay(1000);
Serial.begin(9600);

Serial.println("start wifi connect");
/////
WIFIinit();
//Настраиваем и запускаем SSDP интерфейс
Serial.println("Start 3-SSDP");

/////
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}

server.on("/", [](){
server.send(200, "text/html", webPage);
});
////////////////////
server.on("/LED0On", [](){
server.send(200, "text/html", webPage);
digitalWrite(ledMode, 3);
Serial.println(3);
regim = 106;
delay(1000);
});

server.on("/LED0Off", [](){
server.send(200, "text/html", webPage);
digitalWrite(ledMode, 0);
Serial.println(0);
regim = 0;
delay(1000);
});


//////////////// конец работа с кнопкой
//////////////// работа с кнопкой
server.on("/id2", [](){
server.send(200, "text/html", webPage);
digitalWrite(ledMode, 2);
regim = 2;
Serial.println(regim);
delay(1000);
});
server.on("/id3", [](){
server.send(200, "text/html", webPage);
digitalWrite(ledMode, 3);
regim = 3;
Serial.println(regim);
delay(1000);
});

//////////////// конец работа с кнопкой plavno
server.begin();
Serial.println("HTTP server started");

LEDS.setBrightness(max_bright); // ограничить максимальную яркость
LEDS.addLeds<WS2811, LED_DT, GRB>(leds, LED_COUNT); // настрйоки для нашей ленты (ленты на WS2811, WS2812, WS2812B)
one_color_all(0, 0, 0); // погасить все светодиоды
LEDS.show(); // отослать команду
}

void loop() {
server.handleClient();

// if (Serial.available() > 0) { // если что то прислали

ledMode = regim; // парсим в тип данных int
change_mode(ledMode); // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
//}

switch (ledMode) {
case 999: break; // пазуа
case 2: rainbow_fade(); break; // плавная смена цветов всей ленты
case 3: rainbow_loop(); break; // крутящаяся радуга
case 4: random_burst(); break; // случайная смена цветов
case 5: color_bounce(); break; // бегающий светодиод
case 888: demo_modeA(); break; // длинное демо
case 889: demo_modeB(); break; // короткое демо
}
}

void change_mode(int newmode) {
server.handleClient();
thissat = 255;
switch (newmode) {
case 0: one_color_all(0, 0, 0); LEDS.show(); break; //---ALL OFF
case 1: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL ON
case 2: thisdelay = 20; break; //---STRIP RAINBOW FADE
case 3: thisdelay = 20; thisstep = 10; break; //---RAINBOW LOOP
case 4: thisdelay = 20; break; //---RANDOM BURST
case 5: thisdelay = 20; thishue = 0; break; //---CYLON v1

}
bouncedirection = 0;
one_color_all(0, 0, 0);
ledMode = newmode;
}

P.S Почему сбилась кодировка? Сегодня зашел и ахнул? Arduino IDE.
P.S.S Реально ли реализовать здесь SSDP
P.S.S.S Как реализовать отправку логина и пароля на модуль, для последующего подключения к существующей сети.
 

andrik_zp

Member
P.S.S.S Как реализовать отправку логина и пароля на модуль, для последующего подключения к существующей сети.
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
String str = "";
boolean conf = false;
String html_header = "<html>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
<head>\
   <title>ESP8266 Settings</title>\
   <style>\
     body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
   </style>\
</head>";
ESP8266WebServer server(80);
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.print("SSID: ");
      Serial.print(ssid);
      Serial.print("   ");
      Serial.print("Password: ");
      Serial.println(pass);
   
      WiFi.begin(ssid, pass);
      // Wait for connection
      while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
      }
      Serial.println();
      Serial.print("Connected to ");
      Serial.println(ssid);
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
    }
    else // Режим SoftAP
      {
        const char *ssid_ap = "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");
  }
}
void handleRoot() {
  String str = "";
  str += html_header;
  str += "<body>\
   <form method=\"POST\" action=\"ok\">\
     <input name=\"ssid\"> WIFI Net</br>\
     <input name=\"pswd\"> Password</br></br>\
     <input type=SUBMIT value=\"Save settings\">\
   </form>\
</body>\
</html>";
server.send ( 200, "text/html", str );
}
void handleOk(){
  String ssid_ap;
  String pass_ap;
  unsigned char* buf = new unsigned char[64];
  String str = "";
  str += html_header;
  str += "<body>";
  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</br>\
   Changes applied after reboot</p></br></br>\
   <a href=\"/\">Return</a> to settings page</br>";
  }
  else {
    str += "No WIFI Net</br>\
   <a href=\"/\">Return</a> to settings page</br>";
  }
  str += "</body></html>";
  server.send ( 200, "text/html", str );
}
 

enjoynering

Well-known member
Можно ли сделать так, что бы при создании новой точки, не нужно было вбивать IP 192.168.4.1., а допустим адрес led.ru
Можно, но с приставкой .local и только маленькими буквами. Смотрите
примеры mDNS - A Beginner's Guide to the ESP8266

На android устройствах данный тип запросов не поддерживается.
 

tretyakov_sa

Moderator
Команда форума
Можно ли сделать так, что бы при создании новой точки, не нужно было вбивать IP 192.168.4.1., а допустим адрес led.ru.
Реально смотрите примеры DNSServer
P.S.S Реально ли реализовать здесь SSDP
Здесь это где?
P.S.S.S Как реализовать отправку логина и пароля на модуль, для последующего подключения к существующей сети.
Посмотрите видео из плейлиста ОСНОВЫ.
 
Сверху Снизу