Cerbuino y el módulo ENC28

Si estas intentando obtener una IP de un DHCP de tu router y no lo estas consiguiendo… existe un “gapo conocido” con el lwip compilado en la versión de GHI 4.2.6.2, asi que no pierdas el tiempo pues no podrás obtener ninguna IP del DHCP de algunos routers.


Solo te queda la opción de configurar una IP estática.


Por otra parte debes tener en cuenta que el evento “networkAddressChanged” solo se levanta una vez al iniciarse el procesador, por lo que si se cambia la IP de “forma manual” deberás seguirlo de “forma manual”.


Os dejo un pequeño ejemplo como punto de entrada para experimentar reacciones.


Como ya sabéis el firmware del Cerbuino es de comunidad i la parte del ENC28 está basada en la aportación de comunidad, espero que entre todos podamos pulir la próxima liberación.



 


No dudéis pedirlo en VB si lo necesitais :-)


Saludos,




using System;
using Microsoft.SPOT;
 
using Microsoft.SPOT.Net.NetworkInformation;
using GT = Gadgeteer;
 
Namespace GadgeteerApp1
{
 
    Partial Public Class Program
    {
        NetworkInterface miEth;
        GT.Timer tmr = new GT.Timer(30000);
 
        void ProgramStarted()
        {
            miEth = NetworkInterface.GetAllNetworkInterfaces()[0];
            miEth.PhysicalAddress = miMac;            
            Debug.Print("Program Started... wait for an IP");
            NetworkChange.NetworkAddressChanged += NetworkChange_NetworkAddressChanged;            
            tmr.Tick += tmr_Tick;
            tmr.Start();
        }
 
        Boolean tictac;
        string lastIP;
        void tmr_Tick(GT.Timer timer)
        {
            if (lastIP != miEth.IPAddress.ToString())
            {
                lastIP = miEth.IPAddress.ToString();
                Debug.Print("Current Ip : " + lastIP);
            }
 
            if (miEth.IPAddress == "0.0.0.0")
            {
                Mainboard.SetDebugLED(true);
                Debug.Print("No DHCP server response :-(");
                miEth.EnableStaticIP("192.168.1.50", "x.x.x.x", "y.y.y.y");
            }
            else
            {
                Mainboard.SetDebugLED(tictac);
                tictac = !tictac;
                if (tmr.Interval.Milliseconds > 1000) tmr.Interval = new TimeSpan(0, 0, 1);
            }
        }
 
        void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
        {
            Debug.Print("Nueva IP : " + miEth.IPAddress.ToString());
        }
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>