Можно ли отключить WiFi на ESP8266?
Я много читал о ESP8266, но мое понимание все еще шаткое. У меня есть Arduino IDE, работающая на ПК, который использует провода для подключения к ESP8266 через USB-устройство (Диспетчер устройств > Порты (COM и LPT) > Silicon Labs CP210x USB to UART Bridge). Вот как я загрузил простой скетч в ESP8266.
Он работает и был установлен в стене. Я счастлив и с облегчением завершил проект... за исключением одной мелочи: я заметил, что он появляется в WiFi. Я могу подключиться к нему без пароля, с "Ограниченным" подключением. После этого я потерялся, но мне интересно, может ли кто-нибудь, кто знает, что делает, использовать это незащищенное соединение, чтобы взломать мою установку. Я бы хотел отключить Wi-Fi, если это возможно, так как я им не пользуюсь.
Хуже всего то, что моя кривая обучения начинается заново. Я думал, что когда мой скетч загружается, он заменяет оригинальную прошивку. Сейчас "прошивка" понятие неуловимое. Я продолжаю думать, что он появляется в WiFi из-за того, что что-то работает в прошивке. В моем скетче нет кода для WiFi. Что я упускаю или ошибаюсь?
@, 👍5
Обсуждение4 ответа
Лучший ответ:
Чтобы отключить WiFi, добавьте библиотеку WiFi и используйте WiFi.forceSleepBegin();
Прошивка – это программа/скетч, управляющая микроконтроллером, также известным как MCU (в данном случае Arduino).
Лучшее объяснение, которое я знаю, находится здесь: https://en.wikipedia.org/wiki/Firmware
Вы управляете WiFi с помощью wifi.setmode()
.
Wi-Fi ESP8266 очень универсален. Вы можете быть клиентом и/или точкой доступа. Вы можете получить свой IP-адрес от DHCP или статического.
По умолчанию ESP8266 запускается в режиме STATIONAP (как клиент и точка доступа).
Это соответствующая часть официальной страницы
.wifi.setmode()
Настраивает используемый режим WiFi. NodeMCU может работать в одном из четырех режимов WiFi:
Режим станции, в котором устройство NodeMCU подключается к существующей сети
Режим точки доступа (AP), при котором создается собственная сеть, к которой могут присоединиться другие пользователи
Режим «Станция + точка доступа», при котором она создает собственную сеть и одновременно подключается к другой существующей сети.
Wi-Fi выключен
При использовании комбинированного режима «Станция + точка доступа» для обеих сетей будет использоваться один и тот же канал, поскольку радио может прослушивать только один канал.
Примечание
Конфигурация WiFi будет сохраняться до тех пор, пока не будет изменена, даже если устройство выключено.
Синтаксис
wifi.setmode(mode[, save])
Параметры
mode value should be one of
wifi.STATION for when the device is connected to a WiFi router. This is often done to give the device access to the Internet.
wifi.SOFTAP for when the device is acting only as an access point. This will allow you to see the device in the list of WiFi networks (unless you hide the SSID, of course). In this mode your computer can connect to the device, creating a local area network. Unless you change the value, the NodeMCU device will be given a local IP address of 192.168.4.1 and assign your computer the next available IP address, such as 192.168.4.2.
wifi.STATIONAP is the combination of wifi.STATION and wifi.SOFTAP. It allows you to create a local WiFi connection and connect to another WiFi router.
wifi.NULLMODE changing WiFi mode to NULL_MODE will put wifi into a low power state similar to MODEM_SLEEP, provided wifi.nullmodesleep(false) has not been called.
save choose whether or not to save wifi mode to flash
true WiFi mode configuration will be retained through power cycle. (Default)
false WiFi mode configuration will not be retained through power cycle.
Возврат
текущий режим после настройки
Пример
wifi.setmode(wifi.STATION);
См. также
wifi.getmode() wifi.getdefaultmode()
Примечание: этот ответ относится к коду NodeMCU Lua. Идеи могут быть использованы Arduino ESP8266, но имена методов должны быть изменены., @DWB
Это лучшее решение, которое я нашел до сих пор (источник: GitHub суть)
Две приведенные ниже функции — это все, что вам нужно для переключения чипа Wi-Fi. Огромным преимуществом их использования является то, что они работают без вызова вызова 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" // Требуется для работы wifi_station_connect()
}
#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); // спать 10 секунд
}
void loop() {
;
}
//------------------------------------------------ ------------------------------
void WiFiOn() {
wifi_fpm_do_wakeup();
wifi_fpm_close();
//Serial.println("Повторное подключение");
wifi_set_opmode(STATION_MODE);
wifi_station_connect();
}
void WiFiOff() {
//Serial.println("отключение клиента и Wi-Fi");
//клиент.отключить();
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);
}
WiFiOff вызвал у меня сбой. Я однажды вызвал его из цикла программы, и он вызвал сброс Soft WDT., @Nathan
Примечание: код в этом ответе основан на функциях SDK, которые могут быть незнакомы и сбивать с толку пользователей Arduino IDE, особенно на ранних этапах их обучения, таких как OP. Лучше сначала сосредоточиться на той или иной системе., @DWB
Многие устройства esp8266 по умолчанию запускаются в режиме SoftAP (WIFI_AP) и отображаются как точка доступа к сети Wi-Fi, ожидающая подключения станций.
Пользовательский код в любом скетче должен явно устанавливать Wi-Fi в соответствующий режим. Если вам не нужен Wi-Fi, отключите режим Wi-Fi. Чтобы сделать это с помощью Arduino IDE, esp8266 должен хотя бы один раз запустить скетч, который включает класс Wi-Fi, чтобы использовать его метод .mode().
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_OFF);
if (WiFi.getMode() == WIFI_OFF)
Serial.println(F("\nWifi mode is WIFI_OFF, until it is explicitly changed"));
}
Настройка режима сохраняется при включении питания и циклах перезапуска/сброса, пока код пользователя не укажет другой режим. Таким образом, после запуска на esp8266 все приведенные выше строки (кроме setup()) могут быть удалены из последующих скетчей, загруженных на esp8266, и Wi-Fi останется отключенным.
Прошивка — это программное обеспечение более низкого уровня, которое работает между оборудованием и скетчем более высокого уровня. Многие esp8266 поставлялись с прошивкой Espressif и установленным скетчем.
Если вас беспокоит энергопотребление, рассмотрите пробуждение esp8266 с отключенным радио, например.
ESP.deepSleepInstant (microseconds, WAKE_RF_DISABLED);
- Зачем нужно время отклика в AT-командах esp8266?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- ESP8266 на Wi-Fi без пароля, возможно?
Пожалуйста, опубликуйте код (скетч), который вы используете. А для выключения WiFi используйте WiFi.forceSleepBegin();, @MatsK
Вы
#include <ESP8266WiFi.h>
?, @Jaromanda X@ Ray71 Также хорошо, если вы нажмете стрелку вверх слева от комментария, это даст мне кредиты, и это то, что дает вам оценку и мотивацию отвечать больше ;-), @MatsK