Сеть ESP8266 и WPA2 PSK
У меня возникли проблемы с подключением esp8266 к сети Wi-Fi. Я тестирую точку доступа с мобильного телефона. Если я настрою сеть на открытие (без безопасности), мой код ниже работает без проблем. Если я включу безопасность, WPA2 PSK (я предполагаю, что это означает личную версию) и добавлю пароль к коду, он не сможет подключиться. Есть предположения, в чем может быть проблема?
//загружаем библиотеку softserial
#include <SoftwareSerial.h>
//устанавливаем логическую постоянную переменную в true
//#определить ОТЛАДКА true
const boolean DEBUG = true;
//RX (контакт 2) идет на TX на esp8266, TX (контакт 3) идет на RX на esp8266
SoftwareSerial esp8266(2, 3);
// светодиодный контактный анод (длинная ножка) равен 13, а катод (короткая ножка) GND
int LED = 13;
// Массив состояния светодиодов - светодиод 0 выключен (0) при запуске.
int ledarray[] = {0};
void setup()
{
// устанавливаем вывод светодиода в качестве выхода
pinMode(LED, OUTPUT);
//открываем последовательный порт
Serial.begin(9600);
//запускаем модуль esp8266 (примечание: скорость передачи вашего esp может отличаться)
esp8266.begin(115200);
// сбросить модуль esp8266
senddata("AT+RST\r\n", 2000, DEBUG);
// устанавливаем esp8266 в качестве режима точки доступа
//senddata("AT+CWMODE=1\r\n", 1000, DEBUG);
// установить esp8266 в качестве режима беспроводной станции (веб-сервер)
senddata("AT+CWMODE=1\r\n", 1000, DEBUG);
//установить сетевой SSID и пароль, если esp8266 активирован как режим станции, иначе закомментировать
senddata("AT+CWJAP=\"test\", \"\"\r\n", 6000, DEBUG);
// получить IP-адрес для esp8266
senddata("AT+CIFSR\r\n", 2000, DEBUG);
// настроить esp8266 для нескольких подключений
senddata("AT+CIPMUX=1\r\n", 1000, DEBUG);
// включаем сервер esp8266 на порт 80
senddata("AT+CIPSERVER=1,80\r\n", 1000, DEBUG);
}
void loop()
{
//отправляет ли esp8266 сообщение
if(esp8266.available())
{
//если получены данные от esp8266
if (esp8266.find("+IPD,"))
{
//вычесть 48, потому что функция read() возвращает десятичное число ASCII
//значение и 0 (первое десятичное число) начинается с 48
int connectionid = esp8266.read() - 48;
// читаем адрес, отправленный клиентом, ищем переменную (?)
String msg;
esp8266.find("?");
delay(100);
msg = esp8266.readStringUntil(' ');
String command = msg.substring(0);
//HTML передается в браузер
String webpage = "<html><head><title>LED WEB SWITCH</title>";
webpage += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><style>.button {background-color: orange;border: none;color: white;padding: 15px 32px;text-align: center;display: inline-block;font-size: 16px;} .centre {text-align: center;}</style>";
webpage += "</head><body class=\"centre\"><h1 class=\"centre\">LED WEB SWITCH</h1>";
//если команда T (переменная передается в ссылке кнопки на веб-странице)
if (command == "T")
{
//если позиция 0 массива равна 1
if (ledarray[0] == 1)
{
//выключаем светодиод
digitalWrite(LED, LOW);
// устанавливаем позицию 0 ledarray в 0
ledarray[0] = 0;
// добавляем текст на веб-страницу
webpage += "<p>LED STATUS OFF</p>";
}
else
{
//включаем светодиод
digitalWrite(LED, HIGH);
//установить позицию 0 массива ledarray в 1
ledarray[0] = 1;
// добавляем текст на веб-страницу
webpage += "<p>LED STATUS ON</p>";
}
}
else
{
// добавляем текст на веб-страницу
webpage += "<p>LED STATUS OFF</p>";
}
//добавляем кнопку (обратите внимание, что ссылка имеет '?T')
webpage += "<a class=\"button\" href=\"?T\">TAP</a></body></html>";
// создаем строку senddata для отправки wenbpage на esp8266
String cipsend = "AT+CIPSEND=";
cipsend += connectionid;
cipsend += ",";
cipsend += webpage.length();
cipsend += "\r\n";
senddata(cipsend, 500, DEBUG);
senddata(webpage, 500, DEBUG);
// создаем строку closecommand, добавляем идентификатор соединения, возврат и новую строку
String closecommand = "AT+CIPCLOSE=";
closecommand += connectionid;
closecommand += "\r\n";
// отправляем команду закрытия
senddata(closecommand, 500, DEBUG);
}
}
}
void senddata(String command, const int timeout, boolean debug)
{
//отправляем полученную команду на esp8266
esp8266.print(command);
//устанавливаем переменную int в число миллисендов с момента запуска Arduino
long int time = millis();
//в то время как время и тайм-аут меньше, чем количество миллисендов с момента запуска Arduino
while((time + timeout) > millis())
{
// пока esp8266 отправляет сообщения
while(esp8266.available())
{
// отображаем вывод в последовательном окне
Serial.write(esp8266.read());
}
}
}
@garrettlynchirl, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 1
Решение этой проблемы никак не связано с безопасностью WPA2 PSK или используемой скоростью передачи данных. В моем коде у меня был пробел между именем сервера WIFI и паролем (я правильно форматировал). По-видимому, ESP8266 не нравится этот бит, и пробел нужно удалить - вот так:
//устанавливаем сетевой SSID и пароль, если esp8266 активирован как режим станции, иначе прокомментировать
senddata("AT+CWJAP=\"test\",\"\"\r\n", 6000, DEBUG);
,
@garrettlynchirl
Смотрите также:
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- Как установить связь между веб-камерой и Arduino UNO и получать прямую трансляцию на мобильном телефоне с помощью ESP8266?
- ESP8266 - Один сервер, отправляющий данные нескольким клиентам
- Могу ли я использовать выход 3,3 В Arduino напрямую к esp8266?
- Чтение данных из Google Таблиц с помощью Nodemcu
- Ошибка TIMEOUT при подключении ESP8266 к Arduino Uno
- Сервер Esp8266 недоступен. Порт не открывается
Между прочим, отлаживать намного проще, если вы программируете esp вместо uno., @dandavis
SoftwareSerial не работает надежно на скорости 115200 бод. изменить скорость передачи данных в прошивке АТ и в скетче на 9600 бод, @Juraj
Я пробовал следовать совету здесь: https://arduinoprosto.ru/q/24156/how-to-change-baudrate-of-esp8266-12e-permanently ; //начнем с 115200 esp8266.начало (115200); // устанавливаем 9600 и начинаем снова senddata("AT+UART_DEF=9600,8,1,0,0\r\n", 2000, ОТЛАДКА); esp8266.begin(9600); Это вроде не работает, на 9600 отказывается подключаться к сети и ошибок не выдает., @garrettlynchirl