Archivo de la categoría: Netduino

Envio http post a url’s desde netduino

Envio http post a url’s desde netduino

Un ejemplo de  código para enviar  request   desde Netduino a url usando post:

 

 
private static string pMessage;
public static ManualResetEvent allDone = new ManualResetEvent(false);

private void Form1_Load(object sender, EventArgs e) {
try {

//string serviceURL = “http://localhost:52976/SL2Astoria_Web/WebDataService.svc/Products/”;
string serviceURL = “http://localhost:52895/Service1.asmx/Service1″;

pMessage = “{” + Environment.NewLine;
pMessage += “ProductName=\”zone\”" + Environment.NewLine;
pMessage += “}” + Environment.NewLine;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceURL);
request.ContentType = “application/json”;
request.UserAgent = “Fiddler”;
//request.ContentType = “application/x-www-form-urlencoded”;
request.Method = “POST”;
request.BeginGetRequestStream(new AsyncCallback(ReadCallback), request);

// Keep the main thread from continuing while the asynchronous
// operation completes. A real world application
// could do something useful such as updating its user interface.
allDone.WaitOne();

}
catch (Exception ex) {
Console.Write(ex.Message);
}

}

private static void ReadCallback(IAsyncResult asynchronousResult) {
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation.
Stream postStream = request.EndGetRequestStream(asynchronousResult);

string postData = pMessage;

// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Write to the request stream.
postStream.Write(byteArray, 0, postData.Length);
postStream.Close();
allDone.Set();
}

 

fuente original :http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/c7854122-b61c-4f2c-aa44-831bf1d27af1/

Sensor de sonido para netduino

Sensor de sonido para netduino

Aquí  se explica como usar un simple piezo eléctrico para detectar el sonido, lo que nos permitirá usarlo como un sensor para golpes o “toques” (puedes pegar el piezo eléctrico a una superficie por ejemplo). Para esto podemos aprovechar la capacidad de leer señales análogas del CAD – convertidor análogo a digital. Estos conversores leen el valor de un voltaje y lo transforman en un valor entre 0 y 1024. 0 representa 0 V y 1024 representa 5 V en la entrada de uno de los 6 pines análogos.

Como sabreis , un piezo eléctrico no es otra cosa que un dispositivo electrónico que suele  usarse  para reproducir o detectar tonos. En este ejemplo hemos conectado el piezo eléctrico en el pin de entrada análoga número3, que puede leer un valor entre 0 V y 5 V, y no solamente HIGH o LOW (pines digitales).

Un punto importante es que los piezo eléctricos tienen polaridad, la cual, en los dispositivos comerciales, se indica normalmente con un cable rojo y uno negro para saber cómo conectarlo a la placa. Debemos conectar el negro en la tierra y el rojo en el pin de entrada. Además debemos conectar una resistencia en el rango de los Megaomhnios en paralelo al piezo; en el ejemplo lo hemos hecho directamente en los conectores hembra.

El siguiente código capturará el tono y si sobrepasa cierto límite, pintara por la consola  el mensaje “Se ha sobrepasado el umbral de sonido”

Sensor de golpes.

//Sensor de sonidos

//By CRN

//@2012

