ESP32 - Feu de circulation

Dans ce tutoriel, nous explorerons comment utiliser l'ESP32 pour contrôler un module de feu de circulation. En détail, nous apprendrons :

Préparation du matériel

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×Traffic Light Module
1×Jumper Wires
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du module de feux de circulation

Brochage

Un module de feu de circulation comprend 4 broches :

  • Broche GND : La broche de masse, connectez cette broche au GND de l'ESP32.
  • Broche R : La broche pour contrôler la lumière rouge, connectez cette broche à une sortie numérique de l'ESP32.
  • Broche Y : La broche pour contrôler la lumière jaune, connectez cette broche à une sortie numérique de l'ESP32.
  • Broche G : La broche pour contrôler la lumière verte, connectez cette broche à une sortie numérique de l'ESP32.
Brochage des feux de circulation

Comment ça marche

Diagramme de câblage

Schéma de câblage du feu de circulation ESP32

This image is created using Fritzing. Click to enlarge image

Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, vous pouvez trouver des conseils dans le tutoriel suivant : Comment alimenter l'ESP32.

  • Avec une planche à pain
Schéma de câblage du feu de signalisation ESP32

This image is created using Fritzing. Click to enlarge image

Comment programmer le module de feu de circulation

  • Configurez les broches d'un ESP32 en mode de sortie numérique en utilisant la fonction pinMode().
pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT);
  • Programme pour activer la lumière rouge en utilisant la fonction digitalWrite() :
digitalWrite(PIN_RED, HIGH); // allumer le rouge digitalWrite(PIN_YELLOW, LOW); // digitalWrite(PIN_GREEN, LOW); delay(RED_TIME); // maintenir la LED rouge allumée pendant une période de temps

Code ESP32

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-traffic-light */ #define PIN_RED 25 // The ESP32 pin GPIO25 connected to R pin of traffic light module #define PIN_YELLOW 26 // The ESP32 pin GPIO26 connected to Y pin of traffic light module #define PIN_GREEN 27 // The ESP32 pin GPIO27 connected to G pin of traffic light module #define RED_TIME 4000 // RED time in millisecond #define YELLOW_TIME 4000 // YELLOW time in millisecond #define GREEN_TIME 4000 // GREEN time in millisecond void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } // the loop function runs over and over again forever void loop() { // red light on digitalWrite(PIN_RED, HIGH); // turn on digitalWrite(PIN_YELLOW, LOW); // turn off digitalWrite(PIN_GREEN, LOW); // turn off delay(RED_TIME); // keep red light on during a period of time // yellow light on digitalWrite(PIN_RED, LOW); // turn off digitalWrite(PIN_YELLOW, HIGH); // turn on digitalWrite(PIN_GREEN, LOW); // turn off delay(YELLOW_TIME); // keep yellow light on during a period of time // green light on digitalWrite(PIN_RED, LOW); // turn off digitalWrite(PIN_YELLOW, LOW); // turn off digitalWrite(PIN_GREEN, HIGH); // turn on delay(GREEN_TIME); // keep green light on during a period of time }

Étapes rapides

  • Si c'est la première fois que vous utilisez un ESP32, consultez comment configurer l'environnement pour ESP32 sur Arduino IDE.
  • Effectuez le câblage comme sur l'image ci-dessus.
  • Connectez la carte ESP32 à votre PC via un câble micro USB.
  • Ouvrez Arduino IDE sur votre PC.
  • Sélectionnez la bonne carte ESP32 (par exemple Module de développement ESP32) et le port COM.
  • Copiez le code ci-dessus et ouvrez-le avec Arduino IDE.
  • Cliquez sur le bouton Upload dans Arduino IDE pour charger le code sur ESP32.
  • Vérifiez le module de feu de circulation.

Il est important de noter que le fonctionnement exact d'un feu de circulation peut varier selon la conception spécifique et la technologie utilisée dans différentes régions et intersections. Les principes décrits ci-dessus fournissent une compréhension générale de la manière dont les feux de circulation fonctionnent pour gérer le trafic et améliorer la sécurité sur les routes.

