Das zehnte Türchen

Heute gibt es wieder einen Mikrocontroller und zwar den ESP32. Auch der im Dreierpack. Der ESP32 ist der große Bruder vom ESP8266. Er hat eine Dualcore CPU und 520 kByte RAM. Er hat wesentlich mehr I/O Pins, die fast alle beliebige Funktionen übernehmen können.  

Natürlich hat der ESP32, wie sein kleiner Bruder, eine vollständige WLAN Implementierung. Ein weiteres Highlight des ESP32 ist seine Bluetooth Fähigkeit (Classic und BLE). Im heutigen Projekt wollen wir uns daher ansehen, wie man über Bluetooth von einem Smartphone mit dem ESP32 kommunizieren kann.

Das DevKit C Breakout Board hat neben dem ESP32 Modul mit 4Mbyte Flash, einen CP2102 seriell zu USB Konverter. Ein 3.3V Spannungsregler sorgt für die Versorgung der MCU. Auch hier gilt wie beim ESP8266, die Spannung an den Eingängen darf die Versorgungsspannung nicht überschreiten.


Damit wir das Ergebnis unserer Bluetooth Kommunikation testen können, brauchen wir zusätzlich eine LED, einen Vorwiderstand mit 220 Ohm und einen Sensor, der eine analoge Ausgangsspannung liefert. Zum Beispiel ein lichtempfindlicher Widerstand.


Für das Smartphone brauchen wir eine App, die ein serielles Bluetooth Terminal realisiert. Zum Beispiel „Serial Bluetooth Terminal“, das für Android gratis im Playstore zu finden ist. Für Apple gibt es auch verschiedene ähnliche Apps, die ich aber mangels geeigneter Hardware nicht testen konnte.


Die Anode der Leuchtdiode wird über den 220 Ohm Vorwiderstand mit dem 3.3V Anschluss des Boards verbunden. Die Kathode verbinden wir direkt mit dem Anschluss GPIO14.  Für den lichtempfindlichen Widerstand bilden wir einen Spannungsteiler mit einem 10 kOhm Widerstand zwischen 3.3 V und GND. Die Teilspannung führen wir an den Analogeingang GPIO35. Die Spannung wird mit zunehmender Helligkeit abnehmen, da dann der Widerstandswert des lichtempfindlichen Widerstands geringer wird.

Das Programm wartet auf Daten von Bluetooth. Beginnt eine Nachricht mit B, so wird danach die Dauer der Pause fürs Blinken in ms erwartet. Beginnt eine Nachricht mit R, so wird der Messwert des Analogeingangs über Bluetooth gesendet.

Ehe wir den Sketch in der Arduino IDE hochladen, müssen wir, falls noch nicht geschehen, die Unterstützung für ESP32 Boards installieren. In der Arduino IDE gehen wir über das Menü Datei auf Voreinstellungen oder einfach mit „Strg+;“.

Im Formular klicken wir beim Punkt „Zusätzliche Boardverwalter-URLs“ auf das Symbol rechts neben dem Eingabefeld. Hier können wir nun die URL für den ESP32 Boardverwalter eingeben:

https://dl.espressif.com/dl/package_esp32_index.json


Nachdem Voreinstellungen gespeichert wurden, rufen wir über das Menü Werkzeuge->Board:->Boardverwalter den Boardverwalter auf. Als Suchbegriff geben wir „esp32“ ein. Wir erhalten folgenden Eintrag, den wir installieren.

  

Nun können wir im Menü Werkzeuge->Board:->ESP32 Arduino ein Board auswählen. Wir verwenden ESP32 Dev Module.

  

Wenn das ESP32 Paket installiert ist, haben wir alles, was wir brauchen, da die „BluetoothSerial“ Bibliothek im ESP32 Paket enthalten ist. Wir können also den Sketch sofort kompilieren.

Download Sketch

 

#include "BluetoothSerial.h" //Serielles Bluetooth-Interface

#define LED 14     //GPIO für die LED
#define SENSOR 35  //GPIO für den Analogeingang

//Eine Instanz für das Bluetooth Interface anlegen
BluetoothSerial SerialBT;

