#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <ThingSpeak.h>
LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display
// DS18B20 data wire
#define ONE_WIRE_BUS 0
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Datos de red WiFi (modificar)
const char* ssid = "your-ssid"; // Nombre de la red
const char* password = "your-password"; // Contraseña
// Informaciòn disponible en ThingSpeak:
unsigned long channel = 1234567; // Número de canal ThingSpeak
const char * ClaveEscrituraAPI = "A1B2C3D4E5F6G7H8"; // Clave de escritura ThingSpeak
float sensor; // Variable para almacenar el valor leído por el sensor
float temp;
float sensor_ant;
float temp_ant;
WiFiClient client;
#define I0 16
#define I1 14
#define I2 12
#define Q0 2
#define Q1 15
#define Q2 13
#define estado_I0 digitalRead(I0)
#define estado_I1 digitalRead(I1)
#define estado_I2 digitalRead(I2)
boolean estado_I0_ant;
boolean estado_I1_ant;
boolean estado_I2_ant;
byte alto[] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B00000,
};
byte bajo[] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B11111,
B00000,
};
void estados() {
if (WiFi.status() == WL_CONNECTED)
{
lcd.setCursor(0,0);
lcd.print("Conectado a T_Speak ");
lcd.setCursor(0,1);
lcd.print("I: ");
lcd.write(digitalRead(I0));
lcd.print(" ");
lcd.write(digitalRead(I1));
lcd.print(" ");
lcd.write(digitalRead(I2));
lcd.setCursor(0,2);
lcd.print(" 0 1 2");
lcd.setCursor(0,3);
lcd.print("Q: ");
lcd.write(digitalRead(Q0));
lcd.print(" ");
lcd.write(digitalRead(Q1));
lcd.print(" ");
lcd.write(digitalRead(Q2));
}
else
{
lcd.clear();
delay(500);
lcd.print("Conectando a T_Speak");
delay(500);
}
}
void setup() {
// put your setup code here, to run once:
pinMode(I0, INPUT);
pinMode(I1, INPUT);
pinMode(I2, INPUT);
pinMode(Q0, OUTPUT);
pinMode(Q1, OUTPUT);
pinMode(Q2, OUTPUT);
sensors.begin();
lcd.begin(20, 4); // initialize the lcd
lcd.createChar(0, bajo);
lcd.createChar(1, alto);
delay(200);
lcd.setBacklight(255);
WiFi.begin(ssid, password);
estados();
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
ThingSpeak.begin(client);
}
void loop() {
// put your main code here, to run repeatedly:
sensor = analogRead(A0);
sensors.requestTemperatures(); // Send the command to get temperatures
temp = sensors.getTempCByIndex(0);
if (sensor != sensor_ant || temp != temp_ant || estado_I0 != estado_I0_ant || estado_I1 != estado_I1_ant || estado_I2 != estado_I2_ant)
{
ThingSpeak.setField(1, sensor);
ThingSpeak.setField(2, temp);
ThingSpeak.setField(3, estado_I0);
ThingSpeak.setField(4, estado_I1);
ThingSpeak.setField(5, estado_I2);
// Escribe en ThingSpeak: (número del canal, clave de escritura)
ThingSpeak.writeFields(channel, ClaveEscrituraAPI);
}
int field6 = ThingSpeak.readIntField(channel, 6);
int field7 = ThingSpeak.readIntField(channel, 7);
int field8 = ThingSpeak.readIntField(channel, 8);
digitalWrite(Q0, field6);
digitalWrite(Q1, field7);
digitalWrite(Q2, field8);
estados();
delay(1000);
sensor_ant = sensor;
temp_ant = temp;
estado_I0_ant = estado_I0;
estado_I1_ant = estado_I1;
estado_I2_ant = estado_I2;
}