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.begin(9600);
Serial.println("TSL2561 example sketch");
Wire.begin(14,12); // d6-14 scl d5-12 sda
light.begin();
unsigned char ID;
if (light.getID(ID))
{
Serial.print("Got factory ID: 0X");
Serial.print(ID, HEX);
Serial.println(", should be 0X5X");
}
else
{
byte error = light.getError();
printError(error);
}
gain = 0;
unsigned char time = 2;
Serial.println("Set timing...");
light.setTiming(gain, time, ms);
Serial.println("Powerup...");
light.setPowerUp();
//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()
{
delay(ms);
unsigned int data0, data1;
if (light.getData(data0, data1))
{
// getData() returned true, communication was successful
Serial.print("data0: ");
Serial.print(data0);
Serial.print(" data1: ");
Serial.print(data1);
good = light.getLux(gain, ms, data0, data1, lux);
Serial.print(" lux: ");
Serial.print(lux);
if (good) Serial.println(" (good)"); else Serial.println(" (BAD)");
}
else
{
// getData() returned false because of an I2C error, inform the user.
byte error = light.getError();
printError(error);
}
////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:
Serial.println("success");
break;
case 1:
Serial.println("data too long for transmit buffer");
break;
case 2:
Serial.println("received NACK on address (disconnected?)");
break;
case 3:
Serial.println("received NACK on data");
break;
case 4:
Serial.println("other error");
break;
default:
Serial.println("unknown error");
}
}
TSL2561_smartespiot_web2
.zip
Download ZIP • 2KB