curso netduino presentacion

Post on 24-Dec-2015

16 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Curso Netduino

TRANSCRIPT

Universidad Juárez Autónoma de TabascoDivisión Académica de Informática y Sistemas

El Internet de las cosas con NetduinoInstructor:J. Adrián Sevilla Azuara

Contenido:1 Introducción 2 Mi primer aplicación3 Practicas4 Uso de Hilos5 Web Server6 Proyecto final

IntroducciónTemas:• El Internet de las cosas• ¿Qué es Netduino?• Otros tipos de Hardware• Antes de empezar…

¿Qué es Netduino?

Netduino es una plataforma electrónica de código abierto (open source) usándo el .NET Micro Framework.Contiene un microcontrolador de 32 bits y un gran entorno de desarrollo que es adecuado para ingenieros y aficionados.

Netduino

• Netduino combina 20 E/S de propósito general.

• .NET Micro Framework combina la facilidad de alto nivel de codificación y las características de los micro controladores.

Netduino

• Programación orientada a objetos, hilo de ejecución, depuración línea por línea y puntos de ruptura.

• Netduino es compatible con los pines de los Arduino Shields y muchos otros accesorios pre-construidos como la localización GPS, control de servomotores y baterías.

Especificaciones Técnicas

Especificaciones Técnicas

Procesador y Memoria:• STMicro 32-bit

microcontroller• Speed: 168MHz, Cortex-

M4• Code Storage: 384 KB• RAM: 100+ KB

Potencia:• Alimetación: 7.5 - 9.0 VDC

o USB• Salida: 5 VDC y 3.3 VDC

regulados.• Corriente Máxima: 25 mA

por pin.• microcontroller max

current: est. 125 mA total• digital i/o are 3.3 V--but 5 V

tolerant

Especificaciones Técnicas

Requerimientos de Sistema

• Windowso Windows XP, Vista, 7 y 8 (32 y 64 bits).o Procesador igual o mayor a 1.6 Ghz.o 1Gb de Ram.

• Mac y Linuxo Maquina Virtual con Windows (VMWare o VirtualBox).o Mono.

Para mas información Visitar http://www.netduino.com/

Otros tipos de Hardware

ARDUINO

NET FEZ

Antes de empezar…

Antes de empezar…

Los componentes

Paso 1

Colocar adhesivos

Paso 2

Instalar el Netduino en la proto para después sujetarlo con El UTP

El amarre debe estar a un lado de la proto para que no estorbe.

Cuidar que la parte negativa, quede hacia abajo.

Paso 3Instalar 5 leds con la patita Negativa en el agujero de la proto en las conexiones negativas.Colocar UTP, para conectar GND con el lado negativo de la proto.

Empiece a colocar leds en el agujero 31.

Paso 4Instalar 4 Botones, a partir del agujero 17, cuidando que se instalen en la separación que forma el canal central.

Colocar un puente entre el bus Negativo.

Paso 5Conectar el primer Led de la Izquierda con la salida 13 del Netduino y así sucesivamente hasta llegar a la salida 9.

Para que el cable no estorbe, puede escalonar las conexiones entre los buses B,C,D y E.

Paso 6

Colocar la conexión a los botones, empezando de la salida 8 al primer botón de la izquierda.Es importante conectarlo en el lado derecho del botón.

Conectar al bus negativo cada uno de los botones.Es importante conectar el lado derecho.

Paso 7

Conectar el cable para el potenciómetro, Agujero F30 a salida análoga 0, agujero F28 a la salida análoga 1 y agujero F26 a la salida análoga 2.

Salida Análoga

Insertar el potenciómetro en los agujeros G30,G28 Y G26.

Paso 8

Revisar la firmeza de las conexiones que ya ha terminado.

El cable Cruzado

Mi primer aplicaciónObjetivos:• Instalar el software• Crear Mi primer aplicación

Instalar el Software

• Para poder programar el Netduino es necesario instalar el software para ese fin en el siguiente orden:o Microsoft Visual Studio C# Express 2010o .NET Micro Framework SDK v4.2o Netduino SDK v4.2.1.0 (32-bit) or Netduino SDK v4.2.1.0 (64-bit)

Crear Mi primer aplicación

PracticasTemas:• Puertos de salida.• Puertos de entrada.• Puertos analogos.

Practica 1

• Encender un Led de forma intermitente al momento de presionar un botón.

• Abrir el proyecto Practica1 de Visual Studio.• Se destaca el uso de puertos digitales de entrada

y salida.

Practica 2

