Translate

miércoles, 25 de abril de 2012

Netduino WebServer 1.0

En este tutorial vamos a mostrar cómo crear un pequeños servidor web, que ejecutaremos en nuestro Netduino (+). El servidor web debe responder ante cada petición HTTP con un "Hola Mundo". (Más simple imposible).

Empezamos creando un nuevo proyecto de tipo Netduino Plus en nuestro Visual Studio.

Botón derecho sobre el proyecto y elige "Añadir nuevo elemento".

Añade una nueva clase llamada WebServer.cs.

 
Aquí presentamos una versión muy simple de nuestro servidor web, que iremos evolucionando en los siguientes artículos. El servidor se mantiene a la escucha, atendiendo las peticiones, y respondiendo "Hola Mundo" mientras hace parpadear el led de nuestro Netduino Plus.

public class WebServer : IDisposable
{
   private Socket socket = null;
   private OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
   public WebServer()
  {
       //Inicializamos el socket
       socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
       //Conectamos el socket
       socket.Bind(new IPEndPoint(IPAddress.Any, 80));
      //Iniciamos la escucha
      socket.Listen(10);
      ListenForRequest();
 }

 public void ListenForRequest()
{
  while (true)
  {
     using (Socket clientSocket = socket.Accept())
     {
       //Aceptamos el cliente
       IPEndPoint clientIP = clientSocket.RemoteEndPoint as IPEndPoint;
       EndPoint clientEndPoint = clientSocket.RemoteEndPoint;
       int bytesReceived = clientSocket.Available;
       if (bytesReceived > 0)
      {
           //Obtenemos la petición
           byte[] buffer = new byte[bytesReceived];
           int byteCount = clientSocket.Receive(buffer, bytesReceived, SocketFlags.None);
           string request = new string(Encoding.UTF8.GetChars(buffer));
           Debug.Print(request);
         //Componemos la respuesta (Nota 1)
           string response = "Hola Mundo";
           string header = "HTTP/1.0 200 OK\r\nContent-Type: text; charset=utf-8\r\nContent-Length: " + response.Length.ToString() + "\r\nConnection: close\r\n\r\n";
           clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None);
           clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None);
           //Parpadeo del led
           led.Write(true);
           Thread.Sleep(150);
           led.Write(false);
      }
    }
  }
}
#region IDisposable Members
~WebServer()
{
      Dispose();
}
public void Dispose()
{
     if (socket != null)
        socket.Close();
}
#endregion
}

Nota 1: En las siguientes versiones de nuestro servidor web (multi-hilo) veremos la importancia de crear una respuesta a la solicitud realizada.
El siguiente paso es añadir el siguiente código para iniciar el servidor web.
public static void Main()
{
    Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].EnableDhcp();
    WebServer webServer = new WebServer();
    webServer.ListenForRequest();
}

En el siguiente paso, tenemos que desplegar el código en nuestro Netduino haciendo click en las propiedades del proyecto.



Una vez cambiadas las propiedades del proyecto, seleccionamos la pestaña ".Net Micro Framework" y cambiamos las siguientes propiedades:

Transport: USB
Device: NetduinoPlus_NetduinoPlus

Ahora solo nos queda pulsar F5 para pasar nuestro código a Netduino

¿COMO REALIZAR LAS PRUEBAS?

Lo primero que debemos hacer tras desplegar el código en nuestro Netduino, es conectarlo a un router (en mi caso voy a utilizar un router viejo que tenía por casa), que deberá estar configurado para reservar una ip a nuestro netduino, esto nos hará más fácil saber cuál es la dirección ip en la que se encuentra el servidor web. En mi caso he reservado la ip 192.168.1.2 para que siempre sea servida a la misma dirección MAC.
Por otro lado conectamos vía wifi, nuestro pc al router y realizamos la siguiente petición mediante nuestro navegador.

domingo, 15 de abril de 2012

Empezando con Netduino


Netduino es una placa de desarrollo open source, que utiliza el .net Micro Framework como runtime por lo que puede ser programado mediante el IDE Visual C# (C-Sharp) Express Edition. En cuanto a hardware cuenta con un poderoso microcontrolador ATMEL ARM de 32 bits corriendo a 48 MHz y es compatible con la mayoría de los Shields de Arduino.
Características:
  • Atmel 32-bit microcontroller
  • 48Mhz, ARM7
  • 14 Digital I/O Pins
  • 6 Analog Inputs
  • Arduino Shield Compatible
  • 100mbps ethernet
  • MicroSD socket (up to 2GB)
La presentación que me encuentro una vez recibo el pedio  es la que se muestra en la siguiente imagen.





 






Aquí se pueden encontrar las especificaciones técnicas de la placa:




  • AT91SAM7X512 (datasheet)
  • AT91SAM7X512 (summary)
  • Esquema
  • PC (Eagle)
  • Página oficial con documentación

  • ¿Por donde empezamos?


    Requisitos previos para empezar a trabajar

    - Instalar Visual Studio 2.010
    - Instalar Microframework
    - Instalar el SDK de Netduino

    Configurando nuestro entorno de desarrollo

    Tras tener todo instalado, nos vamos a Visual Studio 2.010 y creamos un nuevo proyecto de Micro Framework: Archivo | Nuevo proyecto | Plantillas instaladas | Visual C# | Microframework.
    Para nuestro ejemplo y modelo que vamos a usar, un Netduino Plus, ya que la mayoria de comunicaciones las realizaremos atraves de la red wifi o internet, abaratando el coste de las comunicaciones, ya que de momento no disponemos de ningún Shield bluetooth.

    Como referencia, podemos utilizar los libros "Getting Started with the Internet of Things
    " y "Getting Started with Netduino".


    En el siguiente post veremos como montar toda la infraestructura para poder comunicar via wifi mediante un periférico externo (teléfono con windows phone 7, mando wii o wii fit..) con nuestro nuevo juguete.