ESP8266 + TSL2561 I2C-Verbindung

Mein ESP8266-01 erkennt den Sensor TSL2561 , aber die Messwerte werden 65535aus irgendeinem seltsamen Grund immer ausgegeben. Aber wie gesagt, wenn ich den I2C-Scanner starte und das Kabel einstecke, sehe ich, dass der Sensor bei auftaucht0x39 .

Wenn ich denselben Sensor an einen ESP8266 NodeMCU-Breakout anschließe und dort denselben Code flashe, liest er ihn einwandfrei aus. Ich habe die Drähte wie unten gezeigt ohne Widerstände oder irgendetwas dazwischen angeschlossen.

| ESP8266-01 | TSL25611   |
|------------|------------|
| VCC (3.3V) | VCC (3.3V) |
| GND        | GND        |
| GPIO2      | SCL        |
| GPIO0      | SDA        |

Ich bin mir aber nicht sicher, was ich falsch mache.

Mein Code:

#include <Wire.h>
#include <ESP8266WebServer.h>
#include <TSL2561.h>

const char *ssid = "Wouter's Place";
const char *password = "";

ESP8266WebServer server(80);
TSL2561 tsl2561(TSL2561_ADDR_FLOAT);

void handleRoot() {
  // Read illuminance
  float visible = tsl2561.getLuminosity(TSL2561_VISIBLE);
  float full = tsl2561.getLuminosity(TSL2561_FULLSPECTRUM);
  float ir = tsl2561.getLuminosity(TSL2561_INFRARED);

  String response = "";
  response += "{\"illuminance\":{";
  response += "\"visible\":";
  response += visible;
  response += ",\"full\":";
  response += full;
  response += ",\"ir\":";
  response += ir;
  response += "}";
  response += "}";

  server.send(200, "application/json", response);
}

void setup(void)
{
  Wire.begin(0, 2);

  Serial.begin(9600);
  Serial.println();

  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);

  Serial.print("Connecting to: ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(250);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected to wifi, ip: ");
  Serial.println(WiFi.localIP());

  Serial.println("Setting up TSL2561..");
  if (!tsl2561.begin())
  {
    Serial.println("Could not find TSL2561 sensor, check wiring!");
    while (1);
  }

  Serial.println("Starting server..");
  server.on("/", handleRoot);
  server.begin();
  Serial.println("Web server running!");
}

void loop()
{
  server.handleClient();
}

Ergebnisausgabe:

{
  "illuminance": 
  {
    "visible": 0,
    "full": 65535
    "ir": 65535
  }
}
Kannst du einen Schaltplan posten? Ich kann nicht sagen, was du in deinem Video angeschlossen hast.
Bitte poste den Code, keinen Link zum Code
Nur um zu kommentieren, dass 65536 16 Bits von allen Einsen sind. Da die I2C-Datenleitung im Leerlauf hoch ist, bedeutet dies wahrscheinlich, dass der Slave nicht antwortet.
@DoxyLover danke, nachdem ich oben gelesen hatte, fing ich an, darüber nachzudenken und ging ein weiteres Mal meinen Code durch, nur um einen ziemlich offensichtlichen Fehler zu finden.

Antworten (1)

Ich habe den Fehler gefunden, nachdem ich ein wenig darüber nachgedacht hatte, was @DoxyLover erwähnt hat! Diese 2 Zeilen übrig gebliebenen Codes sollten nicht hier sein. Anscheinend ist die Standard-LED auf dem ESP-01 GPIO2 (das ist einer der I2C-Pins, die ich verwende).

pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);