Як зробити 5-вольтову реле роботи з NodeMCU?

Я підключив 2 каналу 5-вольтових реле з NodeMCU v1.0, як показано в fritzing нижче.

Relay are powered with a different power source than NodeMCU Relay are powered with a different power source than NodeMCU.

В даний час, я живлення NodeMCU з мого ноутбука і реле плати від 5-вольтової батареї.

Нижче наведено код, який я написав:

#include 
#include 
#include 
#include 

const char* ssid = "said.";
const char* password = "secret";
ESP8266WebServer server ( 80 );
const int led = 13;
const int outputLed = 12;

void turnOnRelayOne(){
  digitalWrite (outputLed, 1);
  digitalWrite (5, HIGH); //GPIO 5//Relay 1
  server.send (200, "text/html", "Relay 1 turned on.");
  digitalWrite (outputLed, 0);
}

void turnOnRelayTwo(){
  digitalWrite (outputLed, 1);
  digitalWrite (4, HIGH); //GPIO 4//Relay 2
  server.send (200, "text/html", "Relay 2 turned on.");
  digitalWrite (outputLed, 0);
}

void handleRoot() {
  digitalWrite ( led, 1 );

  char temp[400];
  int sec = millis()/1000;
  int min = sec/60;
  int hr = min/60;
  int h = dht.readHumidity();
  int t = dht.readTemperature();
  snprintf ( temp, 400,

             "<html>\
  <head>\
    <meta http-equiv='refresh' content='5'/>\
    <title>NodeMCU hooked to Relay Board</title>\
    
\
  </head>\
  <body>\
  

Hello from NodeMCU!

\
    
Uptime: %02d:%02d:%02d\ </body>\ </html>", hr, min % 60, sec % 60 ); server.send ( 200, "text/html", temp ); digitalWrite ( led, 0 ); } void handleNotFound() { digitalWrite ( led, 1 ); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += ( server.method() == HTTP_GET ) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for ( uint8_t i = 0; i < server.args(); i++ ) { message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n"; } server.send ( 404, "text/plain", message ); digitalWrite ( led, 0 ); } void setup ( void ) { pinMode ( led, OUTPUT ); pinMode(10, OUTPUT); pinMode(5, OUTPUT); pinMode(4, OUTPUT); pinMode(outputLed, OUTPUT); digitalWrite ( led, 0 ); Serial.begin ( 9600 ); WiFi.begin ( ssid, password ); Serial.println ( "" ); //Wait for connection while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } Serial.println ( "" ); Serial.print ( "Connected to " ); Serial.println ( ssid ); Serial.print ( "IP address: " ); Serial.println ( WiFi.localIP() ); if ( MDNS.begin ( "esp8266" ) ) { Serial.println ( "MDNS responder started" ); } server.on ( "/", handleRoot ); server.on ( "/inline", []() { server.send ( 200, "text/plain", "this works as well" ); } ); server.on("/relay1", turnOnRelayOne); server.on("/relay2", turnOnRelayTwo); server.onNotFound ( handleNotFound ); server.begin(); Serial.println ( "HTTP server started" ); } void loop (void) { server.handleClient(); }

Коли я виконую URL-адресу: 192.168.1.8/relay1 , виведення буде миготіти відповідно до логіки в turnOnRelayOne .

Але жодне з реле не вмикається. Будь ласка, допоможіть.

0
Я не впевнений, але це схоже, що це не замкнутий контур, 5 вольт. Цікаво, якщо земля від 5volt розетки може бути розділений, один для NodeMCU і один для реле. Тоді ви б замкнув cuircuit між реле і NodeMCU.
додано Автор product researcher, джерело
все, що вам потрібно зробити, це підключити g на реле до g на esp8266 і battary
додано Автор Ander Biguri, джерело

5 Відповіді

У мене є кілька таких модулів. Вони мають додатковий вбудований оптичний ізолятор, але ви повинні видалити перемичку для її використання.

  • Connect your GPIO trigger as you have it
  • Run the relay's Vcc and Gnd pins to the MCU, not the power plug.
  • connect the power plug's +5v to the left-most pin, where the jumper once stood: JDVcc
  • connect the power plug ground to the MCU or the open common Gnd on the left-group of pins.

Тепер ваш реле котушки (и) буде живитися від 5V роз'єм, але логіка реле і управління обробляються MCU.

5
додано
діаграма займе мене якийсь час, я завалений на роботі, але це спільна точка на тому останньому з'єднанні: до тих пір, як чорний провід ОП з'єднує або GND на реле або GND на MCU це нормально.
додано Автор Alastair, джерело
Право, GND на релейному модулі (і MCU) мають безперервність, тому ці параметри ведуть себе однаково.
додано Автор Alastair, джерело
Чи можете ви розробити останнє з'єднання у вашій відповіді, можливо, поділіться діаграмою фріцінга?
додано Автор Gusep, джерело
Просто для підтвердження, земля від 5V харчування може бути або підключений до другої землі (один поруч з JD-VCC) на реле або на заземлення на MCU. Правильно?
додано Автор Gusep, джерело

Реле не має жодного посилання на те, що таке напруга від NodeMCU. Оскільки джерела живлення двох пристроїв ізольовані (один від одного; ноутбук не може бути самостійним, але акумулятор, звичайно, повинен бути) ви можете (і насправді повинні ) з'єднати підстави релейної плати і NodeMCU разом. Якщо жодне джерело живлення не є ізольованим або якщо ви не впевнені, що вони є ізольованими, ви повинні використовувати оптоізолятор для запобігання потенційним проблемам з електроживленням.

2
додано

Цей релейний модуль працює по-різному. Він вмикається, коли сигнал LOW і вимикається, коли сигнал HIGH (3v3V на NodeMCU) Таким чином, вам потрібно лише змінити код у двох функціях, щоб бути LOW замість HIGH Також переконайтеся, що NodeMCU і релейний модуль мають спільну землю.

#include 
#include 
#include 
#include 

const char* ssid = "said.";
const char* password = "secret";
ESP8266WebServer server ( 80 );
const int led = 13;
const int outputLed = 12;

void turnOnRelayOne(){
  digitalWrite (outputLed, 1);
  digitalWrite (5, LOW); //GPIO 5//Relay 1
  server.send (200, "text/html", "Relay 1 turned on.");
  digitalWrite (outputLed, 0);
}

void turnOnRelayTwo(){
  digitalWrite (outputLed, 1);
  digitalWrite (4, LOW); //GPIO 4//Relay 2
  server.send (200, "text/html", "Relay 2 turned on.");
  digitalWrite (outputLed, 0);
}

void handleRoot() {
  digitalWrite ( led, 1 );

  char temp[400];
  int sec = millis()/1000;
  int min = sec/60;
  int hr = min/60;
  int h = dht.readHumidity();
  int t = dht.readTemperature();
  snprintf ( temp, 400,

             "<html>\
  <head>\
    <meta http-equiv='refresh' content='5'/>\
    <title>NodeMCU hooked to Relay Board</title>\
    
\
  </head>\
  <body>\
  

Hello from NodeMCU!

\
    
Uptime: %02d:%02d:%02d\ </body>\ </html>", hr, min % 60, sec % 60 ); server.send ( 200, "text/html", temp ); digitalWrite ( led, 0 ); } void handleNotFound() { digitalWrite ( led, 1 ); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += ( server.method() == HTTP_GET ) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for ( uint8_t i = 0; i < server.args(); i++ ) { message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n"; } server.send ( 404, "text/plain", message ); digitalWrite ( led, 0 ); } void setup ( void ) { pinMode ( led, OUTPUT ); pinMode(10, OUTPUT); pinMode(5, OUTPUT); pinMode(4, OUTPUT); pinMode(outputLed, OUTPUT); digitalWrite ( led, 0 ); Serial.begin ( 9600 ); WiFi.begin ( ssid, password ); Serial.println ( "" ); //Wait for connection while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } Serial.println ( "" ); Serial.print ( "Connected to " ); Serial.println ( ssid ); Serial.print ( "IP address: " ); Serial.println ( WiFi.localIP() ); if ( MDNS.begin ( "esp8266" ) ) { Serial.println ( "MDNS responder started" ); } server.on ( "/", handleRoot ); server.on ( "/inline", []() { server.send ( 200, "text/plain", "this works as well" ); } ); server.on("/relay1", turnOnRelayOne); server.on("/relay2", turnOnRelayTwo); server.onNotFound ( handleNotFound ); server.begin(); Serial.println ( "HTTP server started" ); } void loop (void) { server.handleClient(); }
1
додано
Hm, чи можна зробити висновок про те, що саме цей тип модуля? Багато модулів використовують позитивну логіку, тобто встановлюють високі значення вхідного реле.
додано Автор joeqwerty, джерело

Я вважаю, що проблема може бути, що реле 5v, але сигнал, що надходить від NodeMCU є 3.3v. Вам може знадобитися зробити щось на зразок підвищення сигналу до 5v або реалізації логічного рівня перемикання, наприклад.

Here's a related post: https://electronics.stackexchange.com/questions/213051/how-do-i-use-a-5v-relay-with-a-3-3v-arduino-pro-mini

0
додано
Це не так, ІМО. Вихід NodeMcu не водіння реле, але водіння транзистор/FET/Optocoupler. У всіх випадках, 3.3V є цілком правильним для включення. @Ingacio правильний, підстави повинні бути підключені. Тепер тільки один провід - це з'єднання між NodeMcu і реле. "Напруга" визначається як різниця між двома потенціалами, отже, одного дроту недостатньо.
додано Автор joeqwerty, джерело

Як ви живите свій ESP-12E? Це не включено до діаграми. Я мав успіх, використовуючи висновок VU (вихід 5V) під час живлення від Micro-USB. Потім ви можете підключити VCC до VU, GND до GND, і сигнал до вашого GPIO4. Якщо ви живите свій ESP-12E від джерела живлення 5v безпосередньо в контактний VIN, то я б живлення реле з тієї ж 5V харчування. Ви повинні підключити + від джерела живлення до VIN (ESP) і VCC (реле) всі підстави, пов'язані разом, то GPIO4 до сигналу.

0
додано