2023
HOME

Messen, Steuern und Regeln mit ESP32 und Compact RN
ESP32: Bluetooth-Interface
Ergänzung zum Buch Messen, Steuern und Regeln mit Arduino und Compact

Display mit 48x30 ZeichenDas WiFi_Kit_32 von Heltec stammt aus den Anfangstagen des ESP32. Es starb seinerzeit an einem BrownOut und lag viele Jahre ungeliebt in der Kiste. Ende 2023 gelang die Reanimation des Boards mit ESP32 und OLED, Akku-Unterstützung, einer LED sowie zwei Tastern.

An dieser Stelle soll dieses Board - wie an anderer Stelle der RP Pico W - als Bluetooth-Interface für Compact Red Needle dienen, um so zu zeigen, wie ein ESP32 als drahtloses Mess-Interface einsetzbar ist. Als Besonderheit des ESP32 ist in diesem Zusammenhang der integrierte DAC, also ein Digital-Analog-Wandler zu nennen, der mit einer Auflösung von 8 Bit konstante Gleichspannungen an seinen zwei Ausgängen (GPIO 25/26) liefern kann.

Nach der Kopplung mit dem Gerät ESP32-BT-Compact-Interface kommuniziert das Board via Bluetooth über eine seriellen Schnittstelle des PC. Auch andere ESP32 Boards mit einer entsprechenden Anzahl zugänglicher Anschlüsse sollte mit dieser Software funktionieren und insgesamt die folgenden Anschlüsse bedienen:

  • 2 Pins Analogeingänge
  • 2 x 8 Pins digitale Ein- und Ausgänge
  • 2 Pins serielle Kommunikation
  • 2 Pins Analogausgänge

Hardware Phantom-Interface und ESP32-Board

Die Mess-Software Compact Red Needle kann analoge und digitale Signale verarbeiten. Sie basiert auf einem Interface mit zwei analogen Eingängen, acht digitalen Ausgängen und acht digitalen Eingängen. Ein analoger Ausgang wird ebenfalls unterstützt.

Mit dem USB-Anschluss entsteht ein PC-Interface nach nebenstehender Skizze. Alle Ein- und Ausgänge stehen zur Verwendung bereit. Die digitalen und analogen Signale verwenden eine maximale Spannung von 3,3 Volt!


Software Arduino IDE

Mit der Arduino IDE kann ein Programmierer die IDE für den ESP32 einrichten und den sogenannten Sketch vom Arduino für diese Hardware anpassen. Diese Software wird dann einmalig zum ESP hochgeladen, um damit die PC-Software Compact Red Needle zu nutzen.

Mit dem ESP-Download-Tool lassen sich diese Schritte umgehen. Diese Software des ESP-Herstellers kann fertig programmierte Binärdateien, die als Download verfügbar sind, zum ESP32 übertragen. Dadurch entfällt Installation und Einrichtung der Arduino IDE und Programmierkenntnisse sind dadurch ebenfalls nicht erforderlich. Zum Download und Installation der fertigen Software (Sketch).

Der hier dargestellte Sketch für den ESP32 und dem Heltec Kit legt die Anschlüsse der Ein- und Ausgänge des Boards für Compact fest. Dabei finden hier die speziellen Eigenschaften des Kits Berücksichtigung, wie z. B. der Taster, der dem Digital-Eingang Bit 7 (ganz links) in Compact Red Needle entspricht. Ein Analogausgang ist mit der internen weißen LED verbunden. Alle Digitalausgänge liegen nebeneinander, rechts oberhalb der Anzeige. Die Anzeige selber wird hier nicht verwendet, um den Sketch kompatibel zu halten.

Der folgende Sketch ist eine BT-Erweiterung des USB-Seriell-Kodes, der an anderer Stelle bereits als Listing angegeben ist.


Software Arduino IDE Sketch im Quelltext für Bluetooth und USB-Serial
#include "BluetoothSerial.h"
String device_name = "ESP32-BT-Compact-Interface";
BluetoothSerial SerialBT;

#define AIN1 60
#define AIN2 58
#define DIN 211
#define DOUT 81
#define PWM 64
#define AOUT 64
//---- GPIO ----
#define PWMPIN 25
#define DAC1 26
#define DAC2 25
#define LED 25  //!

// GPIO ESP32 ON HELTEC KIT 32

//DIGITAL OUT PINS 0 - 7 CLAB
byte Douts[] = {21,22,19,23,  18,5,17,16};
//DIGITAL IN  PINS 0 - 7 CLAB
byte Dins[]  = { 38, 39, 34, 35,  32,33,27,0}; //BUTTON = 0
//ANALOG IN PINS A - B CLAB
byte Ains[]  = {A1,A0}; //37,36
//BitValues
byte Bits[]  = {1,2,4,8,16,32,64,128};

void setup()
{ Serial.begin(9600); //Special CLAB
  SerialBT.begin(device_name);
  for(int i= 0;i<2;i++)pinMode(Ains [i],INPUT);
  for(int i= 0;i<8;i++)pinMode(Dins [i],INPUT_PULLUP);
  for(int i= 0;i<8;i++)pinMode(Douts[i],OUTPUT);
}

void loop()
{ int i, val, inbyte; byte b;
  if(Serial.available()>0); //Was da?
  {inbyte=Serial.read(); //abhole
   delay(5);
   switch(inbyte)
   { case 13  : //CLAB ID nur ab Compact 1.75!
                Serial.write(3);delay(2);break; //ID
     case DIN : for(i=0,b=0;i<8;i++) //PINS to BYTE
                b+= (digitalRead(Dins[i])==HIGH?Bits[i]:0);
                Serial.write(b);break; 
     case AOUT: b=Serial.read(); //Ausgabebyte holen
                dacWrite(DAC1, b); //esp32 DAC 1  
                dacWrite(DAC2, b); //esp32 DAC 2  
                break;
     case DOUT: b=Serial.read(); //Ausgabebyte holen
                for(i=0;i<8;i++)
                digitalWrite(Douts[i],b&Bits[i]?HIGH:LOW);
                break;
     case AIN1: case 48: 
                Serial.write(analogRead(Ains[0])>>4);break;
     case AIN2: case 49:
                Serial.write(analogRead(Ains[1])>>4);break;
     default:   break;
   }
  }
  if(SerialBT)
  if(SerialBT.available()>0) //Was da?
  {inbyte=SerialBT.read(); //abholen
   delay(5);
   switch(inbyte)
   { case 13  : //CLAB ID nur ab Compact 1.75!
                SerialBT.write(3);delay(2);break; //ID
     case DIN : for(i=0,b=0;i<8;i++) //PINS to BYTE
                b+= (digitalRead(Dins[i])==HIGH?Bits[i]:0);
                SerialBT.write(b);break; 
     case AOUT: b=SerialBT.read(); //Ausgabebyte holen
                dacWrite(DAC1, b); //esp32 DAC 1  
                dacWrite(DAC2, b); //esp32 DAC 2  
                break;
     case DOUT: b=SerialBT.read(); //Ausgabebyte holen
                for(i=0;i<8;i++)
                digitalWrite(Douts[i],b&Bits[i]?HIGH:LOW);
                break;
     case AIN1: case 48: 
                SerialBT.write(analogRead(Ains[0])>>4);break;
     case AIN2: case 49:
                SerialBT.write(analogRead(Ains[1])>>4);break;
     default:   break;
  }
 }
}



Die BT-Routinen wurden jeweils angehängt und funktionieren völlig identisch. Der Sketch kann so beide Schnittstellen bedienen. Beide echten Analogausgänge liefern dieselbe Spannung, wobei ein Ausgang auch die LED (GPIO 25) in ihrer Helligkeit steuert.


																	

												

Anschlüsse und Pin-Festlegung
Ein Blick auf die Anschlussbelegungen der 36 Pins des Boards, die dem WiFi-Kit zugrunde liegen führt unter Berücksichtigung der dortigen Festlegungen zu einer möglichen Anschlussbelegung für das PC-Interface.
  • Digitale Eingänge 0 bis 7 - GELB
  • Digitale Ausgänge 0 bis 7 - BLAU
  • Analoge Eingänge A und B - HELLROT
  • Analoge Ausgänge 1 und 2 - GRÜN


Klick zur Vergrößerung.

Die Ausführungen in Messen, Steuern und Regeln mit Arduino und Compact funktionieren nun ebenfalls mit dieser drahtlosen Alternative.


												


Download und Installation der Software ESP Download Tool
Der Hersteller der ESP-Serie stellt ein eigenes Espressif Download Tool auf seiner Seite zur Verfügung. Unter dem Link Flash Download Tools lässt sich das Werkzeug herunterladen. Nach dem Entpacken des Zip-Archivs entsteht ein Verzeichnis flash_download_tool_3.9.5 mit als Inhalt unter anderem die ausführbare Datei flash_download_tool_3.9.5.exe. Nach dem Start erscheint z. B. die folgende Darstellung in der nur wenige, aber denoch wichtige Einstellungen nötig sind.

Zunächst muss die serielle Schnittstelle eingestellt werden (hier 38). Danach folgt die Einstellung der zu übertragenen Daten. Es handelt sich um die drei Binärdateien des fertig kompilierten Sketches in diesem Archiv (672 kB).

  • heltec_clabDAC_BT.ino.bin - Der Sketch für die Adresse 0x10000
  • heltec_clabDAC_BT.ino.bootloader.bin - Der Loader für die Adresse 0x1000
  • heltec_clabDAC_BT.ino.partitions.bin - Die Partitionierung für die Adresse 0x8000

Ist ein ESP32 an COM 38 angeschlossen, so ergibt sich das folgende Bild während des Hochladens der Dateien (hier die Abbildung der USB-Seriell-Variante). Nach der Beendigung kann nach einem Reset des Boards ein ESP32 als PC-Interface unter Compact Red Needle verwendet werden.

Die Schnittstelle für Compact Red Needle findet man in den Windows-Einstellungen unter Bluetooth und andere Geräte, genau an dem Ort an dem auch die Kopplung durchgefürt wird. Am rechten Bildschirmrand befinden sich Weitere Bluetooth Optionen. Darüber erreicht man die Einstellungen der COM-Anschlüsse. In diesem Fall ist COM5 die zu verwendende serielle Schnittelle, die in Compact RN verwendet werden kann.

Dazu klickt man einmal auf Seriell verbinden. Bei Erfolg meldet Compact ein bekanntes Interface an der Schnittstelle und die Hälfte der Digitaleingänge leuchtet, wie das auch schon bei der USB-Variante war. Die linke LED reagiert auf dem Taster des WiFi-Kits von Heltec. Ein weiterer Klick auf die analogen Anzeigen schaltet die 3,3 Volt-Skala an. Der analoge Aushang steuert per Schieber die weiße LED des Boards (Skala-Fehler am Analogausgang). Der Analogeingang A zeigt bei der Messung der Spannung einer AA-Batterie etwa 1,5 Volt an. Die Digitalausgänge sind zu Beginn alle ausgeschaltet, liegen also an Masse. Verbindet man eine LED mit D0 und D1, so kann diese Diode mit den Schaltern entsprechend gesteuert werden, je nach Richtung.

Mit den Programmiermöglichkeiten von Compact Red Needle ist auch ein Blinken der LED am Analogausgang auf völlig andere Art möglich.

Mittels dieser drei bin-Dateien kann ein ESP32 auf einfachste Weise in ein Bluetooth-PC-Interface verwandelt werden, welches mit Compact genauso gut zusammenarbeitet, wie ein Arduino Uno mit HC06-Modul. Bei den Ausführungen im Buch ist lediglich die unterschiedliche Betriebsspannung zu beachten, die beim Pico nur 3,3 Volt beträgt.

Das 2022/23 erschienene Messen, Steuern und Regeln mit Arduino und Compact zeigt was mit der freien Software Compact Red Needle alles möglich ist.


RP PicoW als Compact-Bluetooth-Interface
RP Pico als Compact-Interface
ESP32 als Compact-Interface
ATtiny88 als Compact-Interface
ATtiny85 Assembler 8-Byte-Blink
ATtiny85 als Compact-Interface
ATtiny und ISP-Programmer
Mehr Software

.
Startseite Bücher Software Digital RTV Musik Kontakt

Für Inhalt und weitere Verzweigung externer Links sind die Betreiber der dortigen Seiten verantwortlich - H.-J. Berndt