ESP32 - Ampel

In diesem Tutorial werden wir untersuchen, wie man den ESP32 verwendet, um ein Ampelmodul zu steuern. Im Detail werden wir lernen:

Erforderliche Hardware

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Ampel-Modul
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über das Ampelmodul

Pinbelegung

Ein Ampelmodul enthält vier Pins:

  • GND-Pin: Der Erdungspin; verbinden Sie diesen Pin mit dem GND des ESP32.
  • R-Pin: Der Pin zur Steuerung des roten Lichts; verbinden Sie diesen Pin mit einem digitalen Ausgang des ESP32.
  • Y-Pin: Der Pin zur Steuerung des gelben Lichts; verbinden Sie diesen Pin mit einem digitalen Ausgang des ESP32.
  • G-Pin: Der Pin zur Steuerung des grünen Lichts; verbinden Sie diesen Pin mit einem digitalen Ausgang des ESP32.
Ampel-Pinbelegung

Wie es funktioniert

Verdrahtungsdiagramm

  • Wie man ESP32 und eine Ampel mit breadboard verbindet
ESP32-Ampel-Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

Wie man ESP32 und eine Verkehrsampel anschließt

Wie man das Ampel-Modul programmiert

  • Konfigurieren Sie die Pins eines ESP32 auf den digitalen Ausgabemodus, indem Sie die Funktion pinMode() verwenden.
pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT);
  • Programm zum Einschalten des roten Lichts durch die Verwendung der digitalWrite() Funktion:
digitalWrite(PIN_RED, HIGH); // RED einschalten digitalWrite(PIN_YELLOW, LOW); // digitalWrite(PIN_GREEN, LOW); delay(RED_TIME); // halte die rote LED für eine bestimmte Zeit eingeschaltet

ESP32-Code

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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 }

Schnelle Schritte

  • Falls dies das erste Mal ist, dass Sie ESP32 verwenden, sehen Sie sich wie man die Umgebung für ESP32 in der Arduino-IDE einrichtet an.
  • Verbinden Sie die Verkabelung gemäß dem obigen Bild.
  • Schließen Sie das ESP32-Board über ein Micro-USB-Kabel an Ihren PC an.
  • Öffnen Sie die Arduino IDE auf Ihrem PC.
  • Wählen Sie das richtige ESP32-Board (z. B. ESP32 Dev-Modul) und den COM-Port aus.
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE.
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den ESP32 hochzuladen.
  • Schauen Sie sich das Ampelmodul an.

Es ist wichtig zu beachten, dass die genaue Funktionsweise einer Ampel je nach dem spezifischen Design und der verwendeten Technologie in unterschiedlichen Regionen und an Kreuzungen variieren kann. Die oben beschriebenen Grundsätze vermitteln ein allgemeines Verständnis davon, wie Ampeln den Verkehr regeln und die Sicherheit im Straßenverkehr erhöhen.

Der obige Code demonstriert die individuelle Lichtsteuerung. Jetzt optimieren wir den Code für eine bessere Leistung.

ESP32 Code-Optimierung

  • Lass uns den Code verbessern, indem wir eine Funktion zur Lichtsteuerung implementieren.
/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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 } }
  • Lass uns den Code verbessern, indem wir eine For-Schleife verwenden.
/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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 } }
  • Lass uns den Code verbessern, indem wir die millis()-Funktion anstelle von delay() verwenden.
/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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 } }

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!