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 o protocolo OSC (Open Sound Control) que é uma evolução do protocolo MIDI adaptada para transporte via TCPIP.
Para estabelecer essa comunicação utilizaremos 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 é necessário conhecer nada de programação IOS para desenvolver interfaces gráficas de comando para automação.
A biblioteca recotanaARDOSC 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.
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 .
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.
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, 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
- 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 "/ard/led1" (sem aspas))
- Defina Value Range como (From=0 e To=1) *
* (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 no Iphone, Ipad ou Ipod o procedimento descrito abaixo .
Ao executar o TouchOSC pela primeira vez
aparecerá a janela abaixo:
Selecione a primeira opção “OSC: Not
Configured”
- Posicione a opção Enabled em ON.
- Indique em Host o IP definido para o seu Arduino.
- Em Port (outgoing) indique 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.
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 aqui.
3o Passo (montar o circuito no Arduino e carregar o código)
Para layouts customizados para dispositivos Android, consultar a documentação aqui.
3o Passo (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 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.
Notem
que temos as portas serverPort e destPort.
- Serverport é a porta que o Arduino receberá as mensagens OSC que o dispositivo móvel (Iphone/Ipad/Ipod/Android) 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 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.
server.addCallback("/ard/led1",&func1); //define que a rotina "func1" sera executada para o comando OSC "/ard/led1"
server.addCallback("/ard/led2",&func2); //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.
server.addCallback("/ard/led1",&func1); //define que a rotina "func1" sera executada para o comando OSC "/ard/led1"
server.addCallback("/ard/led2",&func2); //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 (int)_mes->getArgFloat(0)
No nosso exemplo vamos receber argumentos Float por isso utilizaremos (int)_mes->getArgFloat(0)
Basicamente uma
mensagem OSC tem as seguintes informações:
- OSCAdr (identificação do comando que se quer enviar)
- destIP (endereço IP do destino da mensagem)
- destPort (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; //cria uma nova mensagem OSC
txMes.setAddress(destIP,destPort); //define endereço IP e porta do destino da mensagem OSC
txMes.beginMessage("/ard/led1"); //define comando OSC
txMes.addArgFloat(!state); //define argumento Float que sera enviado
client.send(&txMes); //envia mensagem OSC
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:
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 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á.
Um Feliz Natal a todos
Na parte 3 falaremos sobre comunicação ZIGBee usando módulos XBee.
Até lá.
Um Feliz Natal a todos
Esse código funciona com o Android
ResponderExcluirSim funciona, basta você carregar o mesmo layout personalizado no seu Android . Veja o link que coloquei neste post para usuários Android
ResponderExcluirvc tem este codigo para disponibilizar
ExcluirAmigão!! você tem o touchOSC.APK pra me enviar???
Excluirnão estou consegundo baixar
bira.lima10@gmail.com
Abraço!!
esse link aqui ? http://hexler.net/software/touchosc ....tem como coolocar senha no inicio da aplicação nao? vc vai dar continuidade nesse post nao?
ResponderExcluirO link é este :
Excluirhttp://www.circuitbentobox.com/note/how-to-custom-layouts-in-touchosc-for-android
Não testei pois não tenho Android, de qualquer forma você pode testar usando os layouts que já vem no aplicativo para android. Basta editar os botões colocando o comando OSC adequado : ex: /ard/led2
Estou montando a parte 3 do post que será publicada em breve. Aguarde
pelo que eu observei tb não tem como funcionar se vc não tiver na rede local do roteador, tem como funcionar fora do alcance do roteador?
ResponderExcluirNa verdade é possível o controle de qualquer lugar do planeta que tenha conexão internet.
ExcluirBasta você configurar no seu roteador para que ele faça o NAT da porta externa (no caso do exemplo deste POST porta 8000) para o IP interno associado ao Arduino.
Eu pretendo dedicar uma parte futura deste post só para explicar como fazer isso, inclusive quando o IP da conexão for dinâmico.
Cara estou ansioso por essa explicação! se ja tiver feito por favor manda o link! ;) !
Excluirtem como vc fazer um tutorial explicando como que faz pro android nao nao entendi quase nada, coloquei pra traduzir mas mesmo assim nao entendi....srsr
ResponderExcluirDesculpe mas no momento não tenho um celular Android para testar e montar o tutorial. Se eu conseguir um celular emprestado farei o tutorial.
Excluireu conseguir fazer ate a etapa 6 que ele pede pra pegar o LayoutEncoder do programa feito no touchos e copiar esse LayoutEncoder para o programa vts e substituir o que tiver entres as aspas
ResponderExcluir.line 16
const-string v
"" ---> o que tiver dentro dessas aspas eu substituo pelo codigo que eu acabei de copiar do LayoutEncoder... É isso mesmo não é?
depois disso eu faço oq? salvo e o que mais?
desde já muito obrigado...abrass
Como nunca fiz o processo no Android , não sei te dizer o que está errado. Você pode testar seu projeto usando os layouts prontos que já vem no programa para Android.
ResponderExcluirBoa tarde!
ResponderExcluirParabéns pelos posts, excelente! aguardo a parte 3.
Uma pergunta, eu não conhecia o protocolo OSC, neste caso para usar esta interface, não é necessário servidor para hospedar a pagina? para poder usar de qualquer lugar, etc.?
Desculpa se perguntei besteira.
José Carlos
Estudante de Eng. de Controle e Automação
José Carlos, não é necessário servidor pois a aplicação que roda no celular comunica diretamente com o Arduino da central de automação. Esse arduino tem um endereço IP que quando mapeado corretamente no roteador onde está conectado, fica acessível pelo celular de qualquer conexão a internet.
ExcluirInstalei o aplicativo no meu smartphone android porém não encontrei a opção de editar os botões(layouts).
ResponderExcluirVocê teria outra solução?
A edição não e feito no Smartphone. A edição e feito no pc e carregado no seu android depois de pronta. No celular vc apenas configura o IP do arduino, portas de comunicação entrada e saida e escolhe qual aplicação vai ser usada. Todo o resto e feito no PC, como foi explicado acima.
ExcluirPara o pessoal do Android a Hexler disponibilizou a versão 1.9.0 do TouchOsc para Android que permite a edição dos layouts.
ExcluirVejam em http://hexler.net/blog/post/touchosc-1.9.0-for-android-and-ios-out-today.
Para quem está tentando utilizar no android fica minha experiência, você edita layouts, importa, porém não importa o que você faça, o "range" para os faders sempre será 0 e 1, ou seja, não vi uma saida para utilizar dimmer.
ResponderExcluirVeja a nova versão do TouchOSC e TouchOSC editor que permite editar os layouts agora também para Android.
ExcluirÉ possível também configurar via bluetooth o nome dos módulos escravos com aplicativo android:
ResponderExcluirhttps://dl.dropbox.com/u/101922388/BluetoothSanUSB/BT4SanUSB.apk
Video em https://www.youtube.com/watch?v=V65-Vt91rug . Os programas e tutorial para arduino estão disponíveis no link: https://dl.dropbox.com/u/101922388/ModemBluetooth19200.zip
Este comentário foi removido pelo autor.
ResponderExcluirMuito interessante o projeto, mas gostaria do código do arduino onde posso baixar ?
ResponderExcluirMe passa um email solicitando que envio ele para você:
Excluirjllorenzo@terra.com.br
Olá José! Poderia enviar para o meu? daniel-victorss@hotmail.com
Excluirola josé, vc poderia me enviar? josenunesjr@hotmail.com
ExcluirDigitei todo código do Arduino que você tem no blog no Sketch, mas não roda. Aparece o seguinte erro: "a function-definition is not allowed here before'{' token". Podes me ajudar?
ResponderExcluirTem algum erro de digitação causando erro de sintaxe.
ExcluirMe solicite via email que lhe envio o arquivo.
jlllorenzo@terra.com.br
cara me envia to como o mesmo problema. email:wilsonguilherme1999@gmail.com
ExcluirO problema com o erro na compilação descobri, precisava declarar as funções fora do loop, porém ainda não consegui fazer o código funcionar no arduino, os leds ficam acesos direto, e quando aperto os botões eles só ficam mais fortes, não apagam. Você mudou algo no código para funcionar como no vídeo?
ResponderExcluirPrezado Anderson,
Excluirconseguiu funcionar o código.
tambemestou com problemas de compilação e comunicação com o arduino.
já faz um mês que estou tentando diversas formas de controlar o arduino via ethernet mas até agora não consegui nem uma piscadinha no led
Quando sai a proxima parte? O Blog está demorando um pouco para ser atualizado... Uma pena!
ResponderExcluirRalph o grande problema é sempre o tempo. Mas em breve pretendo fazer um novo post detalhando a comunicação XBee.
ExcluirDuvida - No IP Destino onde seria o IPhone/Android etc, teria alguma forma de utilizar através da WAN? para isso teria que ter um servidor de destino fixo que interpreta-se os commndos da rede externa(internet) e envia-se para o arduino que esta na rede local. Entendo que este projeto somente funcionar na rede local, correto?
ResponderExcluir[]s
Luiz
Você pode enviar comandos via celular estando fora da sua rede. Basta no lugar do IP de destino nas configs do touchOSC colocar o seu dominio (por exemplo: amigao.dyndns.org), ai você cria uma conta free no dyndns e no seu roteador configura para ele atualizar o dyndns sempre que seu ip mudar.
ExcluirAlém disso no seu roteador precisa configurar para que os pacotes que chegarem na porta 10000 sejam encaminhados para o IP do arduino .
e no codigo arduino ? o que devo mexer ?
ExcluirPrezado José, o post foi muito bem elaborado e me ajudou muito para criar a aplicação OSC, importar para o iphone e configurar na rede.
ResponderExcluirporém, não consigo compilar o código e comunicar com arduino :(
tenho certeza que alguem com experiencia resolveria nosso problema em poucos minutos e já estou a algumas semanas tentando funcionar os leds conforme demonstrado no video.
Nosso amigo Anderson retirou as funções do LOOP e declarou em SETUP. também tentei dessa forma e nada.
também tentei o exemplo que vem na biblioteca OSC "simpletoogleled" para simplesmente acender e apagar o led e também sem sucesso.
acho que poderia nos ajudar publicando o código em formato txt, que aceite a compilação do Arduino.
Procure utilizar a IDE 1.0.1 do Arduino. A biblioteca ARDOSC é excelente mas não é atualizada com frequencia, então normalmente as ultimas IDEs tem problemas. Se tiver dificuldade ainda me solicita por email que eu passo o código em arquivo. jlllorenzo@terra.com.br
ExcluirJosé Luiz, bom dia. Em primeiro lugar meus parabens, assisti um palestra sua em um evento TDC2011 pela web. Segui o passo a passo deste seu tutorial mas não obtive sucesso. Uma pois acho que estou falhando na configuração da porta em meu roteador (TP-link WR740N) e outra o dispositivo Android que tenho é um Mini PC (UG802 1.6 de processador e Android 4.2) que está ligado na mesma rede ethernet de meu arduino. Para realmente utilizar a porta criado penso eu que tenho que estar um aparelho externo a minha rede. Me corrija se estiver errado.
ResponderExcluirO dispositivo montado na protoboard fica com os leds piscando mas sem controle nenhum.
Conto com a ajuda de todos. Obrigado
Não precisa estar externo a sua rede não. É até mais fácil quando está na mesma rede pois temos menos pontos de falha. Teoricamente o MiniPC deve rodar o TouchOSC sem problemas. Você já tentou a nova versão do TouchOSC para Android 1.9.0 ? Ela permite carregar layouts customizados.
Excluirveja em : http://hexler.net/blog/post/touchosc-1.9.0-for-android-and-ios-out-today
ola boa noite, o codigo ta dando erro, acredito que seja por causa da versao do progama do arduino (1.0.5)
ResponderExcluirÉ melhor utilizar a IDE 1.0.1 do Arduino
ExcluirComo o tiago, creio que o problema seja versão de software do arduino. Na verdade usei tb 1.0.4 mas tb sem sucesso. O José Lorenzo usou 1.0.1.
ResponderExcluirTentei tb o exemplo do toggle LED contido na library do ArdOSC, trocando todos os dados com atenção mas também sem sucesso. To batendo cabeça...
Tente usar a 1.0.1
ExcluirOlá galera, para quem não conseguiu compilar o código, segue o link para o arquivo testado na versão 1.5.2 do arduino, e a biblioteca OSC, só não testei a comunicação pois não tenho ainda o Shiel Ethernet (comprarei em breve, rsrs).
ResponderExcluirhttps://www.dropbox.com/sh/wl5tlbqg0487xal/O2j0GkaLSP
Obs: Copiem a pasta OSC e colem na pasta libraries do arduino.
Espero ter ajudado. Deem um retorno com o resultado.
A biblioteca ARDOSC tem alguns bugs com a IDE 1.5.x . Recomendo usar a 1.0.1
ExcluirFuncionou lindamente aqui!!! Muito obrigado!!! Versão 1.0.5
ExcluirFuncionou aqui. Apenas está com um problema para desligar pelo botão. Pra ligar funciona. Ainda estou tentando identificar o problema. Ajudou muito!
ResponderExcluirAmigos também estou tendo problemas, segui todos os passos não deu erro de compilação e nada mas nao comunica o ipad com o arduino
ResponderExcluirExistem alguns shields ethernet não oficiais que apresentam problemas.
ExcluirTente mudar a porta, por exemplo para 12000 para ver se a comunicação acontece.
ResponderExcluirFuncionou perfeitamente. Lendo as dicas enviadas pelos colaboradores aqui, fiz os ajustes necessários, e tudo ocorreu tranquilo. Atualizei a biblioteca do Ethernet, e fui tudo tranquilo. Nesta noite tive problemas, mas era o roteador, que após abrir a porta para controle via internet, ele não comunicava mais com o arduino, apesar de tudo configurado corretamente e os leds RX e TX estarem indicando o tráfego de comunicação. Somente após o reset físico no roteador, e que tudo se normalizou.
ResponderExcluirParabéns ao dono do projeto e aos colaboradores.
Muito Bom . Parabéns !
ExcluirFoi fundamental o conteúdo postado por José Matos. O arquivo https://www.dropbox.com/sh/wl5tlbqg0487xal/O2j0GkaLSP.
ResponderExcluirValeu José. A diferença de versão estava me matando aqui. Os nomes dos comandos da biblioteca do ethernet, mudaram e ai da uma dor de cabeça, não compila, no link este probleminha foi resolvido e roda tranquilo.
Ainda utilizo a IDE 1.0.1 pois acho ela mais estável com a lib ArdOSC
ExcluirCaro José Luiz. Muito bom o seu trabalho. Funcionou perfeito. Porém eu não consegui fazer com que o Touch receba os status das portas do Arduino. Por exemplo, se eu aciono ela em manual, ela não ascende não indica no Tousch. O que vc acha q possa estar acontecendo?
ResponderExcluirMuito Obrigado por nos ajudar nesta questão do ARDOSC, porem ainda não descobri como controlar a intensidade de um Led utilizando as postas PWM do arduino. Tentei ler os argumentos que chegam do Fader do TouchOSC que vai 0-255, mas quando imprimo esses valores na serial, chegam apenas 0. Consegui fazer isso com outra biblioteca (OSCClass), mas com essa ainda não consegui!
ResponderExcluirboa noite não estou conseguindo retirar a biblioteca recotanaARDOSC poderia me ajudar desde já obrigado.
ResponderExcluirQuando sai a parte 3
ResponderExcluirBom dia José Luiz, eu te mandei um e-mail sobre esse projeto. Por favor, assim que puder entre em contato comigo via e-mail.
ResponderExcluirGrato pela atenção
Thiago Justen
Este comentário foi removido pelo autor.
ResponderExcluirMuito bom o trabalho José Luiz!
ResponderExcluirPara dar mais uma opção para o pessoal tem um programa para controlar as saidas do arduino pelo computador em Real-Timer. Já vem tudo na pasta manual e o cógigo de upload no arduino. Se quiserem baixar esse é o site:https://sites.google.com/site/meteintecnologia/home
Controle Total Arduino 1.0 Metein
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirGalera to com esse erro ake agora:
ResponderExcluirC:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp: In member function 'void W5100Class::init()':
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp:28: error: 'delay' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp:30: error: 'SPI' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::write(uint16_t, uint8_t)':
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp:133: error: 'SPI' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::write(uint16_t, const uint8_t*, uint16_t)':
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp:146: error: 'SPI' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::read(uint16_t)':
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp:159: error: 'SPI' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::read(uint16_t, uint8_t*, uint16_t)':
C:\Program Files (x86)\Arduino\libraries\Ethernet\utility\w5100.cpp:172: error: 'SPI' was not declared in this scope
Alguém pode me ajudar?
Este comentário foi removido pelo autor.
ExcluirAdicione o cabeçalho SPI.h ao código (#include SPI.h).
ExcluirEstava com o mesmo problema. Funcionou na versão 1.0.5 da IDE.
Abraço e boa sorte!
Este comentário foi removido pelo autor.
ResponderExcluirParabéns pelo post! Quando você irá publicar a parte 3?
ResponderExcluirParabéns, sensacional o projeto
ResponderExcluirGalera, alguém conseguiu comunicação com o Arduino com um IP externo (pelo 3G do celular por exemplo). Grato, se alguém puder ajudar.
ResponderExcluirBoa noite José, consegui utilizar seu tutorial para desenvolver o codigo para testar com meu ethernet shield, mais não estou conseguindo monitorar os botões. Eu consigo ativar o led pelo botão no arduino e pelo touch osc, mas quando eu ativo pelo botão o status não é atualizado no aplicativo.. o que pode ser ? Posso enviar meu codigo..
ResponderExcluirMuito bom e bem explicado...Espero ansioso a 3 parte, tem alguma previsão de quando pretende postar? Desde já agradeço e parabéns.
ResponderExcluirOlá! O ip da central de automação deve ser o gatwey padrao ou eu posso escolher? nao estou conseguindo rodar. O sketch compila mas nao funciona, creio que seja algo com os ip's (nao sou mto bom em redes)
ResponderExcluirOla pessoal! Parabéns José Luiz Sanchez Lorenzo, muito bom o post, aguardando o próximo. gostaria de reforçar o que você já havia comentado anteriormente, a versão 1.0.1 é a que melhor se adéqua a essa biblioteca. Alguns posts atrás comentavam sobre o problema de monitoramento dos botoes no app touch osc, tambem tive esse problema, mas o que aconteceu foi que eu não tinha alterado o IP na linha byte destIP[] = {192, 168, 0, 137};, que deve ser o mesmo do iPhone, iPad... no meu caso apos isso funcionou perfeitamente.
ResponderExcluirParabéns pelos posts, excelente!
ResponderExcluirTem um previsão para parte 3.
Quero saber sobre comunicação ZIGBee.
Parabens pelo post amigo, seus projetos são muito bons.Estou estudando a parte dos Xbee e queria fazer semelhante ao seu projeto, sera que você pode disponibilizar como você faz a comunicação do arduino com Xbees
ResponderExcluirBom dia... Parabéns pelo projeto... Montei todo o código e funcionou, estou tendo dificuldade pra acionar uma lampada AC, voce poderia me passar o codigo se possível... Não estou utilizando a comunicação xbee... Obrigado...
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluiramigo será que você poderia disponibilizar o código fonte ao meu email taison.andrei@gmail.com obrigado!
ResponderExcluirBoa noite.
ResponderExcluirAtravés desse código, o meu Arduino não está reconhecendo a biblioteca ArdOSC.
Está aparecendo o seguinte erro: "Variable or field 'func 1' declared void"
O que posso fazer para resolver?
Obrigado.
Tem como enviar codigo arduino pra mim por favor
ResponderExcluirelimariobr@yahoo.com.br
Boa noite,
ResponderExcluirEstou quebrando a cabeça a mais de 4 merses, tentando fazer rodar com um shield que comprei wifi, mas não vai se maneira alguma, será que você já testou ele com o wifly ?
Abraços
O TouchOSC só tem pago? nao tem free para Android?
ResponderExcluirShow, quando sairá a parte 3, estamos ansiosos rs...
ResponderExcluirFiz um teste usando um encoder incremental da spark fun e um fader no touch osc para dimmerizar um led e ocorreu td certo! Agora minha duvida... Touch osc nao usa UDP? Como faço para enviar meus pacotes por 3g para meu arduino conectado ao roteador per ethernet shield
ResponderExcluirAmigo, montei tudo conforme mencionado, consigo conexão normal, mas acontece o seguinte:
ResponderExcluir1- Pelos botões só consigo acender os leds, não apagam.
2- Pelo TouchOSC, só consigo apagar os leds, se eu tentar acender, tenho que ficar pressionando o botão no Ipad, ai ele fica aceso, se eu parar de pressionar ele apaga.
Amigo achei muito instrutivo. Ao inves de LED estou utilizando reles, mas não consigo mudar o estado pelas switches, somente pelo OSC. Com um code mais simples consigo mudar o estado via switches. Agradeço se puder me ajudar. Estou usando o esquema eletrico e code deste site: http://blog.filipeflop.com/modulos/controle-modulo-rele-arduino.html
ResponderExcluir//Porta ligada ao pino IN1 do modulo
int porta_rele1 = 7;
//Porta ligada ao pino IN2 do modulo
int porta_rele2 = 8;
//Porta ligada ao botao 1
int porta_botao1 = 2;
//Porta ligada ao botao 2
int porta_botao2 = 3;
//Armazena o estado do rele - 0 (LOW) ou 1 (HIGH)
int estadorele1 = 1;
int estadorele2 = 1;
//Armazena o valor lido dos botoes
int leitura1 = 0;
int leitura2 = 0;
void setup()
{
//Define pinos para o rele como saida
pinMode(porta_rele1, OUTPUT);
pinMode(porta_rele2, OUTPUT);
//Define pinos dos botoes como entrada
pinMode(porta_botao1, INPUT);
pinMode(porta_botao2, INPUT);
//Estado inicial dos reles - desligados
digitalWrite(porta_rele1, HIGH);
digitalWrite(porta_rele2, HIGH);
}
void loop()
{
//Verifica o acionamento do botao 1
leitura1 = digitalRead(porta_botao1);
if (leitura1 != 0)
{
while(digitalRead(porta_botao1) != 0)
{
delay(100);
}
//Inverte o estado da porta
estadorele1 = !estadorele1;
//Comandos para o rele 1
digitalWrite(porta_rele1, estadorele1);
}
//Verifica o acionamento do botao 2
leitura2 = digitalRead(porta_botao2);
if (leitura2 != 0)
{
while(digitalRead(porta_botao2) != 0)
{
delay(100);
}
//Inverte o estado da porta
estadorele2 = !estadorele2;
//Comandos para o rele 2
digitalWrite(porta_rele2, estadorele2);
}
}
Boa tarde!
ExcluirEstou com o mesmo problema amigo conseguiu resolver ?
Como faço para enviar o código para o arduino ?
ResponderExcluirAmigo eu ví seu post e gostei muito, estou tentando fazer em casa só que para seis led's e não está funcionando.
ResponderExcluirSerá que você poderia me ajudar? Mais tarde eu envio o código que consegui compilar.
Meu hardware é:
1 tablet Tab 3 samsung Android 4,2
1 Mega
1 W5100
Meu e-mail: fmarcondesd@hotmail.com
ResponderExcluir#include
ResponderExcluir#include
#include
byte myMac[] ={0xDE, 0xAD, 0xBE, 0xEF, 0xFE,0xED};
byte myIp[] ={192,168,0,90};
byte destIp[] ={192,168,0,1};
int serverPort = 8000;
int destPort = 9000;
//Lâmpadas dos cômodos
int quarto = 13;
int sala = 12;
int cozinha = 11;
int copa = 10;
int banheiro = 9;
int escritorio = 8;
// Botões dos cômodos
int bot1 = 7;
int bot2 = 6;
int bot3 = 5;
int bot4 = 4;
int bot5 = 3;
int bot6 = 2;
OSCServer server;
OSCClient client;
void setup(){
Ethernet.begin(myMac,myIp);
server.begin(serverPort);
server.addCallback("/ard/quarto",&func1);
server.addCallback("/ard/sala",&func2);
server.addCallback("/ard/cozinha",&func3);
server.addCallback("/ard/copa",&func4);
server.addCallback("/ard/banheiro",&func5);
server.addCallback("/ard/escritorio",&func6);
// Saídas
pinMode(quarto,OUTPUT);
pinMode(sala,OUTPUT);
pinMode(cozinha,OUTPUT);
pinMode(copa,OUTPUT);
pinMode(banheiro,OUTPUT);
pinMode(escritorio,OUTPUT);
//Entradas
digitalWrite(bot1,HIGH);
digitalWrite(bot2,HIGH);
digitalWrite(bot3,HIGH);
digitalWrite(bot4,HIGH);
digitalWrite(bot5,HIGH);
digitalWrite(bot6,HIGH);
}
void loop (){
if(server.aviableCheck()>0){
if(digitalRead(bot1)==LOW){
int state=digitalRead(quarto);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/quarto");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(quarto,!state);
delay(300);
}
else if(digitalRead(bot2)==LOW){ //colocação do argumento "else"
int state=digitalRead(sala);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/sala");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(sala,!state);
delay(300);
}
else if(digitalRead(bot3)==LOW){
int state=digitalRead(cozinha);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/cozinha");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(cozinha,!state);
delay(300);
}
else if(digitalRead(bot4)==LOW){
int state=digitalRead(copa);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/copa");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(copa,!state);
delay(300);
}
else if(digitalRead(bot5)==LOW){
int state=digitalRead(banheiro);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/banheiro");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(banheiro,!state);
delay(300);
}
else if(digitalRead(bot6)==LOW){
int state=digitalRead(escritorio);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/escritorio");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(escritorio ,!state);
delay(300);
}
}
}
void func1(OSCMessage*_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(quarto,value);
}
void func2(OSCMessage*_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(sala,value);
}
void func3(OSCMessage*_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(cozinha,value);
}
void func4(OSCMessage*_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(copa,value);
}
void func5(OSCMessage*_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(banheiro,value);
}
void func6(OSCMessage*_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(escritorio,value);
}
Não está funcionando.
E ai José, tudo bem??
ResponderExcluirgostaria de saber, se este software está disponivel para win8...
Obrigado.
e também se tem como eu usar sem a opção do botão, pq quero fazer aqui na minha casa, e vou fazer em paralelo com o interruptor, teria como tirar essa opção do botão? como ficaria?!
ExcluirObrigado.
Amigo o bacana do botão é que ele nos fornece o status do ponto de luz,
ExcluirPor exemplo, fiz meu TCC com as seguintes opções:
* Automático, acionamento pelo tablet.
*Semi-automático, acionamento pelo push button (não deixa de ser manual porém está diretamente ligado no software dando o feedback no tablet).
*Manual, acionamento via interruptor paralelo (esse não tem ligação nenhuma com o sotware, ou seja, se todos os dispositivos falharem, rede ou até mesmo se sua placa queimar ele funciona porque esta ligado com reles paralelamente).
E agradeço o Luiz por abrir um leque de ideas (brainstorm) e por ter respondido a alguns e-mails
Fernando,
ExcluirPoderia me mandar o teu código por email? Estou tentando montar um projeto como este com interruptor e não com push button mas estou com dificuldades.
Se puder enviar eu agradeço.
Abraço
coelho_84@yahoo.com.br
Boa dia Fernando!!
ExcluirSe puder enviar eu agradeço.
Abraços!!!
daniel-victorss@hotmail.com
Boa tarde!
ResponderExcluirAlguém poderia enviar o código pr meu e-mail?
jonasreis@gmail.com
Boa noite,
ResponderExcluirEu montei no protoboard um exemplo de acionamento remoto, quando estou dentro da minha rede, ou seja, compartilhando o mesmo roteador, consigo enviar e receber dados do arduino através da W5100, porém quando mudo para 3G ou uso outra rede no meu celular, eu só consigo enviar dados para o Arduíno, mas fico sem o feedback. Você tem uma solução para esse problema?
Grato
Julio
Este comentário foi removido pelo autor.
ResponderExcluirBom dia, preciso de ajuda!
ResponderExcluirBaixei o programa Touch 1.6 32bits para o PC, e para o smartphone 1.9.1 (Única versão / Android).
Quando vou fazer a associação demora a carregar e no fim aparece uma mensagem de erro, como não conseguisse acessar o IP do PC.
Alguem me ajuda?
Você tem que fazer o dwonload pelo smart fone (tem opção de add )tmb, ou então via cabo
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirAmigo, poderia me mandar o código?
ResponderExcluirrodrigomiranda@outlook.com
Boa noite pessoal!
ResponderExcluirEstou tendo um problema que nao consigo resolver...
Estou fazendo um teste... e ele nao esta funcionando como deveria
No arduino tenho apenas um led e, no projeto touchosc coloquei 2 toggle buttons.
O problema é que os dois botoes estão controlando o led.
Já coloquei um terceiro botão sem alterar nada nele e, ainda assim ele ligava e desligava o led que apenas um botão deveria faze-lo.
Vou postar meu código para vcs verem:
////////////////////////////////////////
#include
#include
#include //inclui blibioteca ArdOSC
byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //define MAC para shield Ethernet
byte myIp[] = { 192, 168, 1, 100 }; //define IP da central automação
byte destIp[] = { 192, 168, 1, 134 };
int serverPort = 8000; //define a porta de recepção do comando OSC
int destPort = 9000; //define a porta de envio do comando OSC
int relePin = 7; //define a porta do arduino associada ao led
int sw1Pin = A1;
int flag=0;
OSCServer server; //inicializa o servidor OSC (serviço que trata a recepção de mensagem OSC)
OSCClient client; //inicializa o cliente OSC (serviço que trata o envio de mensagem OSC)
void setup(){
Ethernet.begin(myMac ,myIp); //inicializa a interface ethernet
server.begin(serverPort); //inicializa o servidor OSC definindo a porta de RX
//set callback function & oscaddress
server.addCallback("/ard/led1",&func1); //define que a rotina "func1" será executada para o comando OSC "/ard/ledPin"
pinMode(relePin, OUTPUT); //define a porta digital 9 (ledPin) do Arduino como saida
digitalWrite(sw1Pin, HIGH);
}
void loop(){
if(server.aviableCheck() > 0 ){ //verifica se existe alguma mensagem OSC disponível para leitura
if (digitalRead(sw1Pin) == LOW) {
int state = digitalRead(relePin);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/led1");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(relePin, !state);
delay(300);
}
}
}
void func1(OSCMessage *_mes) {
int value = (int)_mes->getArgFloat(0);
digitalWrite(relePin, value);
}
/////////////////////////////////////////////
Se vcs puderem me ajudar eu ficaria muito agradecido :-)
Att.
Este comentário foi removido pelo autor.
ExcluirBoa noite,
ResponderExcluirAndei pesquisando placas de arduino e achei essa. Será que essa dá certo?
http://produto.mercadolivre.com.br/MLB-640062616-arduino-ethernet-shield-w5100-com-slot-para-sd-card-_JM
É Uma placa ethernet Shield W5100.
No lugar de um push button ter um botão ON/OFF (interruptor)... alguém tem esse código?
ResponderExcluirObrigado,
Leandro
Olá, achei muito interessante o artigo, parabéns, mas tenho um projeto, que usa o shield WiFi CC3000 para fazer a conexão, mas não estou obtendo êxito, vc poderia me ajudar?
ResponderExcluirOlá!!! É possível enviar uma mesma mensagem para dispositivos com Ip diferentes com apenas um comando? Da forma que eu fiz o Arduina demora muito para enviar a mesma mensagem:
ResponderExcluirif((results.value) == BOTAO[8])
{
OSCMessage txMes; //Cria uma nova menssagem
txMes.setAddress(destIP, destPort); //define endereço e porta de destino da mensagem OSC
txMes.beginMessage("/ard/ledPin8"); //define comando OSC
txMes.addArgFloat(!j[1]); // define novo estado da luz que sera enviado no argumento OSC para o celular
client.send(&txMes);
OSCMessage txMes1; //Cria uma nova menssagem
txMes1.setAddress(destIP1, destPort); //define endereço e porta de destino da mensagem OSC
txMes1.beginMessage("/ard/ledPin8"); //define comando OSC
txMes1.addArgFloat(!j[1]); // define novo estado da luz que sera enviado no argumento OSC para o celular
client.send(&txMes1);
digitalWrite(17,j[1]);
j[1]=!j[1];
}
else
if((results.value) == BOTAO[9])
{
OSCMessage txMes; //Cria uma nova menssagem
txMes.setAddress(destIP, destPort); //define endereço e porta de destino da mensagem OSC
txMes.beginMessage("/ard/ledPin9"); //define comando OSC
txMes.addArgFloat(!j[2]); // define novo estado da luz que sera enviado no argumento OSC para o celular
client.send(&txMes);
OSCMessage txMes1; //Cria uma nova menssagem
txMes1.setAddress(destIP1, destPort); //define endereço e porta de destino da mensagem OSC
txMes1.beginMessage("/ard/ledPin9"); //define comando OSC
txMes1.addArgFloat(!j[2]); // define novo estado da luz que sera enviado no argumento OSC para o celular
client.send(&txMes1);
digitalWrite(18,j[2]);
j[2]=!j[2];
}
Amigos,
ResponderExcluirPq o meu sempre da esse erro:
In file included from C:\Users\FABRICIO\Documents\Arduino\libraries\ArdOSC/OSCCommon/OSCClient.h:21:0,
from C:\Users\FABRICIO\Documents\Arduino\libraries\ArdOSC/ArdOSC.h:55,
from Arduino_android.ino:3:
C:\Users\FABRICIO\Documents\Arduino\libraries\ArdOSC/OSCCommon/OSCEncoder.h:27:33: error: 'OSCMessage::OSCMessage' is not a type
int16_t encode( OSCMessage::OSCMessage *mes ,uint8_t *_binData );
Amigo, qual a versão do Arduino que você está usando. Eu uso o Arduino 1.0. Segue o link do site oficial: http://arduino.googlecode.com/files/arduino-1.0-windows.zip
ExcluirGalera preciso usar a versão 1.6 para compilar e geram erros. Na 1.0 funciona perfeitamente mas geram erros em outros programas que tenho. Se alguém puder ajudar.....
ResponderExcluirIn file included from C:\Program Files (x86)\Arduino\libraries\ArdOSC/ArdOSC.h:56:0,
from Comunica__o_correta_osc.ino:3:
C:\Program Files (x86)\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:31:5: error: 'OSCDecoder::OSCDecoder' names the constructor, not the type
OSCDecoder::OSCDecoder _decoder;
^
C:\Program Files (x86)\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:32:5: error: 'Pattern::Pattern' names the constructor, not the type
Pattern::Pattern _adrMatch;
^
Erro compilando.
Boa noite!
ResponderExcluirJosé Luiz não estou conseguindo colocar interrupção externa no programa abaixo. Estou até disposto a pagar. Entre em contato dimersonricardo@hotmail.com
/*#include
#include
#include
byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[] = { 192, 168, 6, 1 }; // IP da central minha casa
byte destIP[] = { 192, 168, 6, 215 }; // IP do meu celular
int serverPort = 8000;
int destPort=9000;
int pino8 = 8; //define a porta do arduino
int pino9 = 9; //Define a porta do arduino
int flag=0;
int flag2=0;
OSCServer server;
OSCClient client;
void setup(){
// Serial.begin(19200);
Ethernet.begin(myMac ,myIp); // Estabelece comunicação via rede
server.begin(serverPort);
//set callback function
server.addCallback("/ard/pino8",&func1); //define que a rotina "func1" será executada para o comando OSC "/ard/ino8"
server.addCallback("/ard/pino9",&func2); //define que a rotina "func1" será executada para o comando OSC "/ard/pino9"
pinMode(pino8, OUTPUT); //define a porta digital 8 do Arduino como saida
pinMode(pino9, OUTPUT); //defkne a porta digital 9 como saida
}
void loop(){
if(server.aviableCheck()>0){
// Verifica se existe alguma mensagem a ser lida enviada do OSC
}
}
void func1(OSCMessage *_mes){
int value=(int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/pino8"
digitalWrite(pino8,value);
//Cria msg OSC
OSCMessage txMes; //cria uma nova menssagem OSC
//set destination ip address & port no
txMes.setAddress(_mes->getIpAddress(),destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/pino8"); //define comando OSC
txMes.addArgFloat(flag); //define no estado do led 2 que será enviado no argumento OSC para ANDROID
if(flag==1){
flag=0;
digitalWrite(pino8, LOW);
}
else {
flag=1;
digitalWrite(pino8, HIGH);
}
txMes.addArgInt32(flag);
//send osc message
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID
}
void func2(OSCMessage *_mes){ //rotina que trata comando OSC "/ard/led2" recebido do ANDROID
int value=(int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led2"
digitalWrite(pino9,value); //muda estado da porta digital 9 conforme argumento OSC recebido
//create new osc message
OSCMessage txMes; //cria uma nova menssagem OSC
//set destination ip address & port no
txMes.setAddress(_mes->getIpAddress(),destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/pino9"); //define comando OSC
txMes.addArgFloat(flag2); //define no estado do led 2 que será enviado no argumento OSC para ANDROID
if(flag2==1){
flag2=0;
digitalWrite(pino9, HIGH);
}
else{
flag2=1;
digitalWrite(pino9, LOW);
}
}*/
Este comentário foi removido pelo autor.
ResponderExcluircomo conectar 2 celulares, consigo acender os leds pelos dois, mas o status aparece em um so,quando pressiona o botão, quando ligado por outro celular não aparece o status
ResponderExcluir#include
#include //inclui blibioteca Ethernet
#include //inclui blibioteca ArdOSC
byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //define MAC para shield Ethernet
byte myIP[]={192,168,0,10}; //define IP da central automação
byte destIP[]={192,168,0,131}; //define IP do dispositivo de comando OSC
int serverPort=8000; //define a porta de recepção do comando OSC
int destPort=9000; //define a porta de envio do comando OSC
int led1Pin=8; //define a porta do arduino associada ao led 1 (vermelho)
int led2Pin=9; //define a porta do arduino associada ao led 2 (verde)
int sw1Pin=6; //define a porta do arduino associada ao botão 1 (esquerdo)
int sw2Pin=7; //define a porta do arduino associada ao botão 2 (direito)
o ip do outro é 192.168.0.134
ip do toush automatico
Você terá que preservar os IPs dos dois celulares e enviar as mensagens OSC para atualizar os dois.
ExcluirBom dia José. me ajuda ai.
ExcluirMeu sistema já esta funcionando.
Porém quero enviar um comando para o arduíno através da barra de endereços.
como ficaria a sintexe?
ip: 192.168.0.100
porta: 2100
comando que quero enviar: /ping
http://192.168.0.100:2100 ??????????
não sei como continua a informação, como seria a parte das ??????????
o sistema só atualiza quando o app esta aberto se eu ligo o led pelo Button e depois abro a app não consta que o led esta acesso
ResponderExcluircomo fazer pra atualizar o status constante mente ou por um tempo
Guilherme,
ExcluirÉ só você criar um botão "refresh" no touchOSC e programar o Arduino para enviar o status dos leds para o celular quando receber o comando refresh.
atenciosamente
José Luiz Sanchez Lorenzo
José Luiz,
ExcluirInteressante sua ideia, mas como proceder com um sistema composto de 44 botões, onde dois arduinos mega se comunicam via serial, e os status no touchOSC são enviados para dois celulares? O arduino máster enviaria 88 mensagens e tornaria o loop bastante lento.
Amigo teria como me enviar o codigo para acender as luzes de casa com rele
ResponderExcluirla seria 7 cômodos, sendo eles: Quarto 1, Quarto 2, Sala , Copa, Cozinha, Escritorio e varanda.
Estou com um arduino atmega 2560 e uma placa ethernet 5100
se puder me enviar por email te agradeço: lcjunior17@hotmail.com
Bom dia amigo, sucesso e aprendi muito com seu blog, porem ainda aguardo a configuração pela web,
ResponderExcluircomo copio este codigo?
ResponderExcluirSou novato na área do arduino e Gostaria de agradecer ao José Luiz Sanches Lorenzo e ao autor do blog pelas preciosas dicas! Estou utilizando o sistema android e segui todos os passos que estão ai. O TouchOSC muda um pouco mas é basicamente as mesmas configurações.
ResponderExcluirTive alguns problemas e acredito que alguns tiveram o mesmo problema de erro.
No começo do código adicionei:
#include SPI.h //com os sinais de menor e maior <>
Depois no loop tem a linha:
txMes.setAddress(destIP, destPort);
No "destIP" , o IP está maiúsculo quando somente o "I" é maiúsculo.
Ficando assim:
txMes.setAddress(destIp, destPort);
Verificar que são duas linhas com o mesmo erro.
Novamente agradeço pela dedicação do autor do blog e ao José Luiz Sanches Lorenzo.
Diego use a vers arduino correta ou outro codigo para a versao arduino 1.0.5
Excluirhttps://www.youtube.com/watch?v=M5f928M_-W0 funciona direitinho
Obrigado
ExcluirSera que alguem pode tirar uma duvida? estou usando um arduino mega, se eu ao invés de usar a porta dig 8 e 9 , usar as portas 38 e 40 vai funcionar?
ResponderExcluirTENHO UMA DÚVIDA QUANDO TENTO ADICIONAR MAIS UM LED OU FUNÇÃO DA ERRO, VCS PODERIAM ME AJUDAR OQUE EU FAÇO RÁPIDO PRECISO URGENTE.............
ResponderExcluirAmigo, cola o seu codigo aqui para verificar
ExcluirBoa noite pessoal, tambem sou iniciante no ramo da programação tenho bastante esperiencia com eletronica, porem consegui fazer o layout no meu celular, mas estou confuso com o código e a biblioteca, já tentei de tudo mas sempre da algum erro, poderiam por gentileza me ajudar me dando o link correto do Código+Biblioteca, Grato por enquanto abraços
ResponderExcluirParabens pelo Tuto..
ResponderExcluirli tds os posts e nao vi nenhum problema similar ao meu.. ve se consegue uma maozinha.. hehe
Consegui conectar normalmente o smartphone e a shield.. ok!
porem so 1 led responde: mas... ele nao liga e desliga, ele pisca quando eu dou o comando no celular..
ja troquei portas, ja troquei componentes, ja refiz app e continua com o bug..
e os botoes nao funcionam.. retirei e fiz por jump.. e nada..
cod. é o postado..
algum help???
Valeu...
Amigo estou com um grande problema com destPort
ResponderExcluir( Acender_dois_leds:52: error: 'destIP' was not declared in this scope )
Ela esta declarada exatamente como esta no seu ai em cima. oque poderia ser.
Ufa, consegui fazer tudo, mas to usando o programa QuickOSC, é mais simples e não permite receber msg. OSC, porem é gratuito. Voce poderia nos ensinar a configurar via internet. Obrigado Jose Luiz!
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirBom dia pessoal, consegui fazer ligar duas lampadas aqui agora estou querendo ligar minha TV com os comandos OSC, então sei que tenho que gravar os códigos dos botões do controles em um sd Card e fazer o arduino ler e enviar por um Led IR, mas não faço idéia por onde começar, alguem tem algo desenvolvido que possa me ajudar, grato abraço.
ResponderExcluirsegue meu programa, le e escreve no mesmo
Excluirpino 3 send
pino 11 recv
[code]
#include
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
String leStringSerial(){
String conteudo = "";
char caractere;
while(Serial.available() > 0) {
caractere = Serial.read();
if (caractere !='\n'){
conteudo.concat(caractere);
}
delay(10);
}
Serial.print("Recebi: ");
Serial.println(conteudo);
return conteudo;
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
irrecv.enableIRIn();
}
if (Serial.available() > 0){
String recebido = leStringSerial();
if(recebido == "tv01"){irsend.sendNEC(0x20DF10EF, 32);}//on
if(recebido == "tv02"){irsend.sendNEC(0x20DFD02F, 32);}//imput
if(recebido == "tv03"){irsend.sendNEC(0x20DFF00F, 32);}//tv
if(recebido == "tv04"){irsend.sendNEC(0x20DF8877, 32);}//1
if(recebido == "tv05"){irsend.sendNEC(0x20DF48B7, 32);}//2
if(recebido == "tv06"){irsend.sendNEC(0x20DFC837, 32);}//3
if(recebido == "tv07"){irsend.sendNEC(0x20DF28D7, 32);}//4
if(recebido == "tv08"){irsend.sendNEC(0x20DFA857, 32);}//5
if(recebido == "tv09"){irsend.sendNEC(0x20DF6897, 32);}//6
if(recebido == "tv10"){irsend.sendNEC(0x20DFE817, 32);}//7
if(recebido == "tv11"){irsend.sendNEC(0x20DF18E7, 32);}//8
if(recebido == "tv12"){irsend.sendNEC(0x20DF9867, 32);}//9
if(recebido == "tv13"){irsend.sendNEC(0x20DF08F7, 32);}//0
if(recebido == "tv14"){irsend.sendNEC(0x20DF40BF, 32);}//volume +
if(recebido == "tv15"){irsend.sendNEC(0x20DFC03F, 32);}//volume -
if(recebido == "tv16"){irsend.sendNEC(0x20DF00FF, 32);}//canal +
if(recebido == "tv17"){irsend.sendNEC(0x20DF807F, 32);}//canal -
if(recebido == "tv18"){irsend.sendNEC(0x20DF3EC1, 32);}//smart
if(recebido == "tv19"){irsend.sendNEC(0x20DF02FD, 32);}//^
if(recebido == "tv20"){irsend.sendNEC(0x20DFE01F, 32);}//<
if(recebido == "tv21"){irsend.sendNEC(0x20DF22DD, 32);}//ok
if(recebido == "tv22"){irsend.sendNEC(0x20DF609F, 32);}//>
if(recebido == "tv23"){irsend.sendNEC(0x20DF827D, 32);}//-
if(recebido == "tv24"){irsend.sendNEC(0x20DFDA25, 32);}//exit
if(recebido == "rd01"){irsend.sendRC5(0xC7F, 12);}//TUNER
if(recebido == "rd02"){irsend.sendRC5(0x4BF, 12);}//TAPE
if(recebido == "rd03"){irsend.sendRC5(0x83F, 12);}//TV
if(recebido == "rd04"){irsend.sendRC5(0x93F, 12);}//V-CD
if(recebido == "rd05"){irsend.sendRC5(0xD3F, 12);}//CD
if(recebido == "rd06"){irsend.sendRC5(0x5FF, 12);}//DCC
if(recebido == "rd07"){irsend.sendRC5(0x97F, 12);}//VCR1
if(recebido == "rd08"){irsend.sendRC5(0x9BF, 12);}//VCR2
if(recebido == "rd09"){irsend.sendRC5(0x40D, 12);}//MUTE
if(recebido == "rd10"){irsend.sendRC5(0x98C, 12);}//POWER
if(recebido == "rd11"){irsend.sendRC5(0xC11, 12);}//VOLUME +
if(recebido == "rd12"){irsend.sendRC5(0xC10, 12);}//VOLUME -
if(recebido == "rd13"){irsend.sendRC5(0x45E, 12);}//TUNNER +
if(recebido == "rd14"){irsend.sendRC5(0x45F, 12);}//TUNNER -
irrecv.enableIRIn();
delay(10);
}
}
[/code]
Este comentário foi removido pelo autor.
ResponderExcluirOLA AMIGO É POSSÍVEL A UTILIZAÇÃO DE MAIS DE UMA PESSOA EM UM MESMO AMBIENTE COM DISPOSITIVOS DIFERENTE, E SE EXISTE ALGUM SISTEMA DE PROTEÇÃO COM LOGIN E SENHA DE USUÁRIO??
ResponderExcluirBOA TARDE, muito bom trabalho você esta de parabéns.
ResponderExcluirGostaria de saber como farei para controlar com mais de 2 celulares ? se for possível mande a resposta com uma explicação. obrigado !
Otimo blog
ResponderExcluirboa noite poderia me mandar o codigo do arduino meu email é jajferreira@icloud.com
projeto muito legal!
ResponderExcluiro aplicativo touch osc pode ser baixado diretamente do dispositivo movel , celular ?
boa tarde , sou novo em Arduíno poderia enviar esse código fonte pro meu e-mail ? jsb.barbosa1234@gmail.com
ResponderExcluirPoderia enviar pra mim por favor? Luciano__lcoa@hotmail.com
ExcluirTentei realizar esse projeto, porém ta ocorrendo um erro do qual não consegui corrigir.
ResponderExcluirErro Abaixo:
'class OSCServer' has no member named 'aviableCheck'
Alguém poderia me fornecer o código completo?
ResponderExcluiracredito que o erro e que voce ta usando a ide 1.7, tem que ser a 1.0... As ides mais modernas do arduino dão pau mesmo no aplicativo
ExcluirParabéns pelo conjunto da Obra. Por gentileza, você poderia me indicar onde eu consigo o seu terceiro artigo ou parte três sobre o assunto "Na parte 3 falaremos sobre comunicação ZIGBee usando módulos XBee".
ResponderExcluirmeu email: atturano@gmail.com
Muito Obrigado
Boa noite a todos
ResponderExcluirComo faço para controlar a tv pelo touchOSC , com arduino +Child Ethernet+ ir remote? Fiz todos os códigos mais a tv nao liga. Se alguem poder me ajudar eu agradeço
Boa noite a todos
ResponderExcluirComo faço para controlar a tv pelo touchOSC , com arduino +Child Ethernet+ ir remote? Fiz todos os códigos mais a tv nao liga. Se alguem poder me ajudar eu agradeço
Boa noite a todos
ResponderExcluirComo faço para controlar a tv pelo touchOSC , com arduino +Child Ethernet+ ir remote? Fiz todos os códigos mais a tv nao liga. Se alguem poder me ajudar eu agradeço
Meu e-mail jozielmelo@gmail.com
ResponderExcluirMeu e-mail jozielmelo@gmail.com
ResponderExcluirOlá, parabéns pelo post. Você poderia por gentileza enviar o código por e mail? Se sim meu e mail é leleandros@yahoo.com.br. Dês de já obrigado!
ResponderExcluirvc poderia me passa o codigo
ResponderExcluirjozielmelo@gmail.com
Boa noite, amigo aonde encontro a linguagem para copiar e colar? estou precisando ligar uma lampada e desligar pelo aplicativo com arduivo uno. tem como me ajudar ?
ResponderExcluir