Autor Tema: Mini servidor web con mbed  (Leído 11494 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado splasma2

  • PIC16
  • ***
  • Mensajes: 131
Mini servidor web con mbed
« en: 09 de Enero de 2011, 07:47:25 »
Hola de nuevo, os cuento mi primera experiencia con la placa mbed ( mbed.org ),  una placa ARM que tiene el entorno de desarrollo en la nube , lo que permite usar y compartir multitud de librerias super-utiles.

Y eso es lo que yo he hecho, usar la libreria Ethernet + TCP/IP( si, la placa soporta conexión de red)  y una libreria de servidor Web disponible ( todo en C++) , de forma que hacer un mini-servidor web que atiende a comandos básicos , como enceder o apagar los leds de la placa via web, ha sido tan fácil como el código que os pongo abajo, bueno hay una pequeña trampa, como la complejidad del código en la placa es mínima, he tenido que meter un poco de  Javascript en la página que devuelve el mini-servidor, pero tampoco ha sido complicado ... Lo he probado desde un portatil con  Windows, un móvil android y un Iphone y los comandos remotos funcionan perfectamente en los tres casos.

Los comandos se activan desde código javascript de la página, porque mbed implementa un mecanismo de invocacion remota llamado RPC ( original  :)) que puede ejecutarse desde el mini-servidor web que ejecutamos en la placa, por ejemplo para encender el led1, se puede hacer con la siguiente URL:
http::/ip-del-mini-server/led1/write 1.

 Ahora solo queda usar las salidas digitales de la placa para activar/desactivar por ejemplo reles, y estamos a un paso de un control web domotico, ah,  RPC permite también acceder a ports de entrada, port analogicos o cosas más compejas como dispositivos I2C, USB, etc... todo se puede presentar como una sencilla URL  :lol: :lol:

El código que hay que cargar en la placa es este , con tiempo os pondre el código de la pagina html...

Una pega importante, para poder compilar y acceder al entorno de desarrollo ( en la nube) hay que tener una placa mbed... :(

Código: [Seleccionar]
// Mini-servidor WEB en mbed
// para uso domotico.
//
// MBC (splasma) 2011

#include "mbed.h"
#include "TextLCD.h"
#include "EthernetNetIf.h"
#include "HTTPServer.h"
#include "RPCVariable.h"

EthernetNetIf eth; 
HTTPServer svr;

TextLCD lcd(p21, p22, p23, p24, p25, p26,TextLCD::LCD16x2); // rs, e, d4-d7

DigitalOut led1(LED1, "led1");
DigitalOut led2(LED2, "led2");
DigitalOut led3(LED3, "led3");
DigitalOut led4(LED4, "led4");

LocalFileSystem fs("webfs");

int Ticks = 0;
//Attach variable to an RPCVariable Object
RPCVariable<int> rpc_i(&Ticks, "ticks");

int main() {
  Base::add_rpc_class<DigitalOut>();

  lcd.cls();
  lcd.printf("Setting up...\n");

  EthernetErr ethErr = eth.setup(10000);
 
  if(ethErr)
  {
    lcd.printf("Error %d.\n", ethErr);
    return -1;
  }
  lcd.printf("Setup OK\n");
  IpAddr ethIp = eth.getIp();
  lcd.printf("IP :%d.%d.%d.%d\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
  const char* hwAddr = eth.getHwAddr();
  //lcd.printf("MAC:%02x:%02x:%02x:%02x:%02x:%02x\n",
  // hwAddr[0], hwAddr[1], hwAddr[2],
  // hwAddr[3], hwAddr[4], hwAddr[5]);


  FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
  FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
 
  svr.addHandler<SimpleHandler>("/hello");
  svr.addHandler<RPCHandler>("/rpc");
  svr.addHandler<FSHandler>("/files");
  svr.addHandler<FSHandler>("/"); //Default handler
 
  svr.bind(80);
 
   Timer tm;
  tm.start();
  //Listen indefinitely
  while(true)
  {
    Net::poll();
    if(tm.read()>.5)
    {
      led1=!led1; //Show that we are alive
      tm.start();
      if (led1) Ticks++;
    }
  }
 
  return 0;
}

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Mini servidor web con mbed
« Respuesta #1 en: 11 de Enero de 2011, 12:28:23 »
Hola splasma2,

Citar
Una pega importante, para poder compilar y acceder al entorno de desarrollo ( en la nube) hay que tener una placa mbed... Sad

Puedes hacerlo off-line desde el MDK-ARM.

Aquí tienes un tuto de como hacerlo.

Porting an mbed Project to MDK-ARM

Por otro lado podrías poner el circuito o esquemático aparte del código del javascript, muy buen tuto de iniciación  :-/ :-/ :-/

Un saludete y gracias compi.

Desconectado splasma2

  • PIC16
  • ***
  • Mensajes: 131
Re: Mini servidor web con mbed
« Respuesta #2 en: 13 de Enero de 2011, 17:27:19 »
Os pongo la página HTML con el código Javascript (x.x.x.x es la dirección publica a usar), es la primera , está poco desarrollada... :oops::

Código: [Seleccionar]
<html>
<head>
<title>MBED Webhome</title>
<!--META HTTP-EQUIV="REFRESH" CONTENT="5">


<SCRIPT TYPE="text/javascript">

function getHTTPObject() {
var xhr = false;
  try {
      xhr = new XMLHttpRequest();
    } catch(e) {
      try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
      catch (e2) {
        try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
        catch (e) {}
    }
  }
return xhr;
}
var http = getHTTPObject();


function getTS()
{
var res = null;
 
http.open("GET", "http://x.x.x.x/rpc/ticks/read", false);   

http.send();
res = http.responseText;
var min = res % 3600;
var horas = res / 3600;
document.getElementById("counter").innerHTML = parseInt(horas) + " horas, " + parseInt(min/60) + " minutos y " + (min%60) + " segundos.";

}

function getTemp()
{
var res = null;
 
http.open("GET", "http://x.x.x.x/rpc/temperature/run", false);   

http.send();
res = http.responseText;
document.getElementById("temperatura").innerHTML = res;

}

function getStatus()
{
var res = null;
 
http.open("GET", "http://x.x.x.x/rpc/led2/read", false);   

http.send();
res = http.responseText;

changeColor('Luz1',res);

http.open("GET", "http://x.x.x.x/rpc/led3/read", false);   

http.send();
res = http.responseText;

changeColor('Luz2',res);

}

function cambiarEstado(element,estado)
{

if (estado == 0)
  http.open("GET", "http://x.x.x.x/rpc/" + element + "/write 0", true);
else
http.open("GET", "http://x.x.x.x/rpc/" + element + "/write 1", true);
  http.send(null);
}

function changeColor(element,estado){
if (estado == 1)
document. getElementById(element).style.color = "blue";
else
document. getElementById(element).style.color = "red";
}


</SCRIPT>




</head>


<body 
    BACKGROUND="water003.jpg"
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#FF66FF"
    ALINK="#FF0000"
    onload="getTS();getTemp();getStatus();">


<div style="text-align: center;">
<span style="background-color: rgb(255, 255, 255); font-size: 18pt;">WEB HOME</span><br />
</div>
<div style="text-align: center;">
<span style="background-color: rgb(255, 255, 255); color: rgb(0, 0, 205);">MI CASA</span><br />
<br/>
Llevo encendido:&nbsp;
<div id="counter"> -- </div>
<br/>
<br/>
Temperatura: <div id="temperatura"> -- </div>
<br/>
<br/>

<table style="text-align: center; border-collapse: collapse; width: 50%;">
<tbody>
<tr>
<td width="20%"><STRONG ID="Luz1">LUZ 1</STRONG></td>
<td width="10% style="" rowspan="1">
<BUTTON TYPE=SUBMIT ID="Luz1On" onClick="changeColor('Luz1',1);cambiarEstado('led2',1)">
<STRONG>Encender</STRONG></BUTTON>
</td>
<td width="10% style="" rowspan="1">
<BUTTON TYPE=SUBMIT ID="Luz1Off" onClick="changeColor('Luz1',0);cambiarEstado('led2',0)">
<STRONG>Apagar</STRONG></BUTTON>
</td>
</tr>
<tr>
<td width="20%"><STRONG ID="Luz2">LUZ 2</STRONG></td>
<td width="10% style="" rowspan="1">
<BUTTON TYPE=SUBMIT ID="Luz1On" onClick="changeColor('Luz2',1);cambiarEstado('led3',1)">
<STRONG>Encender</STRONG></BUTTON>
</td>
<td width="10% style="" rowspan="1">
<BUTTON TYPE=SUBMIT ID="Luz1Off" onClick="changeColor('Luz2',0);cambiarEstado('led3',0)">
<STRONG>Apagar</STRONG></BUTTON>
</td>
</tr>
</tbody>
</table>
</body>
</html>

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Mini servidor web con mbed
« Respuesta #3 en: 13 de Enero de 2011, 18:34:49 »
Hola!! Yo tambien hice andar un mini webserver con el mbed. Tuve q desarmar una placa de red por el tema de los magneticos y eso. Mas adelante cuando tenga un tiempito les muestro como :wink:
El problema es q el webserver es muy estatico. Yo tenia ganas de hacer algo mas dinamico para poder mostrar y modificar variables a traves del sitio web. Cuando tenga algo lo publico.
saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado splasma2

  • PIC16
  • ***
  • Mensajes: 131
Re: Mini servidor web con mbed
« Respuesta #4 en: 13 de Enero de 2011, 18:52:53 »
Gera , me alegro de no estar solo  :mrgreen: :mrgreen:

Para hacer lo que comentas yo uso las librerias RPC de mbed, en el código que he publicado está incluida la forma de controlar los leds de la placa ( salidas) y también como leer la temperatura que da un LM35 conectado a una entrada analogica y el tiempo (ticks) que lleva la placa encendida, a todo se accede desde la pagina web de forma fácil gracias al RPC.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Mini servidor web con mbed
« Respuesta #5 en: 13 de Enero de 2011, 19:38:51 »
Q buen dato!! Estuve buscando en el sitio de mbed sobre un webserver dinamico y no encontre nada q me convenciera. Pero esto q me decis esta muy bueno!! Ya voy a hacer unas pruebas a ver q tal :wink:
gracias!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado splasma2

  • PIC16
  • ***
  • Mensajes: 131
Re: Mini servidor web con mbed
« Respuesta #6 en: 15 de Enero de 2011, 20:58:29 »

He hecho una aplicación Android para acceder al mini-webserver , os pongo una imagen de como va quedando:


Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Mini servidor web con mbed
« Respuesta #7 en: 29 de Enero de 2011, 21:09:59 »
Bueno, ya consegui otro mbed  :-/ (el anterior se me quemo, snif). Asiq ya me voy a poner a probar este webserver, se lo ve muy interesante :wink:
saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mini servidor web con mbed
« Respuesta #8 en: 29 de Enero de 2011, 21:12:32 »
Bueno, ya consegui otro mbed  :-/ (el anterior se me quemo, snif).

Cuidalo más, por favor!!!  :8}   :D :D


Compraste uno?
No contesto mensajes privados, las consultas en el foro

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Mini servidor web con mbed
« Respuesta #9 en: 29 de Enero de 2011, 21:25:27 »
Si, prometo cuidarlo jeje. Ya consegui integrados aisladores para cuando trabaje con potencia.
En realidad tuve muchisima suerte. El primer mbed me lo mandaron gratis porq era para un concurso, y estuve trabajando en mi robot equilibrista. Cuando se me quemo, les mande un mail explicando lo que paso, y les mostre como iba mi proyecto. Como les gusto, me dijeron q me iban a mandar otro para que lo finalice, pero q lo cuide jaja.
La verdad que no me imagine q me iban a mandar otro. Todo gracias a mi viejo que me dijio "el q no llora no mama" jeje.

Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mini servidor web con mbed
« Respuesta #10 en: 29 de Enero de 2011, 21:50:30 »
Si, prometo cuidarlo jeje. Ya consegui integrados aisladores para cuando trabaje con potencia.
En realidad tuve muchisima suerte. El primer mbed me lo mandaron gratis porq era para un concurso, y estuve trabajando en mi robot equilibrista. Cuando se me quemo, les mande un mail explicando lo que paso, y les mostre como iba mi proyecto. Como les gusto, me dijeron q me iban a mandar otro para que lo finalice, pero q lo cuide jaja.
La verdad que no me imagine q me iban a mandar otro. Todo gracias a mi viejo que me dijio "el q no llora no mama" jeje.

Saludos!!

Increíble!! Bueno, felicitaciones por el regalo bis, y grande el viejo!  :)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Mini servidor web con mbed
« Respuesta #11 en: 30 de Enero de 2011, 04:29:18 »
"el q no llora no mama" jeje.


Gran refrán y aplicable en el 100% de los casos.

Enhorabuena por conseguir otro, gera.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Mini servidor web con mbed
« Respuesta #12 en: 30 de Enero de 2011, 07:12:18 »
 :-/ :-/ me alegro Gera, ahora a experimentar con el  :-/ :-/ tratalo como si fuera tu querida mujer  :D :D

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Mini servidor web con mbed
« Respuesta #13 en: 30 de Enero de 2011, 12:55:09 »
Jeje, muchas gracias. Y pierdan cuidado que lo voy a cuidar como oro!!
La verdad que ahora me da miedo volver a usarlo en el robot a pesar de los aisladores que consegui. Por ahora me voy a poner a jugar un poco con el webserver jeje.
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Mini servidor web con mbed
« Respuesta #14 en: 30 de Enero de 2011, 13:14:26 »
Jeje, muchas gracias. Y pierdan cuidado que lo voy a cuidar como oro!!
La verdad que ahora me da miedo volver a usarlo en el robot a pesar de los aisladores que consegui. Por ahora me voy a poner a jugar un poco con el webserver jeje.
Saludos!!
Donde conseguiste el mbed en Argentina??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.