jueves, 9 de junio de 2016

Ejemplos Basicos (1) - Encender / Apagar una Salida



 

En esta primera entrada vamos a tratar el mas simple de los ejemplos, encender y apagar una Salida, sea para controlar un Led, para controlar un Rele o para utilizar Transistores para controlar tiras led de 12v. En este tutorial planteamos ejemplos para ESP8266, pero tal y como se ha explicado antes se puede aplicar tanto al ESP8266 como Arduino.

Pasamos directamente al ejemplo :)



/**************************************************************************
    Souliss - Hello World for Expressif ESP8266
   
    This is the basic example, create a software push-button on Android
    using SoulissApp (get it from Play Store). 
   
    Load this code on ESP8266 board using the porting of the Arduino core
    for this platform.
       
***************************************************************************/

// Let the IDE point to the Souliss framework
#include "SoulissFramework.h"

// Configure the framework
#include "bconf/MCU_ESP8266.h"              // Load the code directly on the ESP8266
#include "conf/Gateway.h"                   // The main node is the Gateway, we have just one node
#include "conf/IPBroadcast.h"

// **** Define the WiFi name and password ****
#define WIFICONF_INSKETCH
#define WiFi_SSID               "mywifi"
#define WiFi_Password           "mypassword"   

// Include framework code and libraries
#include <ESP8266WiFi.h>
#include <EEPROM.h>

/*** All configuration includes should be above this line ***/
#include "Souliss.h"

// This identify the number of the LED logic
#define MYLEDLOGIC          0
              

// **** Define here the right pin for your ESP module ****
#define OUTPUTPIN   5

void setup()
{  
    Initialize();

    // Connect to the WiFi network and get an address from DHCP
    GetIPAddress();                          
    SetAsGateway(myvNet_dhcp);       // Set this node as gateway for SoulissApp 

    Set_SimpleLight(MYLEDLOGIC);        // Define a simple LED light logic

    pinMode(OUTPUTPIN, OUTPUT);         // Use pin as output

}

void loop()
{
    // Here we start to play
    EXECUTEFAST() {                    
        UPDATEFAST();  
       
        FAST_50ms() {   // We process the logic and relevant input and output every 50 milliseconds
            Logic_SimpleLight(MYLEDLOGIC);
            DigOut(OUTPUTPIN, Souliss_T1n_Coil,MYLEDLOGIC);

        }
             
        // Here we handle here the communication with Android
        FAST_GatewayComms();                                       
    }
}

Como se puede ver en las partes de codigo resaltadas el codigo no son mas que 5 lineas.
  • En primer lugar por comodidad se #define el SLOT para luego utilizarlo en el codigo, esto con un solo Slot no tiene mucho sentido, pero cuando empezamos a poner mas Slots es mas sencillo equivocarse y mas complicado "reorganizar" los Slots, por lo que es una practica recomendable.
  • En segundo lugar en el setup() se configura el Slot como un SimpleLight (Salida con encendido y apagado) y indicamos que el PIN será utilizado como Salida.
  • En tercer y ultimo lugar se ejecuta la logica (el codigo que determinará el funcionamiento de la salida) y el comando DigOut que se encarga unicamente de actuar sobre el PIN para reflejar el estado del Slot.
Como nota final cabe destacar que en algunos casos, principalmente cuando utilizamos Relés estos actuan en modo inverso, esto quiere decir que cuando el Rele recibe un estado LOW (o 0v) estará activado (encendera el dispositivo de 220v conectado al Rele) y cuando recibe corriente del Pin (Estado HIGH o 3.3-5v) el Rele estará desactivado (el dispositivo de 220v estará apagado)
Para que el estado del PIN corresponda con el del Slot y no al reves hay que cambiar simplemente el comando DigOut por LowDigOut, con ello el Pin reaccionará de forma correcta.

En el caso del LowDigOut tambien es de uso recomendable el comando digitalWrite(OUTPUTPIN, HIGH); antes del PinMode del setup() para evitar encendidos en falso al conectar la alimentacion al nodo.

Para una comprension mas profunda de la estructura es recomendable leer esta Entrada:
Estructura del código Souliss

Comentarios, sugerencias o preguntas aqui abajo :P Salu2



6 comentarios:

  1. Hola soy lucas hace tiempo que vengo usando souliss, te queria hacer una consulta. Se puede crear un slot sin definir a que pin esta? ejemplo pongo un pulsador en la aplicacion souliss cuando el arduino reciba el pulso ejecute una series de acciones. Desde ya muchas gracias

    ResponderEliminar
    Respuestas
    1. Si claro!, unicamente debes quitar la linea del DigOut :P

      Salu2

      Eliminar
  2. hola, al cargar en el arduino me sale este error como lo soluciono, no lo veo por ningun lado.....

    In file included from C:\Users\Documents\arduino-1.8.2\libraries\ESP8266WiFi\src/ESP8266WiFi.h:33:0,

    from C:\Users\Documents\Arduino\sketch_may08a\sketch_may08a.ino:26:

    C:\Users\Documents\arduino-1.8.2\libraries\ESP8266WiFi\src/ESP8266WiFiType.h:26:19: fatal error: queue.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Error compilando para la tarjeta Arduino/Genuino Uno.

    Muchas gracias un saludo

    ResponderEliminar
    Respuestas
    1. Hola Miguel Angel, te esta dando error porque intentas compilar un sketch de ESP8266 en un Arduino, revisa esta entrada del blog y encontrarás el ejemplo para Arduino :P
      https://souliss-es.blogspot.com.es/2016/06/configuracion-basica-de-la-conexion.html

      Un saludo

      Eliminar
  3. Jeje ya lo vi...... y efectivamente seguí un tutorial de como programar el esp y ya tengo en marcha souliss, si en marcha quiere decir encender y apagar un led..... :)

    ResponderEliminar
  4. Hola,
    He seguido el tutorial y me ha funcionado perfectamente, luego, agregue más salidas digitales definiendo las variables según me parecía:
    * OUTPUTPIN1, OUTPUTPIN2, OUTPUTPINN
    * MYLEDLOGIC1, MYLEDLOGIC2, MYLEDLOGICN
    Con esto logro hacerlos funcionar individualmente sin problemas, pero cuando pongo varios en una escena no realiza todas las acciones programadas... cual puede ser el problema?

    ResponderEliminar