Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - jgarridc

#1
Hola buenas, saludos a todos y todas, voy a explicar cual es el proyecto que llevo en mente y a ver si alguien que controle de programación me puede dar una solución, ya que yo me dedico a robar código, pero a la hora de escribirlo ya me cuesta un poco.

El tema es que quiero poder hacer una lectura de temperatura de una habitación y poder encender o apagar una calefacción desde el móvil android, para ello quiero usar "solamente un ESP8266 ESP-01" nada más.

1º - El tema es que ya tengo el código configurado del módulo ESP8266 para que me lea un sensor de temperatura LM35 en la patilla gpio0 y que la información me la mande a la web thingspeak, te bajas luego la aplicación móvil y ya tienes un registro de temperatura de donde quieras conectado a tu wifi y pudiendo verlo con el móvil desde donde sea, hasta aquí perfecto, sin problemas.

2º - Con el código del punto anterior lo que hago es recoger datos y enviarlos a una web, pero lo que quiero ahora es poder "enviar" desde el teléfono móvil una señal para activar la patilla gpio2 y de esta forma activar o desactivar la calefacción.

Bien, los dos puntos por separado los tengo resueltos con sus respectivos códigos, el punto primero además de leer la temperatura y enviarla a thingspeak también me gestiona la temperatura de la habitación, actúa como termostato.

Teniendo en cuenta los costos y demás, la verdad es que si uso dos módulos ESP8266 no me va a salir por mas de 5 euros, pero claro, pudiendo compactar todo en uno, pues eso que me ahorro luego en alimentar el circuito, menos engorros con IP´s y demás. Porque he pensado en usar un módulo ESP8266 para enviar la temperatura y usar otro módulo para mover el relé que actuará sobre la caldera, pero como soy cabezón, quiero hacerlo con tan sólo un, pero ahí es donde choco.

Voy a adjuntar los sketchs que estoy usando por separado, el tema sería poder unir los dos en uno, pero me es imposible por mis carencias en programación.
#include <ThingSpeak.h>
#include<ESP8266WiFi.h>

String apiKey = "xxxxxxxxxxxxxx";
const char* ssid = "ONOABAB";
const char* password = "xxxxxxxx";
const char* server = "api.thingspeak.com";
float temp= 0;

int analog=0;
const int pinled = 2;


WiFiClient client;
unsigned long myChannelNumber = xxxxxx;
const char * myWriteAPIKey = "xxxxxxx";

void setup() {

   // prepare GPIO2
pinMode(1, OUTPUT);
digitalWrite(1, 0);

pinMode(pinled, OUTPUT); 

// put your setup code here, to run once:
Serial.begin(9600);
delay(10);
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while( WiFi.status()!=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
ThingSpeak.begin(client);
}

void loop() {


// put your main code here, to run repeatedly:
analog=analogRead(0);



float temp= (5.0 * analog * 100.0)/1024.0;

     if (temp <=23)
     {
     digitalWrite(pinled, HIGH);
     }
     else
     {
     digitalWrite(pinled, LOW);
     }

Serial.print("Temperatura: ");

Serial.println(temp);
Serial.println("Enviando datos...");
Serial.println();
Serial.println("Midiendo temperatura....");
ThingSpeak.writeField(myChannelNumber, 1, temp, myWriteAPIKey);
delay(20000);
}


Sketch con el que, usando AppInventor envío un impulso a la patilla gpio0 del ESP8266:

#include <ESP8266WiFi.h>

const char* ssid = "xxxxxxx";
const char* password = "xxxxxx";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
Serial.begin(9600);
delay(10);

// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);

// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

// Start the server
server.begin();
Serial.println("Server started");

// Print the IP address
Serial.println(WiFi.localIP());
}

void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
   return;
}

// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
   delay(1);
}

// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();

// Match the request
int val;
if (req.indexOf("/gpio/0") != -1)
   val = 0;
else if (req.indexOf("/gpio/1") != -1)
   val = 1;
else {
   Serial.println("invalid request");
   client.stop();
   return;
}

// Set GPIO2 according to the request
digitalWrite(2, val);

client.flush();

// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val)?"high":"low";
s += "</html>\n";

// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");

// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}




Pues eso, lo que me gustaría es poder combinar los dos códigos en uno y conseguir leer los datos del LM35 y poder recibir un impulso en la patilla gpio0, pero todo en un sólo módulo ESP8266.


Quizás sea la cosa mas chorra del mundo, pero me es totalmente imposible hacerme una idea de como hacerlo, y os aseguro que lo he intentado con mil combinaciones, pero nada, también decir que sé que hay mas opciones, módulos ESP8266 más grandes y con mas opciones de programación, que puedo usar un arduino nano o UNO, etc etc.....el tema es que quiero hacerlo en plan "stand alone", usar un simple módulo ESP8266 ESP-01 para conseguir esto....

