• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 Как реализовать отправку логина и пароля на модуль, для последующего подключения к существующей сети.
Посмотрите видео из плейлиста ОСНОВЫ.
 
Сверху Снизу