segunda-feira, 1 de outubro de 2012

mbed - Algumas experiências on-line

     Prezados amigos, a muito tempo comprei o meu mbed e desde então não tive tempo para me dedicar a esta incrível ferramenta. Porém nesta semana consegui trabalhar com o mesmo, assim venho compartilhar as minhas experiências.

     Devido ao mundo girar em torno da rede mundial de computadores, resolvi experimentar a facilidade imposta pelo o mbed no quesito acesso a redes! Para isto montei um hardware bem simples contendo um mbed, sensor de temperatura TMP102 e claro um conector RJ45 apropriado,  conforme é demostrado na figura a baixo.





O primeiro desafio foi tentar fazer com que o meu mbed medisse a temperatura do ambiente e posta-se o resultado em minha página do twitter. Após uma pesquisa rápida no site oficial do mbed encontrei um projeto parecido onde no lugar do sensor de temperatura era utilizado um sensor RFID, deste modo após encontrar as bibliotecas já desenvolvidas e testadas pelos usuários, simplesmente realizei a fusão de dois códigos fontes distintos, com o intuito de alcançar meu objetivo; abaixo segue o 1º código fonte:


#include "mbed.h"
#include "EthernetNetIf.h"
#include "HTTPClient.h"
#include "TMP102.h"
EthernetNetIf eth;
TMP102 temperature(p9, p10, 0x90);
Serial pc(USBTX, USBRX);
char temp[32];
float rtemp;
int main()
{
   pc.printf("Init\n");
   pc.printf("\r\nSetting up...\r\n");
   EthernetErr ethErr = eth.setup();
   if(ethErr)
   {
      pc.printf("Error %d in setup.\n", ethErr);
      return -1;
   }
   pc.printf("\r\nSetup OK\r\n");
   HTTPClient twitter;

   wait(5);

   while(1)
   {
      rtemp = 0;
      rtemp = temperature.read();
      sprintf(temp,"%f",rtemp); //converte float para char
      HTTPMap msg;
      msg["status"] = "A Temperatura de Sao Paulo - SP medida pelo meu mbed é: "; //A good example of Key/Value pair use with Web APIs
      msg["status"] += temp;
      twitter.basicAuth("login", "password"); //We use basic authentication, replace with you account's parameters

      //No need to retieve data sent back by the server
      HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL);
      if( r == HTTP_OK )
   {
   pc.printf("Tweet sent with success!\n");
   }
   else
   {
      pc.printf("Problem during tweeting, return code %d\n", r);
   }
   wait(60);

   }

   //return 0;
}
    Abaixo uma imagem com o "post" automático do meu mbed com o valor da temperatura!



     Já o segundo desafio, foi um pouco mais complicado, mas utilizou a mesma configuração de hardware, sendo baseado em websockets que é uma das novas feições do HTML5. Este define conexões full-duplex, no qual mensagens podem ser enviadas entre cliente e servidor.

     Nesta experiência somente enviei dados a um servidor de teste disponibilizado gratuitamente na internet. Segue abaixo o código fonte utilizado:

#include "mbed.h"
#include "Websocket.h"
#include "TMP102.h"
Serial pc(USBTX, USBRX);
TMP102 temperature(p9, p10, 0x90);
Timer tmr;
//Here, we create a Websocket instance in 'rw' (write) mode
//on the 'samux' channel
Websocket ws("ws://sockets.mbed.org/ws/[seu canal]/rw");
int main()
   {
   char recv[128];
   char temp[32];
   float rtemp;
   while (1)
   {
      while (!ws.connect())
      pc.printf("cannot connect websocket, retrying\r\n");
      tmr.start();
      while (1)
   {
   if (tmr.read() > 5)
   {
      rtemp = 0;
      rtemp = temperature.read();
      sprintf(temp,"%f",rtemp);
      pc.printf(temp);
      ws.send("A Temperatura no Jardim Bonfiglioli é: ");
      ws.send(temp);
      if (ws.read(recv)) {
      pc.printf("recv: %s\r\n", recv);
   }
   tmr.start();
   }
   Net::poll();
   }
   }
}
 
     Assim o mbed enviava os dados em tempo real ao servidor e este por sua vez atualizava a pagina também em tempo real. A baixo uma imagem desta página com os dados:


     Acredito ter demonstrado um pouco do poder deste kit! Vou continuar realizando novas experiências e assim que possível publico algo novo! Dúvidas e Sugestões não exite!     

OBS: Os códigos fontes e bibliotecas aqui utilizados não são de minha autoria, foram disponibilizados no site http://www.mbed.org e por min somente adaptado, sendo os créditos dos devidos autores!

    Mais Informações em:
    http://www.mbed.org
    http://www.mbed.org/handbook/
    http://www.mbed.org/cookbook/
    http://www.mbed.org/cookbook/Twitter
    http://www.mbed.org/cookbook/websocket-and-mbed
    http://www.supertweet.net
    http://sockets.mbed.org





Nenhum comentário:

Postar um comentário