¿Alguna ayuda?

Mil gracias por vuestro tiempo.
#2
En cuanto pueda lo monto en la protoboard y lo compruebo físicamente, mucha gracias.
#4
Es todo sobre proteus, de momento no he montado nada físico....pero en la simulación pasa como he descrito...

Proteus: https://www.dropbox.com/s/ofmymx0bm0advxt/prueba%20finales%20de%20carrera1.pdsprj?dl=0

Arduino: https://www.dropbox.com/s/uwg3ad5f7i3ultr/prueba%20finales%20de%20carrera.ino?dl=0
#5
Hola buenas a tod@s, el tema es que he montado en proteus un arduino con un motor y dos finales de carrera, al meter desde el terminal virtual unos comandos el programa hará una cosa u otra y según como estén los finales de carrera, pues lo mismo. El problema me viene a una vez que el programa ha terminado, si pulso los finales de carrera o envío un comando por el terminal virtual ya no me hace caso.
Lo que pretendo es que esté en un buble infinito y el arduino siga ejecutando el programa, hasta que yo decida pararlo o lo desconecte de la corriente...

const byte giroMotorDerecha = 8;
const byte giroMotorIzquierda = 12;
const byte sensorDerecha = 11;
const byte sensorIzquierda = 10;
char valor;
bool switchDer, switchIzq, mIzq, mDer;

void setup() {
  pinMode(giroMotorDerecha, OUTPUT);
  pinMode(giroMotorIzquierda, OUTPUT);
  pinMode(sensorDerecha, INPUT);
  pinMode(sensorIzquierda, INPUT);
  Serial.begin(9600); // inicializa comunicación serie
}

void loop() {

  switchDer = digitalRead(sensorDerecha);
  switchIzq = digitalRead(sensorIzquierda);
  mIzq = digitalRead(giroMotorIzquierda);
  mDer = digitalRead(giroMotorDerecha);

  // Leo del puerto serie la orden enviada Devuelve 'r', 'd', 'i'
  if (Serial.available() > 0)
     valor = Serial.read();

 
     
          if (switchDer)  // paroMotorDerecha
          digitalWrite(giroMotorDerecha, LOW);
     
          if (switchIzq) // paroMotorIzquierda
          digitalWrite(giroMotorIzquierda, LOW);
       

     
if (valor == 'r' && !switchDer && !switchIzq)
     digitalWrite(giroMotorDerecha, HIGH);
             
if (valor == 'd' && switchIzq && !switchDer)
     digitalWrite(giroMotorDerecha, HIGH);
         

if (valor == 'i' && switchDer && !switchIzq)
    digitalWrite(giroMotorIzquierda, HIGH);
             
                 
}
#6
Programación C/C++ / Re: Hola, una ayudita please
11 Noviembre 2015, 19:39 PM
Muchísimas gracias, estoy estudiando C por mi cuenta, por placer y toda ayuda es poca....gracias de nuevo.
#7
Programación C/C++ / Re: Hola, una ayudita please
11 Noviembre 2015, 19:22 PM
Joer, muchísimas gracias Avesudra me estaba volviendo loco, estoy aprendiendo a programar en C y estoy muy verde, pues eso, mil gracias por tu tiempo y un saludo.
#8
Programación C/C++ / Hola, una ayudita please
11 Noviembre 2015, 19:08 PM
¿por qué no me funciona éste código?, esta hecho para contar la cantidad de dígitos de un número cualquiera, siempre entero.

#include <stdio.h>
#include <conio.h>



void main(){

    int num,cd;
    cd=0;

    printf("Introduzca numero: ");
    scanf("%d ", &num);


        while (num!=0)
            {

            num = num/10;
            cd++;
           
        }
        printf("El numero consta de %d digitos", cd);
        system("pause");
}
#9
Vaya, era un problema con avast, he excluido la carpeta donde tengo los proyectos y los archivos *.cpp y solucionado.....lo que no entiendo es porqué ahora no me iba cuando no he tenido problemas con el avast en ningún momento, supongo que habrá sido alguna actualización o similar.....gracias por las molestias y un saludo...
#10
Programación C/C++ / Re: Problema codeblocks
8 Noviembre 2015, 21:02 PM
Pues desde cmd si ejecuto el .exe tampoco hace nada, sí el código está ok, ni tan siquiera me deja ejecutar un hola mundo. Y ya te digo que se queda activo como proceso y si no reinicio no consigo eliminar éste...........madre mía que cosa mas rara....