public static void Main()
{

var voltagePortSonido = new SecretLabs.NETMF.Hardware.AnalogInput(Pins.GPIO_PIN_A2); //configura entrada temperatura

…..

sonido(voltagePortSonido, apiKey, feedId, out sonidoC); //captura medidad de temperatura

if (sonidoC> umbral)

{

Debug.Print(“Se ha sobrepasado el umbral de sonido”);

}

……
static void sonido(SecretLabs.NETMF.Hardware.AnalogInput vport, string apikey, string feedId, out double tt)
{

tt = 0;
for (int aa = 0; aa < 100; aa++) //100lecturas
{
int rawValue = vport.Read();
float voltage = rawValue ;// 3300; ///lectura en mv si usamos referecnica de 3.3v

if (tt < voltage)
{
tt = voltage;//toma el maximo
}
}

fuente original :http://arduino.cc/es_old/Tutoriales/SensorKnock

Acceso a twiter con netduino

Acceso a twiter con netduino

 

Pasos a aseguir

Las librerias de Microtweet de Codeplex, aquí

Crear una nueva cuenta de twitter.

Regístrese nueva aplicación según las instrucciones. Agregar 4 claves para el código.

Se usara un ssnsor de 1 hilo S1820 (de la parte posterior de Java material Tini en 2000/01. Obsoleta DS1820, pero funciona bien)1

Tambien  se usa un pulsador para realizar elenvio de tweets

Cargue este codigo en su netduino , asegurese que este est coenctado a Internet y  Pulse el botón: esto , leera la temperatura,y  enviara tweets.

 

A continuación el codigo para nuestro Netduino:

using System;
002 using System.Net;
003 using System.Net.Sockets;
004 using System.Threading;
005 using Microsoft.SPOT;
006 using Microsoft.SPOT.Hardware;
007 using SecretLabs.NETMF.Hardware;
008 using SecretLabs.NETMF.Hardware.NetduinoPlus;
009 using Komodex.NETMF.MicroTweet;
010 using Microsoft.SPOT.Net.NetworkInformation;
011 using CW.NETMF.Hardware;
012
013 namespace TweetButtonTest
014 {
015     public class Program
016     {
017         private const string consumerKey = "KeyGoesHere";
018         private const string consumerSecret = "ItsASecret";
019         private const string userToken = "InsertCoin";
020         private const string userSecret = "Shh...DontTellAnyone";
021
022         private const string ntpServer = "time-a.nist.gov";
023
024         private OutputPort led = null;
025         private TwitterClient twitterClient = null;
026         private OneWire oneWire;
027
028         public static void Main()
029         {
030             new Program().Run();
031         }
032
033         public void Run()
034         {
035
036             NTP.UpdateTimeFromNTPServer(ntpServer);
037
038             twitterClient = new TwitterClient(consumerKey, consumerSecret, userToken, userSecret);
039
040             oneWire = new OneWire(Pins.GPIO_PIN_D1);
041             led = new OutputPort(Pins.GPIO_PIN_D13, false);
042
043             Button button = new Button(Pins.GPIO_PIN_D0);
044             button.Released += new NoParamEventHandler(button_Released);
045
046             Thread.Sleep(Timeout.Infinite);
047         }
048
049         void button_Released()
050         {
051             try
052             {
053                 float temperature = GetTemperature();
054                 string msg = "Today I'm tweeting the temperature from an DS1820. It's "+temperature+"C #netdunio";
055                 Debug.Print(msg);
056
057                 bool tweetSent =  twitterClient.SendTweet(msg);
058                 if (tweetSent)
059                 {
060                     FlashLed(1);
061                 }
062                 else
063                 {
064                     FlashLed(2);
065                 }
066             }
067             catch
068             {
069                 FlashLed(3);
070             }
071         }
072
073         private void FlashLed(int flashCount)
074         {
075             while (flashCount-- > 0)
076             {
077                 led.Write(true);
078                 Thread.Sleep(250);
079                 led.Write(false);
080                 Thread.Sleep(250);
081             }
082         }
083
084         private float GetTemperature()
085         {
086             oneWire.Reset();
087             oneWire.WriteByte(OneWire.SkipRom); //All devices
088             oneWire.WriteByte(DS1820.ConvertT); //Do convert
089             Thread.Sleep(750);  //Wait for conversion
090
091             oneWire.Reset();
092             oneWire.WriteByte(OneWire.SkipRom); //All devices
093             oneWire.WriteByte(DS1820.ReadScratchpad); //Read data
094
095             //Read the first two bytes - tempLow and tempHigh
096             byte tempLow = oneWire.ReadByte();
097             byte tempHigh = oneWire.ReadByte();
098             return DS1820.GetTemperature(tempLow, tempHigh);
099
100         }
101     }
102 }

Sincronizar la hora de tu netduino

Sincronizar la hora de tu netduino
Este utilidad  para nuestro Netduino    toma el dato fecha-hora(datetime)   de un servidor  NTP
El código se basa  en http://weblogs.asp.net/mschwarz/archive/2008/03/09/wrong-datetime-on-net-micro-framework-devices.aspx
Código para Netduino-Plus:

using
 System;
02 using Microsoft.SPOT;
03 using System.Net.Sockets;
04 using System.Net;
05 using Microsoft.SPOT.Hardware;
06 using SecretLabs.NETMF.Hardware;
07 using SecretLabs.NETMF.Hardware.Netduino;
08 using Microsoft.SPOT.Time;
09
10 namespace NetduinoPlusWebServer
11 {
12     class TimeHandeler
13     {
14  
19         /// <param name="TimeServer">Timeserver</param>
20         /// <returns>Local NTP Time</returns>
21         public static DateTime NTPTime(String TimeServer)
22         {
23             // Find endpoint for timeserver
24             IPEndPoint ep = new IPEndPoint(Dns.GetHostEntry(TimeServer).AddressList[0], 123);
25
26             // Connect to timeserver
27             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
28             s.Connect(ep);
29
30             // Make send/receive buffer
31             byte[] ntpData = new byte[48];
32             Array.Clear(ntpData, 0, 48);
33
34             // Set protocol version
35             ntpData[0] = 0x1B;
36
37             // Send Request
38             s.Send(ntpData);
39
40             // Receive Time
41             s.Receive(ntpData);
42
43             byte offsetTransmitTime = 40;
44
45             ulong intpart = 0;
46             ulong fractpart = 0;
47
48             for (int i = 0; i <= 3; i++)
49                 intpart = (intpart <<  8 ) | ntpData[offsetTransmitTime + i];
50
51             for (int i = 4; i <= 7; i++)
52                 fractpart = (fractpart <<  8 ) | ntpData[offsetTransmitTime + i];
53
54             ulong milliseconds = (intpart * 1000 + (fractpart * 1000) / 0x100000000L);
55
56             s.Close();
57
58             TimeSpan timeSpan = TimeSpan.FromTicks((long)milliseconds * TimeSpan.TicksPerMillisecond);
59             DateTime dateTime = new DateTime(1900, 1, 1);
60             dateTime += timeSpan;
61
62             TimeSpan offsetAmount = TimeZone.CurrentTimeZone.GetUtcOffset(dateTime);
63             DateTime networkDateTime = (dateTime + offsetAmount);
64
65             return networkDateTime;
66         }
67
68     }
69 }

Netduino-Plus como webserver interactuando con dispositivos

Netduino-Plus como webserver interactuando con dispositivos

Hay muchas maneras de controlar la puerta del garaje con su Netduino. En este caso se   modificara un mando de apertura de puerta de garaje  por medio de un OPTOISOLATOR   y este a su vez se conectara a nuestro netduino por medio de uan resistencia en serie. Para enviar comandos a la placa de  Netduino se utilizaran simples  comandos HTTP.

Componentes necesarios para el montaje

  • Abrir puertas de garajes
  • OPTOISOLATOR con el controlador de Darlington – 1 canal.
  • Resistencia de 100 ohmios
  • 33 ohmios resistencia
  • Netduino  Plus

El esquema para la conexión del netudiono  con el abridor de la puerta del garaje es bastante sencillo:

  • Conecte el pin OPTOISOLATOR 1 (ánodo) al pin digital plus Netduino 13
  • Conecte el pin OPTOISOLATOR 2 (cátodo) a un pin de tierra en el signo más Netduino con una resistencia de 33 ohmios en línea.
  • Conectar el pasador optoaislador 3 (emisor) a un lado de la puerta de garaje pulsador con una resistencia de 100 ohmios en línea.
  • Conectar el pasador optoaislador 4 (colector) al otro lado de la puerta garge abridor pulsador.

Código

public class WebServer : IDisposable
02     {
03         private Socket socket = null;
04         //open connection to onbaord led so we can blink it with every request
05         private OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
06         private OutputPort Garage2CarOpener = new OutputPort(Pins.GPIO_PIN_D13,false);
07
08         public WebServer()
09         {
10             //Initialize Socket class
11             socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
12             //Request and bind to an IP from DHCP server
13             socket.Bind(new IPEndPoint(IPAddress.Any, 80));
14             //Debug print our IP address
15             Debug.Print(Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress);
16             //Start listen for web requests
17             socket.Listen(10);
18             ListenForRequest();
19         }
20
21         public void ListenForRequest()
22         {
23             while (true)
24             {
25                 using (Socket clientSocket = socket.Accept())
26                 {
27                     //Get clients IP
28                     IPEndPoint clientIP = clientSocket.RemoteEndPoint as IPEndPoint;
29                     EndPoint clientEndPoint = clientSocket.RemoteEndPoint;
30                     //int byteCount = cSocket.Available;
31                     int bytesReceived = clientSocket.Available;
32                     if (bytesReceived > 0)
33                     {
34                         //Get request
35                         byte[] buffer = new byte[bytesReceived];
36                         int byteCount = clientSocket.Receive(buffer, bytesReceived, SocketFlags.None);
37                         string request = new string(Encoding.UTF8.GetChars(buffer));
38                         string firstLine = request.Substring(0, request.IndexOf('\n')); //Example "GET /activatedoor HTTP/1.1"
39                         string[] words = firstLine.Split(' ');  //Split line into words
40                         string command = string.Empty;
41                         if( words.Length > 2)
42                         {
43                             string method = words[0]; //First word should be GET
44                             command = words[1].TrimStart('/'); //Second word is our command - remove the forward slash
45                         }
46                         switch (command.ToLower())
47                         {
48                             case "activatedoor":
49                                 ActivateGarageDoor();
50                                 //Compose a response
51                                 string response = "I just opened or closed the garage!";
52                                 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";
53                                 clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None);
54                                 clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None);
55                                 break;
56                             default:
57                                 //Did not recognize command
58                                 response = "Bad command";
59                                 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";
60                                 clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None);
61                                 clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None);
62                                 break;
63                         }
64                     }
65                 }
66             }
67         }
68         private void ActivateGarageDoor()
69         {
70             led.Write(true);                //Light on-board LED for visual cue
71             Garage2CarOpener.Write(true);   //"Push" garage door button
72             Thread.Sleep(1000);             //For 1 second
73             led.Write(false);               //Turn off on-board LED
74             Garage2CarOpener.Write(false);  //Turn off garage door button
75         }
76         #region IDisposable Members
77         ~WebServer()
78         {
79             Dispose();
80         }
81         public void Dispose()
82         {
83             if (socket != null)
84                 socket.Close();
85         }
86         #endregion
87     }