• Encender y apagar tres Leds de forma de forma seriada, en un ciclo infinito.

• Abrir el proyecto Practica2 de Visual Studio.• Se destaca:

o Uso de un puerto de salida.o Uso de Thread para control de tiempo.

Practica 3

• Encender un led solo cuando se tiene presionado un botón.

• Abrir el proyecto Practica3 de Visual Studio.• Se destaca:

o Uso de un puerto de salida.o Uso de un puerto de entrada.

Practica 4

• Encender un led con base al retardo obtenido del valor del potenciómetro.

• Abrir el proyecto Practica4 de Visual Studio.• Se destaca:

o Uso de un puerto de salida.o Uso de un puerto de entrada analógica.

Practica 5

• Encender una serie de leds dando el efecto de la parrilla del auto Increíble.

• Abrir el proyecto Practica5 de Visual Studio.• Se destaca:

o Uso de un puerto de salida.

Practica 6

• Encender el led 13 cuando este presionado el botón y contar en pantalla una secuencia después de trascurrido cierto tiempo.

• Abrir el proyecto Practica6 de Visual Studio.

Practica 7

• Encender el led 13 cuando este presionado el botón y contar en pantalla una secuencia después de trascurrido cierto tiempo y reiniciar contador.

• Abrir el proyecto Practica7 de Visual Studio.

Practica 8

• Lectura del potenciómetro y presentar el valor en pantalla.

• Abrir el proyecto Practica8 de Visual Studio.

Practica 9

• Encender una serie de leds según la lectura del potenciómetro.

• Abrir el proyecto Practica9 de Visual Studio.

Uso de HilosTemas:• ¿Qué es un Hilo o Thread?• Practica con tareas multiples

Practica 1

• Objetivo: Crear una programación que de forma paralela realice tres procesos, en el microcontrolador Netduino, según el siguiente diagrama:

Paso 1, Crear variables

• Crear variables estáticas de los puertos y botones , con la finalidad de crear salidas o entradas. Salidas: Leds, Entradas: Botones y Potenciómetro.

• Las variables de leds son: led09, led10, led11, led12 y led13.• Las variables de botones son: btn5, btn6, btn7 y btn8.• Las variables del potenciómetro son: bajo, alto y potenciometro_A1, sin

embargo nos referiremos al potenciómetro solo con la variable potenciometro_A1, para obtener su valor.

Paso 2, crear funciones.

• Segmentar por tareas las actividades que realizará la aplicación.

• El separar por tareas especificas nos ayudará a crear los hilos de ejecución.

Paso 3, crear hilos

• Inicializar cada una de las tareas (funciones) como un nuevo hilo de ejecución por separado, creando de esta forma tareas que se ejecutarán de forma simultanea.

• Es importante mandar a “Dormir” el proceso principal, para ejecutar las tareas paralelas.

Web ServerTemas:• Crear un Web Server.• Aceptar comandos.

Practica 2

• Objetivo: Crear un cliente que pueda leer el estado de los botones del Netduino, mediante una conexión de red, según el diagrama:

Paso 1, Programación del

Servidor

• Inicializar la interfaz de red con una dirección ip.• Crear una variable con la clase Server. (Creada más adelante).• Inicializar un proceso nuevo con la acción

“IniciarCapturaDeSocket”, que inicia la tarea de escuchar las peticiones del cliente.

Paso 2, Crear Clase Server

• Crear variables.• Crear el constructor principal.

Paso 3, Crear funciones

• La función necesaria para escuchar las peticiones y traducirlas.• La función necesaria para leer el valor de los botones en forma paralela.

Paso 4, Programación de cliente

• Para el servidor se crea una clase denominada Cliente que es la encargada de realizar la conexión mediante tres parámetros,: dirección, puerto y comando.

public string conectar(string direccion, string puerto, string comando)

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<%@ Page Title="Practica 2" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Practica2.aspx.cs" Inherits="Practica2" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"><script type="text/javascript"> function callkeydownhandler(evnt) { var ev = (evnt) ? evnt : event; var code = (ev.which) ? ev.which : event.keyCode; if (code == 37) { location.href = "Practica1.aspx"; } if (code == 39) { location.href = "Practica3.aspx"; } } if (window.document.addEventListener) { window.document.addEventListener("keydown", callkeydownhandler, false); } else { window.document.attachEvent("onkeydown", callkeydownhandler); }</script> <div> <h1>Practica 2<asp:Timer ID="Timer1" runat="server" Interval="200" ontick="Timer1_Tick"> </asp:Timer> </h1> <h3>Revisar el estado de los botones</h3> <p></p>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Inline"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick"> </asp:AsyncPostBackTrigger> </Triggers> <ContentTemplate>

