top of page

NodeMCU TSL2561

Updated: Dec 6, 2021

#include <SparkFunTSL2561.h>
#include <Wire.h>
#include <ESP8266WiFi.h> //The library we will use for the wifi connection
#include <PubSubClient.h> // The library we will use for the mqtt connection

//mqtt connection library settings
WiFiClient espClient;
PubSubClient client(espClient);

//settings for internet and mqtt connection
//settings for internet and mqtt connection
const char* ssid = ""; // wifi SSID
const char* password =  ""; // wifi password 
const char* mqttServer = ""; // mqtt server ip  to be sent by smartespiot by mail 
const int mqttPort = ; // mqtt port   to be sent by smartespiot by mail 
const char* mqttUser = ""; // mqtt username  to be sent by smartespiot by mail 
const char* mqttPassword = ""; // mqtt pass to be sent by smartespiot by mail 

double lux;    // Resulting lux value
boolean good;  // True if neither sensor is saturated
// Create an SFE_TSL2561 object, here called "light":

SFE_TSL2561 light;

// Global variables:

boolean gain;     // Gain setting, 0 = X1, 1 = X16;
unsigned int ms;  // Integration ("shutter") time in milliseconds

void setup()
  // Initialize the Serial port:

  Serial.println("TSL2561 example sketch");
  Wire.begin(14,12); // d6-14 scl d5-12 sda
  unsigned char ID;
  if (light.getID(ID))
    Serial.print("Got factory ID: 0X");
    Serial.print(ID, HEX);
    Serial.println(", should be 0X5X");
    byte error = light.getError();

  gain = 0;

   unsigned char time = 2;

    Serial.println("Set timing...");
  light.setTiming(gain, time, ms);
  //wifi and mqtt connection //
  WiFi.begin(ssid, password); // start the wifi connection process

  while (WiFi.status() != WL_CONNECTED) { //
    delay(500); //wait 500ms
    Serial.println("Connecting to wifi..."); // wait until the wifi process connects
  Serial.println("Wifi connection ready :)"); // print the connection made information to the serial port

  client.setServer(mqttServer, mqttPort);//start connecting to the mqtt server from the specified port

  while (!client.connected()) { //wait until we connect to mqtt
    Serial.println("Connecting to MQTT server...");

    if (client.connect("SmartEspIOT", mqttUser, mqttPassword )) {//login to mqtt server with username and password with smartespIOT name

      Serial.println("MQTT connection established :) ");

    } else {

      Serial.print("Unable to connect... ");// If the connection cannot be established, let's give a warning
      Serial.print(client.state());             // print the problem description
      // We can understand the problem according to the information returned from the clients state.
      //-4 : MQTT_CONNECTION_TIMEOUT - the server did not respond in the ongoing time
      //-3 : MQTT_CONNECTION_LOST - network connection lost
      //-2 : MQTT_CONNECT_FAILED - network connection failed
      //-1 : MQTT_DISCONNECTED - disconnected
      //0 : MQTT_CONNECTED - connection established
      //1 : MQTT_CONNECT_BAD_PROTOCOL - The server does not support the requested MQTT version
      //2 : MQTT_CONNECT_BAD_CLIENT_ID - The server did not accept your information
      //3 : MQTT_CONNECT_UNAVAILABLE - The server did not accept the connectionetmed
      //4 : MQTT_CONNECT_BAD_CREDENTIALS - username password not accepted
      //5 : MQTT_CONNECT_UNAUTHORIZED - you are not authorized to connect
      delay(2000);   // wait two seconds and try connecting again


void loop()
  unsigned int data0, data1;

  if (light.getData(data0, data1))
    // getData() returned true, communication was successful

    Serial.print("data0: ");
    Serial.print(" data1: ");

    good = light.getLux(gain, ms, data0, data1, lux);

    Serial.print(" lux: ");
    if (good) Serial.println(" (good)"); else Serial.println(" (BAD)");
    // getData() returned false because of an I2C error, inform the user.

    byte error = light.getError();

  ////Publish message ///
  client.publish("devicename/lux", String(lux).c_str());// send lux
  client.publish("devicename/veri", String(255).c_str());// send temp
  delay(2000); // wait two seconds and send the message again


void printError(byte error)
// If there's an I2C error, this function will
// print out an explanation.
  Serial.print("I2C error: ");
  Serial.print(error, DEC);
  Serial.print(", ");

  switch (error)
    case 0:
    case 1:
      Serial.println("data too long for transmit buffer");
    case 2:
      Serial.println("received NACK on address (disconnected?)");
    case 3:
      Serial.println("received NACK on data");
    case 4:
      Serial.println("other error");
      Serial.println("unknown error");

Download ZIP • 2KB

13 views0 comments

Recent Posts

See All