Estacion.ino

 /* 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);
}