Menu

Recent Posts

aki-technical


Monday, November 2, 2026

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD

Overview 

The HC-SR04 is an ultra-sonic range finder. It use sound wave at the speed of 340m/s that travel in air to measure any detected obstacle. That sound wave signal will travels back whenever there is a barrier created by any object. It uses a speaker that propagates an ultra-sonic signal that human ears could not hear. The detector is a microphone circuit that has an amplifier. The distance of the detected object is the time the sound wave travel divides by 2. The measurement formula is,

Test distance = (high level time * velocity of sound ) / 2.

The velocity of sound is 340m/s. 


 

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
Distance Measurement

 

The table below summarizes the features of the HC-SR04 Distance Sensor.

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
HC-SR04 Parameters

 This Arduino module is very popular because of its low cost, easy-to-use, etc.

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
The Arduino HC-SR04 Module

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
The Arduino HC-SR04 Module

 

The high level time is the input high time creates by the echo pin of the HC-SR04 Ultra-Sonic Range Finder Module. That time duration is measure in micro-seconds, and the Test distance is measure in cm. To measure that time duration, the micro-controller need to process it precisely. In Arduino, it has the pulseIn function that can measure any logic level ( HIGH or LOW) time at any specific input pins. 

ESP8266 Interfaces with the PCF8574AP and HC-SR04 

In this example, I use the HC-SR04 to measure the distance. The result will show on a 16x2 character LCD controlled by the PCF8574AP I/O expansion chip. Because the ESP-12E has a limited of digital I/O pins. On the other hands, Some pins of this IoT module are connected to other peripherals. 

The 7-bit Arduino slave address of the PCF8574AP here is 0x38. Commonly they use the PCF8574T Arduino Two-Wire LCD module that has different slave address.

Circuit Connection

It needs a small breadboard to build the circuit. Connect the all components as follow.

  • Connection between ESP-12E and HC-SR04
HC-SR04ESP12-E
VINVCC
TrigD6 (GPIO 12)
EchoD5 (GPIO 14)
GNDGND


  • Connection between ESP-12E and PCF8574AP LCD
ESP-12EPCF8574AP LCD
GND
GND
D1 (GPIO 12)
SCL 
D2 (GPIO 14)
SDA 
VIN
VCC


ESP8266 Arduino Source Code

I use the Arduino LiquidCrystal_I2C library. It's originally developed to work with the Arduino AVR. However for the ESP8266, it is compatible. It works fine.


  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>

  3. LiquidCrystal_I2C lcd(0x38,16,2);

  4. #define trigPin D6
  5. #define echoPin D5

  6. /*
  7. PWM OUTPUT 0-25000uS in which 1cm=50uS
  8. */
  9. long duration;
  10. int distance;

  11. void setup() {
  12. pinMode(trigPin,OUTPUT);
  13. pinMode(echoPin,INPUT);
  14. lcd.init();
  15. // Print a message to the LCD.
  16. lcd.backlight();
  17. lcd.clear();
  18. lcd.setCursor(0,0);
  19. lcd.print("ESP-12E PCF8574AP");
  20. lcd.setCursor(0,1);
  21. lcd.print("and HC-SR04");
  22. delay(10000);
  23. lcd.clear();
  24. }

  25. void loop() {
  26. digitalWrite(trigPin,LOW);
  27. delayMicroseconds(7);
  28. // Set the trigPin high for 10 uS
  29. digitalWrite(trigPin,HIGH);
  30. digitalWrite(trigPin,HIGH);
  31. delayMicroseconds(10);
  32. digitalWrite(trigPin,LOW);
  33. duration=pulseIn(echoPin,HIGH);
  34. // Calculation for distance
  35. if(duration<=25000)
  36. distance = duration * 0.034 / 2;
  37. else
  38. distance=0;
  39. lcd.setCursor(0,0);
  40. lcd.print("Time: " + String(duration) + "uS ");
  41. lcd.setCursor(0,1);
  42. lcd.print("Distance: " + String(distance) + "cm ");
  43. delay(500);
  44. }

 

 

Pictures

I can not find these module at any online circuit simulator now. Currently WOKWI only support some high-end board. 

 

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
Distance Measurement

 

 

No comments:

Post a Comment

Search This Blog

Electronics and Programming Tutorials

DIY Electronic Projects And Instruments

Labels

23K256 (1) 24C16B (2) 25AA010A (2) 8051 (7) 93AA46B (1) ADC (40) Analog Comparator (1) Arduino (17) ARM (32) AT89C52 (7) ATMega32 (59) ATMega644P (27) AVR (88) AVR PCB (2) Bootloader (1) CCS PICC (31) Change Notify Interrupt (CNI) (2) DAC (2) DHT11 (6) Display (164) Distance Sensor (4) dot matrix (1) ds1307 (11) DS18B20 (7) ds3231 (2) ds3232 (2) dsPIC (16) dsPIC30F1010 (3) dsPIC30F2010 (15) EEPROM (5) Environment Sensor (6) ESP-12E (10) ESP32 (1) esp8266 (11) Graphical LCD (3) HC-SR04 (1) HD44780 (14) I2C (40) ILI9341 (1) Input/Output (85) Interrupt (22) IoT (4) IoT PCB (1) Keil (5) Keypad (16) KS0108 (3) LCD (93) LM35 (4) Master/Slave (2) MAX7221 (1) MCP23017 (8) MCP23S17 (7) MCP4921 (1) MCP4922 (2) Meter (3) MikroC (2) MikroC ARM (1) MikroC dsPIC (11) MikroC PIC (2) Module PCB (2) Motor (15) MPLABX (73) Nokia 5110 LCD (5) OLED (6) One-Wire (8) Oscillator (8) PCB (13) PCD8544 (3) PCF8574 (16) PIC (122) PIC12F (3) PIC16 (105) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (14) PICKit2 (1) PICMicro PCB (4) Pin Change Interrupt (1) PLL (1) PWM (12) RTC (16) SBN0064G (1) Sensor (16) SH1106 (8) Shift Register (15) Shift Registers (19) SN74HC595N (9) Software SPI (1) Software TWI (3) SPI (44) sprinf (3) ST7735 (1) STM32 (29) STM32 Black Pill (1) STM32 Blue Pill (12) STM32 HAL (23) STM32CubeIDE (32) STM32F103C8T6 (9) STM32F103R6 (18) STM32F401CCU6 (1) SysTick (7) temperature sensor (15) TFT (1) TG12864A (1) Thermometer (22) Timer/Counter (32) TM1637 (2) twi (18) UART (11) Ultrasonic (4) Voltmeter (7) WDT (1) Web Server (1) Wi-Fi (3) XC16 (2) XC8 (96)

aki-technical