hola, estoy un poco desorientado de como seguir, aprendo solo estuve buscando varias cosas por google pero no me sacan ciertas dudas con referente al proyecto ya que lo lleve a una complejidad que me sobrepaso, es tanto el esp8266 como la comunicacion spi entre dos arduinos, tanto crear que me lanze de una hacer este proyecto sin saber nada hace alrededor de 2 años me entere lo que era arduino y el mundo relacionado consigo.
imagen de mi primera PCB yo se que se ve desprolija pero me asegure que sus pistas no se puenten con el tester, asi que fea pero funcional.
el codigo basicamente es esto
//#include <SPI.h> //libreria comunicaciion SPI
#include <TimeLib.h> //libreria tiempo
#include <TimeAlarms.h> // libreria tiempo alarmas
#include <Wire.h> // comunicacion I2C libreria
#include "RTClib.h" // Libreria RTC libre adafruit
#include <SoftwareSerial.h> // libreria comunicaccion serial (wifi)
#include "DHT.h" // libreria DHT11 adafruit sensor de humedad y temperatura relativa del ambiente
#define DHTPIN 2 //defino pin digital 2
#define DHTTYPE DHT11 //defino tipo de sensor
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial ESP_8266 = SoftwareSerial(5, 4); // RX | TX
RTC_DS1307 rtc; //modelos de RTC
char daysOfTheWeek[7][12] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"}; //nombres para los dias de la semana
String apiKey = "DK59X5DLS04TVFG5"; // cambiar por el canal de THINGSpeak
String ssid="WIFI NAME"; // Wifi network SSID
String password ="WIFI PASSWORD"; // Wifi network password
boolean DEBUG=true;
int Buzzer = 9; //Buezzer pin 9 PWNM
int Relay_01 = 6; // Relays
int Relay_02 = 7;
int Relay_03 = 8;
const int LM35_A = A0; //sensor de temperatura onboar
const int LM35_B = A1;
const int FC_28 = A2; //sensor de humedad relativa del suelo
const int LDR = A3; //Fotosensor o Fotoresistor
void setup() {
Serial.begin(57600); //inicia comunicacion serial PC
Serial.println("Testeo A");
dht.begin(); //inicia DHT11
//ESP8266.begin(9600); //inicia ESP8266
pinMode (Buzzer, OUTPUT); //pines de salida
pinMode (Relay_01, OUTPUT);
pinMode (Relay_02, OUTPUT);
pinMode (Relay_03, OUTPUT);
pinMode (LM35_A, INPUT); //pines de entrada
pinMode (LM35_B, INPUT);
pinMode (FC_28, INPUT);
pinMode (LDR, INPUT);
if (! rtc.begin()) { //inicia RTC en condicion
Serial.println("RTC no se pudo encontrar");
}
if (! rtc.isrunning()) {
Serial.println("RTC no esta funcionando");
//rtc.adjust(DateTime(2017, 7, 29, 17, 14, 0)); //ajuste del RTC DS-1307
//(Año, Mes, Dia, Hora, Minutos, Segundos)
}
//Alarm.alarmRepeat(5, 00, 0, Relay0001ON); //alarmas
//Alarm.alarmRepeat(8, 00, 0, Relay001ON);
//Alarm.alarmRepeat(11, 00, 0, Relay01ON);
//Alarm.alarmRepeat(17, 00, 0, Relay01OFF);
//Alarm.alarmRepeat(20, 00, 0, Relay001OFF);
//Alarm.alarmRepeat(23, 00, 0, Relay0001OFF);
Alarm.alarmRepeat(18, 00, 0, Relay01ON);
Alarm.alarmRepeat(18, 10, 0, Relay01OFF);
}
void loop() {
LDRlectura();
HRdSuelo ();
LM35_Leyendo ();
DHT_11Leyendo ();
Reloj ();
Alarm.delay(5000);
}
void LDRlectura() {
const int ValorLDR1 = analogRead (LDR);
const int ValorLDR2 = analogRead (LDR);
const int ValorLDR3 = analogRead (LDR);
const int ValorLDR4 = analogRead (LDR);
const int ValorLDR5 = analogRead (LDR);
const int ValorLDR6 = analogRead (LDR);
const int ValorLDR7 = analogRead (LDR);
const int ValorLDR8 = analogRead (LDR);
const int ValorLDR9 = analogRead (LDR);
const int ValorLDR0 = analogRead (LDR);
const int ValorLDR = (ValorLDR0 + ValorLDR1 + ValorLDR2 + ValorLDR3 + ValorLDR4 + ValorLDR5 + ValorLDR6 + ValorLDR7 + ValorLDR8 + ValorLDR9) / 10;
Serial.println("Lectura del LDR");
Serial.println(ValorLDR);
}
void HRdSuelo() {
const int HRDS = analogRead (FC_28);
Serial.println("Lectura de humedad relativa del suelo");
Serial.println(HRDS);
}
void LM35_Leyendo() {
const int Temp01 = analogRead (LM35_A);
const int Temp02 = analogRead (LM35_A);
const int Temp03 = analogRead (LM35_A);
const int Temp04 = analogRead (LM35_A);
const int Temp05 = analogRead (LM35_A);
const int Temp06 = analogRead (LM35_A);
const int Temp07 = analogRead (LM35_A);
const int Temp08 = analogRead (LM35_A);
const int Temp09 = analogRead (LM35_A);
const int Temp10 = analogRead (LM35_A);
const int Temp1 = (Temp01 + Temp02 + Temp03 + Temp04 + Temp05 + Temp06 + Temp07 + Temp08 + Temp09 + Temp10) / 10;
const int TEMP01 = analogRead (LM35_B);
const int TEMP02 = analogRead (LM35_B);
const int TEMP03 = analogRead (LM35_B);
const int TEMP04 = analogRead (LM35_B);
const int TEMP05 = analogRead (LM35_B);
const int TEMP06 = analogRead (LM35_B);
const int TEMP07 = analogRead (LM35_B);
const int TEMP08 = analogRead (LM35_B);
const int TEMP09 = analogRead (LM35_B);
const int TEMP10 = analogRead (LM35_B);
const int Temp2 = (TEMP01 + TEMP02 + TEMP03 + TEMP04 + TEMP05 + TEMP06 + TEMP07 + TEMP08 + TEMP09 + TEMP10) + 10;
Serial.println("Lectura de temperatura ONBOARD");
Serial.println(Temp1);
Serial.println("Lectura de temperatura ONBOARD_02");
Serial.println(Temp2);
}
void DHT_11Leyendo() {
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
//float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) /*|| isnan(f)*/) {
Serial.println("Fallo al leer el sensor DHT11");
return;
}
// Compute heat index in Fahrenheit (the default)
//float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
//float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C ");
//Serial.print(f);
//Serial.print(" *F");
//Serial.print("Heat index: ");
//Serial.print(hic);
//Serial.print(" *C ");
//Serial.print(hif);
//Serial.println(" *F");
}
void Reloj () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
void Relay01ON () {
digitalWrite (Relay_01, HIGH);
Serial.println("Luz Prendida");
}
void Relay01OFF () {
digitalWrite (Relay_01, LOW);
Serial.println("Luz Apagada");
}
El arduino B
//#include <SPI.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int led01= 8;
int led02= 9;
int led03= A4;
int Boton01= A0;
int Boton02= A1;
int Boton03= A2;
int Boton04= A3;
void setup() {
pinMode(Boton01, INPUT);
pinMode(Boton02, INPUT);
pinMode(Boton03, INPUT);
pinMode(Boton04, INPUT);
pinMode(led01, OUTPUT);
pinMode(led02, OUTPUT);
pinMode(led03, OUTPUT);
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(0, 1);
lcd.print("hello, world!");
}
no se si se comprende pero la idea es que el lcd 16x2 leds y botones esten conectados a mi atmega328 B (esclavo) y El atmega328 A sea el que interactue con los sensores y relays ademas de una comunicacion serial por el conversor USB y WIFI ESP8266.
cuando empece analizar el codigo del esclavo no pude comprender como hacer para el server reciba el dato de los botones asi cambiar de rutina con el relay, y que el esclavo reciba el dato del RTC1307 (por i2c al Server) para mostrarlo en el LCD.
si no se comprende la pregunta diganme
