Уважаемые пользователи! Наш сайт и форум содержится на средства полученные от рекламы. Если вы хотите и дальше продолжать общаться, скачивать, и т.п. пожалуйста отключите блокировку рекламы для нашего сайта/форума. Можно и покликать по рекламным ссылкам, так будут больше выплаты. Спасибо за понимание!

Как программно отключить WiFi в ESP8266?

Ответить
Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#1

Сообщение dimonsustr » 08.01.2019{, 18:13}

Всем мое почтение! Никак не могу добиться отключения WiFi в ESP8266 на время. Версия 4.2.2 portable. Делаю через "Запись системного параметра - WiFi клиент-Состояние", пишу туда false или 0, без разницы, ничего не происходит. Проверяю одновременно чтением этот системный параметр, данные меняются в нем. А WiFi как работал, так и работает. Может, что-то делаю не так? Задача чтобы ESP работала постоянно, без deep sleep, лишь иногда включая wifi и синхронизировалась с mqtt, и снова в спячку.

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 53

Как программно отключить WiFi в ESP8266?

#2

Сообщение AVGN » 08.01.2019{, 18:45}

dimonsustr, ну и конечно Ваш проект тайна тайн.
Так помощи не дождетесь.
Или хотите что бы Вам проект нарисовали?
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#3

Сообщение dimonsustr » 08.01.2019{, 19:09}

AVGN, проект мне рисовать не надо. У меня частный вопрос, только начал с ESP работать. MQTT настроен, работает, статус соединения WiFi меняется. Также проверял статус соединения клиента WiFi в web-странице, там тоже все меняется. Получается, значение параметра "WiFi клиент - Состояние" не влияет на включение-отключение wifi?
Изображение

Ingwar
Майор
Сообщения: 1072
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 53
Откуда: Ленобласть
Имя: Игорь

Как программно отключить WiFi в ESP8266?

#4

Сообщение Ingwar » 08.01.2019{, 21:44}

dimonsustr писал(а):
08.01.2019{, 18:13}
Делаю через "Запись системного параметра - WiFi клиент-Состояние", пишу туда false или 0, без разницы, ничего не происходит.
Может заблуждаюсь, но это параметр только для индикации состояния.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#5

Сообщение dimonsustr » 08.01.2019{, 21:46}

Ingwar, спасибо. Но, похоже, вы ошибаетесь: "Для клиента и точки доступа реализована возможность задания начального состояния(включено/выключено) и изменение этого состояния как через Web интерфейс настройки, так и программно (опять-таки с помощью тех же волшебных блоков чтения и записи системных параметров)". Это комментарии автора.
https://flprog.ru/news/obnovlenie-programmy/#more-3851

aidar_i
Полковник
Сообщения: 1587
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 175
Откуда: Уфа
Имя: Айдар
Контактная информация:

Как программно отключить WiFi в ESP8266?

#6

Сообщение aidar_i » 08.01.2019{, 23:20}

Отключение WiFi и подключения к точке доступа, клиенту разные вещи, или я тоже ошибаюсь?

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#7

Сообщение dimonsustr » 09.01.2019{, 13:53}

aidar_i, да, по идее, не одно и тоже, отключение wifi это отключение приемопередатчика, который, в свою очередь, может работать в 3-х режимах: AP, client, AP+client, которые можно тоже отключать. Меня интересует отключение аппаратной части, но и просто отключить соединение в режиме client не удалось.

Аватара пользователя
Sancho
Полковник
Сообщения: 3528
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 454
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как программно отключить WiFi в ESP8266?

#8

Сообщение Sancho » 09.01.2019{, 14:57}

Пример, компилируется,
из нетаПоказать
Две функции ниже все, что вам нужно, чтобы переключить чип 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);

}
Вариант next:
Выкл-
WiFi.mode(WIFI_OFF);
Вкл-
WiFi.mode(WIFI_STA);
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#9

Сообщение dimonsustr » 09.01.2019{, 17:05}

Sancho, спасибо, буду пробовать!

Отправлено спустя 1 час 8 минут 34 секунды:
Sancho,
Sancho писал(а):
09.01.2019{, 14:57}
Вариант next:
Выкл-
WiFi.mode(WIFI_OFF);
Вкл-
WiFi.mode(WIFI_STA);
Как этим воспользоваться, подскажите?

Аватара пользователя
Sancho
Полковник
Сообщения: 3528
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 454
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как программно отключить WiFi в ESP8266?

#10

Сообщение Sancho » 09.01.2019{, 19:06}

Создаёшь блок, при выборе - CODE.
Обзываешь как нибудь.
Создаёшь вход boolean, например Off_WiFi.
Далее в loop
if(Off_WiFi)WiFi.mode(WIFI_OFF);
Сохраняешь.
Всё.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#11

Сообщение dimonsustr » 09.01.2019{, 19:43}

Sancho, попробовал, действительно такой способ отключает wifi, спасибо. Одно непонятно, почему потребляемый ток не уменьшается совсем? Это не аппаратное отключение?

Аватара пользователя
Sancho
Полковник
Сообщения: 3528
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 454
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как программно отключить WiFi в ESP8266?

#12

Сообщение Sancho » 09.01.2019{, 20:15}

dimonsustr, Честно не вдавался.
Наверно, стоит попробовать способ 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 секунд:
Дерзай, отпишись.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#13

Сообщение dimonsustr » 09.01.2019{, 20:56}

Sancho, результат по способу 1 аналогичен способу 2, ток потребления не уменьшается :buhnut:
судя по документации, в режиме modem_sleep потребление должно быть ~16mA против ~75mA в обычном режиме.
Режим light_sleep мне не подходит, будить нечем.

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#14

Сообщение dimonsustr » 07.02.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 при частом переключении туда-сюда пока не понял, изучаю.

Аватара пользователя
Phazz
Подполковник
Сообщения: 1416
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 105
Откуда: Сургут
Имя: Анатолий

Как программно отключить WiFi в ESP8266?

#15

Сообщение Phazz » 08.02.2019{, 12:54}

А зачем delay?

Отправлено спустя 1 минуту 27 секунд:
Часто переключать это с какой периодичностью?

Аватара пользователя
dimonsustr
Рядовой
Сообщения: 39
Зарегистрирован: 15.03.2018{, 14:39}
Репутация: 1
Имя: Dima

Как программно отключить WiFi в ESP8266?

#16

Сообщение dimonsustr » 09.02.2019{, 02:09}

без delay не работало. и в даташитах, и в примерах везде он есть.
периодичность где-то раз в минуту просыпаться, отсылать-собирать данные.

Ardudue
Сержант
Сообщения: 141
Зарегистрирован: 13.04.2020{, 18:22}
Репутация: 1
Имя: Антон

Как программно отключить WiFi в ESP8266?

#17

Сообщение Ardudue » 28.06.2020{, 17:35}

dimonsustr, блок то удалось сделать?

Ответить

Вернуться в «Помогите, а то я "нимагу"»