INA219 Daten auf LCD anzeigen

Ich habe ein kleines Problem bei meinem aktuellen Projekt.

Aktuell habe ich einen INA219 Sensor zusammen mit einem LCD Display an einen ESP32 geklemmt. Auf dem LCD sollen die Messdaten des INA219 angezeigt werden. Beides einzeln funktioniert bis jetzt auch ganz gut. Also wen ich das Testprogramm für das LCD laufen lasse zeigt es alles wunderbar an. Nur wen ich den INA219 mit einbinde funktioniert es nicht mehr. Der INA219 funktioniert zwar ohne Probleme aber auf dem Display kann ich nichts mehr anzeigen lassen.

Bei einem i2c scann wird Folgendes angezeigt.

Scanning I2C Addresses Channel 1
00 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
40 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
Scan Completed, 2 I2C Devices found.

Scanning I2C Addresses Channel 2
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
Scan Completed, 0 I2C Devices found.

Es werden also beide Sachen erkannt.

Das ist der Code

#include <Adafruit_INA219.h>
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(0x00,22,21,5,18,23,19);


  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

Adafruit_INA219 ina219 (0x40);

void setup(void) 
{
  Serial.begin(115200);
  while (!Serial) {
      // will pause Zero, Leonardo, etc until serial console opens
      delay(1);
  }

  uint32_t currentFrequency;
    
  Serial.println("Hello!");
  
  // Initialize the INA219.
  // By default the initialization will use the largest range (32V, 2A).  However
  // you can call a setCalibration function to change this range (see comments).
  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }
  // To use a slightly lower 32V, 1A range (higher precision on amps):
  ina219.setCalibration_32V_1A();
  // Or to use a lower 16V, 400mA range (higher precision on volts and amps):
  //ina219.setCalibration_16V_400mA();

  Serial.println("Measuring voltage and current with INA219 ...");



  
}

void loop(void) 
{
   float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);
  
  Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
  Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Current:       "); Serial.print(current_mA); Serial.println(" mA");
  Serial.print("Power:         "); Serial.print(power_mW); Serial.println(" mW");
  Serial.println("");

  lcd.begin(16, 2);
  lcd.print(busvoltage,2);
  lcd.print(" V");
  lcd.print (current_mA);
  lcd.print (" mA");

  lcd.setCursor(0,1); 
  lcd.print (power_mW);
  lcd.print (" mW");

  delay(2000);
}

Kann mir bitte jemand sagen was ich falsch mache?

Ich habe leider kein i2c Modul für das Display kann das der Fehler sein?

(deleted)

Deine Einstellung zum LCD ist sehr seltsam.
Da du kein I2C-Adapter für dein Display hast, kannst du da auch keine Adresse messen bzw. festlegen.

Um es einfacher zu machen, solltest du dir einen Adapter zulegen, oder ein Display mit Adapter besorgen.

Hi

Dachte mir schon, daß die Null nicht korrekt sein kann.

  • "General Call” address: all devices are addressed : 0000 000 + R/W = 0
    AN10216, NXP
    Seite 15 im PDF, Bild 'Slide 34'.

MfG

Danke für die schnellen Antworten

Dann werde ich mir wohl einen I2C-Adapter besorgen müssen.

(deleted)

Peter-CAD-HST:
Vllt bekommt du dein Projekt durch eine Pin-Neuordnung zum Laufen.

Das Leben kann so einfach sein :smiley:

Danke für den Tipp hat funktioniert

(deleted)