Primeros Pasos con Netduino como webserber

Primeros Pasos con Netduino como webserber

En estas lineas 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”.

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 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
}
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 ,esperar unos inst asegurando que  nuestro Netduino-plus esta conectado a internet   realizamos la siguiente petición mediante nuestro navegador.
http://192.168.1.2/ ( o la ip que le haya asignado nuestro router a nuestro netduino)

Sobre Pachube

Sobre Pachube

Pachube  es pionera en desarrollo de aplicaciones y servicios web para conectar personas y dispositivos. Es lo que se considera “el Internet de las Cosas”, un concepto global en el que todo está conectado (casas, móviles, coches, lámparas, pcs…) nacido en 2008 y del que se está comenzando a hablar muy en serio.
Con ésta adquisición LogMeIn pretende entrar en un comercio en auge que se supone llegará a conectar más de 50.000 millones de dispositivos (muy variados entre si, como hemos comentado) en un futuro muy próximo. Ésta tecnología podría ayudar a mejorar la calidad de vida actual así como dar el último impulso a proyectos tan famosos como las viviendas inteligentes o ciudades “tecnológicas” enteras.

LogMeIn es más que conocido por sus programas de interconexión de ordenadores y control remoto para asistencia, trabajo a distancia… así que con la adquisición veremos, quizá, una diversificación de mercado y una ampliación enorme del valor de la empresa.
Por supuesto, queda mucho para que el “Internet de las Cosas” se haga una realidad pero cada día son más los dispositivos y sensores inteligentes que rodean nuestras vidas e incluso nuestro propio cuerpo.
Comenzando por los más modernos teléfonos móviles, alarmas y coches hasta terminar por tejidos inteligentes, implantes electrónicos y computadores cada vez más potentes y pequeños (todo esto aderezado con “la nube” ) estamos viviendo una convergencia de tecnologías en las que, esperemos, todas formen parte de un ente común.
Para quien no lo conozca, Pachube es una web donde poder transmitir la información que generan nuestros dispositivos (lo que se conoce como Internet de las cosas). Todos alguna vez hemos creado/tenido un dispositivo que genera información que nos gustaría consultar: Un sensor de temperatura o de humedad, un contador de entradas a un recinto, cuantas veces se ha ejecutado un comando, etc. Cualquier cosa que queramos saber y se pueda medir es susceptible de usarse con Pachube. Eso si, nuestro dispositivo debe tener una conexión a Internet para poder subir los datos (Wifi, ethernet, GPRS u estar conectado a otro dispositivo que lo tenga como un PC). La ventaja es que mediante nuestro ordenador/móvil/tablet podremos consultar los datos que nuestro dispositivo envía en la web de Pachube de una forma gráfica. El servicio es gratuito, podemos hacer que nuestros feeds sean públicos o privados, podemos consultar el historial de datos y enviar alarmas y notificaciones a nuestros dispositivos. Tiene limitaciones como que no se puede hacer más de 100 peticiones por minuto, pero en la mayoría de los casos nos da de sobra.

Se van a explicar de una forma sencilla cómo enviar los datos, (para un detalle mayor se debe profundizar  la documentación).

Los pasos a realizar son los siguientes:

1-El primer paso  es registrarse en su web https://pachube.com/. Es un proceso sencillo y rápido( no pide mas que una dirección de correo  y un par de cosas mas).

2-Lo segundo es crear una key en el menú My keys. Esta sirve para poder autentificarnos en las acciones que enviamos a Pachube. Además se les asignan permisos para que pueda ser usando en cualquier feed, en todos nuestros feeds (públicos o privados) o en unos determinados feed de nuestra elección.

Además se les asigna los permisos de lectura de feeds, creación de feeds, actualización de feeds o borrado de feeds. Igualmente tiene restricciones avanzadas:

  • Ccaducidad de la key
  • Sólo dejar a una direccion  IP determinada
  • Acceder desde una URL concreta para ejecutar el comando.

La guardamos y ya nos aparecerá en el menú de My keys.

3-El siguiente paso es crear un feed en el menú Create a feed. Un feed no es nada más que un servicio donde se almacenarán los datos que envíe nuestro dispositivo y que puede ser consultado a posteriori. Puede ser creado directamente desde las web de Pachube o desde la API de Pachube. Para crearlo debemos rellenar datos sobre su nombre, la ubicación de nuestro dispositivo, si es privado (sólo lo podemos consultar nosotros) o público (cualquier puede consultarlo), etc.

4-Finalmente tenemos que añadir tantos datastreams como distintos datos envía nuestro dispositivo: Si por ejemplo es un sensor de temperatura y de humedad tendremos que dar de alta dos datastreams. Los datastreams necesitan un identificador único en ese feed, un tag (nombre) que lo identifique, un nombre de la unidad en que se va a medir y el símbolo que se usa para esa unidad de medida. Lo guardamos y ya nos aparece en el menú de My feeds.

5-Ahora si accedemos al menu de My feeds podemos ver nuestro feed y si pulsamos sobre el podemos observar entre otras cosas qué número único le ha asignado Pachube en el campo Website.

6-Para meterle datos simplemente tenemos que rellenar los datapoints, que son los datos de nuestro sensor. Podemos hacerlo manualmente desde la misma página del feed, pero no tiene sentido ya que se supone que será nuestro dispositivo (u otro intermediario) conectado a internet el que los proporcione. Este debe tener la opción de comunicarse mediante peticiones HTTP a la web de Pachube como por ejemplo con una placa netduino-plus utilizadno c#.

De un forma elemental si el dispositivo intermedio es un PC podéis usar curl mediante scipts o las librerías que vuestro dispositivo tenga para usar TCP/IP y HTTP por ejemplo mediante de una petición PUT para actualizar un feed que contiene como datastream  de ejemplo.

Me conecto al puerto 80 del host api.pachube.com y le envío esto:

PUT /v2/feeds/48063.csv HTTP/1.0
Host:api.pachube.com
Content-Length:6
X-PachubeApiKey:nL8l2h_XRp62DSXwV48jhFtjXtWSAKxZUmJUZlExNmpXOD0g

cpu,90
Después de lanzar esa petición, si todo ha ido bien, recibiremos esta respuesta del servidor de Pachube:

HTTP/1.1 200 OK
Date: Tue, 13 Mar 2012 16:22:37 GMT
Content-Type: text/plain; charset=utf-8
Connection: close
X-Pachube-Logging-Key: logging.AzQG9Tniho13k7PtFTBo
X-PachubeRequestId: a498efd825d85bbeaab4be98ba3fa014874ca175
Cache-Control: max-age=0
Content-Length: 1
Age: 0
Vary: Accept-Encoding

Que indica con el código 200 que todo ha ido bien y que se ha guardado el datapoint en nuestro datastream. En nuestra petición le hemos indicado la URL de nuestro feed con la extensión csv para indicar que los datos que queremos subir están en ese formato, pero también podemos subirlos en XML o JSON (ver aquí una guía rápida). También hemos de enviar la key que tiene permisos para escribir en nuestro feed. Finalmente enviamos los datapoints en formato <datastream>,<valor> (uno por línea).

Así si nos vamos a la URL de nuestro feed (en este caso https://pachube.com/feeds/48063) podremos ver toda la información del feed: nombre, localización, lectura de los datos en formato JSON, XML y CSV y finalmente un gráfico que podemos configurar a nuestro gusto para ver cómo han ido evolucionando los valores

Más información en este blog (tag pachube )  :
<a href=”http://webdelcire.com/wordpress/archives/1719″ title=”pachube” target=”_blank”>http://webdelcire.com/wordpress/archives/1719</a>

<a href=”http://tecnoforo.net/2011/07/22/logmein-compra-pachube-hacia-el-internet-de-las-cosas/” title=”Sobre Pachube” target=”_blank”>http://tecnoforo.net/2011/07/22/logmein-compra-pachube-hacia-el-internet-de-las-cosas/</a>

TOP TEN DE PROYECTOS CON NETDUINO

TOP TEN DE PROYECTOS CON NETDUINO

El proyecto . NET Micro (. NET MF) es un código abierto (bajo licencia Apache), versión de. NET Framework diseñado para funcionar en microcontroladores. Debido a que es software libre, usted puede portarlo con el kit de portabilidad (enlace al final) a cualquier procesador que desea, si usted tiene el know-how. Por suerte, existen una serie de tablas con el MF. NET que haya sido portado, con la adición de una serie de características y los controladores para el tablero de la funcionalidad específica. Cada uno de los tableros varían en el número de E / S, dispositivos periféricos, MCU velocidad, memoria, etc Algunos incluso incluyen pantallas integradas. Usted no necesita saber mucho acerca de la electrónica para conseguir unos resultados realmente buenos de estas tablas. Se pueden codificar para el MF. NET con Visual Studio (VS 2010 para la versión 4.1 de 2008 para las versiones anteriores). También puede utilizar Visual C # Express y hacerlo todo de forma gratuita. Muy bonito! Yo mismo he estado jugando con algunas de las juntas, especialmente la Netduino . Otras personas han creado algunos proyectos muy interesantes. Debido a la naturaleza de estos proyectos, que tienden a encontrarlos más en YouTube que en los blogs.
A continuación muestro 10 proyectos que mas me han gustado:.
1. Tetris

Tetris se ejecuta en un tablero de Tahoe con una pantalla incorporada
2. Etch A Sketch


CNC Etch-a-Sketch
3. Inicio del termómetro

Mostrando la temperatura con los sensores y los. NET MF
4. WiFi 802.11 de red inalámbrica y cámara IP

Buen proyecto con una cámara IP y unas cuantas tablas
5. Netduino Servidor Web

Una web muy ligero servidor utilizando el Netduino. Hay un montón de ellos ahí fuera
6. ChipworkX RPL de reproducción de vídeo

Una reproducción de vídeo / decodificación de la prueba
7. . NET Micro Framework Juego

Un juego limpio pequeño video con una pantalla incorporada
8. Tank-pista Robot

Un ingenioso depósito de la banda de rodadura del robot
9. Motor paso a paso Midi Player (esto es impresionante)

Esto es muy bueno. La automatización de un motor paso a paso lo que toca música
10. Aquarium Controller

Un monitor de acuario y el motor
Muchos más videos de un proyectos con Netduino .

Errores mas tipicos con netduino plus

Errores mas tipicos con netduino plus

Recordar los códigos numéricos de error es una labor muy ardua. Si el código de manejo de errores está bien documentada, las revisiones de código puede  tomar más tiempo y encima el mantenimiento sera más difícil, ya que puede que tenga que consultar los manuales de referencia, los archivos nativos de código de la cabecera o la ayuda en línea con frecuencia.

Como ejemplo ¿quien no ha encontrado este error?

#### Exception System.Net.Sockets.SocketException – CLR_E_FAIL (1) ####

#### Message:
#### Microsoft.SPOT.Net.SocketNative::send [IP: 0000] ####
#### System.Net.Sockets.Socket::Send [IP: 0018] ####
#### System.Net.Sockets.Socket::Send [IP: 0010] ####
#### LightSwitch::SendRequest [IP: 0066] ####
#### LightSwitch::Main [IP: 0177] ####
#### SocketException ErrorCode = 10060
#### SocketException ErrorCode = 10060
Excepción del tipo ‘System.Net.Sockets.SocketException’ en Microsoft.SPOT.Net.dll
#### SocketException ErrorCode = 10060
#### SocketException ErrorCode = 10060
Los errores de socket  pues son particularmente difíciles de recordar y también de entender . Para ayudar en esta tarea,  se han recogido de Windows Sockets los códigos de error en un par de enumeraciones.

La primera enumeración, SocketErrorCodes utiliza descripciones  basadas en el artículo de soporte técnico de Microsoft. Para obtener una descripción detallada de los códigos de error, por favor consulte este artículo o una referencia de Windows Sockets.

    InterruptedFunctionCall         = 10004
    PermissionDenied                = 10013
    BadAddress                      = 10014
    InvalidArgument                 = 10022
    TooManyOpenFiles                = 10024
    ResourceTemporarilyUnavailable  = 10035
    OperationNowInProgress          = 10036
    OperationAlreadyInProgress      = 10037
    SocketOperationOnNonSocket      = 10038
    DestinationAddressRequired      = 10039
    MessgeTooLong                   = 10040
    WrongProtocolType               = 10041
    BadProtocolOption               = 10042
    ProtocolNotSupported            = 10043
    SocketTypeNotSupported          = 10044
    OperationNotSupported           = 10045
    ProtocolFamilyNotSupported      = 10046
    AddressFamilyNotSupported       = 10047
    AddressInUse                    = 10048
    AddressNotAvailable             = 10049
    NetworkIsDown                   = 10050
    NetworkIsUnreachable            = 10051
    NetworkReset                    = 10052
    ConnectionAborted               = 10053
    ConnectionResetByPeer           = 10054
    NoBufferSpaceAvailable          = 10055,
    AlreadyConnected                = 10056
    NotConnected                    = 10057
    CannotSendAfterShutdown         = 10058
    ConnectionTimedOut              = 10060
    ConnectionRefused               = 10061
    HostIsDown                      = 10064
    HostUnreachable                 = 10065
    TooManyProcesses                = 10067
    NetworkSubsystemIsUnavailable   = 10091
    UnsupportedVersion              = 10092
    NotInitialized                  = 10093
    ShutdownInProgress              = 10101
    ClassTypeNotFound               = 10109
    HostNotFound                    = 11001
    HostNotFoundTryAgain            = 11002
    NonRecoverableError             = 11003
    NoDataOfRequestedType           = 11004

El segundo, WinSockErrorCodes, utiliza los nombres simbólicos que se ve en código nativo de aplicaciones de WinSock.

    WSAEINTR           = 10004
    WSAEACCES          = 10013
    WSAEFAULT          = 10014
    WSAEINVAL          = 10022
    WSAEMFILE          = 10024
    WSAEWOULDBLOCK     = 10035
    WSAEINPROGRESS     = 10036
    WSAEALREADY        = 10037
    WSAENOTSOCK        = 10038
    WSAEDESTADDRREQ    = 10039
    WSAEMSGSIZE        = 10040
    WSAEPROTOTYPE      = 10041
    WSAENOPROTOOPT     = 10042
    WSAEPROTONOSUPPORT = 10043
    WSAESOCKTNOSUPPORT = 10044
    WSAEOPNOTSUPP      = 10045
    WSAEPFNOSUPPORT    = 10046
    WSAEAFNOSUPPORT    = 10047
    WSAEADDRINUSE      = 10048
    WSAEADDRNOTAVAIL   = 10049
    WSAENETDOWN        = 10050
    WSAENETUNREACH     = 10051
    WSAENETRESET       = 10052
    WSAECONNABORTED    = 10053
    WSAECONNRESET      = 10054
    WSAENOBUFS         = 10055
    WSAEISCONN         = 10056
    WSAENOTCONN        = 10057
    WSAESHUTDOWN       = 10058
    WSAETIMEDOUT       = 10060
    WSAECONNREFUSED    = 10061
    WSAEHOSTDOWN       = 10064
    WSAEHOSTUNREACH    = 10065
    WSAEPROCLIM        = 10067
    WSASYSNOTREADY     = 10091
    WSAVERNOTSUPPORTED = 10092
    WSANOTINITIALIZED  = 10093
    WSAEDISCON         = 10101
    WSATYPE_NOT_FOUND  = 10109
    WSAHOST_NOT_FOUND  = 11001
    WSATRY_AGAIN       = 11002
    WSANO_RECOVERY     = 11003
    WSANO_DATA         = 11004
Me parece la enumeración descriptiva (SocketErrorCodes) más útil cuando estoy escribiendo un nuevo código. La enumeración es muy útil cuando WinSockErrorCodes porta código nativo.NET. Con cualquiera de enumeración, simplemente nos  puede echar la Int32 enSocketException.ErrorCodees muy util  utilizando  la enumeración adecuada para que el código sea más fácil de leer y mantener.
Por ejemplo:

try
{
    // code that causes a SocketException
}
catch(SocketException se)
{
    SocketErrorCodes errorCode = (SocketErrorCodes)se.ErrorCode;

    switch(errorCode)
    {
        case SocketErrorCodes.PermissionDenied:
            // error handling
            break;

        case SocketErrorCodes.AddressInUse:
            // error handling
            break;

        // etc..
    }
}

Como se mencionó anteriormente, los datos utilizados para crear las enumeraciones anteriores se pueden encontrar aquí.  En caso de duda, consulte el artículo de soporte o de referencia de WindowsSockets.

A continuación, traducida al español , se detallan la  descripción de los errores  :

WSAEINTR (10004)
Traducción: llamada a la función interrumpida.
Descripción: Una operación de bloqueo fue interrumpida por una llamada a WSACancelBlockingCall (Wsapiref_704y.asp).

WSAEACCES (10013)
Traducción: Permiso denegado.
Descripción: Se ha intentado acceder a una toma de una manera que es prohibida por sus permisos de acceso. Por ejemplo, este error se produce cuando una dirección de difusión se utiliza para sendto, pero el permiso de emisión no se establece mediante setsockopt (SO_BROADCAST). Otra posible razón para el error WSAEACCES es que cuando el enlace (Wsapiref_6vzm.asp) se llama (en Microsoft Windows NT 0.0 Service Pack 4 4 [SP4] o posterior), con otro programa, servicio o un controlador en modo kernel está obligado a la misma dirección con acceso exclusivo. Acceso exclusivo como es una nueva característica de Windows NT 4.0 SP4 y posterior, y se implementa mediante el uso de la opción SO_EXCLUSIVEADDRUSE.

WSAEFAULT (10014)
Traducción: dirección errónea.
Descripción: El sistema detectó una dirección de puntero no válido al intentar utilizar un argumento puntero de una llamada. Este error se produce si un programa pasa un valor de puntero no válido o si el tamaño del buffer es demasiado pequeño. Por ejemplo, este problema se produce si la longitud de un argumento que es una estructura SOCKADDR es menor que el sizeof (sockaddr) valor.

WSAEINVAL (10022)
Traducción: Argumento no válido.
Descripción: un argumento no válido (por ejemplo, un argumento que especifique un nivel no válido) se suministra a la setsockopt (Wsapiref_94aa.asp) función. A veces, también se refiere al estado actual de las tomas, por ejemplo, llamando a aceptar (Wsapiref_13aq.asp) en un socket que no está escuchando.

WSAEMFILE (10024)
Traducción: Hay demasiados archivos abiertos.
Descripción: Hay demasiados sockets abiertos. Cada aplicación puede tener un número máximo de identificadores de socket disponibles. Estos mangos pueden estar disponibles a nivel mundial, por proceso, o por hilo.

WSAEWOULDBLOCK (10035)
Traducción: Recurso temporalmente no disponible.
Descripción: Este error se origina a partir de las operaciones de tomas de corriente sin bloqueo que no se puede completar de inmediato, por ejemplo, recv (Wsapiref_2i9e.asp), cuando no hay datos en la cola para ser leído de la toma. Se trata de un error fatal, y la operación se puede intentar más tarde. WSAEWOULDBLOCK se expresa en el resultado de la llamada connect (Wsapiref_8m7m.asp) en un socket SOCK_STREAM sin bloqueo por algún tiempo debe transcurrir para que la conexión sea establecida.

WSAEINPROGRESS (10036)
Traducción: Operación en curso.
Descripción: Una operación de bloqueo se está ejecutando actualmente. Windows Sockets sólo permite una única operación de bloqueo para cada tarea o para cada hilo a ser excepcional. Si cualquier otra llamada a la función se hace (si es que las referencias o cualquier otro conector), la función falla con el error WSAEINPROGRESS.

WSAEALREADY (10037)
Traducción: Operación en curso.
Descripción: Una operación es tratado en un socket de no bloqueo cuando una operación está en curso. Por ejemplo, llamando a connect (Wsapiref_8m7m.asp) es tratado por segunda vez en un socket de no bloqueo que ya se conecta o una solicitud asincrónica (WSAAsyncGetXbyY) se pretende que ya ha sido cancelado o terminado.

WSAENOTSOCK (10038)
Traducción: operación de socket en nonsocket.
Descripción: La operación fue juzgado por algo que no es un socket. El parámetro identificador de socket no hizo referencia a un socket válido, o para seleccionar (Wsapiref_1ab6.asp), un miembro de un fd_set no era válida.

WSAEDESTADDRREQ (10039)
Traducción: Dirección de destino requerido.
Descripción: una dirección necesaria fue omitida en una operación en un socket. Por ejemplo, este error se devuelve si sendto (Wsapiref_4sqa.asp) se llama con la dirección remota del ADDR_ANY.

WSAEMSGSIZE (10040)
Traducción: Mensaje demasiado largo.
Descripción: Un mensaje que se envía en un socket de datagrama era más grande que el búfer de mensaje interno o algún límite de la red, o el buffer que se utiliza para recibir un datagrama era más pequeño que el datagrama.

WSAEPROTOTYPE (10041)
Traducción: Tipo de protocolo incorrecto para el socket.
Descripción: Un protocolo que se especifica en el zócalo (Wsapiref_2qr6.asp) llamada a la función no es compatible con la semántica del tipo de socket que se solicita. Por ejemplo, la ARPA Internet el protocolo UDP no se pueden especificar con un tipo de socket de SOCK_STREAM.

WSAENOPROTOOPT (10042)
Traducción: opción de protocolo mal.
Descripción: Una opción desconocido, no válido o no compatible o nivel especificado en un getsockopt (Wsapiref_8qcy.asp) llamada o una llamada setsockopt (Wsapiref_94aa.asp).

WSAEPROTONOSUPPORT (10043)
Traducción: el Protocolo no es compatible.
Descripción: El protocolo solicitado o no se ha configurado en el sistema o no la aplicación de su existencia. Por ejemplo, una toma de corriente (Wsapiref_2qr6.asp) llame solicita un socket SOCK_DGRAM, pero especifica un protocolo de secuencia.

WSAESOCKTNOSUPPORT (10044)
Traducción: tipo de socket no es compatible.
Descripción: El soporte para el tipo de socket especificado no existe en esta familia de direcciones. Por ejemplo, el tipo SOCK_RAW opcional se puede seleccionar en un zócalo (Wsapiref_2qr6.asp) llamada, pero la aplicación no es compatible con sockets SOCK_RAW en absoluto.

WSAEOPNOTSUPP (10045)
Traducción: La operación no es compatible.
Descripción: La operación que se intentó no es compatible con el tipo de objeto que se hace referencia. Este error se produce normalmente cuando un descriptor de socket a un socket que no puede apoyar esta operación es tratar de aceptar una conexión en un socket de datagramas.

WSAEPFNOSUPPORT (10046)
Traducción: La familia de protocolo no es compatible.
Descripción: La familia de protocolos no se ha configurado en el sistema o no la aplicación de su existencia. Este mensaje tiene un significado ligeramente diferente de WSAEAFNOSUPPORT. Sin embargo, es con frecuencia intercambiables. Todas las funciones de Windows Sockets que el regreso de uno de estos mensajes también se especifica WSAEAFNOSUPPORT.

WSAEAFNOSUPPORT (10047)
Traducción: Familia de direcciones no es compatible con el protocolo de la familia.
Descripción: Una dirección que no es compatible con el protocolo solicitado se utilizó. Todas las tomas se crean con una familia de direcciones asociadas (es decir, AF_INET para protocolos de Internet) y un tipo de protocolo genérico (es decir, SOCK_STREAM). Este error se devuelve si un protocolo incorrecto que se solicite expresamente en el zócalo (Wsapiref_2qr6.asp) llamada o si la dirección de la familia equivocada se utiliza para una toma, por ejemplo, en sendto (Wsapiref_4sqa.asp).

WSAEADDRINUSE (10048)
Traducción: La dirección ya está en uso.
Descripción: Por lo general, sólo un uso de cada dirección de socket (protocolo / dirección IP / puerto). Este error se produce si un programa intenta establecer un enlace (Wsapiref_6vzm.asp) un socket a una dirección IP o el puerto que ya se ha utilizado para un socket existente, un enchufe que no se ha cerrado correctamente, o en una toma que se encuentra todavía en el proceso de cierre. Para los programas de servidor que tienen que unirse enchufes múltiples, el número de puerto mismo, considere el uso setsockopt (Wsapiref_94aa.asp) (SO_REUSEADDR). Los programas cliente normalmente no tiene que llamar a unirse a todos, connect (Wsapiref_8m7m.asp) elige un puerto no utilizado de forma automática. Cuando un enlace se denomina una dirección comodín (que implica ADDR_ANY), un error de WSAEADDRINUSE puede demorarse hasta que la dirección específica se ha comprometido. Esto puede ocurrir con una llamada a otra función que se produce más tarde, como conectarse, escuchar, WSAConnect o WSAJoinLeaf.

WSAEADDRNOTAVAIL (10049)
Traducción: No se puede asignar la dirección solicitada.
Descripción: La dirección solicitada no es válida en su contexto. Este error se debe normalmente a partir de un intento de atar (Wsapiref_6vzm.asp) a una dirección que no es válido para el equipo local. Este error también puede deberse a conectar (Wsapiref_8m7m.asp), sendto (Wsapiref_4sqa.asp), WSAConnect (Wsapiref_8kc2.asp), WSAJoinLeaf (Wsapiref_7dv6.asp), o WSASendTo (Wsapiref_752q.asp) cuando la dirección a distancia o el puerto no es válido para un equipo remoto (por ejemplo, la dirección o el puerto 0).

WSAENETDOWN (10050)
Traducción: La red está abajo.
Descripción: una operación de socket encuentra una red de muertos. Este error puede indicar un fallo grave del sistema de red (es decir, la pila de protocolos que la DLL de Windows Sockets va más), la interfaz de red o la red local.

WSAENETUNREACH (10051)
Traducción: red es inalcanzable.
Descripción: una operación de socket se trató de una red inalcanzable. Este error normalmente significa que el software local no conoce la ruta para llegar a la máquina remota.

WSAENETRESET (10052)
Traducción: Red cayó la conexión en Restablecer.
Descripción: La conexión se ha roto debido a de mantenimiento de la actividad que se detecta un fallo, mientras que la operación estaba en marcha. También puede ser devuelto por setsockopt (Wsapiref_94aa.asp) si se hace un intento para establecer SO_KEEPALIVE en una conexión que ya ha fracasado.

WSAECONNABORTED (10053)
Traducción: Software causado anulación de la conexión.
Descripción: Una conexión establecida fue detenido por el software en el ordenador host, posiblemente debido a una transmisión de datos de tiempo de espera o error de protocolo.

WSAECONNRESET (10054)
Traducción: Connection reset by peer.
Descripción: Una conexión existente fue cerrada por la fuerza por el host remoto. Este error se produce si el programa de pares en el host remoto se detuvo de repente, se reinicia el host o el host remoto utiliza un cierre duro. Ver setsockopt (Wsapiref_94aa.asp) para obtener más información acerca de la opción SO_LINGER en el socket remoto. Este error también puede producirse si una conexión se interrumpió a causa de keep-alive actividad que detecta un fallo, mientras que una o más operaciones en curso. Las operaciones que se estaban realizando no con WSAENETRESET. Las operaciones posteriores no con WSAECONNRESET.

WSAENOBUFS (10055)
Traducción: No hay espacio en búfer disponible.
Descripción: Una operación en un socket no se puede realizar porque el sistema carecía de suficiente espacio de búfer o porque una cola estaba llena.

WSAEISCONN (10056)
Traducción: socket ya está conectado.
Descripción: A petición de conexión se hizo sobre un conector ya conectado. Algunas implementaciones también devuelven este error si sendto (Wsapiref_4sqa.asp) se llama en un socket SOCK_DGRAM conectado (para SOCK_STREAM, el parámetro que en sendto (Wsapiref_4sqa.asp) se pasa por alto), aunque otras implementaciones tratar esto como un hecho válido.

WSAENOTCONN (10057)
Traducción: Socket no está conectado.
Descripción: una solicitud para enviar o recibir datos, no está permitido porque el socket no está conectado y (cuando se envía en un socket de datagramas con sendto [Wsapiref_4sqa.asp], sin dirección fue suministrada). Cualquier otro tipo de operación también se puede devolver este error, por ejemplo, setsockopt (Wsapiref_94aa.asp) SO_KEEPALIVE establecer si la conexión se ha restablecido.

WSAESHUTDOWN (10058)
Traducción: no se puede enviar después de cerrar el socket.
Descripción: una solicitud para enviar o recibir datos no se le permitió porque el socket ya había sido clausurado en esa dirección con el cierre anterior (Wsapiref_60z6.asp) llamada.Cuando el cierre se llama, un cierre parcial de una hembra se solicita. Esta es una señal de que los procesos de envío o recepción (o ambos) han sido descontinuados.

WSAETIMEDOUT (10060)
Traducción: Connection timed out.
Descripción: Un intento de conexión porque la parte conectada no responder correctamente después de un período de tiempo, o no la conexión establecida ya que el host conectado no ha respondido.

WSAECONNREFUSED (10061)
Traducción: Conexión rechazada.
Descripción: No hay conexión se puede hacer porque el equipo de destino activa se niega.Este error se debe normalmente al tratar de conectarse a un servicio que está inactiva en el sistema exterior, es decir, que no tiene un programa de servidor que ejecuta.

WSAEHOSTDOWN (10064)
Traducción: host no funciona.
Descripción: una operación de socket ha fallado porque el host de destino es hacia abajo. Una operación socket encontró una gran cantidad muertos. Actividad de red en el host local no se ha iniciado. Estas condiciones tienen más probabilidades de ser indicado por el WSAETIMEDOUT error.

WSAEHOSTUNREACH (10065)
Traducción: No route to host.
Descripción: una operación de socket se trató de un host inalcanzable. Ver WSAENETUNREACH.

WSAEPROCLIM (10067)
Traducción: Demasiados procesos.
Descripción: Una implementación de Windows Sockets puede tener un límite en el número de programas que puede utilizar al mismo tiempo. WSAStartup (Wsapiref_1v8y.asp) puede fallar con este error si el límite se ha alcanzado.

WSASYSNOTREADY (10091)
Traducción: El subsistema de red no está disponible.
Descripción: Este error es devuelto por WSAStartup (Wsapiref_1v8y.asp) si la implementación de Windows Sockets que actualmente no puede funcionar porque el sistema subyacente que utiliza para proporcionar servicios de red no está disponible actualmente. Confirme lo siguiente:
Confirme que el archivo DLL de Windows adecuadas Sockets está en la ruta actual.
Confirmar que no están tratando de utilizar más de una implementación de Windows Sockets, al mismo tiempo.
Si hay más de un archivo DLL de Winsock en el sistema, confirman que el primer archivo DLL de Winsock en el camino apropiado para el subsistema de red cargados.
Confirme que todos los componentes necesarios están instalados y configurados correctamente de acuerdo a la documentación implementación de Windows Sockets.

WSAVERNOTSUPPORTED (10092)
Traducción: Versión Winsock.dll fuera de rango.
Descripción: La implementación actual de Windows Sockets no es compatible con la versión de Windows Sockets especificación solicitada por el programa. Asegúrese de que no viejos archivos de Windows Sockets DLL se está accediendo.

WSANOTINITIALISED (10093)
Traducción: WSAStartup éxito aún no cumplida.
Descripción: Ya sea que el programa no ha llamado WSAStartup (Wsapiref_1v8y.asp) o WSAStartup (Wsapiref_1v8y.asp) ha fallado. El programa se puede acceder a un socket que la tarea activa actual no es el propietario (es decir, se trata de compartir un socket entre tareas), o WSACleanup ha sido llamado muchas veces.

WSAEDISCON (10101)
Traducción: Cierre normal en curso.
Descripción: Este error es devuelto por WSARecv (Wsapiref_4z1u.asp) y WSARecvFrom (Wsapiref_4wky.asp) para indicar que la parte remota ha iniciado una secuencia de apagado correcto.

WSATYPE_NOT_FOUND (10109)
Traducción: tipo de clase que no se encuentra.
Descripción: La clase especificada no se encontró.

WSAHOST_NOT_FOUND (11001)
Traducción: Host no encontrado. No host es desconocido.
Descripción: El nombre no es un nombre de host oficial o alias, o no se puede encontrar en las bases de datos que se va a consultar. Este error también puede ser devuelto para las consultas de protocolo y el servicio, y eso significa que el nombre especificado no se puede encontrar en la base de datos pertinente.

WSATRY_AGAIN (11002)
Traducción: host no autoritaria que no se encuentra.
Descripción: Este error suele ser un error temporal en la resolución de nombres, y significa que el servidor local no recibió una respuesta de un servidor autorizado. Una de nuevo en algún momento posterior pueden tener éxito.

WSANO_RECOVERY (11003)
Traducción: Este es un error irrecuperable.
Descripción: Este error indica que algún tipo de error no recuperable se produjo durante una búsqueda de base de datos. Este error puede producirse si los archivos de base de datos (por ejemplo, BSD compatible con servidores, servicios, o los archivos PROTOCOLOS) no se encuentra o si una petición DNS fue devuelta por el servidor con un error grave.

WSANO_DATA (11004)
Traducción: nombre válido, no hay registro de datos del tipo solicitado.
Descripción: El nombre solicitado es válido y se encuentra en la base de datos, pero no tiene los datos correctos asociados que se está resolviendo para. El ejemplo típico de esto es un nombre de host a dirección de intento de traducción (mediante gethostbyname [Wsapiref_0q5u.asp] o WSAAsyncGetHostByName [Wsapiref_7bhu.asp]) que utiliza el servidor DNS. Un registro MX es devuelto, pero no un registro. Esto indica que el mismo host existe, pero no es directamente accesible.

WSA_INVALID_HANDLE (sistema operativo dependiente)
Traducción: identificador especificado objeto de evento no es válido.
Descripción: Es un programa intentó utilizar un objeto de evento, pero el identificador especificado no es válido.

WSA_INVALID_PARAMETER (depende del sistema operativo)
Traducción: Uno o más parámetros no son válidos.
Descripción: El programa utiliza una función de Windows Sockets que asigna directamente a una función de Win32. La función de Win32 indica un problema con uno o más parámetros.

WSA_IO_INCOMPLETE (sistema operativo dependiente)
Traducción: No E / S superpuesta objeto evento en estado señalado.
Descripción: El programa ha tratado de determinar el estado de una operación superpuesta que no se ha completado. Los programas que utilizan WSAGetOverlappedResult (con la bandera fwait establece en FALSE) en un modo de sondeo para determinar cuándo una operación superpuesta ha completado Este código de error hasta que se complete la operación.

WSA_IO_PENDING (sistema operativo dependiente)
Traducción: operaciones superpuestas se completa más tarde.
Descripción: El programa ha iniciado una operación superpuesta que no se puede realizar inmediatamente. Una indicación de finalización se envía después, cuando la operación se ha completado.

WSA_NOT_ENOUGH_MEMORY (sistema operativo dependiente)
Traducción: Insuficiente memoria disponible.
Descripción: El programa utiliza una función de Windows Sockets que asigna directamente a una función de Win32. La función de Win32 indica una falta de recursos de memoria necesaria.

WSA_OPERATION_ABORTED (sistema operativo dependiente)
Traducción: operación superpuesta abortado.
Descripción: una operación superpuesta fue cancelado debido a la toma y el cierre o el comando SIO_FLUSH en WSAIoctl (Wsapiref_6ik2.asp) se corrió.

WSAINVALIDPROCTABLE (sistema operativo dependiente)
Traducción: la tabla de procedimiento no válido de proveedor de servicios.
Descripción: Un proveedor de servicio ha devuelto un cuadro de procedimiento no válido para Ws2_32.dll. (Esto es causado por uno o más de los punteros siendo nulo.)

WSAINVALIDPROVIDER (sistema operativo dependiente)
Traducción: el proveedor de servicio no válido número de versión.
Descripción: Un proveedor de servicio ha devuelto un número de versión distinto 2.0.

WSAPROVIDERFAILEDINIT (sistema operativo dependiente)
Traducción: No se puede inicializar un proveedor de servicios.
Descripción: De cualquier DLL del proveedor de servicios no se pueden cargar (Error de LoadLibrary) o no WSPStartup del proveedor / función NSPStartup.

WSASYSCALLFAILURE (sistema operativo dependiente)
Traducción: Error del sistema de llamadas.
Descripción: Este error se devuelve cuando una llamada al sistema que nunca debe dejar de falla. Por ejemplo, este error se produce si la llamada a WaitForMultipleObjects falla o una de las funciones del registro no tratar de cambiar el protocolo o los catálogos de espacio de nombre.

Plataforma Netduino plus

Plataforma Netduino plus

Carastericticas de la placa

● all 20 digital and analog pins: GPIO
● digital pins 0-1: UART 1 RX, TX
● digital pins 2-3: UART 2 RX, TX
● digital pins 5-6: PWM, PWM
● digital pins 7-8: UART 2 RTS, CTS
● digital pins 9-10: PWM, PWM
● digital pins 11-13: SPI MOSI, MISO, SPCK
● analog pins 4-5: I2C SDA, SCL

Red

● ethernet: 100 mbps
● network stack: lwIP

Almacenamiento

● micro sd (up to 2 GB)
● auto card detect

Netduino es una nueva plataforma abierta  basada en  Microsoft.NET Micro Framework. La versión  Netduino Plus ademas  es un poderoso Netduino junto con Ethernet integrado, así como el apoyo de una ranura para microSD en la misma tarjeta

Cuenta con un  potente microcontrolador de 32 bits integrado con un entorno de desarrollo estándar que está disponible gratuitamente a través de Microsoft (Visual Studio 2010).

La plataforma permite una fácil interconexión con switches, sensores, LEDs, dispositivos de serie, y mucho más. El Netduino combina 20 GPIO con SPI, I2C, UART 2 (1 RTS / CTS), 4 y 6canales de PWM ADC.

Microsoft. NET Micro Framework combina la facilidad de un lenguaje de programación de alto nivel (C #) con las características de los microcontroladores.

Disfrute de la depuración de programación basada en eventos, multi-threading, línea por línea,puntos de interrupción y mucho más!

Ademas se pueden añadir  mas accesorios ofreciendo estos una funcionalidades extra ( por ejemplo la ubicación GPS, el control de servos ,displays  de todo tipo).

Netduino es ademas   compatible pin a pin con la plataforma Arduino.

Para comenzar con el desarrollo Netduino debemos  instalar el siguiente software gratuito.

Recomiendo que instale todo en el mismo orden que aparecen  aqui.

  1.  Microsoft Visual C# Express 2010 (get it FREE here)
  2. .NET Micro Framework  (get it FREE here)
  3. Netduino SDK (Free download)Download 32-bit Netduino SDK v4.1.0Download 64-bit Netduino SDK v4.1.0
Ahora que usted tiene todo el software instalado, vamos a probar que todo funciona. Los controladores para su Netduino más que ya se han instalado con el SDK de Netduino. Si no aparece estar funcionando se puede descargar los controladores desde el Netduino website.
Una vez hecho esto usted estara listo para su primer proyecto de  Netduino .