Main Menu

Login Form

ESP8266

Eine neue Generation von Chips die sogenannten 5.-$ Computer entwickelt und hergestellt von AI-Thinker.com in China. Sie lassen sich voll im W-Lan integrieren.
Die Chips werden mit verschiedenen Firmwareversionen geliefert. Eine Firmware funktioniert mit dem AT Befehlssatz und lässt sich von einem Arduino bzw Atmega yController steuern.
Eleganter ist aber wenn man sie direkt mit der Arduino IDE programmiert.

 

Hinweis die Chips haben 3,3V Betriebspannung Wemos und andere liefern komplette Systeme mit Spannungswandler so das man dann auch mit 5V arbeiten kann.
Da Logigpegel ist aber auch 3,3V da muss man schon mit Widerständen Spannungsteile bauen um an die 5V anzupassen.

Nicht verwirren lassen, der Bootloader und die Firmware haben meistens eine unterschiedlich Baudrate.

Wemos D1 Mini

Der kleine von Wemos

Die Firma Wemos baut mit den ESP8266 von AI-Thinker kleine Boards mit USB Aschluss. Als Wandler auf Tx - Rx wird ein CH340 verwendet. Zusätzlich ist ein Spannungsregler verbaut so das sich das Board auch mit 5V betreiben lässt.

Man braucht nicht unbedingt WEMOS zu kaufen. In China werden die Dinger nachgebaut. Es steht dann allerdings auch nicht Wemos drauf. Man darf hier keinesfalls von billiger Chinaware sprechen. Denn wer hats erfunden ? Die Chinesen waren es. Der Chip von AI-Thinker ist dieEntwicklung von jungen chinesischen Doktoranten.
Ich selbst war zweimal in China und musste feststellen das es sich hier doch um ein Volk von nicht nur fleissigen sondern auch recht patenten Menschen handelt, die uns in einigen Dingen was vormachen können. 2050 wollen sie ja führende Welt und Wirtschaftsmacht sein. Das schaffen sie auch.

Wemos D1 Mini

Die Boards werden mit verschiedenen Buchsen und Steckern geliefert und lassen sich so zu einem Stecksystem ausbauen so wie man es vom Arduino gewohnt ist.

 

 

 

 

 

 

 

 

 

 

 

Wetter im Internet

Ihre Wetterdaten im Internet

ESP8266 01 mit BMP280Schaltplan ESP8266 mit BMP280ams11173.3

Naja erst mal nur Temperatur und Luftdruck, aber es wird gezeigt wie man so was macht.
Später mal ersetze ich den BMP280 durch einen BME280 der kann auch noch Luftfeuchtigkeit. Auch eine CR2032 Knopfzelle ist etwas zu schlapp deswegen habe ich schnell noch einen Anschluss für ein Netzteil drangebastelt.

Hier der Sketch:

 

Der ESP8266 kann auf jedem Pin I2C. Ohne Angaben wird GPIO4 und 5 zu SCL und SDA.
Dieser hat nur GPIO0  und GPIO2. Also muss man ihm dieser Information mit Wire,begin(0,2) mitteilen.
Das steht hier nicht im Sketch sondern in der Adafruit_BMP280.cpp und muss vorm kompilieren geändert werden.
Dieser Sensor hat von Haus aus auch noch Adresse (0x076)
Das wird durch ändern von !bme.begin() in !bme.begin(0x76) erreicht.

/*
 *  Beispiel für eine Temperatur und Luftdruckmessung
 *  mit dem ESP8266 und Darstellung als HTML Seite
 *  
 */

#include <ESP8266WiFi.h>
// SCL und SDA sind beim 8266 auf GPIO5 und GPIO4
// Der ESP8266 01 hat diese Pins nicht
// Man kann mit Wire.begin(0,2) die beiden Pins des ESP01 zuweisen
// Geht hier aber nicht. Wire.begin steht in der Adafruit_BMP280.cpp
// Bitte da während des kompilierens einändern.
#include <Wire.h>

#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bme; // I2C

const char* ssid = "**IHRE SSID **";
const char* password = "** IHR WLAN PASSWORT **";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(30);
Serial.println(F("BMP280 test"));
 
  if (!bme.begin()) {  
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);}
Serial.println(F("BMP280 sensor OK !"));
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());

   
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
 
  client.flush();
 
 
  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<h1>Wetter in Suttorf</h1><br><br> ";
 

  // Send the response to the client

  int pressure=(bme.readPressure());
  client.print(s);
  client.print ("Temperatur :");
  client.print(bme.readTemperature());
  client.print (" C<br>");
  client.print ("Luftdruck &nbsp;&nbsp;    :");
  client.print(pressure/100);
  client.print (" HPa<br>");
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected
  // when the function returns and 'client' object is detroyed
}

Das Programm meldet den ESP mit SSID und Passowdrt im Wlan an. Blaues Led flackert kurz.
Eine HTML Anfrage liefer dann Text und Daten aus dem Sketch.
Wenn am Router noch Portweiterleitung eingerichtet ist, ist der ESP auch übers Internet erreichbar. Sollte wie in in den meisten Haushalten üblich nur eine Dynamisch IP vorhanden sein, muss man sich an die entsprechenden IP Dienste wenden.

Links mitte zeigt nochmal den Schaltplan und falls man keine 3,3Volt zur Hand hat nochmal schnell einen AMS117 SOT223 mit Pinbelegung. Es empfielt sich noch einen 100nf irgenwo zwischen die 3,3V zu packen.
Knopfzellen (CR2032) sind zu schwach !

 

Die Kleinen

Programmierboard für die kleinen

Es handelt sich hier einmal um den ESP8266-12 und zwar nackig. Das Raster der Anschlüsse ist kleiner als 1/10 Zoll. Passt also nicht auf Lochraster. Ich habe desöfteren Anleitungen gesehen, wo man einfach Dähte direkt angelötet hat. Ich verwende ein Adapterboard.
Der andere ist ein ESP8266-01. Sehr preiswert und grade für Lötunerfahrene besser handelbar. Er hat allerdings nur zwei Ausgänge. Das reicht meistens auch für die kleinen Projekte.
Auch die kleinen lassen sich mit der Arduino IDE programmieren. OTA Flash funktioniert ab Arduino Version 1.6.7 möglich.

 

ESP8266-12 Testbord 

Hier ist mein Programmierboard. Den ESP habe ich auf einer Adapterplatine verlötet. Kann man in meinem Ebay-Shop kaufen.
Die hinteren Anschlüsse für SPI lassen sich nicht anlöten. Alle anderen GPIO's

sind vorhanden.

Falls der USB-Seriell Wandler sich auf 3,3V jumpern lässt, sollte man diese nicht verwenden
(Zu schwach). Ich habe einen SMD Spannungwander auf der Rückseite der Platine.

ESP12 Pinbelegung 

Hier ist die Pinbelegung.  Genau wie hier werden die Pins in der Arduino IDE angesprochen. PWM geht auf allen Anschlüssen.

Soweit ich bisher rausgefunden habe lassen sich auch 1Wire und I2C jedem Pin zuweisen.
Für Analog scheint nur ein Pin dazu sein. hab ich aber noch nicht getestet.

 ESP01Testboard

Hier mein Progboard mit dem ESP 01. Die Anschlüsse habe ich zum ESP12 parallel geschaltet. Die beiden Wiederstände sind für die Korrektur des Pegels am RX. Der andere oben hat 10k und zieht den Reset hoch.

Die beiden Taster liegen an Ground unf führen zum Reset und zum GPIO0

Schaltbild folgt.

 esp01Steckeroben Hier der Stecker Ansicht von oben.  +VSS ist oben rechts und GND unten links.
   

OTA Flasch

OTA Flasch

Mit der neuen Arduino IDE ist auch das Flashen per Wlan möglich.

Hier eine kurze Beschreibung mit genügend Links fürs Detail.


Nochmal kurz.

  1. Auf Arduino IDE Version 1.6.7 updaten oder installieren.
  2. Phyaton 2.7 für Windows installieren. Bei der Installation Path hinzufügen aktivieren.
  3. Aus den Beispielen ArduinoOTA  BasicOTA über die Com hochladen.
  4. IDE neu starten. Dort wo die serielle Com steht kann man jetzt NetztwerkIP zuweisen.

Sollte jetzt funktionieren.

Ich war etwas verwirrt weil beim Netzwerkupload die BasicOTA überschrieben wurde. Lesen macht schlau, das ist richtig.
Der Code den man flashen möchte muss in die BasicOTA irgendwie zwischen gepackt werden. Dann kann man immer wieder.



Hier ein Beisiel für OTA: In der OTA Routine ist das eigenliche Programm das Led 2, kurz, lang blinken lässt untergebracht.

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "Deine_SSID";
const char* password = "Dein_Passwort";
const char* host = "OTA-LEDS";

int led = 2;
#define N_DIMMERS 3
int dimmer_pin[] = {14, 5, 15};

void setup() {
   Serial.begin(115200);

   /* switch on led */
   pinMode(led, OUTPUT);
   digitalWrite(led, LOW);

   Serial.println("Booting");
   WiFi.mode(WIFI_STA);

   WiFi.begin(ssid, password);

   while (WiFi.waitForConnectResult() != WL_CONNECTED){
     WiFi.begin(ssid, password);
     Serial.println("Retrying connection...");
  }
 

 

  ArduinoOTA.setHostname(host);
 

   ArduinoOTA.onError([](ota_error_t error) { ESP.restart(); });

   /* setup the OTA server */
   ArduinoOTA.begin();
   Serial.println("Ready");

}

void loop() {
  ArduinoOTA.handle();
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(100);
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(500);
}