// Including the ESP8266 WiFi library
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <ErriezBH1750.h>
// Replace with your network details
const char* ssid = "MOVISTAR CASA";
const char* password = "wificasa";
// Web Server on port 80
WiFiServer server(80);
// ADDR line LOW/open: I2C address 0x23 (0x46 including R/W bit) [default]
// ADDR line HIGH: I2C address 0x5C (0xB8 including R/W bit)
//for every sensor we want to use, we need to create a different instance
BH1750 bh1750_0(LOW);
BH1750 bh1750_1(LOW);
BH1750 bh1750_2(LOW);
BH1750 bh1750_3(LOW);
BH1750 bh1750_4(LOW);
int delay1 = 50;
int delay2 = 100;
#define tcs3200_0_S0 9
#define tcs3200_0_S1 10
#define tcs3200_0_S2 11
#define tcs3200_0_S3 12
#define tcs3200_0_Out 13
#define tcs3200_1_S0 22
#define tcs3200_1_S1 23
#define tcs3200_1_S2 24
#define tcs3200_1_S3 25
#define tcs3200_1_Out 26
#define tcs3200_2_S0 27
#define tcs3200_2_S1 28
#define tcs3200_2_S2 29
#define tcs3200_2_S3 30
#define tcs3200_2_Out 31
#define tcs3200_3_S0 32
#define tcs3200_3_S1 33
#define tcs3200_3_S2 34
#define tcs3200_3_S3 35
#define tcs3200_3_Out 36
#define tcs3200_4_S0 37
#define tcs3200_4_S1 38
#define tcs3200_4_S2 39
#define tcs3200_4_S3 40
#define tcs3200_4_Out 41
// Stores frequency read by the photodiodes
int redFrequency0 = 0;
int greenFrequency0 = 0;
int blueFrequency0 = 0;
int redFrequency1 = 0;
int greenFrequency1 = 0;
int blueFrequency1 = 0;
int redFrequency2 = 0;
int greenFrequency2 = 0;
int blueFrequency2 = 0;
int redFrequency3 = 0;
int greenFrequency3 = 0;
int blueFrequency3 = 0;
int redFrequency4 = 0;
int greenFrequency4 = 0;
int blueFrequency4 = 0;
#define TCAADDR 0x70
void tcaselect(uint8_t i) {
if (i > 4) return;
Wire.beginTransmission(TCAADDR);
Wire.write(1 << i);
Wire.endTransmission();
}
// only runs once on boot
void setup() {
// Setting the outputs
pinMode(tcs3200_0_S0, OUTPUT);
pinMode(tcs3200_0_S1, OUTPUT);
pinMode(tcs3200_0_S2, OUTPUT);
pinMode(tcs3200_0_S3, OUTPUT);
pinMode(tcs3200_1_S0, OUTPUT);
pinMode(tcs3200_1_S1, OUTPUT);
pinMode(tcs3200_1_S2, OUTPUT);
pinMode(tcs3200_1_S3, OUTPUT);
pinMode(tcs3200_2_S0, OUTPUT);
pinMode(tcs3200_2_S1, OUTPUT);
pinMode(tcs3200_2_S2, OUTPUT);
pinMode(tcs3200_2_S3, OUTPUT);
pinMode(tcs3200_3_S0, OUTPUT);
pinMode(tcs3200_3_S1, OUTPUT);
pinMode(tcs3200_3_S2, OUTPUT);
pinMode(tcs3200_3_S3, OUTPUT);
pinMode(tcs3200_4_S0, OUTPUT);
pinMode(tcs3200_4_S1, OUTPUT);
pinMode(tcs3200_4_S2, OUTPUT);
pinMode(tcs3200_4_S3, OUTPUT);
// Setting the sensorOut as an input
pinMode(tcs3200_0_Out, INPUT);
pinMode(tcs3200_1_Out, INPUT);
pinMode(tcs3200_2_Out, INPUT);
pinMode(tcs3200_3_Out, INPUT);
pinMode(tcs3200_4_Out, INPUT);
// Setting frequency scaling to 20%
digitalWrite(tcs3200_0_S0,HIGH);
digitalWrite(tcs3200_0_S1,LOW);
digitalWrite(tcs3200_1_S0,HIGH);
digitalWrite(tcs3200_1_S1,LOW);
digitalWrite(tcs3200_2_S0,HIGH);
digitalWrite(tcs3200_2_S1,LOW);
digitalWrite(tcs3200_3_S0,HIGH);
digitalWrite(tcs3200_3_S1,LOW);
digitalWrite(tcs3200_4_S0,HIGH);
digitalWrite(tcs3200_4_S1,LOW);
// Initializing serial port for debugging purposes
Serial.begin(115200);
// Connecting to WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
Wire.begin();
Serial.println(F("##############################"));
Serial.println(F("Starting Sensor Initialization"));
Serial.println(F("##############################"));
//**********************************************************************
//*************INITIALIZING FIRST SENSOR*******************************
tcaselect(0);
bh1750_0.begin(ModeContinuous, ResolutionHigh);
bh1750_0.startConversion();
//**********************************************************************
//*************INITIALIZING SECOND SENSOR*******************************
tcaselect(1);
bh1750_1.begin(ModeContinuous, ResolutionHigh);
bh1750_1.startConversion();
//**********************************************************************
//*************INITIALIZING THIRD SENSOR*******************************
tcaselect(2);
bh1750_2.begin(ModeContinuous, ResolutionHigh);
bh1750_2.startConversion();
//**********************************************************************
//*************INITIALIZING FOURTH SENSOR*******************************
tcaselect(3);
bh1750_3.begin(ModeContinuous, ResolutionHigh);
bh1750_3.startConversion();
//**********************************************************************
//*************INITIALIZING FIFTH SENSOR*******************************
tcaselect(4);
bh1750_4.begin(ModeContinuous, ResolutionHigh);
bh1750_4.startConversion();
//**********************************************************************
//**********************************************************************
Serial.println();
Serial.println(F("##############################")); //30-times #
Serial.println(F("Sensor nitialization Finished"));
Serial.println(F("##############################")); //30-times #
Serial.println();
Serial.println();
delay(10);
}
Serial.println("");
Serial.println("WiFi connected");
// Starting the web server
server.begin();
Serial.println("Web server running. Waiting for the ESP IP...");
delay(10000);
// Printing the ESP IP address
Serial.println(WiFi.localIP());
}
// runs over and over again
void loop() {
// Listenning for new clients
WiFiClient client = server.available();
if (client) {
Serial.println("New client");
// bolean to locate when the http request ends
boolean blank_line = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
uint16_t lux;
// delay(1000);
//**************FIRST SENSOR*****************************************//
tcaselect(0);
if (bh1750_0.isConversionCompleted()) {
// Read light
lux = bh1750_0.read();
Serial.print(F("bh1750_0 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
Serial.print(F("Light: "));
Serial.print(lux / 2);
Serial.print(F("."));
Serial.print(lux % 10);
Serial.println(F(" LUX"));
}
// Setting RED (R) filtered photodiodes to be read
digitalWrite(tcs3200_0_S2,LOW);
digitalWrite(tcs3200_0_S3,LOW);
// Reading the output frequency
redFrequency0 = pulseIn(tcs3200_0_Out, LOW);
//printing time value
Serial.print(F("TCS3200_0 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
// Printing the RED (R) value
Serial.print("Red = ");
Serial.print(redFrequency0);
delay(delay1);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(tcs3200_0_S2,HIGH);
digitalWrite(tcs3200_0_S3,HIGH);
// Reading the output frequency
greenFrequency0 = pulseIn(tcs3200_0_Out, LOW);
// Printing the GREEN (G) value
Serial.print(" Green = ");
Serial.print(greenFrequency0);
delay(delay1);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(tcs3200_0_S2,LOW);
digitalWrite(tcs3200_0_S3,HIGH);
// Reading the output frequency
blueFrequency0 = pulseIn(tcs3200_0_Out, LOW);
// Printing the BLUE (B) value
Serial.print(" Blue = ");
Serial.println(blueFrequency0);
delay(delay1);
Serial.println();
//**************SECOND SENSOR*****************************************//
tcaselect(1);
if (bh1750_1.isConversionCompleted()) {
// Read light
lux = bh1750_1.read();
Serial.print(F("bh1750_1 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
Serial.print(F("Light: "));
Serial.print(lux / 2);
Serial.print(F("."));
Serial.print(lux % 10);
Serial.println(F(" LUX"));
}
// Setting RED (R) filtered photodiodes to be read
digitalWrite(tcs3200_1_S2,LOW);
digitalWrite(tcs3200_1_S3,LOW);
// Reading the output frequency
redFrequency1 = pulseIn(tcs3200_1_Out, LOW);
//printing time value
Serial.print(F("TCS3200_1 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
// Printing the RED (R) value
Serial.print("Red = ");
Serial.print(redFrequency1);
delay(delay1);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(tcs3200_1_S2,HIGH);
digitalWrite(tcs3200_1_S3,HIGH);
// Reading the output frequency
greenFrequency1 = pulseIn(tcs3200_1_Out, LOW);
// Printing the GREEN (G) value
Serial.print(" Green = ");
Serial.print(greenFrequency1);
delay(delay1);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(tcs3200_1_S2,LOW);
digitalWrite(tcs3200_1_S3,HIGH);
// Reading the output frequency
blueFrequency1 = pulseIn(tcs3200_1_Out, LOW);
// Printing the BLUE (B) value
Serial.print(" Blue = ");
Serial.println(blueFrequency1);
delay(delay1);
Serial.println();
//**************THIRD SENSOR*****************************************//
tcaselect(2);
if (bh1750_2.isConversionCompleted()) {
// Read light
lux = bh1750_2.read();
Serial.print(F("bh1750_2 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
Serial.print(F("Light: "));
Serial.print(lux / 2);
Serial.print(F("."));
Serial.print(lux % 10);
Serial.println(F(" LUX"));
}
// Setting RED (R) filtered photodiodes to be read
digitalWrite(tcs3200_2_S2,LOW);
digitalWrite(tcs3200_2_S3,LOW);
// Reading the output frequency
redFrequency2 = pulseIn(tcs3200_2_Out, LOW);
//printing time value
Serial.print(F("TCS3200_2 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
// Printing the RED (R) value
Serial.print("Red = ");
Serial.print(redFrequency2);
delay(delay1);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(tcs3200_2_S2,HIGH);
digitalWrite(tcs3200_2_S3,HIGH);
// Reading the output frequency
greenFrequency2 = pulseIn(tcs3200_2_Out, LOW);
// Printing the GREEN (G) value
Serial.print(" Green = ");
Serial.print(greenFrequency2);
delay(delay1);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(tcs3200_2_S2,LOW);
digitalWrite(tcs3200_2_S3,HIGH);
// Reading the output frequency
blueFrequency2 = pulseIn(tcs3200_2_Out, LOW);
// Printing the BLUE (B) value
Serial.print(" Blue = ");
Serial.println(blueFrequency2);
delay(delay1);
Serial.println();
//**************FOURTH SENSOR*****************************************//
tcaselect(3);
if (bh1750_3.isConversionCompleted()) {
// Read light
lux = bh1750_3.read();
Serial.print(F("bh1750_3 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
Serial.print(F("Light: "));
Serial.print(lux / 2);
Serial.print(F("."));
Serial.print(lux % 10);
Serial.println(F(" LUX"));
}
// Setting RED (R) filtered photodiodes to be read
digitalWrite(tcs3200_3_S2,LOW);
digitalWrite(tcs3200_3_S3,LOW);
// Reading the output frequency
redFrequency3 = pulseIn(tcs3200_3_Out, LOW);
//printing time value
Serial.print(F("TCS3200_3 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
// Printing the RED (R) value
Serial.print("Red = ");
Serial.print(redFrequency3);
delay(delay1);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(tcs3200_3_S2,HIGH);
digitalWrite(tcs3200_3_S3,HIGH);
// Reading the output frequency
greenFrequency3 = pulseIn(tcs3200_3_Out, LOW);
// Printing the GREEN (G) value
Serial.print(" Green = ");
Serial.print(greenFrequency3);
delay(delay1);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(tcs3200_3_S2,LOW);
digitalWrite(tcs3200_3_S3,HIGH);
// Reading the output frequency
blueFrequency3 = pulseIn(tcs3200_3_Out, LOW);
// Printing the BLUE (B) value
Serial.print(" Blue = ");
Serial.println(blueFrequency3);
delay(delay1);
Serial.println();
//**************FIFTH SENSOR*****************************************//
tcaselect(4);
if (bh1750_4.isConversionCompleted()) {
// Read light
lux = bh1750_4.read();
Serial.print(F("bh1750_4 Duration [s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
Serial.print(F("Light: "));
Serial.print(lux / 2);
Serial.print(F("."));
Serial.print(lux % 10);
Serial.println(F(" LUX"));
}
// Setting RED (R) filtered photodiodes to be read
digitalWrite(tcs3200_4_S2,LOW);
digitalWrite(tcs3200_4_S3,LOW);
// Reading the output frequency
redFrequency4 = pulseIn(tcs3200_4_Out, LOW);
//printing time value
Serial.print(F("TCS3200_4 Duration[s]=\t"));
Serial.print(float(millis())/1000);
Serial.print("\t");
// Printing the RED (R) value
Serial.print("Red = ");
Serial.print(redFrequency4);
delay(delay1);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(tcs3200_4_S2,HIGH);
digitalWrite(tcs3200_4_S3,HIGH);
// Reading the output frequency
greenFrequency4 = pulseIn(tcs3200_4_Out, LOW);
// Printing the GREEN (G) value
Serial.print(" Green = ");
Serial.print(greenFrequency4);
delay(delay1);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(tcs3200_4_S2,LOW);
digitalWrite(tcs3200_4_S3,HIGH);
// Reading the output frequency
blueFrequency4 = pulseIn(tcs3200_4_Out, LOW);
// Printing the BLUE (B) value
Serial.print(" Blue = ");
Serial.println(blueFrequency4);
delay(delay1);
Serial.println();
Serial.println();
delay(100);
}
}
}
// closing the client connection
delay(1);
client.stop();
Serial.println("Client disconnected.");
}