Connecter un ESP8266 a un servomoteur et un module RFID

Salut a tous j'ai crée une petite serrure avec un servomoteur , un ecran lcd et un module rfid tout ca relier sur une carte Arduino mega , franchement le système marche bien mais plusieurs question me vienne

  1. j'aimerais connecter en wifi ce système pour le contrôler avec Alexa , j'ai donc penser a l'ESP mais esque c'est vraiment possible de Controller un servomoteur et un module rfid avec ca ?

  2. je débute et je n'est que une carte Arduino et j'aimerais récupérais ma carte sans pour autant retirais ce projet possible de tout connecter a l'ESP ? ( bien sur je sais que je n'aurais pas assez de pin pour mon écran lcd mais au pire il n'est pas indispensable )

merci beaucoup de votre aide

mon code si ca peut aider :

 

#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>
#include <Servo.h>
#include "LiquidCrystal.h"
 
#define RST_PIN 49
#define SS_PIN 53
#define chair 7
 
MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
Servo myServo;
 
String card1 = "29 55 01 B9"; 
String card2 = "99 2E CA 55"; 
String currentTagId = "";
boolean state = false;

LiquidCrystal lcd(8, 9, 10, 11, 12,13);  //Pins où on va connecter l'écran (RS, E, D4, D5, D6, D7)

 
void setup() {
   lcd.begin(16, 2);   //on initialise l'écran
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode(chair, OUTPUT);
  myServo.attach(7);
  myServo.write(0);
   lcd.clear();
    lcd.print("scanner");
    lcd.setCursor(0, 1);  
    lcd.print("votre badge");
  
  Serial.println("Please Tagging the Reader");
  Serial.println("--------------------------");
  Serial.println();
 
}
 
void loop() {
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    currentTagId += mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ";
    currentTagId += String(mfrc522.uid.uidByte[i], HEX);
  }

  currentTagId.trim();
  currentTagId.toUpperCase();
 
  Serial.print("Card 1: ");
  Serial.println(card1);
  Serial.print("Card 2: ");
  Serial.println(card2);
  Serial.print("Check : ");
  Serial.println(currentTagId);

  
  Serial.println();


  if (currentTagId == card1) {
    // Serial.println(state); 
    if (state == false) {
      lcd.setCursor(0, 0);   
    lcd.clear();
      lcd.print("porte ouvert");
      
      
      myServo.write(90);
      Serial.println("Pragnent Card");
      state = true;
      currentTagId = "";
      delay(500);
    } else {
      
      myServo.write(0);
      lcd.setCursor(0, 0);
      lcd.clear();
      lcd.print("porte fermer");
      delay(5000);
      lcd.clear();
      lcd.print("scanner");
    lcd.setCursor(0, 1);  
    lcd.print("votre badge");
      Serial.println("Close the Chair");
      state = false;
      currentTagId = "";
      delay(500);
    }
  }
  if (currentTagId == card2) {
    myServo.write(0);
    Serial.println("No Pragnent Card");
    state = false;
    currentTagId = "";
    delay(500);
  }
  Serial.println();
  delay(200);
 
}
 

Bonjour

Adieu Mega, Une carte avec un ESP32 gérer tout ça en codant sous IDE Arduino, idem pour une carte avec un ESP8266 (NodeMCU, WEMOS ou LOLIN......) mais vieux vaut éviter la préhistorique carte ESP-01

Salut.
Il faudra bien étudier les GPIOs de l'ESP8266 et éviter d'utiliser certaines broches :

L'écran peut être équipé d'un module PCF8574 pour dialoguer en I2C.
Le RC522 fonctionne sans problème avec un ESP8266. Je l'ai fait avec un ESP32.
Reste la broche nécessaire au servo : il reste GPIO2, mais elle empêche le µcontrôleur de démarrer si elle est "pulled LOW". Je ne sais pas si un servo va ramener la GPIO à GND ou au +3.3V au repos.
Un ESP32 serait certainement plus à l'aise.

L'écran devra être alimenté sous 5V, sinon il perd en contraste. Idem pour le servo bien sûr.
Le RC522 fonctionne sous 3.3V.

Je viens de lire une page similaire et ça a l’air une galère de fou , vous avez des conseils a donner pour faire tout ça facilement ? Et esque je peut juste copier -coller mon code et le transfert ou non faut vraiment utiliser un autre langage

Copier/coller : certainement pas, il va falloir coder un serveur.
Un exemple : Mise en oeuvre d’Alexa sur un module ESP32 (WEMOS R32)

Un MG996R a une impédance d'entrée élevée, donc il ne risque pas de ramener la GPIO2 à GND au repos, car une LED avec sa résistance (470 ohms) est connectée entre GPIO2 et +3.3V.

Bon le montage electronique c'est fait maintenant il faut je fasse le code ca vas etre plus dur

Bon, j'y arrive pas du tout , j'ai chercher plein de truc mais a chaque fois l'adresse ip pour se connecter elle marche pas

Ce qui ne veut pas dire grand chose. Sans le code essayé, ni le résultat de ce qui est affiché sur le moniteur série, que dire ?

il faut reprendre de 0 je pense , j'ai tester plein de programme mais rien ne marche sauf 1 ou le programme tourner bien le servo mais sans intégration rfid donc esque on pourrais m'aider pour cree mon programme pour l'esp.. j'aimerais qu'il tourne de 90 quand le badge est detecter et si possible le connecter a alexa en second temps , j'ai essayer blynk qui m'a etait conseiller mais je n'y comprend pas grand chose et j'ai aussi essayer jeedom mais j'ai un probleme avec la machine virtuel

deja comment faire pour connecter l'esp a une page ?

Il faut déjà essayer un sketch de serveur HTTP tout simple. Les exemples ne manquent pas :

Oe c’est ce que j’ai essayé mais quand je veut me connecter et que je rentre l’adresse ip sur Google il ne trouve rien

Personne n'a de boule de cristal. Il faut ton code. Est-ce que ça affiche bien une adresse sur le moniteur série?
Passer d'un arduino à un ESP peut s'avérer un tantinet plus compliqué qu'il n'y parait.

On n'entre pas l'adresse IP dans Google, mais dans la barre d'adresse d'un navigateur.

Oui c’est ce que j’ai fait j’ai pas étais clair pardon

J'ai copié le code cité en #11, remplacé le ssid et password par ceux de mon réseau.
Compilation, chargement OK.

Serial Monitor :

.........
WiFi connected.
IP address: 
192.168.1.12

Navigateur :

A part que j'ai repris l'image du tutoriel avec une adresse IP en 132, Que dire ?

bon bh je ne comprend vraiment pas je suis actuelle chez ma copine et ca marche possible ca marche pas car chez moi je me connecter a un routeur ?

Moi aussi je me connecte à un routeur, forcément (livebox).

j'ai un dernier problème ya un moyen d'intégrer blynk dans mon code facilement ?

/**********************************************************************
   Contrôle d'un servomoteur au moyen d'une page Web.
   ESP32 et ESP8266
   https://electroniqueamateur.blogspot.com/2018/09/servomoteur-controle-par-wi-fi-esp8266.html
***********************************************************************/

// inclusion des bibliothèques utiles
#if defined ARDUINO_ARCH_ESP8266  // s'il s'agit d'un ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#elif defined ARDUINO_ARCH_ESP32  // s'il s'agit d'un ESP32
#include "WiFi.h"
#include <WebServer.h>
#endif

#include <Servo.h>  // s'il s'agit d'un ESP32, il faut installer une version spéciale
                    // de la bibliothèque servo: 
                    // https://github.com/RoboticsBrno/ESP32-Arduino-Servo-Library

// modifiez ces deux constantes pour qu'elles contiennent les caractéristiques de
// votre réseau Wifi
#define ssid      "Livebox-E1FF"       // le nom (SSID) de votre réseau WiFi
#define password  "..."  // votre mot de passe WiFi

// le servomoteur est contrôlé par les GPIO 4 de l'ESP8266
#define pinServo 4

#if defined ARDUINO_ARCH_ESP8266  // s'il s'agit d'un ESP8266
ESP8266WebServer server(80);
#elif defined ARDUINO_ARCH_ESP32  // s'il s'agit d'un ESP32
WebServer server(80);
#endif

Servo monServo;  //création de l'objet servo

// La variable qui indique la position désirée pour le servomoteur (dépend du bouton coché sur la page web)
String positionSTR = "1";          // peut prendre les valeurs 1, 2 ou 3.

/* La fonction construitPage retourne un string qui contient toute notre page web  */

String construitPage() {

  String bouton1Str, bouton2Str;

  // pour que le bon bouton demeure coché:

  if (positionSTR == "1") {
    bouton1Str = "checked";
  }
  if (positionSTR == "2") {
    bouton2Str = "checked";
 
  }

  String page = "<html lang=fr-FR><head>";
  page += "<title>ESP8266 Servomoteur</title>";
  page += "<style> body { background-color: #fffff; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }</style>";
  page += "</head><body><h1>ESP8266 Servomoteur</h1>";
  page += "<form action='/' method='POST'>";
  page += "<h3>Position du servomoteur:</h3>";
  page += "<p><INPUT type='radio' name='position' value='1' " + bouton1Str + ">ouvert";
  page += "<INPUT type='radio' name='position' value='2' " + bouton2Str + ">fermer";
  

  page += "<INPUT type='submit' value='Appliquer'><br><br>";
  page += "</body></html>";
  return page;
}

/*  La fonction gestionPage modifie les caractéristiques du moteur si le bouton
    Appliquer a été cliqué. */
void gestionPage() {
  if ( server.hasArg("position") ) {
    positionSTR = server.arg("position");

    Serial.print("Commande recue.  Position: ");
    Serial.println(positionSTR);

    gestionMoteur();
  }
  server.send ( 200, "text/html", construitPage() );

}

/* Contrôle du servomoteur */
void gestionMoteur() {

  int laPosition;

  if (positionSTR == "1") {
    laPosition = 90;
  }

  if (positionSTR == "2") {
    laPosition = 0;
  }

  monServo.write(laPosition);
}

void setup() {

  monServo.attach(pinServo);

  // pour affichage dans le moniteur série
  Serial.begin ( 115200 );

  // initialisation de la communication WiFi
  WiFi.begin ( ssid, password );
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 ); Serial.print ( "." );
  }
  Serial.println ( "" );
  Serial.print ( "Maintenant connecte a " );
  Serial.println ( ssid );
  Serial.print ( "Adresse IP: " );
  Serial.println ( WiFi.localIP() );

  // On indique le nom de la fonction qui gère l'interraction avec la page web
  server.on ( "/",  gestionPage );

  server.begin();
  Serial.println ( "Serveur HTTP en fonction" );
}

void loop() {

  server.handleClient();
}

Je ne pratique pas Blynk, mais tu trouveras probablement des tutoriels sur le WEB.