uint32_t last;  //Zeitstempel für das Blinken
boolean stat;   //Aktueller Zustand der LED
uint16_t tim;   //Dauer für das Blinken

void setup() {
  Serial.begin(115200);    //Serielle Schnittstelle starten
  pinMode(LED,OUTPUT);     //Pin für die LED auf Output setzen
  last = millis();         //aktuelle Zeit merken
  stat = false;            //aktueller Zustand LED aus
  tim = 1000;              //Blinkdauer auf 1s 
  digitalWrite(LED,!stat); //LED auf aktuellen Zustand setzen
                           //! da LED bei LOW leuchtet  
  SerialBT.begin("ESP32test"); //Bluetooth Name des ESP32
  Serial.println("Der ESP32 ist bereit. Verbinde dich nun über Bluetooth.");
}

void loop() {
  int msg;
  uint8_t i;
  char cmd;
  char val[20];
  uint16_t vali;
  if (Serial.available()) {   //Daten vom seriellen Monitor werden an das Smartphone gesendet
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {  //Daten von Bluetooth 
    msg = SerialBT.read();     //erstes Zeichen lesen
    i=0;
    if (msg >= 0) cmd = msg;   //war das Zeichen OK, wird es als Kommando gespeichert
    //Zeichen für Zeichen lesen solange welche vorhanden sind oder bis der
    //Buffer voll ist
    while ((msg >= 0) && (i<20)) {         
      msg = SerialBT.read();
      if (i<20) val[i] = msg;
      i++;
    }
    //Wert im Buffer in eine Zahl umwandeln
    vali = atoi(val);
    //Je nach Kommando
    switch (cmd) {
      //B die Blinkdauer ändern
      case 'B': tim = vali; break;  
      //R einen Wert vom Analogeingang lesen und an das
      //Smartphone senden
      case 'R': vali = analogRead(SENSOR);
                Serial.println(vali);
                //gelesenen Wert in Zeichenkette umwandeln
                sprintf(val,"%i",vali);
                i=0;
                //und Zeichen für Zeichen senden
                while ((i<20) && (val[i]!=0)) {
                  SerialBT.write(val[i]);
                  i++;
                }
                //Zum Abschluss CR und LF senden
                SerialBT.write(13);
                SerialBT.write(10);
                break;
    }
  }
  //Wenn die Blinkzeit abgelaufen ist, LED Zustand umkehren
  if ((millis()-last) > tim) {
    last=millis(); //Startzeit merken
    stat = !stat;
    digitalWrite(LED,!stat);
  }
  delay(25);
}

Nun brauchen wir noch die Smartphone App. Diese kann einfach vom Playstore heruntergeladen und installiert werden. In der Bluetooth Einstellung am Smartphone müssen wir unser neues Gerät koppeln. Das Gerät heißt ESP32test und ist in der Liste der selten verwendeten Geräte zu finden. Das Koppeln sollte einfach möglich sein.

Nun starten wir die Bluetooth Terminal App. Im Menüpunkt Devices wählen wir unser Gerät aus. Nun können wir eine Verbindung herstellen. Dazu klicken wir auf das Symbol mit den zwei getrennten Steckern oben rechts. Die Verbindungsherstellung wir im Terminalfenster in gelber Schrift protokolliert.

Wir geben den Befehl „B100“ ein und senden ihn ab, um die LED mit 100ms blinken zu lassen. Dann geben wir „R“ als Befehl ein und der ESP32 sollte, nachdem der Befehl gesendet wurde, mit einem Messwert antworten.


Das Programm stellt nur ein Beispiel dar, wie man Bluetooth mit dem ESP32 benutzen kann. Jetzt bist Du gefragt!

 


 

Esp-32Specials

1 Kommentar

Markus Walsleben

Markus Walsleben

Daich selbst einen solchen genutzten ESP32 DevKit C nutze, kann ich sagen, dass ich das hier gezeigte Pinout deutlich übersichtlicher und verständlicher finde als das Stand Heute noch beim Produkt verlinkte Pinout.
Danke dafür!

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi