Inhoudsopgave:

Flash ESP-01 (ESP8266) zonder USB-naar-seriële adapter met Raspberry Pi - Ajarnpa
Flash ESP-01 (ESP8266) zonder USB-naar-seriële adapter met Raspberry Pi - Ajarnpa

Video: Flash ESP-01 (ESP8266) zonder USB-naar-seriële adapter met Raspberry Pi - Ajarnpa

Video: Flash ESP-01 (ESP8266) zonder USB-naar-seriële adapter met Raspberry Pi - Ajarnpa
Video: #6 How to program ESP8266 board using a Raspberry Pi, Arduino or a USB adaptor. 2024, November
Anonim
Flash ESP-01 (ESP8266) zonder USB-naar-serieel-adapter met Raspberry Pi
Flash ESP-01 (ESP8266) zonder USB-naar-serieel-adapter met Raspberry Pi

Deze Instructable begeleidt u bij het programmeren van uw ESP8266-microcontroller op een ESP-01 WIFI-module. Het enige wat je nodig hebt om aan de slag te gaan (naast de ESP-01-module natuurlijk) is:

  • Raspberry Pi
  • Doorverbindingsdraden
  • 10K weerstand

Ik wilde een oude bedlamp ombouwen tot een moderne Alexa-gestuurde LED-nachtlamp. Niets bijzonders, gewoon in- of uitschakelen met behulp van spraakopdrachten. Ik bestelde de eenvoudigste ESP-01 WIFI-module, relais en draad met LED's online, en vergat helemaal de USB-naar-serieel-adapter te bestellen om de ESP8266-microcontroller te programmeren. Maar aangezien ik een Raspberry Pi had en zowel de Raspberry Pi als het ESP-01-bord UART-pinnen hadden, dacht ik dat ik mijn RPi kon gebruiken om ESP8266 te programmeren zonder de adapter.

Stap 1: Configureer Rapberry Pi

Configureer Rapberry Pi
Configureer Rapberry Pi

Ik heb Raspberry Pi 3 Model B+ gebruikt, maar de instructies zouden moeten werken op andere versies, vooral op model B.

Dus eerst en vooral - we moeten UART op Pi inschakelen.

Ga RPi-configuratie-instellingen. In terminalvenster uitvoeren

$ sudo raspi-config

Ga naar 5 interface-opties en selecteer vervolgens P6-serieel. U hebt toen gevraagd Wilt u dat een login-shell via serieel toegankelijk is? selecteer omdat we UART niet willen gebruiken om de Pi headless te gebruiken, maar om met andere apparaten te communiceren, vandaar op het volgende scherm wanneer u wordt gevraagd Wilt u dat de seriële poorthardware wordt ingeschakeld? selecteer. Start de Pi opnieuw op zoals gevraagd. UART zou nu moeten zijn ingeschakeld voor seriële communicatie op de RX- en TX-pin van Raspberry Pi 3. Opmerking: hierna zou er een nieuw item enable_uart=1 moeten verschijnen aan het einde van /boot/config.txt.

Stap 2: Sluit ESP-01 aan op Raspberry Pi

Sluit ESP-01 aan op Raspberry Pi
Sluit ESP-01 aan op Raspberry Pi

Nu gaan we alles samen aansluiten.

Identificeer eerst op uw RPi 3.3V voedings- en GND (aarde) pinnen om de ESP8266 microcontroller, TXD (zenden) en RXD (ontvangen) pinnen van stroom te voorzien om te communiceren, en twee algemene pinnen om ESP8266 te bedienen (pinnen die ofwel hoog of laag). Zoek pin-arrangement op pinout.xyz of typ terminal:

$ pinout

Identificeer vervolgens de benodigde pinnen op ESP-01. Maar in het begin moeten we begrip hebben van de ESP-01-pinnen. Ik heb op internet een aantal nuttige bronnen gevonden om u daarbij te helpen. Deze is de kortste, terwijl deze zoveel betere uitleg geeft. In het kort: er zijn 8 pinnen, we gaan er 7 nodig hebben, namelijk VCC-stroom en GND (aarde) pinnen voor stroom, TXD- en RXD-pinnen voor communicatie, en RST (reset), CH_PD (Chip Power Down, soms gelabeld CH_EN of chip enable) en GPIO0 om de module te bedienen. Gewoonlijk werkt ESP8266 in een normale modus, maar bij het uploaden van een code naar ESP8266 let het erop in een flitsmodus te zijn. Voor normale of normale bedrijfsmodus moet de module worden aangesloten op de voeding (uiteraard), maar ook de pin CH_PD moet via een 10K op VCC worden aangesloten (deze waarde varieert in verschillende bronnen, ik vond waarden tot 3K) pull-up weerstand bij het opstarten. aan de andere kant, om naar de knipperende of programmeermodus te gaan, moet je de GPIO0-pin bij het opstarten aarden. Om onbeperkte stroom via GPIO0 te voorkomen wanneer geaard, wordt aanbevolen om GPIO0 aan te sluiten op aarde via een lage weerstandsweerstand 300Ω - 470Ω (meer hierover hier). De RST-pin, zoals de naam al doet vermoeden, reset (of herstart) de MCU. Tijdens normaal bedrijf kan het worden aangesloten op VCC via een 10K pull-up-weerstand, maar moet worden geaard om de microcontroller te resetten. Hoewel het altijd mogelijk is om fysieke knoppen te gebruiken om RST- en GPIO0-pinnen te aarden (of zelfs handmatig draden samen te voegen om een knop te simuleren), is het veel aangenamer om Raspberry Pi-pinnen te gebruiken om de spanning hoog en laag in te stellen op de RST en GPIO0 van de module. pinnen. Ook zijn er dan geen 10K en 470Ω weerstanden nodig.

Nu we ons bewust zijn van de eigenaardigheden van de ESP-01-pinnen, kunnen we beginnen alles met elkaar te verbinden. U kunt de volgende tabel als referentie gebruiken, samen met de bovenstaande tekening:

ESP-01 Raspberry Pi

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

Sluit de VCC-pin als laatste aan. De instantie waarop u de VCC-pin hebt aangesloten, uw wifi-module wordt ingeschakeld. Gebruik scherm of minicom om te controleren of RPi en ESP8266 kunnen communiceren met UART (let op: mogelijk moet u eerst scherm of minicom installeren, omdat ze niet standaard op Raspbian lijken te zijn geïnstalleerd).

Screenrun gebruiken:

$ sudo-scherm /dev/serial0 115200

Minicom-run gebruiken:

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

Opmerking: veel online bronnen stellen voor om verbinding te maken met ESP8266 op /dev/ttyAMA0, maar dit werkt niet voor RPi 3 of hoger (inclusief nul W) volgens de RPi-documentatie. Maak in plaats daarvan verbinding via /dev/serial0 of /dev/ttyS0.

Nadat u het scherm of de minicom hebt ingevoerd, gebruikt u AT-opdrachten om te communiceren met ESP8266. Typ AT, druk vervolgens op Enter en druk vervolgens op Ctrl+J om de opdracht te verzenden. Je zou als antwoord OK moeten krijgen. Een lijst met beschikbare AT-commando's is te vinden op espressiff.com of gewoon hier.

Als de apparaten fysiek zijn verbonden en met elkaar praten, kunnen we beginnen met het programmeren van de RPi GPIO-pinnen en, ten slotte, de ESP8266 zelf.

Stap 3: Software-installatie (Python om te bedienen en Arduino IDE om te programmeren)

DEEL 1. Python gebruiken om tussen ESP8266-modi te schakelen

Zoals hierboven vermeld, is het handig om de GPIO-pinnen van RPI te gebruiken om de bedieningsmodi van ESP8266 te wisselen. Ik heb twee basispython-codes geschreven die ESP8266 in de normale of programmeermodus hebben gezet.

Normale modus: om de microcontroller in de normale bedrijfsmodus te zetten, hoeven we hem alleen maar van stroom te voorzien en CH_PD via een pull-up-weerstand op VCC aan te sluiten, maar om de MCU van de programmeermodus naar de normale modus te schakelen, moeten we hem resetten (denk aan opnieuw opstarten). Om dat op RPi te doen, trekken we kort de GPIO van de RPi naar beneden die is aangesloten op de RST-pin op ESP-01 (standaard is de RPi-pin die ik heb gebruikt voor het resetten ingesteld op HOOG). Hoe kort? Voor mij is dat een speculatieve vraag. Je kunt verschillende tijdsintervallen proberen, maar ik ontdekte dat 200 - 500 ms prima werkt. Schrijf in opmerkingen als je een beter idee hebt. Sla je code op als reset.py

#!/usr/bin/python

importeer RPi. GPIO als GPIO importtijd GPIO.setmode(GPIO. BOARD) # stelt GPIO-identificatie in op fysieke pinnummers resetPin = 3 # identificeer RPi fysieke pin aangesloten op ESP8266 RST-pin GPIO.setup(resetPin, GPIO. OUT) # set reset pin als output GPIO.output (resetPin, GPIO. LOW) # spanningsdaling op RST pin time.sleep (.2) # wacht 0,2 s GPIO.output (resetPin, GPIO. HIGH) # herstel spanning op RST-pin GPIO. cleanup() # reset pinnen op RPI om toekomstige runtime-waarschuwingen te voorkomen

  • Programmeermodus: om de MCU in de programmeermodus te zetten, moeten we de ESP8266 van stroom voorzien met GPIO0 geaard, of als alternatief resetten en GPIO0 aarden tijdens het opstarten (wederom is de exacte duur van de spanningsdalingen mij niet helemaal bekend, dus wees niet strikt geleid door gebruikte waarden). Bewaar code als flash.py of download hieronder. De opeenvolging van acties is als volgt:

    • trek de RST-pin naar beneden
    • trek GPIO0-pin naar beneden
    • trek RST-pin omhoog
    • trek GPIO0-pin omhoog

#!/usr/bin/python

importeer RPi. GPIO als GPIO importtijd GPIO.setmode(GPIO. BOARD) # stelt GPIO-identificatie in op fysieke pinnummers resetPin = 3 # identificeer RPi fysieke pin aangesloten op ESP8266 RST-pin flashPin = 5 # identificeer RPi fysieke pin aangesloten op ESP8266 GPIO0-pin GPIO.setup (resetPin, GPIO. OUT) # stel reset-pin in als output GPIO.setup (flashPin, GPIO. OUT) # stel flash-pin in als output GPIO.output (resetPin, GPIO. LOW) # drop-voltage op RST-pintijd. sleep(.2) # behoefte aan dit wachten is speculatief GPIO.output(flashPin, GPIO. LOW) # spanningsdaling op GPIO0 time.sleep(.2) # behoefte aan dit wachten is speculatief GPIO.output(resetPin, GPIO. HIGH) # start met opstarten ESP8266 time.sleep(.5) # wacht tot ESP8266 is opgestart GPIO.ouput(flashPin. GPIO. HIGH) # herstel spanning op GPIO pinGPIO.cleanup() # reset pinnen op RPI om toekomstige runtime-waarschuwingen te voorkomen

Wijzig machtigingen in terminal:

$ sudo chmod +x flash.py

$ sudo chmod +x reset.py

Vanaf nu wanneer u naar de programmeermodus moet gaan in terminal:

$ python /flash.py

na het uploaden van de code om naar de normale bedrijfsmodus te gaan:

$ python /reset.py

Op dit punt wilt u misschien ook de ESP8266-firmware bijwerken. Er zijn veel online tutorials over hoe dat te doen, dus ik zal niet in details treden over hoe dat te doen.

DEEL 2. Arduino IDE instellen

als je al Arduino IDE hebt geïnstalleerd, wil je misschien nog steeds door de sectie bladeren om ervoor te zorgen dat je IDE klaar is voor ESP8266.

Op Rapberry Pi kun je Arduino IDE gebruiken om je ESP8266 te programmeren. Er zijn twee manieren om de IDE op RPi te installeren:

  • via de opdrachtregel van repositories met behulp van apt-get install
  • download en installeer handmatig vanaf arduino.cc.

Ik raad sterk aan om de laatste weg te gaan. De IDE-versie van repositories lijkt achterhaald en je zult zeker meer moeten doen voordat je klaar bent om ESP8266 te programmeren. Om het gedoe te vermijden, gaat u naar de Arduino.cc-downloadpagina en downloadt u de Linux ARM-versie. Vervolgens decomprimeren en installeren: Als de naam van het gedownloade bestand er ongeveer zo uitziet arduino-X. Y. Z-linuxarm.tar.xz, voer dan in de downloadmap uit:

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

Dit zou het bestand moeten decomprimeren naar de map arduino-X. Y. Z. Loop:

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

Dit zou de IDE moeten installeren. Nadat de installatie is voltooid, start u de IDE.

  • Ga vanuit de Arduino IDE naar Bestand > Voorkeuren. Zoek naar "Extra Board Manager-URL's" onderaan het voorkeurenvenster. Voer https://arduino.esp8266.com/stable/package_esp8266com_index.json in het veld "Extra Board Manager-URL's" in en klik op de knop "OK".
  • Ga naar Tools > Board: XXX > Boards Manager. Gebruik in het venster zoeken of scroll naar beneden, selecteer het ESP8266-bordmenu en klik op installeren. Wacht tot de installatie is voltooid en sluit het venster.
  • Ga opnieuw naar Tools > Board: XXX en zoek naar ESP8266-boards. Kies Algemene ESP8266-module.

Nu is IDE klaar om ESP8266 te programmeren. Typ of plak de gewenste code in het IDE-venster en sla deze op. Klik op Uploaden. Vanaf terminal run flash.py, dit zou je bord in programmeermodus moeten zetten. Wacht een paar minuten totdat de IDE klaar is met compileren en uploaden (let op: ESP-01 wordt meestal geleverd met 2 LED's, de blauwe LED knippert terwijl de code wordt geüpload) en voer reset.py uit. Nu is uw ESP-01-bord klaar om taken uit te voeren.

Aanbevolen: