<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Entfernungsmessung &#8211; SmartHomeNG | smarthome knx homematic mqtt hue 1wire home automation</title>
	<atom:link href="https://www.smarthomeng.de/tag/entfernungsmessung/feed" rel="self" type="application/rss+xml" />
	<link>https://www.smarthomeng.de</link>
	<description>Die Device Integrations-Plattform für Dein Smart Home</description>
	<lastBuildDate>Sat, 19 May 2018 18:03:19 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.smarthomeng.de/wp-content/uploads/global/logo_small_152x152-150x150.png</url>
	<title>Entfernungsmessung &#8211; SmartHomeNG | smarthome knx homematic mqtt hue 1wire home automation</title>
	<link>https://www.smarthomeng.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Entfernungsmessung auf Basis eines ESP32 und SmartHomeNG</title>
		<link>https://www.smarthomeng.de/entfernungsmessung-auf-basis-eines-esp32-und-smarthomeng</link>
					<comments>https://www.smarthomeng.de/entfernungsmessung-auf-basis-eines-esp32-und-smarthomeng#comments</comments>
		
		<dc:creator><![CDATA[Marc René Frieß]]></dc:creator>
		<pubDate>Tue, 03 Apr 2018 17:01:26 +0000</pubDate>
				<category><![CDATA[Beispiel-Implementierungen]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Entfernungsmessung]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[HC-SR04]]></category>
		<category><![CDATA[Internet of Things]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Ultraschall]]></category>
		<category><![CDATA[Webservices]]></category>
		<guid isPermaLink="false">https://www.smarthomeng.de/?p=1198</guid>

					<description><![CDATA[ESP32 Mikrocontroller stellen eine günstige, relativ performante, WLAN- und Bluetooth-fähige Basis für Internet of Things (IoT) &#8211; Implementierungen bereit. Sie lassen sich zudem relativ einfach mit SmartHomeNG nutzen. Das hier vorgestellte Beispiel, das u.a. für die Überwachung des Füllstands einer Zisterne verwendet werden kann, ist auf Basis eines Espressif ESP32<a class="moretag" href="https://www.smarthomeng.de/entfernungsmessung-auf-basis-eines-esp32-und-smarthomeng"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<p>ESP32 Mikrocontroller stellen eine günstige, relativ performante, WLAN- und Bluetooth-fähige Basis für Internet of Things (IoT) &#8211; Implementierungen bereit. Sie lassen sich zudem relativ einfach mit SmartHomeNG nutzen.</p>
<p>Das hier vorgestellte Beispiel, das u.a. für die Überwachung des Füllstands einer Zisterne verwendet werden kann, ist auf Basis eines <a href="https://www.espressif.com/en/products/hardware/esp32/overview" target="_blank" rel="noopener">Espressif ESP32</a> entwickelt worden, der zum Zeitpunkt dieses Artikels für ca. 15 Euro zu haben ist. Dazu wird für die Entfernungsmessung ein <a href="http://www.mikrocontroller-elektronik.de/ultraschallsensor-hc-sr04/" target="_blank" rel="noopener">HC-SR04 Ultraschallsensor</a> verwendet, der für knapp 2 Euro erhältlich ist.</p>
<p>Die Daten werden dabei an ein Item übermittelt, das via Webservices-Plugin erreichbar ist. Mehr zu diesem Plugin ist unter <a href="https://www.smarthomeng.de/das-smarthomeng-webservices-plugin" target="_blank" rel="noopener">https://www.smarthomeng.de/das-smarthomeng-webservices-plugin</a> zu finden. Die korrekte Konfiguration des Items wird in diesem Artikel als Voraussetzung angenommen.</p>
<p><strong>Update:</strong> Inzwischen ist der zweite Teil zum Thema erschienen, bei dem ich erläutere, wie man die Entfernungsdaten auf ein OLED Display bringt. Direkteinstieg unter <a href="https://www.smarthomeng.de/entfernungsmessung-mit-esp32-und-smarthomeng-teil-2-anbindung-eines-ssd1306-oled-displays" target="_blank" rel="noopener">Entfernungsmessung mit ESP32 und SmartHomeNG Teil 2: Anbindung eines SSD1306 OLED Displays</a>.</p>
<h1>Installation des Espressif ESP32 unter Windows</h1>
<p>Als erstes muss der ESP32 als USB Gerät erkannt werden. Dazu kann die Anleitung unter <a href="https://dl.espressif.com/doc/esp-idf/latest/get-started/establish-serial-connection.html" target="_blank" rel="noopener">https://dl.espressif.com/doc/esp-idf/latest/get-started/establish-serial-connection.html</a> befolgt werden. Eine alternative Anleitung für MacOS und Linux ist dort ebenfalls zu finden.</p>
<p>Zusammengefasst muss der Treiber für das ESP32 Core Board von <a href="https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers" target="_blank" rel="noopener">https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers</a> installiert werden. Danach sollte das Gerät als COM3 auftauchen, wie in untenstehendem Bild zu sehen ist. In meinen Tests klappte dies nicht mit jedem Micro-USB-Kabel. Daher sind ggf. Kabel durchzuprobieren.</p>
<p><img fetchpriority="high" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/system_esp32.png" alt="" class="alignnone size-full wp-image-1201" width="644" height="348" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/system_esp32.png 644w, https://www.smarthomeng.de/wp-content/uploads/2018/04/system_esp32-300x162.png 300w" sizes="(max-width: 644px) 100vw, 644px" /></p>
<h1>Einrichtung der Arduino IDE</h1>
<p>Als nächstes muss die Arduino IDE installiert werden. Diese kann kostenlos über <a href="https://www.arduino.cc/en/main/software" target="_blank" rel="noopener">https://www.arduino.cc/en/main/software</a> oder bei Windows 10 den <a href="https://www.microsoft.com/de-de/store/p/arduino-ide/9nblggh4rsd8">Microsoft Store</a> bezogen werden.</p>
<p>Über &#8222;Werkzeuge&#8220; → &#8222;Board&#8220; muss dort nun das &#8222;ESP32 Dev Module&#8220; ausgewählt werden. Die weiteren Einstellungen sind ebenfalls im folgenden Bild zu sehen:</p>
<p><img decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_board.png" alt="" class="alignnone size-full wp-image-1202" width="1320" height="1276" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_board.png 1320w, https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_board-300x290.png 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_board-768x742.png 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_board-1024x990.png 1024w" sizes="(max-width: 1320px) 100vw, 1320px" /></p>
<p>Wird rechts unten noch ein &#8222;None auf COM3&#8220; angezeigt, so ist das nicht weiter dramatisch, sofern der ESP32 bereits im Geräte-Manager auf COM3 sichtbar ist.</p>
<h1>Versuchsaufbau: Espressif ESP32 mit HC-SR04 Ultraschallsensor</h1>
<p>Die Funktionsweise des <a href="http://www.mikrocontroller-elektronik.de/ultraschallsensor-hc-sr04/" target="_blank" rel="noopener">HC-SR04 Ultraschallsensors</a> ist schnell erklärt:</p>
<p>Der HC-SR04 hat einen Lautsprecher und ein Mikrofon verbaut. Über den Lautsprecher wird ein Ultraschall-Ton ausgegeben. Dieser wird von einem Objekt reflektiert und über das direkt neben dem Lautsprecher platzierte Mikrofon erfasst. Die Zeitdauer zwischen dem Senden des Signals und dem Empfang des Echos wird gemessen. Über die Schallgeschwindigkeit von 343,2 m/s bei 20° Celsius kann nun die Distanz zu demjenigen Objekt berechnet werden, an dem das Signal relektiert wird.</p>
<p><img decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/HC-SR04.png" alt="" class="alignnone size-full wp-image-1284" width="300" height="330" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/HC-SR04.png 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/HC-SR04-273x300.png 273w" sizes="(max-width: 300px) 100vw, 300px" /><br />
Da der Sensor in Mikrosekunden misst, muss zur Bestimmung der Distanz der gemessene Wert erst halbiert (einfache Strecke) und dann mit 0,03432 multipliziert bzw. grob überschlagen durch 29.1 geteilt werden (1/29.1 = 0,03436).</p>
<p>Für den Versuchsaufbau muss der HC-SR04 an den ESP angeschlossen werden. Der HC-SR04 besitzt dabei die Anschlüsse &#8222;Gnd&#8220;, &#8222;Echo&#8220;, &#8222;Trig&#8220; und &#8222;Vcc&#8220;.</p>
<p><img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0706.jpg" alt="" class="alignnone size-full wp-image-1219" width="2284" height="1320" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0706.jpg 2284w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0706-300x173.jpg 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0706-768x444.jpg 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0706-1024x592.jpg 1024w" sizes="(max-width: 2284px) 100vw, 2284px" /></p>
<p>&#8222;Gnd&#8220; wird am ESP ebenfalls an &#8222;Gnd&#8220; angeschlossen. &#8222;Vcc&#8220; kommt an den &#8222;5V&#8220; Anschluss für die Stromversorgung. &#8222;Echo&#8220; und &#8222;Trig&#8220; werden an die jeweiligen GPIOs angeschlossen. Im Beispiel wird &#8222;Echo&#8220; auf &#8222;IO4&#8220; und &#8222;Trig&#8220; auf &#8222;IO15&#8220; gelegt. Diese sind später im Programmcode zu referenzieren.</p>
<p><img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/ESP32_GPIO.png" alt="" class="alignnone size-full wp-image-1273" width="1362" height="813" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/ESP32_GPIO.png 1362w, https://www.smarthomeng.de/wp-content/uploads/2018/04/ESP32_GPIO-300x179.png 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/ESP32_GPIO-768x458.png 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/ESP32_GPIO-1024x611.png 1024w" sizes="(max-width: 1362px) 100vw, 1362px" /></p>
<p><img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/ultraschall_Steckplatine.png" alt="" class="alignnone size-full wp-image-1309" width="1755" height="1239" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/ultraschall_Steckplatine.png 1755w, https://www.smarthomeng.de/wp-content/uploads/2018/04/ultraschall_Steckplatine-300x212.png 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/ultraschall_Steckplatine-768x542.png 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/ultraschall_Steckplatine-1024x723.png 1024w" sizes="(max-width: 1755px) 100vw, 1755px" /><img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0704.jpg" alt="" class="alignnone size-full wp-image-1218" width="2904" height="2740" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0704.jpg 2904w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0704-300x283.jpg 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0704-768x725.jpg 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0704-1024x966.jpg 1024w" sizes="(max-width: 2904px) 100vw, 2904px" /></p>
<h1>Programmierung des ESP32 via Arduino IDE und C-Code</h1>
<p>Als letztes ist nun der ESP32 via Arduino IDE zu programmieren.</p>
<p>Als Bibliotheken werden via &#8222;Sketch&#8220; → &#8222;Bibliothek einbinden&#8220; → &#8222;Bibliotheken verwalten&#8220; die &#8222;WiFi&#8220; Bibliothek (1.2.7) und die &#8222;Wire&#8220; Bibliothek (1.0.0) installiert. Erstere ist für den WiFi-Zugriff, zweitere für den Zugriff auf die GPIO&#8217;s.</p>
<p><img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/arduino_libs.png" alt="" class="alignnone size-full wp-image-1263" width="1993" height="847" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/arduino_libs.png 1993w, https://www.smarthomeng.de/wp-content/uploads/2018/04/arduino_libs-300x127.png 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/arduino_libs-768x326.png 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/arduino_libs-1024x435.png 1024w" sizes="(max-width: 1993px) 100vw, 1993px" /></p>
<p>Als Nächstes ist der Quellcode zu erstellen. Dabei sind im Wesentlichen die PINs für den Trigger (&#8222;Trig&#8220; → <code>triggerPin</code>) und den Echo-Anschluss (&#8222;Echo&#8220; → <code>echoPin</code>) des HC-SR04 Ultraschallsensors, die WiFi-SSID (<code>ssid[]</code>), das WiFi-Passwort (<code>pass[]</code>), die IP von SmartHomeNG (<code>host[]</code>) und der Port des Webservices Interfaces in SmartHomeNG (<code>port</code>) zu setzen. Weiterhin ist der Itempfad desjenigen Items zu setzen, dass die Entfernung in Zentimeter aufnehmen soll (<code>cm_item[]</code>). Im Beispiel hat dieses Item den Pfad <code>test.numeric</code>.</p>
<p>Das zugehörige Item ist bei aktiviertem Webservices-Plugin wie folgt konfiguriert:</p>
<pre><code class="language-yaml">
%YAML 1.1
---
test:

    numeric:
        type: num
        visu_acl: rw
        webservices_set: outside
        webservices_data: 'val'
</code></pre>
<p>Die Initialisierung der WiFi-Verbindung wird in der Methode <code>setup</code> aufgerufen. Des Weiteren werden dort die Input- und Output GPIO PINs gesetzt.</p>
<p>Die Methode <code>initialise_wifi</code> sorgt dafür, dass die WiFi Verbindung aufgebaut wird. Am Ende der Methode werden via <code>print_wifi_status</code> die Daten der Verbindung ausgegeben:</p>
<pre>Attempting to connect to SSID: 
&lt;wifi-name&gt;
Connected to wifi
SSID: &lt;wifi-name&gt;
IP Address: 192.168.178.23
signal strength (RSSI):-77 dBm
</pre>
<pre data-line="8-9, 12, 15-19, 34-35, 65, 69-76, 78, 82, 91-93" class="line-numbers"><code class="language-c">
#include &lt;WiFi.h&gt;
#include &lt;WiFiClient.h&gt;
#include &lt;WiFiServer.h&gt;
#include &lt;WiFiUdp.h&gt;
#include &lt;Wire.h&gt;

// PINs
const int triggerPin = 15;
const int echoPin = 4;

// VARs
const int runs = 3;

// Wifi
char ssid[] = "&lt;wlan_id&gt;";          // your network SSID (name)
char pass[] = "&lt;wlan_password&gt;";    // your network password
char host[] = "192.168.178.100";    // ip of service interface in SmartHomeNG
int port = 4321;                    // port of service interface in SmartHomeNG
char cm_item[] = "test.numeric";
int status = WL_IDLE_STATUS;
WiFiClient client;

void setup() {
  Serial.begin(19200);
  initialise_wifi();
 
  // PIN-Modes
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
  digitalWrite(triggerPin, HIGH);
}

void loop() {
  float distance = get_distance();
  float avg_distance = get_distance_avg();
 
  Serial.write("distance: ");
  Serial.print(distance) ;
  Serial.write(" , avg. distance: ");
  Serial.print(avg_distance) ;
  Serial.write(" cm\n");
 
  Serial.println("\nStarting connection to server...");
  // Wenn die Verbindung möglich ist, Verbindungsdaten an Serial zurückgeben.
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  if (client.connect(host, port)) {
    Serial.println("\nconnected to server");
    // HTTP Request gegen SmartHomeNG / das Webservices-Plugin durchführen
    char buffer[64];
    int ret = snprintf(buffer, sizeof buffer, "GET /ws/items/%s/%f HTTP/1.1", cm_item, avg_distance);
    Serial.println(buffer);
    client.println(buffer);
    client.println("Host: ");
    client.println();
  } 
  Serial.print("\n");
  // 1 Sekunde Warten
  delay(1000);
}

float get_distance() {
  float duration=0;
  float distance=0;
 
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2); 
  noInterrupts();
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW); 
  duration = pulseIn(echoPin, HIGH); // Erfassung - Dauer in Mikrosekunden 
  interrupts();

  distance = (duration / 2) / 29.1; // Distanz in CM
  return(distance);
}

float get_distance_avg() {
  float alt = 0;
  float avg;
  float dist;
  int i;

  delay(10);
  alt = get_distance();
  delay(10);
  for (i=0; i&lt;runs; i++) {
    dist = get_distance();
    avg = (0.8*alt) + (0.2*dist);
    alt = avg;
    delay(10);
  }
  return (avg);
}

static void initialise_wifi(void)
{
  // Versuche ins WiFi Netzwerk zu verbinden
  while (status != WL_CONNECTED) {
    Serial.println("");
    Serial.println("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Ins WPA/WPA2 Netzwerk verbinden. 
    status = WiFi.begin(ssid, pass);
    // 10 Sekunden auf die Verbindung warten:
    delay(10000); 
  }
  Serial.println("Connected to wifi");
  print_wifi_status();
}

void print_wifi_status() {
  // SSID des WiFi Netzwerkes ausgeben:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID()); 

  // WiFi IP Adresse des ESP32 ausgeben:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // WiFi Signalstärke ausgeben:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}
</code></pre>
<p>In der Methode <code>loop</code> findet nun die konkrete Ermittlung des Abstands statt. In der dort aufgerufenen Methode <code>get_distance_avg()</code> werden mehrere Messungen (<code>runs</code>) durchgeführt, um Messfehler zu minimieren. <code>get_distance()</code> wird zum Vergleich ebenfalls einzeln aufgerufen.</p>
<p>In jedem <code>run</code> wird in der Methode <code>get_distance_avg()</code> nun ebenfalls <code>get_distance()</code> aufgerufen. Dort findet der technische Teil des Messung statt: Zuerst wird der Trigger auf LOW gesetzt: <code>digitalWrite(triggerPin, LOW);</code>. Danach wird 2 Mikrosekunden gewartet und der Trigger auf HIGH gesetzt (<code>digitalWrite(triggerPin, HIGH);</code>). Nach erneutem Warten von 10 Mikrosekunden (erst nach dieser Zeit sendet der Sensor Ultraschallwellen) wird der Trigger wieder auf LOW gesetzt (<code>digitalWrite(triggerPin, LOW);</code>) und via <code>duration = pulseIn(echoPin, HIGH);</code> die Dauer zwischen Puls und Empfang des Echos gemessen. Während der Zeitmessung sollten Interrupts zudem abgeschaltet werden (<code>noInterrupts();</code>).<br />
Zuletzt wird die Entfernung in Zentimetern, wie oben bereits erklärt, mit <code>distance = (duration / 2) / 29.1;</code> berechnet und zurückgegeben.</p>
<p>In <code>get_distance_avg()</code> wird dies nun mehrfach wiederholt und ein gleitender gewichteter Durchschnittswert (<code>avg = (0.8*alt) + (0.2*dist);</code>) gebildet. Werden dort trotzdem noch starke Abweichungen festgestellt, können bspw. die Anzahl der <code>runs</code> erhöht oder die Gewichtung verändert werden.</p>
<p>Das Ergebnis von <code>get_distance_avg()</code> wird dann via HTTP Get Request an das Webservices-Plugin (Simple Interface) und das konfigurierte Item übertragen. Auch diese Vorgänge werden im Code ausgegeben:</p>
<pre>distance: 17.41 , avg. distance: 17.42 cm

Starting connection to server...
HTTP/1.1 200 OK
Content-Length: 65
Server: CherryPy/14.0.1
Content-Type: application/json
Date: Tue, 03 Apr 2018 19:31:48 GMT

{"Success": "Item with item path test.numeric set to 17.419243."}
connected to server
GET /ws/items/test.numeric/17.419930 HTTP/1.1</pre>
<p>Wir das REST-Interface des Webservices-Plugins verwendet, so sieht der Codeblock zum Senden der Daten wie folgt aus:</p>
<pre><code class="language-c">#include &lt;HTTPClient.h&gt;<httpclient.h>
[...]
if (client.connect(host, port)) {
     HTTPClient http;    //Declare object of class HTTPClient
     char portStr[12];
     sprintf(portStr, "%d", port);
     char url[128];
     sprintf(url, "http://%s:%s/rest/items/%s", host, portStr, cm_item);
     http.begin(url);  //Specify request destination
     Serial.println(url);
     http.addHeader("Content-Type", "application/json");                //Specify content-type header
     char cmStr[12];
     sprintf(cmStr, "%f", cm);
     int httpCode = http.PUT(cmStr);                                    //Send the request
     String payload = http.getString();                                 //Get the response payload
     http.end();                                                        //Close connection
} 
</httpclient.h></code></pre>
<h1>Erster Programmstart und Test</h1>
<p>Ist der ESP32 via USB verbunden, so kann das Programm über das &#8222;Haken&#8220;-Icon links oben auf Syntaxfehler geprüft und kompiliert und mittels des &#8222;Pfeil&#8220;-Icons daneben auf den ESP32 übertragen werden.</p>
<p>Gleichzeitig sollte vor einer Übertragung (und damit dem Programmstart) über &#8222;Werkzeuge&#8220; → &#8222;Serieller Monitor&#8220; der Monitor für die Testausgaben geöffnet werden.</p>
<p><img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_debug.png" alt="" class="alignnone size-full wp-image-1223" width="1184" height="862" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_debug.png 1184w, https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_debug-300x218.png 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_debug-768x559.png 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/esp32_debug-1024x746.png 1024w" sizes="(max-width: 1184px) 100vw, 1184px" /></p>
<p><strong>Tipp:</strong> Plausible Distanzen kommen nur heraus, wenn der Sensor etwas erhöht, bspw. auf einer Kaffeetasse platziert wird. Anstonsten stören Reflektionen am Boden die Messwerte. Bei der Messung sollte daher generell beachtet werden, dass sich das Ultraschallsignal kegelförmig ausbreitet. Auf große Distanzen (&gt; 1m) muss der Sensor so genau wie möglich auf das Zielobjekt ausgerichtet werden. Man sollte zudem Acht geben, dass das emittierte Signal auf einer möglichst parallelen Fläche reflektiert wird. Als Oberfläche für den Abprall der Impulse kann testweise bspw. ein Buch platziert werden. Die im Beispiel gemessenen 12,6 cm sind dabei bis auf ca. 5 mm genau.</p>
<p><img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0707.jpg" alt="" class="alignnone size-full wp-image-1224" width="3420" height="2616" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0707.jpg 3420w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0707-300x229.jpg 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0707-768x587.jpg 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0707-1024x783.jpg 1024w" sizes="(max-width: 3420px) 100vw, 3420px" /></p>
<h1>Fazit</h1>
<p>Mit dem ESP32 und einem HC-SR04 lässt sich für unter 20 Euro eine relativ genaue Abstandsmessung implementieren, die sehr simpel via WLAN an SmartHomeNG Daten sendet. Als Anwendungsfall wird die Installation im Sommer in meiner Zisterne installiert werden. Dazu folgt ein separater Bericht in diesem Blog.</p>
<p>Als Gehäuse für den HC-SR04 dient eine Vorlage von <a href="https://www.thingiverse.com/thing:1708627" target="_blank" rel="noopener">Thingiverse</a>, die mittels 3D Drucker &#8222;gedruckt&#8220; wurde:<br />
<img loading="lazy" decoding="async" src="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0708.jpg" alt="" class="alignnone wp-image-1226" width="376" height="258" srcset="https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0708.jpg 1880w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0708-300x206.jpg 300w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0708-768x528.jpg 768w, https://www.smarthomeng.de/wp-content/uploads/2018/04/IMAG0708-1024x704.jpg 1024w" sizes="(max-width: 376px) 100vw, 376px" /></p>
<p>Aber auch andere Sensoren lassen sich auf ähnliche Art und Weise kostengünstig und schnell verbauen und mit SmartHomeNG verbinden.</p>
<p>Für weniger versierte Programmierer bietet sich hier <a href="https://www.letscontrolit.com/wiki/index.php/ESPEasy" target="_blank" rel="noopener">ESPEasy</a> an, das Thema eines <a href="https://www.smarthomeng.de/einbindung-von-sensoren-ueber-wlan-mit-esp8266-unter-verwendung-von-espeasy" target="_blank" rel="noopener">anderen Artikels</a> ist.</p>
<p>Im zweiten Teil zum Thema wird erläutert, wie man die Entfernungsdaten auf ein OLED Display bringt. Direkteinstieg unter <a href="https://www.smarthomeng.de/entfernungsmessung-mit-esp32-und-smarthomeng-teil-2-anbindung-eines-ssd1306-oled-displays" target="_blank" rel="noopener">Entfernungsmessung mit ESP32 und SmartHomeNG Teil 2: Anbindung eines SSD1306 OLED Displays</a>.</p>
<p><em>(Die in diesem Artikel verwendeten Screenshots und Fotos wurden selber erstellt. Für den Schaltplan wurde das Tool <a href="http://fritzing.org/home/" target="_blank" rel="noopener">Fritzing</a> verwendet.)</em></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/entfernungsmessung-auf-basis-eines-esp32-und-smarthomeng/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
