Der Ultraschallsensor verwendet Sonar, um die Entfernung zu einem Objekt zu bestimmen. Folgendes passiert: 

Der „Trig“ - Pin wird für 10 Millisekunden mit einem HIGH-Signal beschaltet, eine Messung wird initiiert. Aus dem Transmitter wird ein Ultraschallton entsendet. Der Ultraschall trifft auf ein Objekt und wird in den Receiver reflektiert. Bei Empfang durch den Receiver wird der Echo-Pin mit einem HIGH-Signal beschaltet. Die verstrichene Zeit von Senden zu empfangen wird im ESP32 erfasst und im Anschluss verarbeitet, um einen Abstand zum Objekt zu bestimmen. 

Hier (Datei "Vorlage_Ultraschallsensor.ino") ist ein Programmbeispiel für die Ausführung dieser Aufgabe:

#define echo 15                                 //Anschluss ECHO vom HC-SR04 wurde für PIN 15 festgelegt
#define trig 16                                 //Anschluss TRIG vom HC-SR04 wurde für PIN 16 festgelegt
 
int distanz1 = 0;                             //Entfernung als globale Variable anlegen



//Funktion zur Messung der Entfernung über den Ultraschallsensor HC-SR04 (mit Echo und Trigger), Ausgabe in mm
int EntfernungsMessung1 (){

  long distanz1 = 0;                                                                      //Deklaration der Variablen "distanz1"
  long zeitx1 = 0;                                                                        //Deklaration der Variablen "zeitx"
 
  digitalWrite (trig, LOW);                                                               //setzt den Zustand von trig auf LOW
  delayMicroseconds(3);                                                                   //setzt eine Pause/Unterbrechung von 3 Mikrosekunden
  noInterrupts();                                                                         //verhindert eine Unterbrechung des Vorgangs
  digitalWrite(trig, HIGH);                                                               //setzt den Zustand von trig auf HIGH
  delayMicroseconds(10);                                                                  //setzt eine Pause/Unterbrechung von 10 Mikrosekunden
  digitalWrite(trig, LOW);                                                                //setzt den Zustand von trig auf LOW
  zeitx1 = pulseIn(echo, HIGH);
  interrupts();                                                                           //lässt Vorgangsunterbrechungen erneut zu
 
  zeitx1 = (((zeitx1 * 344)/1000)/2);                                                     //vererrechnet den Wert der Zeit mit der Schallgeschwindigkeit nach der Raumtemperaur,
                                                                                          //dem Faktor für die Kommastelle und halbiert diesen wegen der doppelten strecke (hin+zurück)
  distanz1 = zeitx1;
  Serial.print("distanz1  Wert01:");                                                      //Ausgabe des Wertetyps in den seriellen Monitor
  Serial.print(distanz1);                                                                 //Ausgabe des Wertes in den serieleln Monitor
  Serial.println("");
  delay (200);                                                                            //Verzögerung zur nächsten Messung
  return (distanz1);                                                                      //Ausgabe des Wertes für die Entfernung
}
void setup()
{
  pinMode(trig, OUTPUT);      //Legt den Eingangstyp des angegebenen PINs fest
  pinMode(echo, INPUT);       //Legt den Eingangstyp des angegebenen PINs fest
}
 
 
void loop()
{
  EntfernungsMessung1 ();
}