ESP8226 Microcontroller

ESP8226 MicrocontrollerDe ESP8226 is een zeer goedkope Wi-Fi microcontroller met een complete TCP/IP stack en een 32 bits microcontroller en word gemaakt door de Chinese fabrikant Espressif Systems. De chip kwam in 2014 in de aandacht door een klein board (ESP-01) als een goedkope Wi-Fi module die via een seriële interface en door middel van een vorm van Hayes commando’s bediend kon worden. Al snel kwam de chip onder aandacht van hackers, vooral door de lage kosten, om andere toepassingen te vinden. Voor het lage bedrag zijn de specificaties indrukwekkend: een 32-bit RISC CPU (Tensilica Xtensa LX106) met en 80 MHz klokfrequentie, 64 Kb instructie RAM, 96 KB data RAM, extern QSPI flash (512 Kb tot 4 Mb), ingebouwde IEEE 802.11 Wi-Fi stack, WEP en WPA/WPA2 authenticatie, 16 GPIO pinnen, SPI, I2C, UART en een 10-bit ADC. Er zijn een aantal leuke goedkope doe-het-zelf boards te koop met deze microcontroller en op deze pagina staat informatie over deze boards, documentatie, links en specificaties en ontwikkeltooling. Vriendelijke groet, Hein Pragt


Wemos D1 mini

Wemos D1 boardEen relatief kleine fabrikant met de naam Wemos brengt leuke nieuwe ontwikkelingen uit, ze hebben de ESP-8266 familie naar het Arduino type shields gebracht. Een van deze leuke boards om zelf mee te experimenteren is de Wemos D1 mini, een klein board voorzien van een volledige Wi-Fi en netwerk stack, een leuk aantal I/O poorten, voeding, een USB aansluiting, seriële communicatie, bootloader, Flash geheugen en een 32 bits processor met een 80 MHz klokfrequentie. Als met al bijzonder mooie specificaties voor een board dat minder dan 10 euro kost. Wanneer men al gewend is aan de standaard Arduino IDE en programmeer omgeving kan men deze prima gebruiken voor de Wemos D1 min. Er moeten wel even de juiste boarden in de boardmanager van de IDE geïnstalleerd worden maar dan werkt het bijna onmiddellijk. Er zijn al veel libraries die speciaal voor de ESP-8266 familie beschikbaar voor de Wemos D1 mini maar ik merk dat veel van de standaard libraries die voor de Arduino geschreven zijn ook prima werken op de Wemos D1 mini. Omdat I2C en SPI ook standaard werken zijn ook veel van de boards en shields die voor de Arduino gemaakt zijn aan te sluiten, let er wel op de alles wel op 3v3 moet werken, maar dit is met niveau aanpas board of een weerstand netwerkje ook wel op te lossen. Maar een standaard LCD display of een relais board zijn zonder meer zo aan te sluiten. Soms moeten even een paar I/O pinnen anders gedefinieerd worden maar met minimale aanpassingen werkt het vaak prima. Maar dan wel met 4 Mb code ruimte en 35 Kb ram en een 32 bits processor op 80 MHz wat een enorme verbetering is ren opzichte van de 16 MHz 8 bits Arduino processor met 1 a 2 Kb sram. De mogelijkheden van de Wemos D1 mini zijn dan ook heel uitgebreid, mede door de ingebouwde Wi-Fi die u er kant-en-klaar bij krijgt.

Link: PDF met instructies (Engels) voor Wemos D1 op Arduin IDE.

Wemos OLED display

Wemos D1 mini OLED display 64x48Het eerste display dat ik gebruik heb is de WeMos D1 mini OLED sshield 64x48 van 0,66inch met een I2C interface. Het shield heeft veel meer pinnen omdat het ook anders aangestuurd kan worden maar we gebruiken natuurlijk graag I2C omdat het maar twee I/O lijntjes kost. Met grootte van 0,66inch is het een behoorlijk klein display maar is het heel duidelijk af te lezen omdat het een hoog contrast heeft. Het maakt gebruik van de SSD1306 als interface chip en maakt gebruik van het I2C adres 0x3C of 0x3D wat te selecteren is door een soldeerbrug op de achterzijde van het printje. Wel erg klein dus ik waag me er niet aan en laat ze op de standaard waarde staan. De spanning is 3,3V maar de I2C pinnen zijn zonder aanpassing aan te sluiten op de 5V Arduino. Wel moet het shield zelf uit de 3v3 aansluiting van de Arduino gevoed worden. Het ding werd geleverd met losse headerpins en aangezien u toch maar 4 aansluitingen nodig heeft kunt u ook rechtstreeks de draadjes aan de print solderen. Het voor deel van dit display is dat het door de 64x48 pixel size niet zoveel geheugen van de Arduino gebruikt als schaduwgeheugen.

Link: Website van de leverancier.

Code plus vooprbeeld

Wemos D1 mini met OLED display 64x48Download: HIER mijn library voor de Wemos D1 OLED display en installeer deze via de IDE in uw Arduino omgeving. Herstart de IDE en kijk bij de voorbeelden en zie daar "oledtest64.ino" staan. De library werkt voor de combinatie Wemos D1 en de Wemos OLED display. Ik gebruik deze library ook zelf en ontwikkel het ook verder. Met deze basisfuncties kunt u zelf uitbreidingen maken in uw eigen code.

Ik hou van libraries die alleen basisfuncties bieden omdat ik meestal toch zelf dingen wil maken op mijn eigen wijze, die net niet in de library zitten of net anders waardoor ik een grote hoeveelheid code van een library meecompileer die mijn code laten groeien en waar ik niets aan heb. Ik wens u veel succes met deze code.

De code van deze libray is compact en bevat alleen een aantal basis functies:


  public:
    Ssd1306(uint8_t i2caddr,uint8_t width,uint8_t height,uint8_t orientation);
    void begin(void); 
    void oledSetPixel(int16_t x, int16_t y, uint16_t color);
    void oledDrawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
    void oledDrawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
    void oledFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
    void oledDrawCircle(int16_t x0, int16_t y0, int16_t r,uint16_t color);
    void oledDrawChar(int16_t x, int16_t y, unsigned char c, uint16_t color);
    void oledPrintLine(int16_t x, int16_t y, unsigned char *c, uint16_t color);
    void oledInvert(void); 
    void oledNormal(void);
    void oledCopyDisplayBuffer(void);
    void oledClearDisplayBuffer(uint8_t value);



De displays kunnen eigenlijk maar weinig tekst weergeven, bij een font van 5x7 is dit de verdeling op het scherm en een resulutie van 64 x 48 pixels, geeft dit tien kolommen en 5 rijen, u kunt dus effectief 50 tekens kwijt op het scherm.

rij en kolomn verdeling oled

Sourcecode Wi-Fi led aansturing

Dit stukje voorbeeld code geeft duidelijk de enorme kracht van de Wemos D1 mini weer. Het voorbeeld maakt gebruik van mijn OLED library en verder alleen maar gebruik van standaard meegeleverde / ingebouwde onderdelen. Door middel van dit stukje code kunt u door middel van uw mobiele telefoon via de webbrowser een output pin van de Wemos D1 mini module (lees aangesloten relais) aan- en uitschakelen. In dit voorbeeld stuur ik de ingebouwde led aan. Aangezien de completer Wi-Fi stack en netwerk stack in de module zitten hoever we hiervoor geen eigen code te schrijven. Als eerste maakt u op uw telefoon een mobiele hotspot aan en geeft deze een naam en een wachtwoord, deze naam en wachtwoord vult u in bij const char* ssid en const char* password waarna u de code kunt compileren en uploaden in de Wemos module. Na het aanzetten van de module zal deze proberen contact te maken met uw mobiele hotspot en daarna zijn IP adres weergeven op het scherm. U hoef dan alleen maar dit adres in te vullen in de adresbalk van de browser op uw mobiele telefoon en de Wemos module zal zich nu als een HTTP server gedragen en uw een pagina sturen met daarop de status van de led. Daarna kunt u op een van de links klikken of zelf door middel van een URL parameter de led op de Wemos module aan en uitschakelen. Dit is slechts een klein voorbeeld dat voeding voor vele ideeën kan zijn, maar dat laat ik aan uw fantasie over. Vriendelijke groet, Hein Pragt.

// -----------------------------------------------
// Voorbeeld code WI-FI led aansturing
// -----------------------------------------------
#include 
#include 
#include 
 
const char* ssid = "HotspotVanUwTelefoon";
const char* password = "WachtwoordHotspotTelefoon";
 
int ledPin = BUILTIN_LED;
WiFiServer server(80);
 
Ssd1306 ssd1306(0x3C,64,48,0);

void setup() 
{
String ip;
char buffer[20];

  Serial.begin(9600);
  delay(10);  

  ssd1306.begin(); 
  // Clear the buffer.
  ssd1306.oledClearDisplayBuffer(0);
  ssd1306.oledCopyDisplayBuffer();

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
 
  // Connect to WiFi network
  ssd1306.oledPrintLine(0,0,"Connecting",1);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  ssd1306.oledPrintLine(0,10,(char *)ssid,1); 
  ssd1306.oledCopyDisplayBuffer();
  
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  ssd1306.oledClearDisplayBuffer(0);
  Serial.println("WiFi connected");
  ssd1306.oledPrintLine(0,0,"Connected ",1);
  ssd1306.oledCopyDisplayBuffer();
  
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL : ");
  ssd1306.oledPrintLine(0,10,"MY IP:",1);
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  ip = WiFi.localIP().toString();
  ip.toCharArray(buffer, 20);
  ssd1306.oledPrintLine(0,20,buffer,1);
  Serial.println("/");
  ssd1306.oledCopyDisplayBuffer();
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
  int value = HIGH;
  if (request.indexOf("/LED=ON") != -1) {
    digitalWrite(ledPin, LOW);
    value = LOW;
  } 
  if (request.indexOf("/LED=OFF") != -1){
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
 
 
 
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("");
  client.println("");
 
  client.print("Led pin is now: ");
 
  if(value == LOW) {
    client.print("On");  
  } else {
    client.print("Off");
  }
  client.println("

"); client.println("Click here turn the LED on pin 5 ON
"); client.println("Click here turn the LED on pin 5 OFF
"); client.println(""); delay(1); Serial.println("Client disconnected"); Serial.println(""); }

ESP8226 download en links

Hier staan een aantal externe links naar pagina's en documenten die handig en nuttig zijn wanneer u begint met de ESP8226.

Download hier de Arduino IDE

De ESP8266 Datasheet (Engels)

Overzicht Wemos D1 projecten.

 

Nuttige boeken

boek boek bestellen Arduino projecten voor gevorderden Twee zaken hebben in belangrijke mate bijgedragen aan het grote succes van het Arduinoplatform. De eerste is de complete, gebruiksklare processorprint die de kennismaking met dehardware aanzienlijk vergemakkelijkt. En de tweede is de gratis verkrijgbare programmeerinterface, die zonder ingewikkelde installatieprocedures meteen gebruikt kan worden. Eenvoudige projecten voor beginners garanderen snelle resultaten. Het is niet nodig eerst ingewikkelde parameters (processortype of interface-instellingen) te selecteren -- de eerste voorbeeldprogramma's kunnen al na enkele minuten in de Arduino worden geladen en uitgeprobeerd. De Arduino-gebruiker wordt geholpen door een groot aantal software-bibliotheken -- maar deze nog dagelijks groeiende schat aan libraries vormt juist voor de beginner een luxe-probleem: na de eerste eenvoudige voorbeelden is het niet altijd even duidelijk hoe het nu verder moet. Bij de in het internet circulerende projecten ontbreekt het in veel gevallen aan gedetailleerd commentaar en uitleg. Er is geen duidelijk herkenbare leidraad, en eigenlijk is dat ook niet zo vreemd omdat de toepassingen door verschillende mensen voor verschillende doeleinden zijn ontwikkeld. Dat is waar dit boek te hulp komt. Projecten worden op een systematische manier gepresenteerd, waarbij elk project een ander onderwerp belicht. De aanpak is praktijkgericht, maar de noodzakelijke theoretische achtergrond wordt daarbij niet uit het oog verloren. Belangrijke onderwerpen zoals A/D-omzetting, timers en interrupts worden steeds in praktische projecten 'ingebed'. In het boek komen zaken als looplicht-effecten, praktisch bruikbare voltmeters, nauwkeurige digitale thermometers, allerlei soorten klokken, reactietesters en zelfs een muisgestuurde robotkraan aan de orde. En al lezende en doende krijgt de lezer een gedegen inzicht in de achterliggende controllertechnieken.



Reacties op het onderwerp: Arduino


32 - Techniek »  -  Arduino »
2018-07-28 11:52:00
Hier kunt u vragen stellen en antwoorden geven die betrekking hebben op de Arduino boards en Atmel processoren. Reacties zullen pas na goedkeuring geplaatst worden, dit kan enige tijd duren.
Reactie van een bezoeker van de site!
Vragen en antwoorden m.b.t. de Arduino boards en Atmel processoren.
Er zijn: 1 reacties!
2018-07-28 11:52:00
Een tijdje terug heb ik platformio ontdekt. Het is een methode waarmee je vanaf de command-line een Arduino project kan bouwen. Alle instellingen (welk bordje, welke seriele poort snelheid, etc), maar ook alle libraries (+versies) die je gebruikt staan overzichtelijk in een tekstbestandje. Je hoeft dus niet meer 3x na te denken als je van project wisselt over wat voor instellingen e.d. je ook al had gebruikt en welke versie van welke library daarvoor nodig was. Libraries worden automatisch gedownload en daarna gecached op je eigen schijf.

Ik gebruik dit nu zelf voor al mijn Arduino projectjes en de Arduino IDE gebruik ik nog maar zelden. Ik gebruik Linux en daarop werkt dit allemaal heel makkelijk. Ik heb het ook wel aan de praat gehad op windows, dat was iets meer moeite, bijv. eerst python handmatig installeren, maar uiteindelijk werkte het daar ook.
Reactie van een bezoeker van de site!


Last update: 08-01-2018
 Binnen dit thema



 Meer thema's


 Lees hier de privacyverklaring van deze site.

Disclaimer.

Hoewel de heer Hein Pragt de informatie beschikbaar op deze pagina met grote zorg samenstelt, sluit de heer Pragt alle aansprakelijkheid uit met betrekking tot de informatie die, in welke vorm dan ook, via zijn site wordt aangeboden. Het opnemen van een afbeelding of verwijzing is uitsluitend bedoeld als een mogelijke bron van informatie voor de bezoeker en mag op generlei wijze als instemming, goedkeuring of afkeuring worden uitgelegd, noch kunnen daaraan rechten worden ontleend. Op de artikelen van de heer Pragt op deze Internetsite rust auteursrecht. Overname van informatie (tekst en afbeeldingen) is uitsluitend toegestaan na voorafgaande schriftelijke toestemming van de rechthebbende. Voor vragen over copyright en het gebruik van de informatie op deze site kunt u contact opnemen met: (email: mail@heinpragt.com). Dit is mijn