Acceso a twitter 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


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 }