Páginas

sábado, 26 de enero de 2013

LAN ENC28J60 y LCD I2C Arduino


 



 

  

 

 

 

 

LAN ENC28J60 y LCD I2C


Os dejo un pequeño ejemplo de montar una web muy simple con un LCD I2C, donde podremos ver la IP y el número de petciones recibidas via web.





// Modulo Ethernet ENC28J60 y LCD I2C

// http://arubia45.blogspot.com.es/

// Librerias necesarias LAN
#include "etherShield.h"
#include "ETHER_28J60.h" 
// Librerias necesarias LCD
#include "Wire.h"  
#include "LiquidCrystal_I2C.h"   

// Le asignamos una máscara de red única.
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; 

// Le damos una IP dentro del rango de nuestra red 
static uint8_t ip[4] = {192, 168, 1, 15}; 

// Por último definimos un puerto para la web, el 80 es el de por defecto. 
static uint16_t port = 80; 
ETHER_28J60 ethernet;

// Definición del tipo de LCD  
// 20 caracteres por línea y 4 líneas.    
LiquidCrystal_I2C lcd(0x27,20,4);   
// Contador 
int i;

void setup()
{ 
  // Iniciar LAN
  ethernet.setup(mac, ip, port);
  // Iniciar LCD  
  lcd.init();                        
  lcd.backlight();  
  lcd.home();  
  lcd.print("Hola Mundo");  
  delay (3000);  
  lcd.clear();
}

void loop()
{
  lcd.setCursor(0,0);
  lcd.print("IP: 192.168.1.15");
  if (ethernet.serviceRequest())
  {
    ethernet.print("Hola Mundo ");
    ethernet.print("Peticiones: ");
    ethernet.print(i);
    ethernet.respond();
    lcd.setCursor(2,2);
    lcd.print("Peticiones: ");
    lcd.print(i);
    i++;
  }
  delay(100);
}





Bajar Ejemplo

 

10 comentarios:

  1. Me gustan tus ejemplos. Me van muy bien para lo que estoy montando en casa.

    Ahora estoy teniendo problemas para mezclar la LiquidCrystal_I2C.h y la EtherCard.h Estoy funcionando con el IDE 1.0.3 creo que es un problema de la version de la LiquidCrystal_I2C.h y estoy buscando la mas actualizada. no veo que la tengas en las librerias de esta página, asi que te agradeceria que me indicases donse conseguirla.

    Saludos y gracias por adelantado.

    ResponderEliminar
  2. Hola, los ejemplos que he publicado están probados sobre el IDE 1.0.1 sobre el 1.0.3 no lo he bajado aún. Acabo de ver que está disponible el 1.0.4 lo voy a bajar y a hacer alguna prueba. Si veo alguna actualización de las librerias te comento y mis resultados dobre IDE 1.0.4 también los comento.

    Un saludo.
    Angel

    ResponderEliminar
  3. Hola, primero gracias por tu soporte.

    Despues comentarte que he quitado todo lo de la libreria LCD y sigue haciendo cosas raras... (por cierto, no has colgado la libreria LCD con I2C).

    Estoy un poco perdido... siempre que se desmadra el programa es cuando añado nuevas lineas de codigo, ya sean e.print nuevas o un simple if... me temo que tenga algo que ver con los buffers o similares de arduino... pero no se el que...

    Un saludo.

    ResponderEliminar
  4. Hola Miguel, tienes razón se me pasó poner los links. He actualizado la entrada sobre las pantallas LCD y he puesto la versión 2.0 de la librería LiquidCrystal_I2C. De todas formas lo que comentas es muy raro. ¿Qué placa Arduino tienes? envíame un enlace con un ejemplo de programa que te falle.

    Un saludo.
    Angel

    ResponderEliminar
  5. Hola Alro. la versión 2 no me funciona. la anterior si....

    En este enlace podras ver el codigo que estoy haciendo. En las primeras lineas he puesto unos #define para activar o no el LCD y los botones de la página WEB.
    Como espero que puedas ver (sino me voy a volver loco...) al activar los botones o el LCD deja de funcionar todo, con el LCD se cuelga al hacer la inicialización, y con los botones se cuelga el Arduino UNO, saliendo un monton de caracteres raros por el Serial...

    https://www.dropbox.com/sh/a8tk0r3wax5e9kl/nd3mcNSJ2B

    Espero que puedas arrojar luz en esta oscura situación... :-)

    Saludos,
    Mikel

    ResponderEliminar
    Respuestas
    1. Hola, le he echado un vistazo a lo que me has mandado. Yo lo que suelo hacer son pequeñas pruebas antes de integrarlo en un código mucho mayor. Ya que por cualquier cosa puede fallar. Antes de integrar el LCD en operaciones costosas empezaría con incluir simplemente en el setup esto:

      lcd.init();
      lcd.backlight();
      lcd.home();
      lcd.print("Hola Mundo");
      delay (3000);

      De forma que salga algo por el LCD y todo lo demás siga funcionando. Por otro lado el módulo de red que utilizas fue con le que yo empecé y tuve que dejar porque no era nada estable, me tuve que pasar a un W5100 http://arubia45.blogspot.com.es/2013/01/modulo-ethernet-ii-arduino.html

      No puedo ejecutar tu ejemplo ya que utilizas el sensor DHT 11 pero lo dicho antes. Haz primero un ejemplo de sketch sólo con el LCD y la LAN. O integra el LCD sólo en el setup primero.

      Un saludo.
      Angel

      Eliminar
  6. Hola Angel, gracias por tu consejo, pero este método también es el que practico yo, pues como diria Jack el Destripador... vayamos por partes.... jejejeje

    Por partesfunciona, pero cuando lo integro todo se desmadra.

    He estado mirando y mirando y mirando... al final he encontrado esto " Update: 12/14/2012 – The EtherShield library was retired earlier this year in favor of the EtherCard library. At some point I may get around to making another update to this post, but the EtherCard library already comes with a pretty easy to follow Cosm (the new name for Pachube) sketch. As always, feel free to post to our forum if you have questions." en http://blog.wickeddevice.com/?p=260, asi que para https://github.com/jcw/EtherCard me he ido. Despues de algunas pruebas veo que el tema pinta bien, ademas tiene solucionado el tema del cambio de PINs del Arduino Mega, pero con el pequeño "pero" de que al hacer "if (ether.begin(sizeof Ethernet::buffer, mymac,53) == 0)" hay que poner ese 53, pues en los ejemplos no está, y asume el PIN 10 del Arduino UNO.

    Ahora a integrar y cambiar todo lo que tenia para esta nueva libreria.

    Por cierto, puedes ejecutar mi ejemplo sin el DHT11, simplemente te dará un error de lectura y utilizará ceros.

    Muchas gracias por todo.
    Mikel

    ResponderEliminar
    Respuestas
    1. Ok Mikel, probaré esta otra opción a ver que tal va. No funcionaba el ejemplo porque no tengo instalada la librería DHT o la que hace falta para este sensor.

      Un saludo.
      Angel

      Eliminar
    2. Hola Angel, la libreria DHT la dejé en el link de Dropbox: https://www.dropbox.com/sh/a8tk0r3wax5e9kl/nd3mcNSJ2B

      Con la libreria EtherCard me va todo muy bien :-) con dos comentarios:
      --- ether.begin(sizeof Ethernet::buffer, mymac,53) mejor poner ether.begin(sizeof Ethernet::buffer, mymac,SS) así sirve para todas las placas.
      --- El buffer "real" es de 649 bytes, no 700 como indican los ejemplos. A mi me ha ido muy bien para controlar este tema lo siguiente:
      Serial.println("--- Nueva salida ---");
      Serial.println((char *)Ethernet::buffer + pos);
      Serial.print("Longitud el buffer de Ethernet=");
      Serial.print((int) bfill.position());
      Serial.print(", y quedan ");
      Serial.print(649-(int) bfill.position());
      Serial.print(", de un maximo de ");
      Serial.println(649);
      Serial.println("-----------------------------------");
      ether.httpServerReply(bfill.position());

      Eso es todo por mi parte. Pero quiero darte las gracias por tu soporte y por tu paciencia.

      Saludos,
      Mikel

      Eliminar
    3. Gracias, a ver si cuando vuelva de vacaciones trasteo esto que me comentas.

      Un saludo.
      Angel

      Eliminar