/* Comienzo de las pruebas con SIM900A 16/4/25
Fin de pruebas 2/05/25
Incluyo millis y medida de voltios */
#include "DHT.h"
#include <String.h>
#include <SoftwareSerial.h>
#define DHTTYPE DHT11 // DHT 11
#define A0 0
#define A1 1
SoftwareSerial Sim900(0, 1);//Configarión de los pines serial por software
const int DHTPin = 4; // what digital pin we're connected to
const int Trigger = 12; //Pin digital 2 para el Trigger del sensor
const int Echo = 13; //Pin digital 3 para el Echo del sensor
int i = 0;
DHT dht(DHTPin, DHTTYPE);
void mostrarDatosSeriales() { //Muestra los datos que va entregando el sim900
delay(500);
if (Sim900.available()) {
i++;
String response = Sim900.readString();
Serial.print(i);
Serial.print(" SIM900: ");
Serial.println(response);
}
}
void power_on()
{
Serial.println("Entro en PowerOn");
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
Serial.println("comprobar arranque en 12 segundos");
delay(12000);
Sim900.println("AT");
mostrarDatosSeriales();
Sim900.println("AT+CIPSHUT");
mostrarDatosSeriales();
Sim900.println("AT+CREG?");
mostrarDatosSeriales();
Sim900.println("AT+CIPSTATUS");
mostrarDatosSeriales();
Sim900.println("AT+CIPMUX=0");
mostrarDatosSeriales();
Sim900.println("AT+CSTT=\"TM\",\"\",\"\"");
mostrarDatosSeriales();
Sim900.println("AT+CIICR");
mostrarDatosSeriales();
Sim900.println("AT+CIFSR");
mostrarDatosSeriales();
Sim900.println("AT+CIPSPRT=0");
mostrarDatosSeriales();
Sim900.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");
mostrarDatosSeriales();
}
// elimino temporalmente las macros que no uso
void power_off()
{
Sim900.println("AT+CIPSHUT");//Cierra la conexión(Desactiva el contexto GPRS PDP)
delay(500);
mostrarDatosSeriales();
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
Serial.println("power_off");
delay(1000);
}
void setup() {
pinMode(9, OUTPUT);
float t1 = 0;
float t2 = 0;
t1 = millis();
Sim900.begin(57600); //Arduino se comunica con el SIM900 a una velocidad /
Serial.begin(19200);
delay(1000);
Serial.println("Inicio");
pinMode(Trigger, OUTPUT); //pin como salida
pinMode(Echo, INPUT); //pin como entrada
digitalWrite(Trigger, LOW);//Inicializamos el pin con 0
dht.begin();
//Encendido del módulo y arranque por sofware
Serial.println("voy a power");
power_on();
delay(2000);
int analogValor = 0;
// Leer temperatura y humedad
float h = dht.readHumidity();
float t = dht.readTemperature();
long td; //timepo que demora en llegar el eco
long d; //distancia en centimetros
float v = 0;
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
td = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso
d = td/59; //escalamos el tiempo a una distancia en cm
if (isnan(h) || isnan(t)) {
Serial.println("Falló la lectura del sensor DHT");
h = 0;
t = 0;
// return;
}
int suelo = analogRead(A1);
float por100 = map(suelo,0,1023,0,100);
por100 = 100.00 - por100;
analogValor = analogRead(A0);
// Obtenemos el voltaje
v = 0.023706 * analogValor; //valor va de 0 a 1024 pasar de 0v a 5v = 0,004878 *8/3 (son 8 pilas y medimos 3) = 0,013
t2 = millis();
t2 = (t2 -t1)/1000;
String getStr = "GET https://api.thingspeak.com/update?api_key=SSDG15CE841J85IG"; // prepare GET string
getStr +="&field1=";
getStr += String(t);
getStr +="&field2=";
getStr += String(h);
getStr +="&field3=";
getStr += String(d);
getStr +="&field4=";
getStr += String(v);
getStr +="&field5=";
getStr += String(t2);
getStr +="&field6=";
getStr += String(por100);
// ...
getStr += "\r\n\r\n\r\n\r\n\r\n\r\n";
// veo que he hecho
Serial.print("getStr= ");
Serial.println(getStr);
// Muy importante enviar la longitud exacta del texto
String cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
Sim900.println(cmd);
mostrarDatosSeriales();
delay(3000);
// Y ahora mando el texto
Sim900.println(getStr);
mostrarDatosSeriales();
// el simbolo >
delay(3000);
Sim900.println((char)62);
delay(4000);
Serial.println("PRUEBO recepción de la WEB");
Sim900.println("GET https://api.thingspeak.com/channels/ 2564438 /status.json?api_key= DSEI7S4LDZSWTGJ6");
mostrarDatosSeriales();
int leo = Sim900.read();
void mostrarDatosSeriales(); //Muestra los datos que va entregando el sim900
Serial.println(leo); // y responde "-1" = exito (acceso al canal ThigSpeak)
power_off();
delay(20000);
// me tiene que apagar el rele
}
void loop() {
Serial.println("me tiene que apagar el rele");
delay(5000);
}