Controllo relè 5V con Wemos D1 R1

Aug 25 2020

Vorrei controllare un relè 5V con modulo Wemos D1 R1 tramite webserver. Sto usando i seguenti moduli:

  • Relè Tongling 5vdc
  • Wemos D1 R1

Sto usando il seguente schema:

ed ecco il codice che sto usando:

#include <ESP8266WiFi.h>

const char* ssid = "Myssidname";
const char* password = "Myssidpass";

int ledPin = D3;
WiFiServer server(80);

void setup() {
 Serial.begin(9600);
 delay(10);


 pinMode(ledPin, OUTPUT);
 digitalWrite(ledPin, LOW);

 // Connect to WiFi network
 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");

 // Start the server
 server.begin();
 Serial.println("Server started");

 // Print the IP address
 Serial.print("Use this URL : ");
 Serial.print("http://");
 Serial.print(WiFi.localIP());
 Serial.println("/");

}

void loop() {
 // Check if a client has connected
 WiFiClient client = server.available();
 if (!client) {
   return;
 }

 // Wait until the client sends some data
 Serial.println("new client");
 while(!client.available()){
   delay(1);
 }

 // Read the first line of the request
 String request = client.readStringUntil('\r');
 Serial.println(request);
 client.flush();

 // Match the request

 int value = LOW;
 if (request.indexOf("/LED=ON") != -1) {
   digitalWrite(ledPin, HIGH);
   value = HIGH;
 }
 if (request.indexOf("/LED=OFF") != -1){
   digitalWrite(ledPin, LOW);
   value = LOW;
 }



 // Return the response
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println(""); //  do not forget this one
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");

 client.print("Led pin is now: ");

 if(value == HIGH) {
   client.print("On");  
 } else {
   client.print("Off");
 }
 client.println("<br><br>");
 client.println("Click <a href=\"/LED=ON\">here</a> Turn relay ON<br>");
 client.println("Click <a href=\"/LED=OFF\">here</a> Turn relay OFF<br>");
 client.println("</html>");

 delay(1);
 Serial.println("Client disconnected");
 Serial.println("");

}

Dopo aver caricato correttamente il codice e aver guardato il monitor, la luce si accende e ricevo il seguente messaggio:

16:02:20.400 -> WiFi connected
16:02:20.425 -> Server started
16:02:20.479 -> Use this URL : http://192.168.100.7/
16:02:41.680 -> new client
16:02:41.680 -> GET / HTTP/1.1
16:02:41.680 -> Client disconnected

Tuttavia, quando accendo o disattivo il relè utilizzando il browser, non accade nulla:

19:38:56.010 -> new client
19:38:56.010 -> GET /LED=ON HTTP/1.1
19:38:56.010 -> Client disconnected
19:38:57.016 -> new client
19:38:57.016 -> GET /LED=OFF HTTP/1.1
19:38:57.063 -> Client disconnected

Tuttavia non succede nulla alla luce e il relè non scatta.

qualche altra nota:

  • Ho provato a caricare il codice con il relè al massimo per scollegare il circuito ma la luce è ancora accesa
  • Il nome della rete Wemos appare nel mio elenco di reti
  • Non risponde ai comandi AT

Risposte

1 motionchannel Aug 25 2020 at 20:37

Il problema risiede nel modulo Wemos in cui emette solo 3,3 V che non sono sufficienti per il relè 5 V, quindi questo può essere risolto implementando il transistor 2N2222 come da schema seguente.

DuncanC Aug 25 2020 at 00:21

Wemos D1 R1 è una scheda da 5 V o 3,3 V? Se è una scheda da 3,3 V, questo è il tuo problema. Ottieni un relè da 3,3 V.

(Da un po 'di scavo sembra che Wemos sia un dispositivo da 3,3 V. Se è così, questo è il tuo problema. Quei "relè digitali" sono disponibili nei modelli da 5 V e 3,3 V. Sostituisci il tuo relè da 5 V con un relè da 3,3 V.)

Quali sono i requisiti attuali del relè e qual è la corrente massima che puoi estrarre dal Wemos? Come stai alimentando il Wemos?

Direi di spezzarlo in pezzi e risolverli separatamente. Metti un multimetro (O un LED con un resistore limitatore di corrente) sul pin D3 e assicurati che il pin si accenda e si spenga. Se lo è, è un problema con il tuo relè. Se non lo è, è un problema con il tuo schizzo o il tuo Arduino.

Se il pin si accende e si spegne, prova a collegare il pin IN sul tuo relè direttamente a +5V. Allora la tua lampadina si accende?