Управлять реле 5V с ESP-01
Я пытаюсь управлять реле 5 В с 3,3 В ESP-01 со схемой ниже. Я запрограммировал ESP на запуск портала, через который я могу получить ретранслятор, запустив GPIO-0 и GPIO-2. Однако, когда я включаю питание цепи, я сталкиваюсь со следующими сценариями:
- ЕСЛИ провод подключен к GPIO-2
- ESP синий светодиод горит вечно
- Реле начало жужжать звуком целую вечность
- Никакая сеть WI FI не появляется таким образом не работает
- ЕСЛИ провод подключен к GPIO-0
- Никакая сеть WI FI не появляется таким образом не работает
- ЕСЛИ я подключу провод только после включения питания, то он будет работать просто отлично, как и предполагалось.
Не могли бы вы объяснить, что происходит и как это исправить
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
const byte DNS_PORT = 53;
IPAddress apIP(172, 217, 28, 1);
DNSServer dnsServer;
ESP8266WebServer webServer(80);
//int ledPin = 2;
#define ledPin0 0
#define ledPin2 2
int ledStatus0;
int ledStatus2;
void setup() {
// Serial.begin(9600); // Start the Serial communication to send messages to the computer
// delay(10);
// Serial.println('\n');
pinMode(ledPin0, OUTPUT); ledStatus0 = digitalRead(ledPin0); digitalWrite(ledPin0, HIGH); ledStatus0 = 1;
pinMode(ledPin2, OUTPUT); ledStatus2 = digitalRead(ledPin2); digitalWrite(ledPin2, HIGH); ledStatus2 = 1;
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP("Toggle Portal");
// if DNSServer is started with "*" for domain name, it will reply with
// provided IP to all DNS request
dnsServer.start(DNS_PORT, "*", apIP);
// replay to all requests with same HTML
webServer.onNotFound([]() {
if (webServer.hasArg("led0")) {
String status = webServer.arg("led0");
if (status == "off") { digitalWrite(ledPin0, LOW); ledStatus0 = 1; switchRelayOff(); }
else if (status == "on") { digitalWrite(ledPin0, HIGH); ledStatus0 = 0; switchRelayOn(); }
}
if (webServer.hasArg("led2")) {
String status = webServer.arg("led2");
if (status == "off") { digitalWrite(ledPin2, LOW); ledStatus2 = 1; switchRelayOff(); }
else if (status == "on") { digitalWrite(ledPin2, HIGH); ledStatus2 = 0; switchRelayOn(); }
}
String content = "<!DOCTYPE HTML>";
content += "<html>";
content += "<head>";
content += " <title>ESP Web Server</title>";
content += " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
content += " <link rel=\"icon\" href=\"data:,\">";
content += " <style>";
content += " html {font-family: Arial; display: inline-block; text-align: center;}";
content += " h2 {font-size: 3.0rem;}";
content += " p {font-size: 3.0rem;}";
content += " body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}";
content += " .switch {position: relative; display: inline-block; width: 120px; height: 68px} ";
content += " .switch input {display: none}";
content += " .slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 6px}";
content += " .slider:before {position: absolute; content: \"\"; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 3px}";
content += " input:checked+.slider {background-color: #1f9f1b}";
content += " input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}";
content += " </style>";
content += "</head>";
content += "<body>";
content += " <h2>ESP Web Server</h2>";
content += " <h4>Output - GPIO 0</h4>";
if ( ledStatus0 == 0 ) { content += " <label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"0\" ><span class=\"slider\"></span></label>";
} else { content += " <label class=\"switch\"><input type=\"checkbox\" checked onchange=\"toggleCheckbox(this)\" id=\"0\" ><span class=\"slider\"></span></label>"; }
content += " <h4>Output - GPIO 2</h4>";
if ( ledStatus2 == 0 ) { content += " <label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox2(this)\" id=\"2\" ><span class=\"slider\"></span></label>";
} else { content += " <label class=\"switch\"><input type=\"checkbox\" checked onchange=\"toggleCheckbox2(this)\" id=\"2\" ><span class=\"slider\"></span></label>"; }
content += "<script>function toggleCheckbox(element) {";
content += " var xhr = new XMLHttpRequest();";
content += " if(element.checked){ xhr.open(\"GET\", \"?led0=on\", true); }";
content += " else { xhr.open(\"GET\", \"?led0=off\", true); }";
content += " xhr.send();";
content += "}";
content += "function toggleCheckbox2(element) {";
content += " var xhr = new XMLHttpRequest();";
content += " if(element.checked){ xhr.open(\"GET\", \"?led2=on\", true); }";
content += " else { xhr.open(\"GET\", \"?led2=off\", true); }";
content += " xhr.send();";
content += "}";
content += "</script>";
content += "</body>";
content += "</html>";
webServer.send(200, "text/html", content);
});
webServer.begin();
}
void loop() {
dnsServer.processNextRequest();
webServer.handleClient();
}
@ASH, 👍1
Обсуждение1 ответ
Лучший ответ:
"Загрузка завершается неудачно, если уровень загрузки НИЗКИЙ" - это относится как к GPIO 0, так и к GPIO 2. 2N2222 тянет GPIO вниз до одного падения диода (0,7 В) выше GND, что на самом деле очень МАЛО. Вместо того чтобы использовать BJT, вам нужно управлять релейным модулем с помощью МОП-транзистора. Его высокое сопротивление затвора будет иметь незначительный эффект по сравнению с внутренним импульсным резистором.
Скорее всего, транзистор на самом релейном модуле является МОП-транзистором. Если это так, и если этот МОП-транзистор работает с 3,3 В, вы можете избавиться от 2N2222 вообще. В общем, использование двух транзисторов для этой задачи не имеет большого смысла, но в вашем случае BJT на GPIO не работает.
Вы можете заметить, что встроенный светодиодный индикатор подключен к GPIO 2, который высок при загрузке. Поэтому, если вы каким - то образом потянете GPIO 0, загрузка завершится неудачей, и GPIO 2 будет вытягиваться ВЫСОКО (ref) - загорается встроенный светодиод.
"вопрос, как их использовать?"- после того, как ESP загрузится в ваш скетч, вы должны быть в порядке, чтобы использовать GPIO, как вы обычно это делаете.
- Как заставить 5-вольтовое реле работать с NodeMCU
- Esp8266 Vin контакт
- Правильный PIN для активации беспроводного реле с ESP8266 ESP-01
- Управление реле 5В с помощью Wemos D1 R1
- NodeMCU продолжает отключаться
- Управление 5В от ESP8266 Wemos D1 mini
- Реле с активным низким уровнем и контакты ESP8266 GPIO
- WiFi-реле Arduino UNO + ESP8266 от LC Technology
GPIO 0 и 2 имеют специальное назначение (https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/), я считаю, что можно использовать хотя бы один из них в качестве выходных данных. В релейный модуль уже включен транзистор, поэтому 2N2222 может не потребоваться (у вас есть схема данных для модуля?)..., @Sim Son
@SimSon это вопрос, как их использовать? прикреплять их только после включения питания нецелесообразно., @ASH