Изменил скетч под свою задачу, но при отправке запроса через браузер виснет. Мигние светодиода сделал для контроля.
Задача стоит в подключении к точке доступа на ESP8266 без использования маршрутизатора и управлении выходами контроллера при помощи мобильника. Не могу понять почему виснет.
Код:
#include <ESP8266WiFi.h>
// Создаем сервер и порт для прослушки 80
WiFiServer server(80);
#ifdef ESP8266
extern "C" {
#include "user_interface.h"
}
#endif
//ssid and пароль точки доступа на ESP8266
const char *esp_ssid = "SKUD";
const char *esp_password = "12345678";
void createAccessPoint() {
Serial.print("Configuring access point for wifi network: ");
Serial.println(esp_ssid);
WiFi.softAP(esp_ssid, esp_password);
IPAddress accessIP = WiFi.softAPIP();
Serial.print("AccessPoint IP address: ");
Serial.println(accessIP);
/* Go to http://192.168.4.1 in a web browser
* connected to this access point to see it.
*/
}
void setup() {
Serial.begin(74880);
delay(10);
pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
// Подготовка GPIO
pinMode(5, OUTPUT);
digitalWrite(5, 1);
pinMode(4, OUTPUT);
digitalWrite(4, 1);
pinMode(0, OUTPUT);
digitalWrite(0, 1);
pinMode(2, OUTPUT);
digitalWrite(2, 1);
//Создание точки доступа
createAccessPoint();
Serial.println("Access Point On");
// Запуск сервера
server.begin();
Serial.println("Server started");
// Try pushing frequency to 80MHz.
system_update_cpu_freq(SYS_CPU_80MHZ);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW);
delay(500);
// Проверка подключения
WiFiClient client = server.available();
if (!client) {
return;
}
// Ожидание данных
Serial.println("new client");
while (!client.available()) {
delay(10);
}
// Чтение первой строки запроса
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Работа с GPIO
if (req.indexOf("/D1/0") != -1)
digitalWrite(5, 0);
else if (req.indexOf("/D1/1") != -1)
digitalWrite(5, 1);
else if (req.indexOf("/D2/0") != -1)
digitalWrite(4, 0);
else if (req.indexOf("/D2/1") != -1)
digitalWrite(4, 1);
else if (req.indexOf("/D3/0") != -1)
digitalWrite(0, 0);
else if (req.indexOf("/D3/1") != -1)
digitalWrite(0, 1);
else if (req.indexOf("/D4/0") != -1)
digitalWrite(2, 0);
else if (req.indexOf("/D4/1") != -1)
digitalWrite(2, 1);
else if (req.indexOf("/test") != -1) {
Serial.println("TEST OK");
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nTest OK. Uptime: ";
// Подстчет UpTime
int Sec = (millis() / 1000UL) % 60;
int Min = ((millis() / 1000UL) / 60UL) % 60;
int Hours = ((millis() / 1000UL) / 3600UL) % 24;
int Day = ((millis() / 1000UL) / 3600UL / 24UL);
s += Day;
s += "d ";
s += Hours;
s += ":";
s += Min;
s += ":";
s += Sec;
s += "</html>\n";
client.print(s);
client.stop();
return;
}
else
// Если неверный запрос написать об ошибке
{
Serial.println("invalid request");
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nInvalid request";
s += "</html>\n";
client.print(s);
client.stop();
return;
}
client.flush();
// Формирование ответа
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO set OK";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(10);
Serial.println("Client disonnected");
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
}