Отключение WI-FI и проблема с DHCP

SergSV
Offline
Зарегистрирован: 17.11.2015

Имеются два модуля ESP12.

Первый модуль соеденяется с роутером и создает свою сеть.

кусок кода певого модуля:

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

//********************************Изменить для себя *******************************************************
#define AP_SSID                 "XXXXXX"  // Логин к вашему WiFi(кавычки оставить)
#define AP_PASS                 "XXXXXX" Пароль у вашему WiFi 
#define TIMEZONE 3                                // Часовой пояс
const char* SSIDDAT = "Datchik";                  // имя сети к которой будет подключаться втророй модуль изменить на желаемую
const char* PASSSIDDAT = "oPeNseT1";              // пароль сети к которой будет подключаться втророй модуль изменить на желаемый
//*********************************************************************************************************
char Buffer_am2321[20];                    //buffer to hold incoming packet

const char* ntpServerName = "time.nist.gov";  // сервер точного времени
const int NTP_PACKET_SIZE = 48; 
byte packetBuffer[ NTP_PACKET_SIZE]; 

char ssid[] = "";  
char pass[] = "";      
const char* error = "E0_";  
// Ошибки:
 // Е1 - неудачное подключение к WI-FI
 // Е2 - удачное подключение к WiFi
 // Е3 - неудачное подключение к NTP
 // Е4 - удачное подключение к NTP

unsigned int  localPort = 2590;      // local port to listen for UDP packets
unsigned long ntp_time = 0;
long  t_correct        = 0;
unsigned long cur_ms   = 0;

unsigned long t_cur    = 0;
unsigned int err_count = 0;
uint16_t     my_s=0;
uint16_t     my_m=0;
uint16_t     my_h=0; 
int incomingByte = 0;               // переменная для хранения полученного байта

IPAddress timeServerIP; 
WiFiUDP udp;
IPAddress ipmodul(192,168,1,5);         // назначаем адрес модулю
IPAddress gateway_modul(192,168,1,2);   // IP адрес роутера
IPAddress subnet_modul(255,255,255,0);

void setup()
{
   Serial.begin(9600);
   delay(500);
   WiFi.mode( WIFI_AP_STA);                             // режим точки и клиента
   WiFi.config(ipmodul, gateway_modul, subnet_modul);   // устанавливаем заданный IP
   WiFi.softAP( SSIDDAT,PASSSIDDAT);                    // создаем сеть
.
.
.
.
.

Второй модуль работает автономно . К нему подключены датчики. Через определенное время модуль отсылает данные первому модулю.

Кусок кода второго датчика


#include <AM2321.h>
#include <Weather.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

//********************************Изменить для себя *******************************************************
#define AP_SSID                  "Datchik"//      // Логин к вашему WiFi(кавычки оставить)
#define AP_PASS                  "oPeNseT1"//  //Пароль у вашему WiFi  
//*********************************************************************************************************
unsigned int  localPort = 2590; 
char ssid[] = "";  
char pass[] = "";      
const char* error = "E0_";
const char* buffer_data ="";
const int NTP_PACKET_SIZE = 48; 
byte packetBuffer[ NTP_PACKET_SIZE];
int LedPin = 13 ;//GPIO13
IPAddress ip_test (192, 168, 1, 5);     // IP адрес первого модуля
WiFiUDP Udp;
void setup()
{
   Wire.begin();               // подключение к шине i2c
   Serial.begin(9600);         // запуск последовательного порта
  
   WiFi.mode( WIFI_STA );       // режим клиента

   pinMode(LedPin, OUTPUT); 
   digitalWrite(LedPin, HIGH);   // включает светодиод
.
.
.
.
/*########################################################
  Соединение с WiFi первого модуля
 */
bool ConnectWiFi(const char *ssid, const char *pass) 
{
// Три попытки соединения по WiFi
   for( int i=0; i<3; i++)
   {
      
      WiFi.begin(ssid,pass);
     
// Максиммум 10 раз проверка соединения       
      for( int j=0; j<10; j++ )
      {
          if (WiFi.status() == WL_CONNECTED) 
          { 
              return true; 
          } 
          delay(500);
         
      }
   } 
return false; 
} 

Вопрос первый .

Если первый модуль удачно подключился к роутеру, то второй модуль спокойно отсылает данные на первый модуль. Если первый модуль не подключился к роутеру , то данные со второго модуля на первый не передаются. Путем выяснения причины понял, что если нет соеденения с роутером то второму модулю не присваивается IP адресс. Пробовал принудительно назначить адрес , но результата нет. Скорее всего не работает DHCP  в первом модуле, т.к второму модулю присваивается IP 0.0.0.0 . Как задействовать DHCP  принудительно ?

Второй вопрос. 

Второй модуль работает в автономном режиме и к нему подключены датчики. Бывает такое что датчики отваливаются . Так что бы это видеть повесил светодиод на GPIO13 и по кол-ву морганий определяю какой датчик отвалился. Если датчик отвалился то передача по WI-FI прекращается и модуль в цикле моргает светодиодом до его перезагрузки в ручную. Вот в это время мне не нужен Wi-FI , но вогнать в сон модуль не могу , тогда не будет моргать светодиод , а понизить потребление нужно. Вопрос в том есть ли команда которая отключает RF передатчик не перезагружая модуль?

SergSV
Offline
Зарегистрирован: 17.11.2015

С подключением разобрался. ESP12 не хочет нормально работать сразу в режиме AP  и STA. Пришлось разделить два режима. Когда есть запрос в интернет , первый модуль отключается от второго и переходит из AP в STA и подключается к роутеру. После получения данных отключается от сети и переходит в режим AP. В таком режиме работает все стабильно.

С отключение RF передатчика вопрос открыт.