Páginas

lunes, 21 de marzo de 2016

Wemos D1


  

 

 

 

 

 

 

 

 

 

Wemos D1 R2

Estoy experimentando con esta placa "compatible" con Arduino, pongo compatible entre comillas porque no es del todo cierto. No es compatible al 100%. 

Partiendo de esta base podemos hacer muchas cosas con él, podemos trabajar con el desde Arduino IDE instalando las librería necesarias:

      - Instalamos Arduino IDE por ejemplo la 1.6.7
      - Arrancamos el Arduino IDE, vamos a Archivo -> Preferencias 
                                                      -> Gestor de URLs Adicionales de Tarjetas
      - Añadimos la URL: 
                  http://arduino.esp8266.com/stable/package_esp8266com_index.json
      - Seguidamente vamos a Herramientas -> Placa -> Gestor de Tarjetas 
      - Buscamos esp8266 by ESP8266 Community y la instalamos

Más info de instalación


Estéticamente es muy parecida a un Arduino Uno y la diferencia principal es el procesador que lleva en vez de llevar un ATmega328P lleva un ESP8266. este chip tiene una ventaja que lo hace muy interesante y es que tiene conectividad WIFI.

Por esta razón lo hace tan interesante, por un precio más que razonable, unos 10€ tenemos un Arduino (compatible) capaz de conectarse a una red inalambrica de una manera muy sencilla.

Me he encontrado con varias librerías que no son compatibles con esta placa pero como para Arduino existen distintas librerías para hacer lo mismo la cuestión es probar varias hasta dar con la que vale para el Wemos.

Antes he dicho que no era compatible 100% y no sólo por el tema de que haya librerías no compatibles si no además a la hora de trabajar con las distintas salidas/entradas nos encontramos con diferencias.

Por ejemplo si queremos utilizar un sensor de humedad/temperatura como el DHT22 en nuestro programa le diremos que se conectará por la entrada Digital D1 que en el Wemos es el GPIO0 que equivale a la entrada Digital D3.


Pin
Pin
Function
ESP-8266 Pin
TX
TXD
TXD
RX
RXD
RXD
A0
Analog input, max 3.3V input
A0
D0
IO
GPIO16
D1
IO, SCL
GPIO5
D2
IO, SDA
GPIO4
D3
IO, 10k Pull-up
GPIO0
D4
IO, 10k Pull-up, BUILTIN_LED
GPIO2
D5
IO, SCK
GPIO14
D6
IO, MISO
GPIO12
D7
IO, MOSI
GPIO13
D8
IO, 10k Pull-down, SS
GPIO15
G
Ground
GND
5V
5V
-
3V3
3.3V
3.3V
RST
Reset
RST



Más información en la web de Wemos.cc

Esto nos puedo complicar al principio pero una vez lo controlas la programación es igual que la de un Arduino normal. Otro inconveniente del Wemos D1 R2 es que sólo dispone de una entrada Analógica (A0) que a priori parece importante pero que luego te das cuenta de que no se echan de menos.

Conforme realice más pruebas con él iré publicando.

miércoles, 24 de febrero de 2016

Sensor apertura Ventana/Puerta

 

  

 

 

 

 

 

 

 

 

 

Sensor apertura Ventana/Puerta

Hoy vamos a ver un ejemplo muy simple que detecta la apertura de una puerta o ventana, para ello necesitamos un  interruptor magnético como este:




Tiene un patilla que va a tierra y la otra a la salida digital 3 del Arduino, como vamos a utilizar las interrupciones no puede ir a cualquier entrada digital, para más información Mira este enlace

Cargamos este ejemplo:


// ######################################
// # Sensor al Digital 3 y a GND
// # Interruptor D3 Interrupcion 1
// # http://arubia45.blogspot.com.es
// ######################################


// Definiciones
boolean abierto = false;
int cambios;

// Rutina de Interrupción
void interrupcion()
{
  abierto = true;
//  Serial.print("cambio ");
  if (cambios == 0)
    cambios ++;
  else {
    cambios = 0;
    abierto = false;
  }
  //Serial.println(cambios);
}

void setup() {
  Serial.begin(9600);
  // Interruptor D3 Interrupcion 1
  digitalWrite(3, HIGH);
  attachInterrupt(1,interrupcion,HIGH); // Attaching the ISR to INT0 
}

void loop() {
  delay (1000);
  if (abierto)
    Serial.println("Abierto");
  else
    Serial.println("Cerrado");
}



Bajar Ejemplo

Es un ejemplo muy simple que requiere que cuando arranquemos la ejecución el interruptor magnético se encuentre cerrado. 




Espero que os sea útil.

martes, 9 de febrero de 2016

Emvio de eMail (SMTP)


  

 

 

 

 

Envio de eMail (SMTP)


Hoy os traigo un par de temas con los que estoy trabajando y que me parecen muy interesantes. Y es trabajar con nuestro Arduino mediante una red ethernet. Para esto tenemos que utilizar un shield ethernet, el más extendido y estandar es el W5100 Más información.


Hay varias formas de enviar mail con nuestro Arduino, hay componentes que nos hacen de intermediarios (como Temboo), mediante telnet a un PC que envie el mail o directamente mediante un servidor de correo smtp.

Esta última opción es la que a mi parecer es la más sencilla y limpia. Ya que sólo dependemos de nuestro Arduino para enviar el mail. Existen algunas restricciones para que podamos utilizar el servidor smtp directamente desde el Arduino, servicios de correo como Google o Yahoo no utilizan puertos estandar y además piden hacer conexiones seguras, algo complicadas para nuestro Arduino. Por lo tanto es necesario buscar un servidor de correo smtp que utilice el puerto estándar 25 sin seguridad. Tras buscar por la red me he decantado por una web de correo que está bastante bien y se ajusta a lo que necesitamos. Se trata de Mail India su datos del servidor smtp son servidor: smtp.india.com y puerto: 25

Sólo nos falta darnos de alta una cuenta y empezar a utilizarlo. Él código original es del PlayGround de Arduino: Código original yo lo he modificado un poco para hacerlo más utilizable.


  1. // Red W5100  
  2. #include "SPI.h"  
  3. #include "Ethernet.h"  
  4.   
  5. // Le asignamos los datos de Red Mac, IP y Puerto.  
  6. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
  7. IPAddress ip( 192, 168, 0, 133 ); 
  8. IPAddress gateway( 192, 168, 0, 1 );
  9. IPAddress subnet( 255, 255, 255, 0 );

  10. // Servidor Mail (mail.india.com)  -> smtp puerto 25
  11. char server_smtp[] = "smtp.india.com";
  12. int port = 25;


Primero en nuestro código añadimos las librerías necesarias, configuramos la conexión a nuestra red, en este caso le damos la IP 192.168.0.133 al Arduino y por último ponemos los datos del servidor de correo.


  1. void setup()  
  2. {  
  3.   Serial.begin(9600);  
  4.   // Inicializamos la conexión Ethernet  
  5.   Ethernet.begin(mac, ip, gateway, gateway, subnet); 
  6.   delay(2000); 
  7. }  

En la función setup inicializamos la conexión para conectarnos a la red. De esta forma ya se conectaría el Arduino a nuestra red ethernet .



  1. byte enviaEmail(String email)
  2. {
  3.   
  4.   //LAN
  5.   String mi_ip    = "192.168.0.133";
  6.   String mi_mail  = "XXXXXX@india.com";

  7.   byte thisByte = 0;
  8.   byte respCode;
  9.   email = "RCPT To: <" + email + ">";
  10.   char mail_char[50];
  11.   email.toCharArray(mail_char,30);


  12.   Serial.print(F("Envio Mail ALRO: "));
  13.   Serial.println(email);
  14.  
  15.   if(client.connect(server_smtp,port) == 1) {
  16.     if (debug >= 2)
  17.       Serial.println(F("conectado servidor SMTP"));
  18.   } else {
  19.     if (debug >= 1)
  20.       Serial.println(F("conexion servidor SMTP Error"));
  21.     return 0;
  22.   }
  23.  
  24.   if(!eRcv_smtp()) return 0;

  25.   if (debug >= 2)
  26.     Serial.println(F("Enviando hola"));
  27.   client.print("EHLO ");
  28.   client.println(mi_ip);
  29.   if(!eRcv_smtp()) return 0;

  30.   if (debug >= 2)
  31.     Serial.println(F("Enviando autorizacion login"));
  32.   client.println("auth login");
  33.   if(!eRcv_smtp()) return 0;

  34.   if (debug >= 2)
  35.     Serial.println(F("Enviando Usuario"));
  36. // Cambiar codificado en Base64
  37.   client.println("VAaW43ft5kaWE0s2");
  38.   if(!eRcv_smtp()) return 0;

  39.   if (debug >= 2)
  40.     Serial.println(F("Enviando contraseña"));
  41. // Cambiar codificado en Base64
  42.   client.println("UGoeVTk3Mr58w==");
  43.  
  44.   if(!eRcv_smtp()) return 0;
  45.  
  46.   if (debug >= 2)
  47.     Serial.println(F("Enviando desde"));
  48.   
  49.   client.print("MAIL From: <");
  50.   client.print(mi_mail);
  51.   client.println(">");
  52.   if(!eRcv_smtp()) return 0;
  53.  
  54.   if (debug >= 2)
  55.     Serial.println(F("Enviando a"));
  56.   
  57.   
  58.   client.println(mail_char);
  59.   if(!eRcv_smtp()) return 0;
  60.  
  61.   if (debug >= 2)
  62.     Serial.println(F("Enviando Datos"));
  63.   client.println("DATA");
  64.   if(!eRcv_smtp()) return 0;
  65.  
  66.   if (debug >= 2)
  67.     Serial.println(F("Enviando email"));
  68.  
  69.   client.print("To: ALRO <");
  70.   client.print(email);
  71.   client.println(">");
  72.  
  73.   client.print("MAIL From: <");
  74.   client.print(mi_mail);
  75.   client.println(">");
  76.  
  77.   client.println("Subject: Arduino email test\r\n");
  78.  
  79.   client.println("El Arduino te mandan un mail de prueba."); 
  80.   client.println("Espero que te guste del blog arubia45.blogspot.com.es");
  81.  
  82.   client.println(".");
  83.  
  84.   if(!eRcv_smtp()) return 0;
  85.  
  86.   if (debug >= 2)
  87.     Serial.println(F("Enviando QUIT"));
  88.   client.println("QUIT");
  89.   if(!eRcv_smtp()) return 0;
  90.  
  91.   client.stop();
  92.  
  93.   if (debug >= 2)
  94.     Serial.println(F("desconectado"));
  95.  
  96.   return 1;
  97. }

Insertamos nuestro código, algo parecido a esto que os pongo (faltan algunas funciones que se llaman que lo puedes ver en el post original de Arduino PlayGround que pongo más arriba). El usuario y contraseña se ha de codificar en Base64 UTF-8, lo podéis hacer desde esta web: Encode Base64

  1. void loop() {  
  2.     enviaEmail("xxxx@gmail.com"))
  3. }

Espero que esta entrada os haya sido util y que os ayude a mejorar con nueva funcionalidad los desarrollos en Arduino.