Отключение 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 передатчика вопрос открыт.