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

 

        private Socket socket = null;

03

 

        //open connection to onbaord led so we can blink it with every request

04

 

        private OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);

05

 

        private OutputPort Garage2CarOpener = new OutputPort(Pins.GPIO_PIN_D13,false);

06

 

07

 

        public WebServer()

08

 

        {

09

 

            //Initialize Socket class

10

 

            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

11

 

            //Request and bind to an IP from DHCP server

12

 

            socket.Bind(new IPEndPoint(IPAddress.Any, 80));

13

 

            //Debug print our IP address

14

 

            Debug.Print(Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress);

15

 

            //Start listen for web requests

16

 

            socket.Listen(10);

17

 

            ListenForRequest();

18

 

        }

19

 

20

 

        public void ListenForRequest()

21

 

        {

22

 

            while (true)

23

 

            {

24

 

                using (Socket clientSocket = socket.Accept())

25

 

                {

26

 

                    //Get clients IP

27

 

                    IPEndPoint clientIP = clientSocket.RemoteEndPoint as IPEndPoint;

28

 

                    EndPoint clientEndPoint = clientSocket.RemoteEndPoint;

29

 

                    //int byteCount = cSocket.Available;

30

 

                    int bytesReceived = clientSocket.Available;

31

 

                    if (bytesReceived > 0)

32

 

                    {

33

 

                        //Get request

34

 

                        byte[] buffer = new byte[bytesReceived];

35

 

                        int byteCount = clientSocket.Receive(buffer, bytesReceived, SocketFlags.None);

36

 

                        string request = new string(Encoding.UTF8.GetChars(buffer));

37

 

                        string firstLine = request.Substring(0, request.IndexOf('\n')); //Example "GET /activatedoor HTTP/1.1"

38

 

                        string[] words = firstLine.Split(' ');  //Split line into words

39

 

                        string command = string.Empty;

40

 

                        if( words.Length > 2)

41

 

                        {

42

 

                            string method = words[0]; //First word should be GET

43

 

                            command = words[1].TrimStart('/'); //Second word is our command - remove the forward slash

44

 

                        }

45

 

                        switch (command.ToLower())

46

 

                        {

47

 

                            case "activatedoor":

48

 

                                ActivateGarageDoor();

49

 

                                //Compose a response

50

 

                                string response = "I just opened or closed the garage!";

51

 

                                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";

52

 

                                clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None);

53

 

                                clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None);

54

 

                                break;

55

 

                            default:

56

 

                                //Did not recognize command

57

 

                                response = "Bad command";

58

 

                                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";

59

 

                                clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None);

60

 

                                clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None);

61

 

                                break;

62

 

                        }

63

 

                    }

64

 

                }

65

 

            }

66

 

        }

67

 

        private void ActivateGarageDoor()

68

 

        {

69

 

            led.Write(true);                //Light on-board LED for visual cue

70

 

            Garage2CarOpener.Write(true);   //"Push" garage door button

71

 

            Thread.Sleep(1000);             //For 1 second

72

 

            led.Write(false);               //Turn off on-board LED

73

 

            Garage2CarOpener.Write(false);  //Turn off garage door button

74

 

        }

75

 

        #region IDisposable Members

76

 

        ~WebServer()

77

 

        {

78

 

            Dispose();

79

 

        }

80

 

        public void Dispose()

81

 

        {

82

 

            if (socket != null)

83

 

                socket.Close();

84

 

        }

85

 

        #endregion

86

 

    }

87

 

Anuncios

2 comentarios el “Netduino-Plus como webserver interactuando con dispositivos

  1. oswaldo dice:

    estimado ingeniero
    quisiera saber como puedo utilizar la tarjeta net duino plus para que me de alarma en una pagina web cuando esten encedidas las luces

    gracias

    Me gusta

  2. En realidad le he estado dando vueltas y no es muy complicado hacerlo , básicamente se podria hacer por ejemplo conectando una simple fotoresistencia a un puerto analogico y enviando esta información a pachube (ahora es cosm.com) en tiempo real ( y luego definiendo un trigger cuando alcanze cierto nivel)
    Respecto al código necesario no es muy complicado ,por ejemplo en el libro de O'Really Internet de las cosas , vienen muchos ejemplos de como hacer cosas parecidas
    Un saludo
    //carlos//

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s