Le code ci-dessus démontre le contrôle individuel des lumières. Améliorons maintenant le code pour une meilleure optimisation.

Optimisation du code ESP32

  • Améliorons le code en implémentant une fonction de contrôle de l'éclairage.
/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-traffic-light */ #define PIN_RED 25 // The ESP32 pin GPIO25 connected to R pin of traffic light module #define PIN_YELLOW 26 // The ESP32 pin GPIO26 connected to Y pin of traffic light module #define PIN_GREEN 27 // The ESP32 pin GPIO27 connected to G pin of traffic light module #define RED_TIME 2000 // RED time in millisecond #define YELLOW_TIME 1000 // YELLOW time in millisecond #define GREEN_TIME 2000 // GREEN time in millisecond #define RED 0 // Index in array #define YELLOW 1 // Index in array #define GREEN 2 // Index in array const int pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN }; const int times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME }; void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } // the loop function runs over and over again forever void loop() { // red light on trafic_light_on(RED); delay(times[RED]); // keep red light on during a period of time // yellow light on trafic_light_on(YELLOW); delay(times[YELLOW]); // keep yellow light on during a period of time // green light on trafic_light_on(GREEN); delay(times[GREEN]); // keep green light on during a period of time } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i++) { if (i == light) digitalWrite(pins[i], HIGH); // turn on else digitalWrite(pins[i], LOW); // turn off } }
  • Améliorons le code en utilisant une boucle for.
/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-traffic-light */ #define PIN_RED 25 // The ESP32 pin GPIO25 connected to R pin of traffic light module #define PIN_YELLOW 26 // The ESP32 pin GPIO26 connected to Y pin of traffic light module #define PIN_GREEN 27 // The ESP32 pin GPIO27 connected to G pin of traffic light module #define RED_TIME 2000 // RED time in millisecond #define YELLOW_TIME 1000 // YELLOW time in millisecond #define GREEN_TIME 2000 // GREEN time in millisecond #define RED 0 // Index in array #define YELLOW 1 // Index in array #define GREEN 2 // Index in array const int pins[] = {PIN_RED, PIN_YELLOW, PIN_GREEN}; const int times[] = {RED_TIME, YELLOW_TIME, GREEN_TIME}; void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } // the loop function runs over and over again forever void loop() { for (int light = RED; light <= GREEN; light ++) { trafic_light_on(light); delay(times[light]); // keep light on during a period of time } } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i ++) { if (i == light) digitalWrite(pins[i], HIGH); // turn on else digitalWrite(pins[i], LOW); // turn off } }
  • Améliorons le code en utilisant la fonction millis() au lieu de delay().
/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-traffic-light */ #define PIN_RED 25 // The ESP32 pin GPIO25 connected to R pin of traffic light module #define PIN_YELLOW 26 // The ESP32 pin GPIO26 connected to Y pin of traffic light module #define PIN_GREEN 27 // The ESP32 pin GPIO27 connected to G pin of traffic light module #define RED_TIME 2000 // RED time in millisecond #define YELLOW_TIME 1000 // YELLOW time in millisecond #define GREEN_TIME 2000 // GREEN time in millisecond #define RED 0 // Index in array #define YELLOW 1 // Index in array #define GREEN 2 // Index in array const int pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN }; const int times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME }; unsigned long last_time = 0; int light = RED; // start with RED light void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); trafic_light_on(light); last_time = millis(); } // the loop function runs over and over again forever void loop() { if ((millis() - last_time) > times[light]) { light++; if (light >= 3) light = RED; // new circle trafic_light_on(light); last_time = millis(); } // TO DO: your other code } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i++) { if (i == light) digitalWrite(pins[i], HIGH); // turn on else digitalWrite(pins[i], LOW); // turn off } }

Vidéo

Références de fonction

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!