ESPHome mit NAU7802

ESPHome

Im Zuge eines etwas umfangreicheren Projekts mit Homeassistant u. ESPHome habe ich angefangen den NAU7802 in ESPHome zu integrieren.
Zwischenzeitlich ist es mir gelungen den NAU7802 sowohl mit der Sparkfun Libary

als auch mit der Adafruit Libary

ins ESPHome einzubinden.

Die Adafruit Libary gefällt mir besser. Irgendwie “moderner” als die von Sparkfun.
Allerdings ist dort (soweit mir ersichtlich) noch keine Funktion für den 2. Channel (zweite Waage) und auch den Stromsparmodus konnte ich auf den ersten Blick nicht entdecken. Wenn da jemand mehr weiß. Mein C++ ist noch sehr Basic :relaxed:

Arduino/PlatformIO

Angefangen habe ich mit dem Sparkfun Complete Scale Example SparkFun_Qwiic_Scale_NAU7802_Arduino_Library/Example2_CompleteScale.ino at master · sparkfun/SparkFun_Qwiic_Scale_NAU7802_Arduino_Library · GitHub.
Nachdem das unter PlatformIO bei mir mit solchen EEPROM Calls:

 EEPROM.put(LOCATION_CALIBRATION_FACTOR, myScale.getCalibrationFactor());

nicht funktioniert hat, habe ich das ganze auf ESP32 Preferences umgeschrieben:

Zu beachten hierbei ist die SampleRate. Ansonsten schlägt die Calibration/Justierung fehl. Das betrifft sowohl das orginale Beispiel als auch meine Modifikation:

myScale.setSampleRate(NAU7802_SPS_320); //Increase to max sample rate

NVM Non-volatile_memory

Ob sich die Preferences mit ESPHome vertragen weiß ich noch nicht. Ist aber vor allem schick wenn man “nur” Arduino/PlatformIO verwendet und nicht den ganzen Homeassistant Stack im Hintergrund hat.

ESP Preferences How to use the Preferences Library? - ESP32 Forum oder auch SD Card Arduino - SD sind auf jeden Fall eine gute Möglichkeit um sowas wie einen Calibriation Factor dauerhaft zu speichern.

NAU7802

Insgesamt gefällt mir der NAU7802 viel besser als der HX711. Allein der I²C im vergleich zum SPI ist für mich schon ausschlaggebend.

Was @MKO bei Diskussion zum Nuvoton NAU7802 24bit 2ch ADC - #18 by MKO alles beschreibt kann ich bestätigen. Eine genaue Strommessung habe ich nicht vorgenommen.

Mit ESP32 Preferences oder SD Card ist auch der flüchtige Speicher nicht wirklich ein Problem.

Für mich ist momentan eine fertig käuflich erwerbbare Breakout Platine essentiell.
Von daher arbeite ich damit: SparkFun Qwiic Scale - NAU7802 - SEN-15242 - SparkFun Electronics
Und (Vielen Dank für die Empfehlung an @weef) hiermit: ESP32-EVB - Open Source Hardware Board

Werde auch mal noch den Schirm anlöten. Momentan sind aber die Ergebnisse schon genauer ohne als beim HX711 mit angeschlossenem Schirm.

Code:

Bin da gerade dran. Ist noch etwas … Funktioniert aber definitv. In dem Yaml sind noch ein paar andere Dinge enthalten wie HX711,MQTT to Kotori und BME280.
evb02.yaml
adafruit-nau7802.h
sparkfun-nau7802.h

Justierung der Waage:

Besonders schön ist die Möglichkeit via Homeassistant (z.B. Browser u. App) die in der Adafruit Lib integrierte Calibration aufzurufen um z.B. via Handy die Tara zu setzen.

Homeassistant Card Configuration:

entity: zone.home
hold_action:
  action: none
icon: mdi:restart
name: Calibrate NAU7802
show_icon: true
show_name: true
tap_action:
  action: call-service
  service: esphome.evb02_calibrate
type: entity-button

Das ist natürlich auch über Hardwarebutton,MQTT oder … möglich.

Issues:

Calibration

Bin dran auch noch den CalibrationFactor via Homeassistant an den NAU7802 weiterzugeben. Irgendwo hier bin ich stecken geblieben:

void on_calfactor(std::string calf) {
    ESP_LOGD("NAU7802", "Setting new CalibrationFactor:");
    //char result[8];
    //dtostrf(calf, 6, 2, result);
    ESP_LOGD("NAU7802", calf.c_str());
    //ss << calf;
    //float calff = std::stof(calf);
    //float calff;
    //ss >> calff;
    //ss.clear();
    //CalibrationF = calff;
    //CalibrationFactor_sensor->publish_state(CalibrationF);
  }

Irgendwie kann ich weder std::stof von std::string noch dieses stringstream Zeugs aufrufen. Aber das finde ich schon noch raus. Das sind die Momente wo man Python vermisst!

Stacktrace

Wenn man den ESP32 im laufenden Betrieb einfach absteckt mag der NAU danach nicht mehr. Der ESP32 fällt in einen Stacktrace/Bootloop bei der ersten Kommunikation mit dem NAU. Ob das mit “Wartezeit” oder mit dem PreferencesScale.ino · master · Jan Hoffmann / PreferencesScale · GitLab zu lösen ist hab ich noch nicht abschließend geklärt. Evtl. setzt die Sparkfun Lib irgendetwas das ihn wieder auf Spur bringt.

2 Likes

Welcome back. Schönes Ding!

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Olimex-Evb Fallback Hotspot"
    password: !secret wifi_ap_password

evb02.yaml · 77d5acd41747d4372716f54e067bde7a3670ca4b · Jan Hoffmann / esphome-nau7802 · GitLab /cc @weef :white_check_mark:


Ja, dieses Feature fehlt bei vielen Bibliotheken aus dem Hause Sparkfun und Adafruit – leider. Hier müssen wir wohl nachlegen.


Bei Initial Commit (77d5acd4) · Commits · Jan Hoffmann / esphome-nau7802 · GitLab habe ich zwei Kommentare hinzugefügt. Ein wenig ins Blaue hinein, aber vielleicht hilft es ja weiter.

Das stimmt für Adafruit, bei Sparkfun ist das häufig anders, wie auch hier. Ein Anwendungsbeispiel findet sich bei Example4_LowPower.ino.

2 Likes