ESPHome 2025.5.0
Loading...
Searching...
No Matches
a01nyub.cpp
Go to the documentation of this file.
1// Datasheet https://wiki.dfrobot.com/A01NYUB%20Waterproof%20Ultrasonic%20Sensor%20SKU:%20SEN0313
2
3#include "a01nyub.h"
5#include "esphome/core/log.h"
6
7namespace esphome {
8namespace a01nyub {
9
10static const char *const TAG = "a01nyub.sensor";
11
13 uint8_t data;
14 while (this->available() > 0) {
15 this->read_byte(&data);
16 if (this->buffer_.empty() && (data != 0xff))
17 continue;
18 buffer_.push_back(data);
19 if (this->buffer_.size() == 4)
20 this->check_buffer_();
21 }
22}
23
25 uint8_t checksum = this->buffer_[0] + this->buffer_[1] + this->buffer_[2];
26 if (this->buffer_[3] == checksum) {
27 float distance = (this->buffer_[1] << 8) + this->buffer_[2];
28 if (distance > 280) {
29 float meters = distance / 1000.0;
30 ESP_LOGV(TAG, "Distance from sensor: %f mm, %f m", distance, meters);
31 this->publish_state(meters);
32 } else {
33 ESP_LOGW(TAG, "Invalid data read from sensor: %s", format_hex_pretty(this->buffer_).c_str());
34 }
35 } else {
36 ESP_LOGW(TAG, "checksum failed: %02x != %02x", checksum, this->buffer_[3]);
37 }
38 this->buffer_.clear();
39}
40
41void A01nyubComponent::dump_config() { LOG_SENSOR("", "A01nyub Sensor", this); }
42
43} // namespace a01nyub
44} // namespace esphome
uint8_t checksum
Definition bl0906.h:3
std::vector< uint8_t > buffer_
Definition a01nyub.h:23
void publish_state(float state)
Publish a new state to the front-end.
Definition sensor.cpp:39
bool read_byte(uint8_t *data)
Definition uart.h:29
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string format_hex_pretty(const uint8_t *data, size_t length)
Format the byte array data of length len in pretty-printed, human-readable hex.
Definition helpers.cpp:372