Impossible de faire fonctionner un relais

Bonjour,

J'ai acheté plusieurs relais de ce type et je n'arrive pas à les faire fonctionner avec une wemos D1 mini. Pourtant les branchements sont corrects : VCC 5V - GND - IN D7.
les diode rouge et verte sont allumées toutes les deux. Pourtant à l'instruction digitalWrite(ledPin, HIGH) la led verte SW devrait s'allumer, elle devrait s'éteindre à l'instruction digitalWrite(ledPin, LOW).

Si je branche un de ces relais sur une UNO et que j'utilise le croquis blink, il fonctionne parfaitement sur D13 mais pas sur les autres entrées digitales.

Le code utilisé sur la wemos fonctionne parfaitement avec ce relais :


Ref : HW-482.

Voici le code :

#include <ESP8266WiFi.h> 
const char* ssid = "zzzz";
const char* password = "xxxx;
WiFiServer server(yyyy);


int ledPin = 13;
// ATTENTION GPIO13 correspond à la PIN 07

void setup() {
  Serial.begin(115200);
  //delay(10);
   pinMode(ledPin, OUTPUT);
   digitalWrite(ledPin, LOW);
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connexion à ");
  Serial.println(ssid);
  //WiFi.mode(WIFI_STA); // Configure ESP8266 en Mode STA  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
  Serial.print(".");
  delay(100);
  }
  Serial.println("");
  Serial.println("WiFi connecte a : ");
  Serial.println(WiFi.SSID());
  
  // demarrage du serveur
  server.begin();
  Serial.println("demarrage du serveur");
 
  // Print the IP address
  Serial.print("Utilisez cette URL pour vous connecter : ");
  Serial.print("http://");
  Serial.println(WiFi.localIP());
}
 
void loop() {
  // Controle de la connection client
  WiFiClient client = server.available(); // création d'une instance WiFiClient 
  // si le client n'est pas connecté on ne fait rien
  if (!client) {
     return;  
  }
 
  // Un client est connecté
  Serial.println("nouveau client");
  
 
  // Première ligne de la requête
  String request = client.readStringUntil('\r');
  Serial.println(request);
  while (client.available()) client.read();
  
 
  // Lecture-préparation réponse de la requête
  int value = LOW;
  
  if (request.indexOf("/LED=ON") != -1)  {     // renvoie la position 4
    digitalWrite(ledPin, HIGH);    
    value = HIGH;
  }

  else if (request.indexOf("/LED=OFF") != -1)  { // renvoie la position 4
    digitalWrite(ledPin, LOW);
    value = LOW;
  } 
   
   yield(); 
    
   if (request.indexOf("/favicon.ico")!= -1){  // renvoie la position 4
   client.print("HTTP/1.1 200 OK\r\n");
   client.print("Content-Type: image/x-icon\r\n");
   client.print("Content-Length: 0\r\n\r\n");
  }
 
  yield();
 
  // Réponse à la requête
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); 
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<head>");
  //client.println("<link rel='icon' href='data:,'>");
  client.println("</head>");
  client.println("<body>");
  client.println("<div style=\"text-align:center\">");
  client.println("<h1>TEST DU SERVEUR WIFI DE PHILIPPE</h1><br><br>");
  client.print("La Lampe est maintenent : ");
  if(value == HIGH) {
    client.print("Allumee");
  } else {
    client.print("Eteinte");
  }
  client.println("<br><br>");
  client.println("<a href=\"/LED=ON\"\"><button style=\"height: 50px; width: 100px\"> ON </button></a>");
  client.println("<a href=\"/LED=OFF\"\"><button style=\"height: 50px; width: 100px\"> OFF </button></a><br />");
  client.println("</body>");
  client.println("</html>");
  
  
  yield(); // inutile ou pas
  
  if (client.connected())
  {  /* Le client est encore connecté */
  client.stop(); // termine la connexion
  Serial.println("Client déconnecté par fonction - client.stop");
  Serial.println("");
  }
  

 
}

Merci.

Ce module s'active avec un niveau bas.

Dans setup() :

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

Pour activer / désactiver :

digitalWrite(ledPin, LOW);
digitalWrite(ledPin, HIGH);

Si cela ne fonctionne toujours pas il s'agit probablement d'un problème de sensibilité. 3.3V ne sont pas forcément suffisants.

Malheureusement ça ne fonctionne pas.
Pourtant sur une UNO avec le croquis blink et D13 LED_BUILTIN ça fonctionne parfaitement :cry:

Merci.

Binjour

Le problème ne vient pas du relais mais de l'électronique qui , sur le module, est autour : non conçue pour être pilotée avec un signal [0 ; 3,3V] Ton mondule à relais est concu pour un signal dont l'état haut monte vers 5V

Voilà un petit module à relais adapté aux cartes WEMOS/LOLIN D1 Mini

Sa documentation , schéma inclus est disponible là :
https://www.wemos.cc/en/latest/d1_mini_shield/relay.html

A vérifier.

Si c'est bien ça.

D'après la doc du site Wemos (autant prendre à la source !!) D7 correspond à GPIO13
voir ici : https://www.wemos.cc/en/latest/d1/d1_mini.html

Merci, je commande dès maintenant.
Bonne journée.

WEMOS (renommée LOLIN) produit une bonne petite série de modules , en majorité enfichables sur les cartes D1 Mini
https://www.wemos.cc/en/latest/d1_mini_shield/index.html

Au dos du module à relais on voit une possibilité de choix de GPIO de commande (1 parmi 7)

Pour éviter les très nombreuses copies je préfère commander à leur boutique chez Aliexpress
https://lolin.aliexpress.com/store/1331105

Merci.

Donc le module est inadapté à une commande en 3.3V.

C'est bien ça, merci hbachetti et encore merci aussi à al1fch.
Vous avez répondu à toutes mes questions.
J'ai été sur la boutique LOLIN et il y a beaucoup d'articles qui m’intéressent.

Bon AM.

on peut aussi mettre un petit Adaptateur de niveau bidirectionnel (on en trouve des tout prêts pour signaux I2C) ➜ chercher "logic level shifter"

Bonjour JML,

Par exemple si j'achète ce module :
Logic Level Shifter

Il me suffit de brancher LV1 sur D7 de ma WEMOS et HV1 sur IN du relais ?
Pour passer de 3.3 à 5v, peut-être faut-il que je branche du 5V sur HV et GND sur GNG dans la rangée du haut ?

Du coup comme j'en est acheté une dizaine je vais pouvoir les utiliser.

oui vous branchez un côté au 5V (le H), l'autre au 3.3V (le L) et les GND et ce qui rentre d'un côté ressort de l'autre avec la tension modifiée. ça fonctionne dans les 2 sens

Merci JML.

J'avais un problème similaire et je l'ai reglé en mettant -255 au lieu de LOW. Je ne sais pas si c'est la bonne chose à faire mais ça a fonctionné.

la fonction digitalWrite a cette signature: void digitalWrite(uint8_t pin, uint8_t val)

-255 est représenté par le compilateur par 0xFF01 et comme le second argument est un entier non signé sur 8 bits, ce qui sera passé à la fonction c'est l'octet de poids faible soit 0x01 ➜ vous auriez mis HIGH que c'était pareil...

Le code source aussi montre qu'ils font ceci pour activer ou pas la pin:

	if (val == LOW) {
		*out &= ~bit;
	} else {
		*out |= bit;
	}

donc si on passe LOW (0) ça met la pin à 0V et toute autre valeur met la pin à Vcc

Oupssssssssssss
Quelle bêtise de ma part : sur une uno le croquis blink fonctionne parfaitement sur les autres entrées-sorties digitales avec ce relais et c'est normal car c'est du 5V avec HIGH contrairement à la wemos où c'est du 3.3V.

:scream::grin::innocent: