Inhaltsverzeichnis:

Flash ESP-01 (ESP8266) ohne USB-zu-Seriell-Adapter mit Raspberry Pi - Gunook
Flash ESP-01 (ESP8266) ohne USB-zu-Seriell-Adapter mit Raspberry Pi - Gunook

Video: Flash ESP-01 (ESP8266) ohne USB-zu-Seriell-Adapter mit Raspberry Pi - Gunook

Video: Flash ESP-01 (ESP8266) ohne USB-zu-Seriell-Adapter mit Raspberry Pi - Gunook
Video: esp8266 USB-Adapter Upgrade 2024, Juli
Anonim
Flash ESP-01 (ESP8266) ohne USB-zu-Seriell-Adapter mit Raspberry Pi
Flash ESP-01 (ESP8266) ohne USB-zu-Seriell-Adapter mit Raspberry Pi

Diese Anleitung zeigt Ihnen, wie Sie mit der Programmierung Ihres ESP8266-Mikrocontrollers auf einem ESP-01 WIFI-Modul beginnen. Alles, was Sie brauchen, um loszulegen (außer natürlich dem ESP-01-Modul) ist

  • Himbeer-Pi
  • Überbrückungsdrähte
  • 10K Widerstand

Ich wollte eine alte Nachttischlampe in eine moderne Alexa-gesteuerte LED-Nachtlampe umbauen. Nichts Besonderes, es einfach per Sprachbefehl ein- und auszuschalten. Ich habe das einfachste ESP-01 WIFI-Modul, Relais und Kabel mit LEDs online bestellt und völlig vergessen, einen USB-zu-Seriell-Adapter zum Programmieren des ESP8266-Mikrocontrollers zu bestellen. Aber da ich einen Raspberry Pi hatte und sowohl der Raspberry Pi als auch die ESP-01-Platine UART-Pins hatten, dachte ich, ich könnte meinen RPi verwenden, um ESP8266 ohne den Adapter zu programmieren.

Schritt 1: Konfigurieren Sie Rapberry Pi

Rapberry Pi. konfigurieren
Rapberry Pi. konfigurieren

Ich habe Raspberry Pi 3 Model B+ verwendet, die Anleitung sollte jedoch bei anderen Versionen funktionieren, insbesondere bei Modell B.

Also, das Wichtigste zuerst - wir müssen UART auf Pi aktivieren.

Go RPi-Konfigurationseinstellungen. Im Terminalfenster ausführen

$ sudo raspi-config

Gehen Sie zu 5 Schnittstellenoptionen und wählen Sie dann P6 Serial. Sie haben dann gefragt Möchten Sie, dass eine Login-Shell über seriell zugänglich ist? Wählen Sie diese Option, da wir UART nicht verwenden möchten, um den Pi Headless zu betreiben, sondern mit anderen Geräten zu kommunizieren. auswählen. Starten Sie den Pi nach Aufforderung neu. UART sollte nun für die serielle Kommunikation am RX- und TX-Pin des Raspberry Pi 3 aktiviert sein. Hinweis: Danach sollte am Ende von /boot/config.txt ein neuer Eintrag enable_uart=1 erscheinen.

Schritt 2: ESP-01 mit Raspberry Pi verbinden

ESP-01 mit Raspberry Pi verbinden
ESP-01 mit Raspberry Pi verbinden

Jetzt machen wir uns daran, alles zusammen zu verkabeln.

Identifizieren Sie zunächst auf Ihrem RPi 3,3 V Power- und GND (Masse)-Pins, um den ESP8266-Mikrocontroller mit Strom zu versorgen, TXD (Senden) und RXD (Empfangen)-Pins für die Kommunikation und zwei Allzweck-Pins für den Betrieb des ESP8266 (Pins, die entweder hoch oder hoch eingestellt werden können) niedrig). Schlagen Sie die Pin-Anordnung auf pinout.xyz nach oder geben Sie das Terminal ein:

$ Pinbelegung

Zweitens Identifizieren Sie die notwendigen Pins auf ESP-01. Aber am Anfang müssen wir die ESP-01-Pins verstehen. Ich habe im Internet eine Reihe hilfreicher Ressourcen gefunden, die Ihnen in dieser Hinsicht helfen. Dieser ist der kürzeste, während dieser eine viel bessere Erklärung gibt. Kurz gesagt: Es gibt 8 Pins, wir werden 7 davon brauchen, nämlich VCC-Power- und GND-Pins (Masse) für die Stromversorgung, TXD- und RXD-Pins für die Kommunikation und RST (Reset), CH_PD (Chip Power Down, manchmal beschriftet) CH_EN oder Chip enable) und GPIO0 zum Betrieb des Moduls. Normalerweise arbeitet ESP8266 im regulären Modus, aber beim Hochladen eines Codes auf ESP8266 wird darauf geachtet, dass es sich im Flash-Modus befindet. Für den normalen oder normalen Betriebsmodus muss das Modul (natürlich) mit Strom verbunden sein, aber auch der Pin CH_PD muss über einen 10K-Pull-up mit VCC verbunden werden (dieser Wert variiert in verschiedenen Rekursen, ich habe Werte bis zu 3K gefunden) Widerstand beim Booten. Auf der anderen Seite müssen Sie den GPIO0-Pin beim Booten erden, um in den Flash- oder Programmiermodus zu gelangen. Um einen ungehinderten Stromfluss über GPIO0 im geerdeten Zustand zu verhindern, wird empfohlen, GPIO0 über einen niederohmigen Widerstand von 300Ω - 470Ω mit Masse zu verbinden (mehr dazu hier). Der RST-Pin setzt, wie der Name schon sagt, die MCU zurück (oder startet sie neu). Im Normalbetrieb kann er über einen 10K-Pull-up-Widerstand mit VCC verbunden sein, sollte aber geerdet werden, um den Mikrocontroller zurückzusetzen. Während es immer möglich ist, physische Tasten zu verwenden, um RST- und GPIO0-Pins zu erden (oder sogar Drähte manuell zu verbinden, um eine Taste zu simulieren), ist es viel angenehmer, Raspberry Pi-Pins zu verwenden, um die Spannung an RST und GPIO0 des Moduls hoch und niedrig einzustellen Stifte. Außerdem sind dann keine 10K- und 470Ω-Widerstände erforderlich.

Da wir uns nun der Besonderheiten der ESP-01-Pins bewusst sind, können wir damit beginnen, alles miteinander zu verbinden. Sie können die folgende Tabelle als Referenz zusammen mit der obigen Zeichnung verwenden:

ESP-01 Himbeer-Pi

  • VCC (3,3 V) Pin Nr. 1 (3,3 V)
  • GND-Pin #6 (GND)
  • TXD-Pin #10 (RXD / BCM 15)
  • RXD-Pin #8 (TXD / BCM 14)
  • CH_PD-Pin Nr. 1 (3,3 V)
  • RST-Pin #3 (BCM 2)
  • GPIO 0 Pin #5 (BMC 5)

Schließen Sie den VCC-Pin als letzten an. Die Instanz, die Sie mit dem VCC-Pin Ihres Wi-Fi-Moduls verbunden haben, wird eingeschaltet. Verwenden Sie screen oder minicom, um zu überprüfen, ob RPi und ESP8266 über UART kommunizieren können (Hinweis: Möglicherweise müssen Sie zuerst screen oder minicom installieren, da sie anscheinend nicht standardmäßig auf Raspbian installiert sind).

Bildschirmlauf verwenden:

$ sudo screen /dev/serial0 115200

Minicom-Lauf verwenden:

$ sudo minicom -b 115200 -o -D /dev/serial0

Hinweis: Viele Online-Ressourcen schlagen vor, eine Verbindung zu ESP8266 auf /dev/ttyAMA0 herzustellen, aber dies funktioniert nicht von RPi 3 oder höher (einschließlich null W) gemäß der RPi-Dokumentation. Verbinden Sie sich stattdessen über /dev/serial0 oder /dev/ttyS0.

Nachdem Sie screen oder minicom eingegeben haben, verwenden Sie AT-Befehle, um mit dem ESP8266 zu kommunizieren. Geben Sie AT ein, drücken Sie dann die Eingabetaste und drücken Sie dann Strg+J, um den Befehl zu senden. Sie sollten als Antwort OK bekommen. Eine Liste der verfügbaren AT-Befehle finden Sie auf espressiff.com oder einfach hier.

