Automação Residencial com Arduino na Prática - Parte 2 (Interface OSC)
Autor: José Luiz Sanchez Lorenzo | Publicado: 2012-12-23T06:07:00-08:00

<!--[if !mso]>

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

<![endif]--><!--[if gte mso 9]>
 
  0
  0
  1
  1775
  10124
  ASSIST
  84
  23
  11876
  14.0
 
 
  
 
<![endif]-->

<!--[if gte mso 9]>
 
  Normal
  0
  false
  
  
  
  false
  false
  false
  
  PT-BR
  JA
  X-NONE
  
   
   
   
   
   
   
   
   
   
   
  
  
   
   
   
   
   
   
   
   
   
   
   
  
<![endif]--><!--[if gte mso 9]>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="276">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  
  
 
<![endif]-->

<!--[if gte mso 10]>

 /* Style Definitions */
table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin:0cm;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:Cambria;
 mso-ascii-font-family:Cambria;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Cambria;
 mso-hansi-theme-font:minor-latin;}

<![endif]-->



<!--StartFragment-->



Neste post vou descrever o processo de configuração para a comunicação entre o dispositivo móvel de comando
(Iphone/Ipad/Ipod/Android) e o Arduino que é o núcleo da central de Automação.

Para estabelecer essa comunicação utilizaremos &nbsp;o protocolo OSC (Open Sound Control) que é uma evolução do protocolo MIDI adaptada para transporte via TCPIP.



Mais informações sobre o protocolo OSC podem ser obtidas aqui.



As principais vantagens de usar esse
protocolo são as seguintes:



Apresenta resposta rápida aos comandos
Biblioteca ARDOSC disponível para Arduino
Disponibilidade de ferramenta simples para o desenvolvimento de interfaces gráficas
customizadas para Iphone, Ipad, Ipod, e Android chamada TouchOSC Editor. Com essa ferramenta, não é&nbsp;necessário conhecer nada de programação IOS para desenvolver interfaces gráficas de comando para automação.



A biblioteca recotanaARDOSC&nbsp;trabalha em conjunto com a biblioteca Ethernet oficial do Arduino,
sendo assim qualquer shield ethernet baseado no chip W5100 deve funcionar sem
problemas.


A versão da Lib ARDOSC indicada no link acima é
compatível com a IDE 1.0 do Arduino, sendo que recomendo utilizarem essa versão.



A biblioteca ARDOSC torna bastante
simples a configuração da comunicação OSC no Arduino, pois além das definições
de interface de comunicação, temos apenas que definir quais são as rotinas que
devem ser executadas para cada comando OSC recebido.



Para executar esta demonstração de comunicação OSC , serão necessários os seguintes componentes:


Arduino
Shield Ethernet
2 leds
2 resistores de 1K
2 chaves tactil
fios para conexão
protoboard
Roteador WiFi (pode ser o existente na
sua rede residencial)
dispositivo móvel (Iphone,Ipad,Ipod ou
Android)




A idéia básica é ligar e desligar 2 leds conectados ao arduino, a partir da tela de um dispositivo móvel (Iphone, Ipad, Ipod ou Android). Além disso poderemos também controlar os leds a partir de duas chaves conectadas diretamente no Arduino, sendo que neste caso o status dos Leds deverão ser atualizados na tela do dispositivo móvel.





1o Passo &nbsp;(Criar a interface gráfica de comando no TouchOSC Editor)



Neste primeiro passo criaremos uma tela customizada para o dispositivo de controle, que pode ser um IPhone,Ipad,Ipod ou
Android. Para isso utilizaremos o aplicativo
TouchOSC Editor que está disponível aqui .



Depois de baixar e instalar a versão do aplicativo
TouchOSC Editor compatível com o seu sistema operacional, abra o aplicativo.



Na janela abaixo, selecione as opções de
“Layout Size“ e ”Layout Orientation” confome seu dispositivo móvel .




Adicionar legenda




Obs: O campo "Page Name" não é importante neste teste, porém ele pode ser utilizado num sistema de automação mais elaborado para identificar o ambiente controlado pelos comandos da página. (ex: cozinha. sala, dormitórios, etc). Toda vez que for selecionada uma página diferente, um comando OSC será enviado para o Arduino com o "Page Name" correspondente a página selecionada. Essa informação poderá ser utilizada no Arduino para devolver para o celular o status das lâmpadas daquela página .

Clicando na aba cinza com o botão
direito do mouse, podemos adicionar outras páginas a nossa interface e cada página pode conter botões de comandos diferentes, semelhante as telas que mostrei no primeiro post deste tema.&nbsp;
Podemos assim dividir a casa em setores, onde cada página contem os comandos de um setor da residência.



Para inserir os controles na página,&nbsp;clique com o botão direito do
mouse na parte preta da tela e selecione o tipo de controle desejado. (neste caso use o ”toggle button”)



Surgirá um objeto do tipo ”toggle
button” na tela que poderá se dimensionado confome desejado.



Defina um nome para o togge button no campo "Name"
Selecione a cor desejada para o botão em Color&nbsp;&nbsp;
Desmarque a opção auto em OSC e na caixa logo abaixo digite o commando
OSC que deseja associar a esse botão (neste caso vamos usar &nbsp;"/ard/led1" &nbsp;(sem aspas))
Defina&nbsp;Value Range como (From=0&nbsp; e To=1) *&nbsp;



* (esses são os valores de argumento que serão enviados
com o comando OSC ”/ard/led1” quando o botão mudar de estado)

Neste caso:

Botão desligado: envia 0

Botão acionado: envia 1




Para criar o segundo segundo botão de controle, clicar novamente com o botão direito do
mouse na parte preta da tela e selecionar ”toggle button”


















Configurar o Segundo toggle buttom
conforme figura acima:



Uma vez finalizado clique em ”save “, escolha onde quer salvar e dê um nome para o layout .



Existem vários outros tipos de objetos
de comando que podem ser utilizados, inclusive labels que podem identificar os
botões e incrementar o aspecto visual da interface, porém neste exemplo vamos
criar apenas os dois toggle buttons necessários para a nossa demostração.



Para disponibilizar o layout que criamos e transferir para o dispositivo móvel, basta clicar em ”Sync” no TouchOSC Editor e em seguida executar&nbsp;no Iphone, Ipad ou Ipod o&nbsp;procedimento descrito abaixo .






2o passo &nbsp; (Instalar e configurar o TouchOSC no dispositivo móvel)











Baixar o TouchOsc para seu dispositivo
móvel na apple
store&nbsp;ou na Google Play.





Ao executar o TouchOSC pela primeira vez
aparecerá a janela abaixo:







<!--[if gte vml 1]><v:shape
 id="Picture_x0020_9" o:spid="_x0000_i1030" type="#_x0000_t75" style='width:415pt;
 height:284pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file://localhost/Users/jllorenzo/Library/Caches/TemporaryItems/msoclip/0clip_image007.png"
  o:title=""/>
<![endif]--><!--[if !vml]--><!--[endif]-->





Selecione a primeira opção “OSC: Not
Configured”&nbsp;








Posicione a opção Enabled em ON.
Indique em Host o IP definido para o seu Arduino.
&nbsp;Em Port (outgoing) indique&nbsp;a porta definida para serverPort no código do
Arduino.
Em Port (incoming) indique a porta definida para destPort no código do
Arduino.





O
campo Local IP Address é o IP atribuido atualmente ao dispositivo móvel. Ele é
informado automaticamente pelo aplicativo TouchOSC.






Toque em TouchOSC no canto superior
esquerdo da tela para retornar ao menu inicial (tela abaixo).













As opções MIDI Mobilizer e CoreMIDI podem ficar em Disabled.







Para adicionar ao dispositivo móvel o novo layout que criamos
no TouchOSC Editor, toque em Layout (Simple) e então na tela abaixo clique em
Add.










Neste momento deverá aparecer uma tela semelhante a esta abaixo, porém indicando que um host foi encontrado. (será indicado o nome do seu PC
onde está o layout que criamos).








Importante: o PC e o dispositivo móvel
deverão estar conectados na mesma rede para que seja possível transferir o layout.



<!--[if gte vml 1]><v:shape
 id="Picture_x0020_7" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:415pt;
 height:231pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file://localhost/Users/jllorenzo/Library/Caches/TemporaryItems/msoclip/0clip_image015.png"
  o:title=""/>
<![endif]--><!--[if !vml]--><!--[endif]-->



Toque no host que foi encontrado e o
layout será transferido para o dispositivo móvel.





Toque então em Layout e selecione o
novo layout que foi transferido.



Depois toque em Done.



O layout novo que criamos será apresentado na tela e já estará pronto para usar.





Mais detalhes sobre esta configuração podem
ser obtidos na documentação do TouchOSC que pode ser consultada aqui.

Para layouts customizados para dispositivos Android, consultar a documentação&nbsp;aqui.

3o Passo &nbsp;(montar o circuito no Arduino e carregar o código)



Bem agora só falta montar os componentes adicionais e carregar o código no
Arduino para ele interpretar as mensagens OSC e controlar os LEDs.



A montagem dos componentes no Arduino
deverá ser executada conforme foto abaixo:








A seguir temos o código arduino que utilizaremos
nesta demonstração onde comentei cada linha para facilitar o entendimento:
















O código acima permite controlarmos os 2
leds do circuito a partir da tela do celular.



Na primeira parte do código, temos as
definições da interface Ethernet e portas utilizadas pelo protocol OSC.



&nbsp;Notem
que temos as portas&nbsp;serverPort e&nbsp;destPort.



Serverport é a porta que o Arduino
receberá as mensagens OSC que o dispositivo móvel&nbsp;(Iphone/Ipad/Ipod/Android)&nbsp;envia.


DestPort é a porta que o arduino vai
usar para enviar mensagens OSC para o dispositivo móvel (Iphone/Ipad/Ipod/Android).





O arduino poderá enviar
mensagens OSC para o dispositivo móvel quando for necessário atualizar o status dos LEDs. Isso acontecerá quando eles forem ligados ou desligados a partir das chaves tactil conectadas no Arduino.

No cenário real de automação essas chaves estarão nos módulos remotos (MA02,
Comando, Dimmer ou IR/RGB) que terão comunicação ZIBEE com o módulo central através dos XBees.
Este tema será abordado no próximo post (parte 3).



No método "setup", fazemos a
associação dos comandos OSC com as rotinas que deverão ser executadas para cada
um deles.


&nbsp; server.addCallback("/ard/led1",&amp;func1); &nbsp;//define que a rotina "func1" sera executada para o comando OSC "/ard/led1"
&nbsp; server.addCallback("/ard/led2",&amp;func2); &nbsp;//define que a rotina "func2" sera executada para o comando OSC "/ard/led2"

No método "setup" também são configurados os modos de operação das portas dos leds e ativados os resistores de PullUps internos para as portas das chaves.



Finalmente no método loop temos leituras das chaves e as rotinas específicas
para cada comando OSC.



Os comandos OSC podem conter valores dos
seguintes tipos:



- Int32

- Float

- String

No nosso exemplo vamos receber argumentos Float por isso utilizaremos&nbsp;(int)_mes-&gt;getArgFloat(0)



Basicamente uma
mensagem OSC tem as seguintes informações:


OSCAdr (identificação do comando que se quer enviar)
destIP &nbsp;(endereço IP do destino da mensagem)
destPort &nbsp;(porta utilizada para envio da mensagem)
Arg (argumento associado ao OSCAdr que pode ser do tipo Int32, Float ou String)




Para montar e enviar uma mensagem OSC no Arduino, usamos as seguintes linhas de comando:

OSCMessage txMes; &nbsp;//cria uma nova mensagem OSC
txMes.setAddress(destIP,destPort); &nbsp;//define endereço IP e porta do destino da mensagem OSC
txMes.beginMessage("/ard/led1"); &nbsp;//define comando OSC

txMes.addArgFloat(!state); &nbsp;//define argumento Float que sera enviado&nbsp;
client.send(&amp;txMes); &nbsp;//envia mensagem OSC&nbsp;


Para adicionar argumentos na mensagem OSC podemos usar as seguintes opções:



txMes.addArgInt32(int);

txMes.addArgFloat(float);
txMes.addArgString(string);

Abaixo temos um diagrama com as associações entre os parâmetros inseridos no TouchOSC e o código no Arduino:






Abaixo um video demonstrando o funcionamento do que foi apresentado nesta parte 2 do tópico&nbsp;Automação Residencial com Arduino na Prática .







Em caso de dúvidas, fiquem a vontade para fazer perguntas, tanto nos comentários como por email.

Na parte 3 falaremos sobre comunicação ZIGBee usando módulos XBee.

Até lá.&nbsp;

Um Feliz Natal a todos



<!--EndFragment-->