ESPHome Ultrasonic sensor SR04T via UART

I managed to make it work:


#include "esphome.h"

class AJ_SR04M_Sensor : public PollingComponent, public UARTDevice, public Sensor {
  public:

    AJ_SR04M_Sensor(UARTComponent *parent) : PollingComponent(1000), UARTDevice(parent) {}

    void update() override {

      byte frame[5];
      int pos = 0;
      float value = 0.0;

      //write(0x00); // Try this
      write(0x55); // Try this
      //write(0x01); // Try this
      while (available()) {

        frame[pos] = read();

        pos++;

        if (pos == 4) {

	  if ((frame[0] == 0xFF) && (frame[4] == 0x00) && (((frame[0] + frame[1] + frame[2]) & 0x00ff) == frame[3])){
            value = ((frame[1] << 8) + frame[2]) / 10.0;
            publish_state(value);
          }
          break;


        }
      }
    }
};

1 Like