Страница 1 из 1
Как программно отключить WiFi в ESP8266?
Добавлено: 08 янв 2019, 18:13
dimonsustr
Всем мое почтение! Никак не могу добиться отключения WiFi в ESP8266 на время. Версия 4.2.2 portable. Делаю через "Запись системного параметра - WiFi клиент-Состояние", пишу туда false или 0, без разницы, ничего не происходит. Проверяю одновременно чтением этот системный параметр, данные меняются в нем. А WiFi как работал, так и работает. Может, что-то делаю не так? Задача чтобы ESP работала постоянно, без deep sleep, лишь иногда включая wifi и синхронизировалась с mqtt, и снова в спячку.
Как программно отключить WiFi в ESP8266?
Добавлено: 08 янв 2019, 18:45
AVGN
[ref]dimonsustr[/ref], ну и конечно Ваш проект тайна тайн.
Так помощи не дождетесь.
Или хотите что бы Вам проект нарисовали?
Как программно отключить WiFi в ESP8266?
Добавлено: 08 янв 2019, 19:09
dimonsustr
[ref]AVGN[/ref], проект мне рисовать не надо. У меня частный вопрос, только начал с ESP работать. MQTT настроен, работает, статус соединения WiFi меняется. Также проверял статус соединения клиента WiFi в web-странице, там тоже все меняется. Получается, значение параметра "WiFi клиент - Состояние" не влияет на включение-отключение wifi?

Как программно отключить WiFi в ESP8266?
Добавлено: 08 янв 2019, 21:44
Ingwar
dimonsustr писал(а): 08 янв 2019, 18:13Делаю через "Запись системного параметра - WiFi клиент-Состояние", пишу туда false или 0, без разницы, ничего не происходит.
Может заблуждаюсь, но это параметр только для индикации состояния.
Как программно отключить WiFi в ESP8266?
Добавлено: 08 янв 2019, 21:46
dimonsustr
[ref]Ingwar[/ref], спасибо. Но, похоже, вы ошибаетесь: "Для клиента и точки доступа реализована возможность задания начального состояния(включено/выключено) и изменение этого состояния как через Web интерфейс настройки, так и программно (опять-таки с помощью тех же волшебных блоков чтения и записи системных параметров)". Это комментарии автора.
https://flprog.ru/news/obnovlenie-programmy/#more-3851
Как программно отключить WiFi в ESP8266?
Добавлено: 08 янв 2019, 23:20
aidar_i
Отключение WiFi и подключения к точке доступа, клиенту разные вещи, или я тоже ошибаюсь?
Как программно отключить WiFi в ESP8266?
Добавлено: 09 янв 2019, 13:53
dimonsustr
[ref]aidar_i[/ref], да, по идее, не одно и тоже, отключение wifi это отключение приемопередатчика, который, в свою очередь, может работать в 3-х режимах: AP, client, AP+client, которые можно тоже отключать. Меня интересует отключение аппаратной части, но и просто отключить соединение в режиме client не удалось.
Как программно отключить WiFi в ESP8266?
Добавлено: 09 янв 2019, 14:57
Sancho
Пример, компилируется,[spoiler=из нета]
Две функции ниже все, что вам нужно, чтобы переключить чип WiFi. Огромное преимущество использования заключается в том, что они работают без того, чтобы вызвать ESP.deepsleep() звонок.
Имейте в виду, если вы уже проделали ESP.deepsleep(time, WAKE_RF_DISABLED) это значит, что ваш чип WiFi был отключен вовсе, и вызов WiFiOn() не сможет переключить его обратно. В этом случае вы должны сделать ESP.deepsleep(time, WAKE_RF_DEFAULT). Но после того, как ваш чип WiFi был включен, вы можете вызвать WiFiOn() и WiFiOff() столько раз, сколько вам будет угодно, они будут работать нормально.
Код: Выделить всё
extern "C" {
#include "user_interface.h" // Required for wifi_station_connect() to work
}
#include <Arduino.h>
#include <ESP8266WiFi.h>
#define FPM_SLEEP_MAX_TIME 0xFFFFFFF
void WiFiOn();
void WiFiOff();
//------------------------------------------------------------------------------
void setup() {
WiFiOn();
delay(5000);
WiFiOff();
delay(5000);
ESP.deepSleep(1e6 * 10, WAKE_RF_DEFAULT); // sleep 10 seconds
}
void loop() {
;
}
//------------------------------------------------------------------------------
void WiFiOn() {
wifi_fpm_do_wakeup();
wifi_fpm_close();
//Serial.println("Reconnecting");
wifi_set_opmode(STATION_MODE);
wifi_station_connect();
}
void WiFiOff() {
//Serial.println("diconnecting client and wifi");
//client.disconnect();
wifi_station_disconnect();
wifi_set_opmode(NULL_MODE);
wifi_set_sleep_type(MODEM_SLEEP_T);
wifi_fpm_open();
wifi_fpm_do_sleep(FPM_SLEEP_MAX_TIME);
}
[/spoiler]
Вариант next:
Выкл-
WiFi.mode(WIFI_OFF);
Вкл-
WiFi.mode(WIFI_STA);
Как программно отключить WiFi в ESP8266?
Добавлено: 09 янв 2019, 18:14
dimonsustr
[ref=#ff8000]Sancho[/ref], спасибо, буду пробовать!
Отправлено спустя 1 час 8 минут 34 секунды:
[ref=#ff8000]Sancho[/ref],
Sancho писал(а): 09 янв 2019, 14:57Вариант next:
Выкл-
WiFi.mode(WIFI_OFF);
Вкл-
WiFi.mode(WIFI_STA);
Как этим воспользоваться, подскажите?
Как программно отключить WiFi в ESP8266?
Добавлено: 09 янв 2019, 19:06
Sancho
Создаёшь блок, при выборе - CODE.
Обзываешь как нибудь.
Создаёшь вход boolean, например Off_WiFi.
Далее в loop
if(Off_WiFi)WiFi.mode(WIFI_OFF);
Сохраняешь.
Всё.
Как программно отключить WiFi в ESP8266?
Добавлено: 09 янв 2019, 19:43
dimonsustr
[ref=#ff8000]Sancho[/ref], попробовал, действительно такой способ отключает wifi, спасибо. Одно непонятно, почему потребляемый ток не уменьшается совсем? Это не аппаратное отключение?
Как программно отключить WiFi в ESP8266?
Добавлено: 09 янв 2019, 20:18
Sancho
[ref]dimonsustr[/ref], Честно не вдавался.
Наверно, стоит попробовать способ 1.
Отправлено спустя 1 минуту 24 секунды:
if(Off_WiFi){
wifi_station_disconnect();
wifi_set_opmode(NULL_MODE);
wifi_set_sleep_type(MODEM_SLEEP_T);
wifi_fpm_open();
wifi_fpm_do_sleep(0xFFFFFFF);
}
Отправлено спустя 1 минуту 57 секунд:
Дерзай, отпишись.
Как программно отключить WiFi в ESP8266?
Добавлено: 09 янв 2019, 20:56
dimonsustr
[ref=#ff8000]Sancho[/ref], результат по способу 1 аналогичен способу 2, ток потребления не уменьшается

судя по документации, в режиме modem_sleep потребление должно быть ~16mA против ~75mA в обычном режиме.
Режим light_sleep мне не подходит, будить нечем.
Как программно отключить WiFi в ESP8266?
Добавлено: 07 фев 2019, 21:49
dimonsustr
В общем, путем экспериментов, созданы 2 блока: отключения и включения WIFI. Ток потребления в режиме MODEM SLEEP ~20 мА и ESP при этом не соединен с роутером.
Блок отключения:
if(Off_WiFi){
WiFi.forceSleepBegin(); // Wifi off
delay(100);
}
Блок включения:
if(On_WiFi){
WiFi.forceSleepWake(); // Wifi on
delay(100);
}
Грозит ли сия конструкция износом флэш-памяти ESP при частом переключении туда-сюда пока не понял, изучаю.
Как программно отключить WiFi в ESP8266?
Добавлено: 08 фев 2019, 12:56
Phazz
А зачем delay?
Отправлено спустя 1 минуту 27 секунд:
Часто переключать это с какой периодичностью?
Как программно отключить WiFi в ESP8266?
Добавлено: 09 фев 2019, 02:09
dimonsustr
без delay не работало. и в даташитах, и в примерах везде он есть.
периодичность где-то раз в минуту просыпаться, отсылать-собирать данные.
Как программно отключить WiFi в ESP8266?
Добавлено: 28 июн 2020, 17:35
Ardudue
[ref]dimonsustr[/ref], блок то удалось сделать?
Как программно отключить WiFi в ESP8266?
Добавлено: 13 мар 2021, 21:41
demonys
Привет всем а можите скинуть готовые блоки по 3м примерам кода.
Как программно отключить WiFi в ESP8266?
Добавлено: 15 мар 2021, 07:03
Di123
тоже интересно получились ли блоки
а то в програме стоит в настройках точка доступа и клиент отключено но вай фай работает походу ибо простой скеч помигать светодиодом встроеным потребляет 70-80ма !!!
а сам чип заметно тёплый
Как программно отключить WiFi в ESP8266?
Добавлено: 04 апр 2021, 17:40
sergii2012
dimonsustr писал(а): 07 фев 2019, 21:49
В общем, путем экспериментов, созданы 2 блока: отключения и включения WIFI. Ток потребления в режиме MODEM SLEEP ~20 мА и ESP при этом не соединен с роутером.
Блок отключения:
if(Off_WiFi){
WiFi.forceSleepBegin(); // Wifi off
delay(100);
}
Блок включения:
if(On_WiFi){
WiFi.forceSleepWake(); // Wifi on
delay(100);
}
Грозит ли сия конструкция износом флэш-памяти ESP при частом переключении туда-сюда пока не понял, изучаю.
выключается а вот включить не получилось.