Esp8266 Веб-код и настоящая кнопка
0
Я написал код в Arduino IDE. С помощью этого кода я могу управлять включением и выключением четырех светодиодов с веб-страницы. На веб-странице 9 кнопок.
2 кнопки для включения и выключения светодиода-1. 2 кнопки для включения и выключения светодиода-2. 2 кнопки для включения и выключения светодиода-3. 2 кнопки для включения и выключения светодиода-4. 1 кнопка для включения и выключения всех светодиодов.
Я также хочу добавить в схему настоящую кнопку. Когда я нажимаю эту кнопку, я хочу запустить этот код переключения. Как я могу это сделать?
Это мой код;
#include <ESP8266WiFi.h>
const char* ssid = "UnderSpeed";
const char* password = "q1w2e3r4t5__";
const char* host = "192.168.1.185"; //он сообщит вам IP-адрес после запуска
//просто напиши это здесь и загрузи
int r0 = D0;
int r1 = D1;
int r2 = D2;
int r3 = D3;
int btn0 = D5;
WiFiServer server(301); //просто выберите любой номер порта, который вам нравится
void setup() {
Serial.begin(115200);
delay(10);
Serial.println(WiFi.localIP());
// подготавливаем GPIO2
pinMode(r0, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
pinMode(btn0, INPUT_PULLUP);
digitalWrite(r0, HIGH);
digitalWrite(r1, HIGH);
digitalWrite(r2, HIGH);
digitalWrite(r3, HIGH);
// Подключаемся к сети Wi-Fi
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Запускаем сервер
server.begin();
Serial.println("Server started");
// Распечатываем IP-адрес
Serial.println(WiFi.localIP());
}
void loop() {
// Проверяем, подключился ли клиент
WiFiClient client = server.available();
if (!client) {
return;
}
// Подождем, пока клиент отправит данные
while (!client.available()) {
delay(1);
}
// Читаем первую строку запроса
String req = client.readStringUntil('\r');
client.flush();
// Соответствуем запросу
if (req.indexOf("") != -10) { //проверяет, находитесь ли вы на главной странице
if (req.indexOf("/r0-OFF") != -1) { //проверяем, нажали ли вы OFF
digitalWrite(r0, HIGH);
Serial.println("Relay-0 OFF");
}
if (req.indexOf("/r0-ON") != -1) { //проверяем, нажали ли вы ON
digitalWrite(r0, LOW);
Serial.println("Relay-0 ON");
}
if (req.indexOf("/r1-OFF") != -1) { //проверяем, нажали ли вы OFF
digitalWrite(r1, HIGH);
Serial.println("Relay-1 OFF");
}
if (req.indexOf("/r1-ON") != -1) { //проверяем, нажали ли вы ON
digitalWrite(r1, LOW);
Serial.println("Relay-1 ON");
}
if (req.indexOf("/r2-OFF") != -1) { //проверяем, нажали ли вы OFF
digitalWrite(r2, HIGH);
Serial.println("Relay-2 OFF");
}
if (req.indexOf("/r2-ON") != -1) { //проверяем, нажали ли вы ON
digitalWrite(r2, LOW);
Serial.println("Relay-2 ON");
}
if (req.indexOf("/r3-OFF") != -1) { //проверяем, нажали ли вы OFF
digitalWrite(r3, HIGH);
Serial.println("Relay-3 OFF");
}
if (req.indexOf("/r3-ON") != -1) { //проверяем, нажали ли вы ON
digitalWrite(r3, LOW);
Serial.println("Relay-3 ON");
}
if (req.indexOf("/btn0") != -1) { //проверяем, нажали ли вы ВЫКЛ.
buton_islemi();
}
}
else {
Serial.println("invalid request");
client.stop();
return;
}
// Подготавливаем ответ
String s = "HTTP/1.1 200 OK\r\n";
s += "Content-Type: text/html\r\n\r\n";
s += "<!DOCTYPE HTML>\r\n<html>\r\n";
s += "<br><input type=\"button\" name=\"rly0-on\" value=\"Relay-0 ON \" onclick=\"location.href='/r0-ON'\">";
s += "<br>";
s += "<br><input type=\"button\" name=\"rly0-off\" value=\"Relay-0 OFF\" onclick=\"location.href='/r0-OFF'\">";
s += "<br><br><br>";
s += "<br><input type=\"button\" name=\"rly1-on\" value=\"Relay-1 ON \" onclick=\"location.href='/r1-ON'\">";
s += "<br>";
s += "<br><input type=\"button\" name=\"rly1-off\" value=\"Relay-1 OFF\" onclick=\"location.href='/r1-OFF'\">";
s += "<br><br><br>";
s += "<br><input type=\"button\" name=\"rly2-on\" value=\"Relay-2 ON \" onclick=\"location.href='/r2-ON'\">";
s += "<br>";
s += "<br><input type=\"button\" name=\"rly2-off\" value=\"Relay-2 OFF\" onclick=\"location.href='/r2-OFF'\">";
s += "<br><br><br>";
s += "<br><input type=\"button\" name=\"rly3-on\" value=\"Relay-3 ON \" onclick=\"location.href='/r3-ON'\">";
s += "<br>";
s += "<br><input type=\"button\" name=\"rly3-off\" value=\"Relay-3 OFF\" onclick=\"location.href='/r3-OFF'\">";
s += "<br><br><br>";
s += "<br><input type=\"button\" name=\"btn0\" value=\"Button-0 \" onclick=\"location.href='/btn0'\">";
s += "<br>";
s += "</html>\n";
client.flush();
// Отправляем ответ клиенту
client.print(s);
delay(1);
}
void buton_islemi() {
digitalWrite(r0, !digitalRead(r0));
delay(500);
digitalWrite(r1, !digitalRead(r1));
delay(500);
digitalWrite(r2, !digitalRead(r2));
delay(500);
digitalWrite(r3, !digitalRead(r3));
Serial.println("Button Pressed");
}
@Onder Yilmaz, 👍0
Обсуждение1 ответ
▲ 1
Просто добавьте проверку кнопки в раздел, где вы не работаете с клиентом. Например:
static uint8_t buttonState = LOW;
if (!client) {
uint8_t bs = digitalRead(BUTTON_PIN);
if (bs != buttonState) {
buttonState = bs;
if (buttonState == HIGH) {
buton_islemi();
}
}
return;
}
,
@Majenko
Спасибо большое, все работает!!, @Onder Yilmaz
Смотрите также:
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Разница между этими двумя платами NodeMCU?
вам действительно следует использовать встроенную http-библиотеку, чтобы сделать ее проще, читабельнее и гибче, например, включать и выключать множество контактов для каждого запроса, например
if(server.arg("r1")=="OFF")
, @dandavis@dandavis, не могли бы вы написать простой пример? Я новичок., @Onder Yilmaz
я не могу сделать это лучше, чем примеры в
Файл > Примеры > ESP8266WebServer >
, @dandavis