<table class="style1"> <tr class ="estado"> <td> <asp:Label ID="Label1" runat="server" Text="Estado de los botones"></asp:Label> &nbsp;</td> </tr> <tr> <td> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Leer estado de botones ahora" /> </td> </tr> </table>

<br />

Paso 4, Programación de cliente 2

• <table class="style1">• <tr>• <td>• BOTON 5</td>• <td>• BOTON 6</td>• <td>• BOTON 7</td>• <td>• BOTON 8</td>• </tr>• <tr>• <td>• <asp:CheckBox ID="CheckBox1" runat="server" Enabled="False" Text="Activado" />• </td>• <td>• <asp:CheckBox ID="CheckBox2" runat="server" Enabled="False" Text="Activado" />• </td>• <td>• <asp:CheckBox ID="CheckBox3" runat="server" Enabled="False" Text="Activado" />• </td>• <td>• <asp:CheckBox ID="CheckBox4" runat="server" Enabled="False" Text="Activado" />• </td>• </tr>• <tr>• <td>• <asp:Image ID="bt5L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" • Height="100px" Width="100px" />• <asp:Image ID="bt5P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" • Height="100px" Width="100px" Visible="False" />• </td>• <td>• <asp:Image ID="bt6L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" Height="100px" Width="100px" />• <asp:Image ID="bt6P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" Height="100px" Width="100px"• Visible="False" />• </td>• <td>• <asp:Image ID="bt7L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" Height="100px" Width="100px" />• <asp:Image ID="bt7P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" Height="100px" Width="100px"• Visible="False" />• </td>• <td>• <asp:Image ID="bt8L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" Height="100px" Width="100px" />• <asp:Image ID="bt8P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" Height="100px" Width="100px"• Visible="False" />• </td>• </tr>• </table>

• </ContentTemplate>• </asp:UpdatePanel>

• <p>Para el desarrollo de esta actividad fué necesario configurar en el Netduino:</p>• <ul>• <li>Configuración de las entradas y salidas.</li>• <li>Configuración del puerto Ethernet, con IPV4 y protocolo TCP.</li>• <li>Crear dos procesos en paralelo mediante el uso de Thread.</li>• <li>El proceso "LeerBotones().</li>• <li>El proceso escuchar las peticiones del cliente.</li>• </ul>• <p>Para el lado cliente fue necesario:</p>• <ul>• <li>Crear una interfaz para recibir información del Netduino.</li>• <li>Crear una clase para la conexión al Netduino.</li>• <li>Mandar el comando al Netduino.</li>• <li>Analizar y presentar la información recibida.</li>• <li>Reenviar el comando cada 2 segundos.</li>• </ul>• </div>• </asp:Content>

Paso 4, Programación de cliente 3

• Código de ejecución oculto.• Se solicita la conexión mediante la clase Cliente, el resultado

se ejecuta en el Netduino

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;

public partial class Practica1 : System.Web.UI.Page{

protected void Page_Load(object sender, EventArgs e) {

} protected void Button1_Click(object sender, EventArgs e) { Cliente NuevoCliente = new Cliente();

NuevoCliente.conectar("192.168.1.93", "80", "ledsarreglo"); }}

Practica 3

• Objetivo: Crear un cliente que pueda leer el estado del potenciometro del Netduino, mediante una conexión de red, según el diagrama:

Paso 1, Programación del

Servidor

• Inicializar la interfaz de red con una dirección ip.• Crear una variable con la clase Server. (Creada más adelante).• Inicializar un proceso nuevo con la acción

“IniciarCapturaDeSocket”, que inicia la tarea de escuchar las peticiones del cliente.

Paso 2, Crear Clase Server

• Crear variables.• Crear el constructor principal.

Paso 3, Crear funciones

• La función necesaria para escuchar las peticiones y traducirlas.• La función necesaria para leer el valor del potenciometro en

forma paralela.

Paso 4, Programación de cliente

• Para el servidor se crea una clase denominada Cliente que es la encargada de realizar la conexión mediante tres parámetros,: dirección, puerto y comando.

public string conectar(string direccion, string puerto, string comando)

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Practica3.aspx.cs" Inherits="Practica3" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"><script type="text/javascript"> function callkeydownhandler(evnt) { var ev = (evnt) ? evnt : event; var code = (ev.which) ? ev.which : event.keyCode; if (code == 37) { location.href = "Practica2.aspx"; } if (code == 39) { location.href = "Practica4.aspx"; } } if (window.document.addEventListener) { window.document.addEventListener("keydown", callkeydownhandler, false); } else { window.document.attachEvent("onkeydown", callkeydownhandler); }</script> <div> <h1>Practica 3<asp:Timer ID="Timer1" runat="server" Interval="200" ontick="Timer1_Tick"> </asp:Timer> </h1>

<h3>Obtener el valor del potenciómetro:</h3> <p></p>

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick"> </asp:AsyncPostBackTrigger> </Triggers> <ContentTemplate> <table class="style1"> <tr> <td><asp:Label ID="Label1" runat="server" Text="Valor del potenciometro" CssClass="potenciometro"></asp:Label> &nbsp;<br /> </td> </tr> <tr> <td> <asp:Button ID="Button1" runat="server" Text="Obtener el valor del potenciometro." /> </td> </tr> </table> </ContentTemplate> </asp:UpdatePanel>

<br /> <br /> <br />

</div></asp:Content>

Practica 4

• Objetivo: Crear un cliente que pueda leer el estado de los botones, el potenciómetro y encender o apagar los Leds del Netduino, mediante una conexión de red, según el diagrama:

Paso 1, Programación del

Servidor

• Inicializar la interfaz de red con una dirección ip.• Crear una variable con la clase Server. (Creada más adelante).• Inicializar un proceso nuevo con la acción

“IniciarCapturaDeSocket”, que inicia la tarea de escuchar las peticiones del cliente.

Paso 2, Crear Clase Server

• Crear variables.• Crear el constructor principal.

Paso 3, Crear funciones

• La función necesaria para escuchar las peticiones y traducirlas.• La función necesaria para leer los botones, leer el estado de los leds, el valor

del potenciometro, función que apague y encienda los leds en forma paralela.

Paso 4, Programación de cliente

• Para el servidor se crea una clase denominada Cliente que es la encargada de realizar la conexión mediante tres parámetros,: dirección, puerto y comando.

public string conectar(string direccion, string puerto, string comando)

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<%@ Page Title="Practica 4" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Practica4.aspx.cs" Inherits="Practica4" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"><script type="text/javascript"> function callkeydownhandler(evnt) { var ev = (evnt) ? evnt : event; var code = (ev.which) ? ev.which : event.keyCode; if (code == 37) { location.href = "Practica3.aspx"; } if (code == 39) { location.href = "Codigo.aspx"; } } if (window.document.addEventListener) { window.document.addEventListener("keydown", callkeydownhandler, false); } else { window.document.attachEvent("onkeydown", callkeydownhandler); }</script> <style type="text/css"> .style1 { width=100%; } </style></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <div> <h1>Practica 4</h1> <h3>Obtener el estado de los botones.</h3> <asp:Timer ID="Timer1" runat="server" Interval="500" ontick="Timer1_Tick"> </asp:Timer> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <table class="style1"> <tr class ="estado"> <td><asp:Label CssClass="estado" ID="Label1" runat="server" Text="Estado de los botones"></asp:Label> &nbsp;</td> </tr> <tr> <td> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Leer valores ahora" /> </td> </tr> </table>

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<br /> <table class="style1"> <tr> <td> BOTON 5</td> <td> BOTON 6</td> <td class="style1"> BOTON 7</td> <td> BOTON 8</td> </tr> <tr> <td> <asp:CheckBox ID="CheckBox1" runat="server" Enabled="False" Text="Activado" /> </td> <td> <asp:CheckBox ID="CheckBox2" runat="server" Enabled="False" Text="Activado" /> </td> <td > <asp:CheckBox ID="CheckBox3" runat="server" Enabled="False" Text="Activado" /> </td> <td> <asp:CheckBox ID="CheckBox4" runat="server" Enabled="False" Text="Activado" /> </td> </tr> <tr> <td style="margin-left: 40px"> <asp:Image ID="bt5L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" Height="100px" Width="100px" /> <asp:Image ID="bt5P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" Height="100px" Width="100px" Visible="False" /> </td> <td> <asp:Image ID="bt6L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" Height="100px" Width="100px" /> <asp:Image ID="bt6P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" Height="100px" Width="100px" Visible="False" /> </td>

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<td class="style1"> <asp:Image ID="bt7L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" Height="100px" Width="100px" /> <asp:Image ID="bt7P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" Height="100px" Width="100px" Visible="False" /> </td> <td> <asp:Image ID="bt8L" runat="server" ImageUrl="~/Images/Botonlibre.jpg" Height="100px" Width="100px" /> <asp:Image ID="bt8P" runat="server" ImageUrl="~/Images/BotonPresionado.jpg" Height="100px" Width="100px" Visible="False" /> </td> </tr> </table> <p> </p> <table class="style1"> <tr> <td colspan="2">Led 13</td> <td colspan="2">Led 12</td> <td colspan="2">Led 11</td> <td colspan="2">Led 10</td> <td colspan="2">Led 09</td> </tr> <tr> <td colspan="2"> <asp:Image ID="ibtn13a" runat="server" Height="50px" ImageUrl="~/Images/ledapagado.jpg" Width="50px" /> <asp:Image ID="ibtn13e" runat="server" Height="50px" ImageUrl="~/Images/ledencendido.jpg" Width="50px" Visible="False" /> </td> <td colspan="2"> <asp:Image ID="ibtn12a" runat="server" Height="50px" ImageUrl="~/Images/ledapagado.jpg" Width="50px" /> <asp:Image ID="ibtn12e" runat="server" Height="50px" ImageUrl="~/Images/ledencendido.jpg" Width="50px" Visible="False" /> </td>

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<td colspan="2"> <asp:Image ID="ibtn11a" runat="server" Height="50px" ImageUrl="~/Images/ledapagado.jpg" Width="50px" /> <asp:Image ID="ibtn11e" runat="server" Height="50px" ImageUrl="~/Images/ledencendido.jpg" Width="50px" Visible="False" /> </td> <td colspan="2"> <asp:Image ID="ibtn10a" runat="server" Height="50px" ImageUrl="~/Images/ledapagado.jpg" Width="50px" /> <asp:Image ID="ibtn10e" runat="server" Height="50px" ImageUrl="~/Images/ledencendido.jpg" Width="50px" Visible="False" /> </td> <td colspan="2"> <asp:Image ID="ibtn09a" runat="server" Height="50px" ImageUrl="~/Images/ledapagado.jpg" Width="50px" /> <asp:Image ID="ibtn09e" runat="server" Height="50px" ImageUrl="~/Images/ledencendido.jpg" Width="50px" Visible="False" /> </td> </tr> <tr> <td style="margin-left: 120px"> <asp:Button ID="bled13a" runat="server" onclick="bled13a_Click" Text="OFF" Width="50px" /> </td> <td style="margin-left: 40px"> <asp:Button ID="bled13e" runat="server" Text="ON" Width="50px" onclick="bled13e_Click" /> </td> <td> <asp:Button ID="bled12a" runat="server" Text="OFF" Width="50px" onclick="bled12a_Click" /> </td> <td> <asp:Button ID="bled12e" runat="server" Text="ON" Width="50px" onclick="bled12e_Click" /> </td>

Paso 4, Programación de cliente

• Código de la página Web (Web Aplication).

<td class="style1"> <asp:Button ID="bled11a" runat="server" Text="OFF" Width="50px" onclick="bled11a_Click" /> </td> <td class="style1"> <asp:Button ID="bled11e" runat="server" Text="ON" Width="50px" onclick="bled11e_Click" /> </td> <td> <asp:Button ID="bled10a" runat="server" Text="OFF" Width="50px" onclick="bled10a_Click" /> </td> <td> <asp:Button ID="bled10e" runat="server" Text="ON" Width="50px" onclick="bled10e_Click" /> </td> <td> <asp:Button ID="bled09a" runat="server" Text="OFF" Width="50px" onclick="bled09a_Click" /> </td> <td> <asp:Button ID="bled09e" runat="server" Text="ON" Width="50px" onclick="bled09e_Click" /> </td> </tr> </table> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers> </asp:UpdatePanel>

</div></asp:Content>

Proyecto final

Aplicación Cliente/Servidor

• Cada uno de los participantes deberá crear lo siguiente:

• Una aplicación cliente que controle el Netduino y haga lo siguiente:o Encender y apagar cada led.o Leer el valor del potenciómetro.o Conocer el estado de los botones.o Agregar función de coordinación de leds.

• La programación del Netduino para aceptar los comandos por el puerto de conexión 80.

Web Server

• Cada uno de los participantes deberá crear lo siguiente:

• Programar al Netduino para que funcione como un Web Server, deberá cumplir lo siguiente:o Aceptar conexiones por el puerto 80.o Responder con una página en Html.o La página deberá mostrar las opciones correspondientes para controlar

los dispositivos conectados a la proto, leds, botones y potenciómetro.o Se sugiere el uso de Javascrip.

top related