Wenn die Geräte physisch verbunden sind und miteinander kommunizieren, können wir uns mit der Programmierung der RPi-GPIO-Pins und schließlich des ESP8266 selbst befassen.

Schritt 3: Software-Setup (Python zum Betrieb und Arduino IDE zum Programmieren)

TEIL 1. Verwenden von Python zum Umschalten der ESP8266-Modi

Wie oben erwähnt, ist es praktisch, die GPIO-Pins von RPI zu verwenden, um die Betriebsmodi des ESP8266 zu wechseln. Ich habe zwei grundlegende Python-Codes geschrieben, die ESP8266 in den regulären oder Programmiermodus versetzen.

Regulärer Modus: Um den Mikrocontroller in den normalen Betriebsmodus zu versetzen, müssen wir ihn nur mit Strom versorgen und CH_PD über einen Pullup-Widerstand mit VCC verbinden, aber um die MCU vom Programmieren in den normalen Modus zu schalten, müssen wir sie zurücksetzen (denk an einen Neustart). Um dies auf RPi zu tun, werden wir den GPIO des RPi, der mit dem RST-Pin auf ESP-01 verbunden ist, kurz herunterziehen (standardmäßig ist der RPi-Pin, den ich zum Zurücksetzen verwendet habe, auf HIGH gesetzt). Wie kurz? Für mich ist das eine spekulative Frage. Sie können verschiedene Zeitintervalle ausprobieren, aber ich fand, dass 200 - 500 ms gut funktionieren. Schreiben Sie in Kommentare, wenn Sie eine bessere Idee haben. Speichern Sie Ihren Code als reset.py

#!/usr/bin/python

RPi. GPIO als GPIO importieren Importzeit GPIO.setmode(GPIO. BOARD) # setzt die GPIO-Identifikation durch physikalische Pin-Nummern resetPin = 3 # identifiziert den physischen RPi-Pin, der mit dem ESP8266 RST-Pin verbunden ist GPIO.setup(resetPin, GPIO. OUT) # set reset Pin als Ausgang GPIO.output(resetPin, GPIO. LOW) # Spannung am RST-Pin absenken time.sleep(.2) # auf 0,2 s warten GPIO.output(resetPin, GPIO. HIGH) # Spannung am RST-Pin GPIO wiederherstellen. cleanup() # Pins auf RPI zurücksetzen, um zukünftige Laufzeitwarnungen zu verhindern

  • Programmiermodus: Um die MCU in den Programmiermodus zu versetzen, müssen wir den ESP8266 mit geerdetem GPIO0 mit Strom versorgen oder alternativ ihn zurücksetzen und GPIO0 während des Bootens erden (wieder ist mir die genaue Dauer der Spannungsabfälle nicht ganz bekannt, also nicht streng sein) orientiert an gebrauchten Werten). Code als flash.py speichern oder unten herunterladen. Die Abfolge der Aktionen ist wie folgt:

    • RST-Pin herunterziehen
    • GPIO0-Pin herunterziehen
    • RST-Pin hochziehen
    • GPIO0-Pin hochziehen

#!/usr/bin/python

RPi. GPIO als GPIO importieren Importzeit GPIO.setmode(GPIO. BOARD) # setzt die GPIO-Identifikation durch physikalische Pin-Nummern resetPin = 3 # identifiziert den physischen RPi-Pin, der mit dem ESP8266 verbunden ist RST-Pin flashPin = 5 # identifiziert den physischen RPi-Pin, der mit dem ESP8266 GPIO0-Pin verbunden ist GPIO.setup(resetPin, GPIO. OUT) # Reset-Pin als Ausgang setzen GPIO.setup(flashPin, GPIO. OUT) # Flash-Pin als Ausgang setzen GPIO.output(resetPin, GPIO. LOW) # Spannung auf RST-Pin-Zeit absenken. sleep(.2) # Notwendigkeit für dieses Warten ist spekulativ GPIO.output(flashPin, GPIO. LOW) # Spannungsabfall auf GPIO0 time.sleep(.2) # Notwendigkeit für dieses Warten ist spekulativ GPIO.output(resetPin, GPIO. HIGH) # Starten Sie den ESP8266-Start time.sleep(.5) # Warten Sie, bis der ESP8266 bootet GPIO.ouput(flashPin. GPIO. HIGH) # Wiederherstellen der Spannung am GPIO pinGPIO.cleanup() # Zurücksetzen der Pins am RPI, um zukünftige Laufzeitwarnungen zu verhindern

In Terminal-Änderungsberechtigungen:

$ sudo chmod +x flash.py

$ sudo chmod +x reset.py

Von nun an, wann immer Sie in den Programmiermodus wechseln müssen, führen Sie im Terminal aus:

$ python /flash.py

nach dem Hochladen des Codes, um in den normalen Betriebsmodus zu gelangen:

$ python /reset.py

An dieser Stelle möchten Sie möglicherweise auch die ESP8266-Firmware aktualisieren. Es gibt viele Online-Tutorials dazu, daher werde ich nicht näher darauf eingehen.

TEIL 2. Arduino-IDE einrichten

Wenn Sie bereits Arduino IDE installiert haben, möchten Sie vielleicht trotzdem den Abschnitt durchgehen, um sicherzustellen, dass Ihre IDE für ESP8266 bereit ist.

Auf Rapberry Pi können Sie Arduino IDE verwenden, um Ihren ESP8266 zu programmieren. Es gibt zwei Möglichkeiten, die IDE auf RPi zu installieren:

  • über die Befehlszeile aus Repositorys mit apt-get install
  • herunterladen und manuell von arduino.cc installieren.

Ich empfehle dringend, den letzteren Weg zu gehen. Die IDE-Version aus den Repositorys scheint veraltet zu sein und Sie müssen mit Sicherheit mehr tun, bevor Sie mit der Programmierung von ESP8266 beginnen können. Um den Ärger zu vermeiden, gehen Sie zur Arduino.cc-Downloadseite und laden Sie die Linux ARM-Version herunter. Als nächstes dekomprimieren und installieren: Wenn der Name der heruntergeladenen Datei etwa so aussieht arduino-X. Y. Z-linuxarm.tar.xz, im Download-Ordner ausführen:

$ tar -xvf arduino-X. Y. Z-linuxarm.tar.xz

Dies sollte die Datei in den Ordner arduino-X. Y. Z dekomprimieren. Lauf:

$ sudo./arduino-X. Y. Z/install.sh

Dies sollte die IDE installieren. Nachdem die Installation abgeschlossen ist, starten Sie die IDE.

  • Gehen Sie in der Arduino-IDE zu Datei> Einstellungen. Suchen Sie unten im Einstellungsfenster nach " Zusätzliche Board-Manager-URLs ". Geben Sie https://arduino.esp8266.com/stable/package_esp8266com_index.json in das Feld „Additional Board Manager URLs“ein und klicken Sie auf die Schaltfläche „OK“.
  • Gehen Sie zu Tools > Board: XXX > Boards-Manager. Verwenden Sie im Fenster die Suche oder scrollen Sie nach unten, wählen Sie das ESP8266-Board-Menü aus und klicken Sie auf Installieren. Warten Sie, bis die Installation abgeschlossen ist, und schließen Sie das Fenster.
  • Gehen Sie erneut zu Tools > Board: XXX und suchen Sie nach ESP8266-Boards. Wählen Sie das generische ESP8266-Modul.

Jetzt ist die IDE bereit, ESP8266 zu programmieren. Geben Sie den gewünschten Code ein oder fügen Sie ihn in das IDE-Fenster ein und speichern Sie ihn. Klicken Sie auf Hochladen. Führen Sie vom Terminal aus flash.py aus, dies sollte Ihr Board in den Programmiermodus versetzen. Warten Sie einige Minuten, bis die IDE das Kompilieren und Hochladen abgeschlossen hat (Hinweis: ESP-01 wird normalerweise mit 2 LEDs geliefert, die blaue LED blinkt, während der Code hochgeladen wird) und führen Sie reset.py aus. Jetzt ist Ihr ESP-01-Board bereit, seine Aufgaben zu erfüllen.

Empfohlen: