WEMOS D1 Esp-Wroom-02 met Arduino IDE
|
De “WEMOS D1 Esp-Wroom-02” van VNG Systems is een microcontroller-ontwikkelbord gebaseerd op de ESP8266 WiFi chip. Dit bord heeft daarnaast ook een OLED scherm, laadcircuit voor een 18650 batterij en een joystick ingebouwd. Dit maakt het bord een goede keuze voor mobiele applicaties. En zoals alle andere borden gebaseerd op de ESP8266 kan deze eenvoudig geprogrammeerd worden met de vertrouwde Arduino IDE.


WEMOS D1 Esp-Wroom-02 eigenschappen
Laten we eerst het bord zelf eens nader bekijken. Het zwarte ontwikkelbord komt met een 10 pin header die je er op kunt solderen, indien nodig. De achterkant van het bord heeft een batterijhouden voor een 18650 batterij met platte kop. Andere eigenschappen van het bord zijn:
- Afmetingen: 102x30x20mm
- Voltage input range: 5V-12V
- Micro USB aansluiting
- Laadstroom: 500 mA
- Batterrij laad- en beschermingscircuit
Ik kwam er achter dat de informatie die je over dit bord op internet kunt vinden meestal onjuist is. Bijvoorbeeld de naam impliceert dat het bord uitgerust is met de ESP-WROOM-02 WiFi chip. In plaats daarvan heeft het een ESP-12E/F module. Bovendien vermelden de meeste websites de verkeerde OLED-libraries en GPIO pinouts. Dus in dit artikel zal ik mijn eigen ervaringen en bevindingen beschrijven.
Inputs en outputs
Op het bord zijn de volgende inputs en outputs beschikbaar:
- 1 Analoge input AD (A0)
- 5 Digitale inputs/outputs met interrupt/PWM/I2C/one-wire ondersteuning: D3 (GPIO0), D4 (GPIO2), D8 (GPIO15), D9 (GPIO3), D10 (GPIO1)
Ingebouwde LEDs
De beschrijving stelt dat het bord één programmeerbare LED heeft, op pin D0. Echter kwam ik op het bord twee programmeerbare LEDs tegen. Eén is de blauwe LED op de ESP8266 module, de andere is een additionele groene LED op het ontwikkelbord zelf.
- Programmeerbare blauwe LED op GPIO2 (LED_BUILTIN)
- Programmeerbare groene LED op GPIO16
OLED scherm
Het ingebouwde OLED-scherm heeft de volgende specificaties:
- Controller: SSD1306
- Resolutie: 128 x 64 pixels, grootte: 0.96 Inch, kleur: wit
- I2C (GPIO5: SDA; GPIO4: SCL)
- Adres: 0x3C
Het wordt ondersteund door de ThingPulse ESP8266 OLED SSD1306 library.
Joystick
Het bord heeft een joystick-achtige knop die de volgende 5 functies heeft::
- Omhoog (GPIO13), omlaag (GPIO12)
- Links (RESET) , rechts (GPIO0)
- Ingedrukt (GPIO14)
Helaas is het contact voor de richting naar links van de knop hardwarematig met de RESET pin van de ESP8266 verbonden, dus dit kan niet veranderd worden zonder wijzigingen aan het bord zelf aan te brengen.
GPIO samenvatting
Samenvattend, nader onderzoek wees uit dat de GPIOs van de ESP als volgt in gebruik zijn:
GPIO | Functie |
0 | D3 / Knop rechts |
1 | D10 |
2 | D4 / Blauwe LED (LED_BUILTIN) |
3 | D9 |
4 | OLED SCL |
5 | OLED SDA |
12 | Knop omlaag |
13 | Knop omhoog |
14 | Knop ingedrukt |
15 | D8 |
16 | Groene LED |
A0 | AD (ADC) |
18650 Batterijhouder
De batterijhouder ondersteund een enkele 18650 batterij met platte kop. Het laad- en beschermingscircuit beschermt de batterij tegen over-laden en over-ontladen. Let op: het circuit beschermt niet tegen onjuiste polariteit. Zorg er dus voor dat je de batterij er niet in de verkeerde richting in de houder stopt, want dan zal het bord beschadigen. De plus en min zijn op het bord aangegeven met een wit-gedrukte + en -. Het laadcircuit heeft twee LEDs om de status weer te geven. De groene LED geeft het laden van de batterij aan en de rode LED (“standby”) gaat branden als er wel spanning is maar de batterij niet opgeladen wordt. Wanneer je een sketch naar de ESP-Wroom-02 wilt gaan uploaden, dat moet je eerst de batterij verwijderen en de aan/uit-schakelaar op “ON” zetten.
De Esp-Wroom-02 gebruiken met de Arduino IDE
Ten eerste moet je natuurlijk de Arduino IDE op je computer geïnstalleerd hebben. Gebruikers van Windows 10 kunnen het artikel “De Arduino IDE installeren op Windows 10” lezen om te lezen hoe dat te doen. Linux-gebruikers kunnen het artikel “Installeer of upgrade nieuwste Arduino IDE op Linux” raadplegen.
Ten tweede moet de “Arduino core for ESP8266 WiFi chip” geïnstalleerd zijn in de Arduino IDE. Zie het hoofdstuk “De ESP8266 Arduino core installeren” in het artikel “ESP8266 NodeMcu met Arduino IDE op Linux“. De procedure is voor Linux en Windows hetzelfde.
Ten derde moet je een geschikt ESP8266-gebaseerd bord selecteren in de Arduino IDE. Voor mij werkte de optie “WeMos D1 R1” prima. Zie onderstaande afbeelding voor de instellingen.


Ten vierde moet je een library installeren om het OLED-scherm aan te kunnen sturen. Je kunt de ThingPulse ESP8266 OLED SSD1306 library direct downloaden van GitHub of via de bibliotheekbeheerder van de Arduino IDE installeren. Zie onderstaande afbeelding.


Als laatste moet je op dezelfde manier de Brzo I2C Library (https://github.com/pasko-zh/brzo_i2c) installeren: ga naar Schets > Bibliotheek gebruiken > Bibliotheken beheren > Zoeken naar “Brzo I2C” en kies “installeren”.
Uiteindelijk kun je je Esp-Wroom-02 bord testen met de onderstaande demo-sketch. Het OLED-scherm geeft de status van de joysick aan. De LEDs worden aan- of uitgeschakeld als de knop ingedrukt wordt. Het display geeft ook de status van de analoge input aan, de waarde zal veranderen als je die met je vinger aanraakt.
/** GPIO 0 - Button right / D3 GPIO 1 - D10 GPIO 2 - LED blue (LED_BUILTIN) / D4 GPIO 3 - D9 GPIO 4 - OLED SCL GPIO 5 - OLED SDA GPIO 12 - Button down GPIO 13 - Button up GPIO 14 - Button push GPIO 15 - D8 GPIO 16 - LED green GPIO A0 - ADC **/ #include "SSD1306Brzo.h" // Include OLED Library SSD1306Brzo display(0x3c, 5, 4); // Initialize OLED display int blueLed = LED_BUILTIN; // Blue LED is on GPIO 2 (LED_BUILTIN) int greenLed = 16; // Green LED is on GPIO 16 int analogPin = A0; // Analog input is A0 int analogValue = 0; volatile byte state = LOW; String button = "Waiting..."; void setup() { display.init(); // Initialise the display pinMode(blueLed, OUTPUT); // Initialize digital pin LED_BUILTIN as an output. pinMode(greenLed, OUTPUT); // initialize digital pin 16 as an output. pinMode(0, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(0), interrupt0, HIGH); // Right pinMode(12, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(12), interrupt12, HIGH); // Down pinMode(13, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(13), interrupt13, HIGH); // Up pinMode(14, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(14), interrupt14, HIGH); // Push } void drawText() { // Fuction to draw the text display.setTextAlignment(TEXT_ALIGN_LEFT); display.setFont(ArialMT_Plain_16); display.drawString(0, 0, "Button:"); display.setFont(ArialMT_Plain_24); display.drawString(0, 16, button); // Print button press display.setFont(ArialMT_Plain_16); analogValue = analogRead(analogPin); display.drawString(0, 48, "ADC: " + String(analogValue)); // Print value of analog input } void interrupt0() // Right { button = "Right"; blink(); } void interrupt12() // Down { button = "Down"; blink(); } void interrupt13() // Up { button = "Up"; blink(); } void interrupt14() // Push { button = "Push"; blink(); } void blink() { state = !state; // Reverse LED state } void loop() { display.clear(); // Clear OLED display drawText(); // Draw the text display.display(); // Write the buffer to the display digitalWrite(blueLed, state); // Turn the blue LED on/off digitalWrite(greenLed, !state); // Turn the green LED on/off }