AZ-Delivery D1 Mini, ESP8266 - Handleiding computerhardware

Inleiding

De ESP8266 module is een System on a Chip (SoC). Het bestaat uit een Tensilica L106 32-bits microcontroller en een Wi-Fi transceiver. Het heeft 11 General Purpose Input/Output pinnen, of kortweg GPIO-pinnen, en één analoge ingang. Dit betekent dat het geprogrammeerd kan worden zoals elke andere microcontroller. Het beste aan de ESP8266 is dat het Wi-Fi communicatie heeft, wat betekent dat het verbonden kan worden met Wi-Fi, of het internet, een webserver met echte webpagina's kan hosten, verbinding kan maken met een smartphone, enz. Het ondersteunt netwerkprotocollen zoals Wi-Fi, TCP, UDP, HTTP, DNS, enz.

AZ-Delivery D1 Mini module is een ontwikkelbord gebaseerd op de ESP8266 chip. Het heeft 11 digitale input/output pinnen en één analoge input pin. Alle digitale I/O pinnen hebben interrupt, pwm, I2C en 1-draads mogelijkheden, in software. Het bereik van analoge ingangsspanning ligt tussen 0V en 3.3V DC. De module gebruikt een microUSB-poort en de CH340G-chip met een programmeercircuit voor het programmeren van de ESP8266. Ook biedt de microUSB-poort een stroomvoorziening voor de module.

Er zijn verschillende manieren om de D1 Mini module te programmeren. Als je al eerder Arduino-borden hebt gebruikt, dan is dit heel gemakkelijk voor je. Houd er rekening mee dat het niet beperkt is tot deze optie, er zijn veel andere manieren om de D1 Mini module te programmeren (officiële ESP SDK voor C-programmering, Lua-interpreter, MicroPython-firmware, zijn enkele van de vele).

Specificaties van de ESP8266

  • 802.11 b/g/n
  • Geïntegreerde low power 32-bit MCU Geïntegreerde 10-bit ADC
  • Geïntegreerde TCP/IP protocolstack
  • Geïntegreerde TR-schakelaar, balun, LNA, eindversterker en aanpassingsnetwerk
  • Geïntegreerde PLL, regelaars en energiebeheereenheden
  • Ondersteunt antenne diversiteit
  • Wi-Fi 2.4 GHz, ondersteunt WPA/WPA2
  • Ondersteunt STA/AP/STA+AP werkingsmodi
  • Ondersteunt Smart Link functie voor zowel Android- als iOS-apparaten
  • SDIO 2.0, (H) SPI, UART, I2C, I2S, IRDA, PWM, GPIO
  • STBC, 1x1 MIMO, 2x1 MIMO
  • A-MPDU & A-MSDU aggregatie en 0.4s guard interval
  • Diepe slaapstand <10uA, uitschakel lekstroom < 5uA
  • Wordt wakker en verzendt pakketten in < 2ms
  • Standby stroomverbruik van < 1.0mW (DTIM3)
  • +20dBm uitgangsvermogen in 802.11b modus
  • Bedrijfstemperatuurbereik: -40°C ~ 125°C

De D1 Mini module

De D1 Mini module wordt ongemonteerd geleverd met een paar acht-pins mannelijke headers, een paar acht-pins vrouwelijke headers en een paar acht-pins vrouwelijke headers met extra lange poten (die te zien zijn op de omslagafbeelding).

Specificaties

Bedrijfsspanning: 3.3V DC
Hoofdchip: ESP8266
Kloksnelheid: 80MHz / 160MHz
Flash: 4MB
Digitale I/O pinnen: 11
Analoge input pinnen: 1
Analoge input spanningsbereik: van 0V tot 3.3V DC
Poort: microUSB
USB-chip: CH340 chip
On-board LED: verbonden met GPIO2 pin
Afmetingen: 25 x 35 x 6mm [0.98 x 1.4 x 0.24in]
Max. stroom per enkele digitale I/O pin: 12mA

Digitale I/O pinnen

Net als elk Arduino-bord heeft de D1 Mini module digitale input/output pinnen of GPIO - General Purpose Input/Output pinnen. Zoals de naam al aangeeft, kan het gebruikt worden als digitale ingangen om een digitale spanning te lezen, of als digitale uitgangen om ofwel 0V (sinkstroom) of 3.3V (bronstroom) uit te voeren.

De D1 Mini module heeft een microcontroller die werkt in een spanningsbereik van 0V – 3.3V.

De maximale stroom die van een enkele GPIO-pin kan worden afgenomen is 12mA!

informatie OPMERKING: De pinnen van de D1 Mini module zijn niet 5V tolerant, het toepassen van meer dan 3.6V op een pin kan de chip beschadigen!

GPIO1 en GPIO3 worden gebruikt als TX en RX van de hardware Seriële poort (UART), dus in de meeste gevallen kan het niet gebruikt worden als een normale I/O tijdens het verzenden/ontvangen van seriële data.

D1 Mini module heeft een ingebouwde LED verbonden met de GPIO2 pin.

PWM

In tegenstelling tot de meeste Atmel-chips (Arduino), ondersteunt de D1 Mini module geen hardware PWM. Software PWM wordt echter ondersteund op alle digitale pinnen. Het standaard PWM-bereik is 10 bits bij 1kHz, maar dit kan worden gewijzigd (tot 14 bits bij 1kHz).

Analoge input

De D1 Mini module heeft een enkele analoge input, met een inputspanningsbereik van 0V - 3.0V. Als er meer dan 3.3V wordt toegepast, kan de chip beschadigd raken. De analoog-digitaal converter (ADC) heeft een resolutie van 10 bits.

Serieel

De D1 Mini module heeft twee hardware UARTS (seriële poorten):
UART0 op pinnen 1 en 3 (TX0 en RX0 respectievelijk), en UART1 op pinnen 2 en 8 (TX1 en RX1 respectievelijk). GPIO8 wordt echter gebruikt om de flash-chip te verbinden. Dit betekent dat UART1 alleen data kan verzenden. In de meeste gevallen is slechts één UART poort meer dan genoeg.

UART0 heeft ook hardware flow control op pinnen 15 en 13 (RTS0 en CTS0 respectievelijk). Deze twee pinnen kunnen ook gebruikt worden als alternatief voor TX0 en RX0 pinnen.

De I2C

De D1 Mini module heeft geen hardware I2C of TWI (Two Wire Interface), maar het is geïmplementeerd in software. Dit betekent dat twee willekeurige digitale pinnen kunnen worden gebruikt als de I2C-pinnen. Standaard gebruikt de I2C-bibliotheek GPIO4 als SDA en GPIO5 als SCL (de datasheet specificeert GPIO2 als SDA en GPIO14 als SCL). De maximale snelheid van de I2C-klok is ongeveer 450kHz.

SPI

De D1 Mini module heeft één SPI verbinding beschikbaar voor de gebruiker, aangeduid als HSPI. Het kan gebruikt worden in zowel Slave als Master modus (in software!).

Het gebruikt:

  • GPIO14 als een klok – CLK,
  • GPIO12 als MISO,
  • GPIO13 als MOSI en
  • GPIO15 als Slave Select - SS.

De pinout

De D1 Mini module heeft twee rijen van acht pinnen (in totaal zestien pinnen). De pinout van de module wordt getoond op de volgende afbeelding:
De pinout

D1 Mini module - Software

De meeste microcontrollerfunctionaliteit van de ESP gebruikt exact dezelfde syntax als een normaal Arduino-bord, waardoor het heel gemakkelijk is om aan de slag te gaan.

Digitale I/O pinnen

Net als bij een gewoon Arduino-bord kan de pinfunctie worden ingesteld met de volgende code:
pinMode(pin, mode)

waarbij pin de naam is van GPIO pin, en mode kan INPUT (ingang) (wat de standaard is), of OUTPUT (uitgang), of INPUT_PULLUP (ingang_pullup) zijn om de ingebouwde pull-up weerstanden voor pinnen GPIO0 - 15 in te schakelen. Om de pull-down weerstand voor GPIO16 in te schakelen, gebruik je INPUT_PULLDOWN_16 (ingang_pulldown_16).

Om een output pin HIGH (3.3V) of LOW (0V) in te stellen, gebruik je de volgende code:
digitalWrite(pin, value) waarbij pin de naam is van GPIO pin, en value ofwel 1 of 0 (of HIGH (hoog) en LOW (laag)).

Om een ingang te lezen, gebruik je de volgende code: digitalRead(pin)

Om PWM op een bepaalde pin in te schakelen, gebruik je de volgende code:
analogWrite(pin, value) waarbij pin de naam is van GPIO pin, en value een getal tussen 0 en 1023.

Het bereik van de PWM-uitgang kan worden gewijzigd door de volgende code te gebruiken: analogWriteRange(new_range)

De frequentie van PWM kan worden gewijzigd door de volgende code te gebruiken:
analogWriteFreq(new_frequency) waarbij new_frequency tussen 100Hz en 1000Hz moet liggen.

Analoge input pin

Net als op elk Arduino-bord kan de functie analogRead(A0) worden gebruikt om de analoge spanning op de analoge input te krijgen (0 = 0V, 1023 = 1.0V).

De D1 Mini module kan ook de ADC gebruiken om de voedingsspanning (VCC) te meten. Om dit te doen, voeg je ADC_MODE(ADC_VCC) bovenaan je schets toe en gebruik je ESP.getVcc() om daadwerkelijk de spanning te krijgen.

informatie OPMERKING: Als een analoge input pin wordt gebruikt om de voedingsspanning te lezen, kan er niets anders op de analoge input pin worden aangesloten!

Seriële communicatie

Om UART0 (TX = GPIO1, RX = GPIO3) te gebruiken, gebruik je het Seriële object, net als op een Arduino-bord: Serial.begin(baud_reate)

Om de alternatieve pinnen te gebruiken (TX = GPIO15, RX = GPIO13), gebruik je de volgende code: Serial.swap() na Serial.begin()

Om UART1 (TX = GPIO2) te gebruiken, gebruik je het Serial1 object.

informatie OPMERKING: Alle Arduino stream functies, zoals read() (lezen), write() (schrijven), print() (printen), println() (println), etc. worden ook ondersteund.

De I2C- en SPI-interfaces

Gebruik voor de I2C- en SPI-interface de standaard Arduino-bibliotheeksyntax.

CPU-tijd delen met het RF-gedeelte

Een ding om in gedachten te houden bij het schrijven van programma's voor de D1 Mini module (ESP8266) is dat de sketch resources (CPU-tijd en geheugen) moet delen met de wifi- en TCP-stacks (de software die op de achtergrond draait en alle wifi- en IP-verbindingen afhandelt). Als de code te lang duurt om uit te voeren en de TCP-stacks hun werk niet laat doen, kan het programma crashen of kunnen de gegevens verloren gaan. Het is het beste om de uitvoeringstijd van de lus onder een paar honderd milliseconden te houden. Elke keer dat de hoofdloop wordt herhaald, geeft een sketch zich over aan de wifi en TCP om alle wifi- en TCP-verzoeken af te handelen. Als de lus langer duurt, moet de CPU-tijd expliciet aan de wifi/TCP-stacks worden gegeven door delay(0) of yield() op te nemen. Als dit niet gedaan wordt, zal de netwerkcommunicatie

niet werken zoals verwacht, en als het langer duurt dan 3 seconden, reset de soft WDT (Watchdog Timer) de ESP. Als de soft WDT is uitgeschakeld, reset de hardware WDT de chip na iets meer dan 8 seconden. Vanuit het perspectief van de microcontroller is 3 seconden echter een zeer lange tijd (240 miljoen klokcycli), dus tenzij er extreem zware getallen worden verwerkt, of extreem lange strings via serieel worden verzonden, zal de sketch hier niet door worden beïnvloed. Onthoud gewoon om de yield() toe te voegen in de for of while lussen die langer dan bijvoorbeeld 100ms kunnen duren.

Arduino IDE instellen

Als de Arduino IDE niet is geïnstalleerd, volg dan de link en download het installatiebestand voor het besturingssysteem van je keuze.

Download Arduino IDE

Voor Windows-gebruikers, dubbelklik op het gedownloade .exe-bestand en volg de instructies in het installatievenster.

Voor Linux-gebruikers, download een bestand met de extensie .tar.xz, dat moet worden uitgepakt. Wanneer het is uitgepakt, ga naar de uitgepakte map en open de terminal in die map. Twee .sh-scripts moeten worden uitgevoerd, de eerste genaamd arduino-linux-setup.sh en de tweede genaamd install.sh.

Om het eerste script in de terminal uit te voeren, open de terminal in de uitgepakte map en voer de volgende opdracht uit:
sh arduino-linux-setup.sh user_name
user_name
- is de naam van een superuser in het Linux-besturingssysteem. Er moet een wachtwoord voor de superuser worden ingevoerd wanneer de opdracht wordt gestart.

Wacht een paar minuten totdat het script alles heeft voltooid.

Het tweede script genaamd install.sh script moet worden gebruikt na installatie van het eerste script. Voer de volgende opdracht uit in de terminal (uitgepakte map): sh install.sh

Na de installatie van deze scripts, ga naar de All Apps, waar de Arduino IDE is geïnstalleerd.
Arduino IDE in All Apps

Bijna alle besturingssystemen worden geleverd met een vooraf geïnstalleerde teksteditor (bijvoorbeeld, Windows wordt geleverd met Notepad, Linux Ubuntu wordt geleverd met Gedit, Linux Raspbian wordt geleverd met Leafpad, enz.). Al deze teksteditors zijn prima geschikt voor het doel van het eBook.

Het volgende is om te controleren of uw pc een Arduino-board kan detecteren. Open de vers geïnstalleerde Arduino IDE en ga naar:
Tools > Board > {your board name here}

{your board name here} moet de Arduino/Genuino Uno zijn, zoals te zien is op de volgende afbeelding:
Arduino board

De poort waarop het Arduino-board is aangesloten, moet worden geselecteerd. Ga naar: Tools > Port > {port name goes here} a
nd wanneer het Arduino-board is aangesloten op de USB-poort, kan de poortnaam worden gezien in het vervolgkeuzemenu op de vorige afbeelding.

Als de Arduino IDE wordt gebruikt op Windows, zijn de poortnamen als volgt:
Arduino IDE port

Voor Linux-gebruikers, is de poortnaam bijvoorbeeld /dev/ttyUSBx, waarbij x een geheel getal tussen 0 en 9 voorstelt.

D1 Mini met Arduino IDE

Om de Arduino IDE zo in te stellen dat de D1 Mini-module kan worden geprogrammeerd via de Arduino IDE, volg je de volgende stappen.

Het eerste wat je moet doen is het USB-stuurprogramma installeren, dat hier kan worden gedownload.

Installeer vervolgens de ESP8266-core. Om deze te installeren, open de Arduino IDE en ga naar: File > Preferences en zoek het veld Additional URLs (Extra URL's).
Extra URL's veld

Kopieer vervolgens de volgende URL:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
en plak deze in het veld Additional URLs (Extra URL's).

Als er een of meer links in het veld Additional URLs (Extra URL's) staan, voeg dan een komma toe na de laatste link, plak een nieuwe link na een komma en klik op de knop OK (OK). Sluit vervolgens de Arduino IDE.
Extra URL's veld

Open Arduino IDE opnieuw en ga naar:
Tools > Board > Boards Manager

Wanneer het nieuwe venster opent, typ esp8266 in het zoekvak en installeer het board genaamd esp8266 gemaakt door ESP8266 Community, zoals te zien is op de afbeelding hieronder:
esp8266 installeren

Nu is de ESP8266-core geïnstalleerd.

De volgende stap is het selecteren van het juiste board in de Arduino IDE. Open Arduino IDE en ga naar: Tools > Board > {board name} en selecteer de eerste Generic ESP8266 Module zoals weergegeven in de volgende afbeelding:
Selecteer de ESP8266 module

Selecteer daarna de poort waarop het D1 Mini module board is aangesloten. Ga naar: Tools > Port > {port name goes here}

Als het D1 Mini module board is aangesloten op de USB-poort, zouden er enkele poortnamen moeten zijn. In dit eBook wordt de Arduino IDE gebruikt op Windows, de poortnamen zijn als volgt:
Arduino IDE-poort op Windows

Voor Linux-gebruikers is de poortnaam bijvoorbeeld /dev/ttyUSBx, waarbij "x" een specifiek geheel getal tussen 0 en 9 vertegenwoordigt.

Er is een voorbeeld van een blink-schets die bij de ESP8266 board library wordt geleverd. Om deze te openen, gaat u naar: Files > Examples > ESP8266 > Blink

void setup() {

pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN (Initialiseer de LED_BUILTIN)

}

void loop() {

digitalWrite(LED_BUILTIN, LOW); // Turn the LED on (Zet de LED aan)

// Note that LOW is the voltage level (Let op: LOW is het spanningsniveau)

// but actually the LED is on; this is because (maar de LED is eigenlijk aan; dit komt omdat)

// it is active LOW on the ESP (het actief LOW is op de ESP)

delay(1000); // Wait for a second (Wacht een seconde)

digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off (Zet de LED uit)

// by making the voltage HIGH (door de spanning HOOG te maken)

delay(2000); // Wait for two seconds (Wacht twee seconden)

}

Voor de D1 Mini module is LED_BUILTIN gelijk aan het getal 2, wat betekent dat de ingebouwde LED is aangesloten op de GPIO2 pin. Om de LED AAN te zetten, moet de GPIO2 pin in de LOW staat worden gezet, en om hem UIT te zetten, moet de GPIO2 pin in de HIGH staat worden gezet.

Voorbeeld van een Software PWM-schets

int brightness = 1; // do not set it to the zero (stel het niet in op nul)

// zero disables the PWM on a specific pin (nul schakelt de PWM uit op een specifieke pin)

uint8_t fadeAmount = 5;

void setup() {

pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {

analogWrite(LED_BUILTIN, 200); // high brightness (hoge helderheid)

delay(1000);

analogWrite(LED_BUILTIN, 500);

delay(1000);

analogWrite(LED_BUILTIN, 800);

delay(1000);

analogWrite(LED_BUILTIN, 1000); // low brightness (lage helderheid)

delay(1000);

// fading led (vervagende led)

while (1) {

analogWrite(LED_BUILTIN, brightness);

brightness = brightness + fadeAmount;

if (brightness < 0 || brightness >= 1023) {

fadeAmount = -fadeAmount;

}

delay(10);

}

}

Om PWM te gebruiken op de D1 Mini module (ESP8266), wordt dezelfde functie gebruikt als op Arduino boards: analogWrite(pin, value) waarbij pin de naam is van de GPIO pin, elke vrije GPIO pin van de D1 Mini module. De value is de duty cycle, een waarde tussen 1 en 1023.

Gebruik niet het getal nul voor value, omdat dit de PWM functie op een specifieke pin UITZET!

Hoe dichter bij de waarde nul, hoe hoger het helderheidsniveau van een LED, en hoe dichter bij de waarde 1023, hoe lager het helderheidsniveau van een LED.

Om de LED te laten vervagen, moet de while(1) lus binnen de loop() functie worden gebruikt, anders werkt het niet.

Voorbeeld van een seriële communicatie schets

void setup() {

Serial.begin(9600);

}

void loop() {

Serial.println("Hello from the D1 Mini module!") (Hallo vanaf de D1 Mini module!);

delay(1000);

}

Upload de schets naar de D1 Mini module en open de Serial Monitor (Tools > Serial Monitor) (Hulpmiddelen > Seriële Monitor). Het resultaat zou eruit moeten zien zoals op de volgende afbeelding:
Seriële monitor

Bij de ESP8266 board library worden nog veel meer schetsvoorbeelden geleverd. Het wifi-gedeelte van de D1 Mini module kan van daaruit worden getest. Het wordt niet behandeld in dit e-boek.
ESP8266 voorbeelden

Nu is het tijd om te leren en je eigen projecten te maken. U kunt dat doen met behulp van vele voorbeeldscripts en andere tutorials, die op het internet te vinden zijn.

Als u op zoek bent naar hoogwaardige producten voor Arduino en Raspberry Pi, dan is AZ-Delivery Vertriebs GmbH het juiste bedrijf om ze bij te betrekken. U krijgt tal van toepassingsvoorbeelden, volledige installatiehandleidingen, e-boeken, bibliotheken en hulp van onze technische experts.

https://az-delivery.de
Veel plezier!

Impressum
https://az-delivery.de/pages/about-us

Referenties

Download handleiding

Hier kunt u de volledige pdf-versie van de handleiding downloaden. Deze kan aanvullende veiligheidsinstructies, garantie-informatie, FCC-regels, enz. bevatten.

Download AZ-Delivery D1 Mini, ESP8266 - Handleiding computerhardware

Beschikbare talen

Inhoudsopgave