Отключение WI-FI и проблема с DHCP
- Войдите на сайт для отправки комментариев
Имеются два модуля 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 передатчик не перезагружая модуль?
С подключением разобрался. ESP12 не хочет нормально работать сразу в режиме AP и STA. Пришлось разделить два режима. Когда есть запрос в интернет , первый модуль отключается от второго и переходит из AP в STA и подключается к роутеру. После получения данных отключается от сети и переходит в режим AP. В таком режиме работает все стабильно.
С отключение RF передатчика вопрос открыт.