Home › Category Archives › Informação

Dicas sobre o acesso ao Arduino pela internet

Isto não é um tutorial. Meu objetivo aqui é apenas listar algumas coisas que você tem que ter em mente antes de quebrar a cabeça tentando acessar seu projeto pela internet.

  • O endereço IP de acesso ao seu projeto quando você se conecta de fora da sua casa não é o mesmo que você usa para conexão dentro de sua casa. Você precisa encontrar meios de saber seu IP externo. E esse IP muda a cada vez que seu modem for reiniciado a não ser que você tenha pago ao provedor por IP fixo (geralmente, só em empresas);
  • Testar o acesso externo de dentro de sua própria rede geralmente não funciona. Mesmo usando o IP externo, você não consegue acesso. Você pode até testar de dentro do mesmo recinto, mas tem que usar outra conexão completamente distinta (um acesso 3G, por exemplo). Alternativamente peça a um amigo que mora em outra casa (e que nao compartilha internet com você) para fazer o teste;
  • Você precisa se familiarizar com o conceito de “portas de rede” e “encaminhamento de portas” (port forwarding). Sem entender o que é isso você pode até conseguir fazer seguindo cegamente algum tutorial, mas se qualquer coisa der errado você não vai saber resolver;
  • Você precisa encaminhar as portas de que precisa em todos os roteadores no caminho até o arduino. Isso vale para o modem ADSL, se for roteado (para modem bridge não é necessário);
  • O procedimento de encaminhamento é diferente em cada modem e roteador existente, por isso não faz sentido eu tentar explicar aqui. O que você deve fazer é anotar os modelos de cada um de seus roteadores e pesquisar na internet (se não estiver no manual) como se faz o encaminhamento neles.
  • Internet compartilhada é dor de cabeça. Se você divide internet com alguém e não tem acesso livre ao modem, vai ter dificuldade para fazer esse encaminhamento;
  • Internet via rádio é internet compartilhada. E nessa só quem tem acesso ao modem é o provedor. Sem a colaboração dele seu projeto não vai funcionar. Mas dependendo do indivíduo, você pode conseguir com ele o encaminhamento de uma série de portas para você. Existem mais de 65 mil portas disponíveis em um conexão e qualquer provedor pode perfeitamente reservar umas 10 para cada cliente. Muitos pode reservar 100. Não é uma situação ideal, porque se isso não fizer parte do pacote de serviços padrão desse provedor qualquer mudança que ele faça na rede dele pode fazer o encaminhamento deixar de funcionar e você terá que ligar para o suporte pedindo a reconfiguração. O provedor também pode não ser capaz de reservar para você exatamente as portas que você quer. Aproveite o fato de que na maioria dos casos é possível escolher com facilidade a porta no sketch.
  • A porta aberta para a internet não precisa necessariamente ser a mesma que o seu projeto usa, mas isso depende do roteador que você tem, pois em muitos a porta externa precisa ser igual à interna. Aproveite o fato de que você sempre pode definir a porta em seu projeto

Tenho peças para os projetos do livro Arduino Basico de Michael Mcroberts.

Se você está estudando com o livro de McRoberts, saiba que eu tenho as peças exatas ou equivalentes que não afetam o resultado para os projetos:

1,2,3,4,5,

7,8,9,10,11,12,13,14,

16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,

33,34,35,36,37,

42,

46,47,48,49,50

Mudança na política de participação

O blog agora não aceita mais registros espontâneos. Registros só com autorização minha (Jefferson).

Todos os registros de usuários que tinham ZERO comentários foram apagados.

Ainda é possível fazer comentários e ler todo o conteúdo de forma completamente anônima, como sempre foi. Porém em breve apenas usuários registrados (clientes e amigos) terão acesso ao conteúdo completo.

Aviso: Lamento, mas eu só dou suporte particular a clientes e amigos.  Tem uma dúvida sobre algum item que não está esclarecida nos textos? Pergunte e se eu souber responderei com um comentário ou acrescentando ao texto, mas não darei suporte particular para algo que você comprou em outro lugar.

Quer adquirir algo que está apresentado aqui? Deixe um comentário com seu email em qualquer post e eu responderei.

Software Arduino

Alguns clientes, novatos no mundo do Arduino, estranham o fato da placa não vir com nenhum CD. Isso é normal, porque o software é gratuito e disponibilizado no site do projeto. Qualquer cópia que eu coloque em CD corre o risco de se tornar obsoleta. E o custo do CD e do meu tempo para gravá-lo seria pago pelo cliente. Não vejo razão para isso.

Se você usa Windows, aqui estão os links diretos para as versões mais usadas do IDE (Integrated Development Environment):

O driver para que o Windows reconheça as placas está no sub-diretório “drivers”.

Eu recomendo que você tenha no mínimo as versões 0022 e 1.01. Esta por ser a mais recente e a outra porque muitas bibliotecas e exemplos que você vai encontrar pela internet  ainda não foram adaptadas para as versões 1.x do IDE.

Ethernet shield w5100: Teste completo

O teste completo envolve o uso do slot microSD. Você pode usar apenas ele ou pode usar o w5100 sem o acesso ao cartão. Aproveitando essa independência, certifique-se de que você já tenha sido capaz de colocar o shield para funcionar usando os exemplos que vem com o IDE Arduino. Não tente partir direto para um teste completo, quando você pode testar as partes primeiro.

Tenha em mente que ao lidar com arquivos no arduino você vai precisar voltar no tempo e relembrar (ou se familiarizar com) as diferenças entre FAT16 (FAT) e FAT32 e suas limitações. Em geral, o menor denominador comum, garantido de funcionar em todos os casos, será um cartão de até 2GB formatado em FAT16 (FAT). Maior que isso ou formatado com outro sistema e você poderá ter problemas.

Testando o w5100 (arduino 0022 ou 1.01):

File->Examples->Ethernet->Webserver

Altere o endereço IP no sketch para que combine com sua rede e tente acessá-lo usando o browser. Se tudo correr bem você verá uma lista dos valores nas entradas analógicas do arduino.

Testando o slot microSD  (arduino 0022 ou 1.01):

File->Examples->SD->Files

Coloque o cartão no slot e abra o monitor serial. Se tudo estiver OK você verá algo parecido com isto:

Se você encontrar algo muito diferente, como a mensagem “initialization failed!”, não adianta prosseguir com o teste completo. Verifique se o cartão está corretamente formatado. Testado com um cartão FAT16 de 2GB e com um cartão FAT32 de 8GB.

Teste completo

Requerimentos:

  • Um cartão microSD corretamente formatado. Eu padronizei meus testes com um cartão de 2GB formatado com FAT16, mas já testei sem problemas com um cartão de 8GB formatado com FAT32.
  • O IDE Arduino 0022 (veja em “Previous IDE versions”). Todos os meus testes são feitos com essa versão, mas se quiser usar a versão 1.01, veja o final deste texto.
  • A biblioteca SDFATlib – Extraia o conteúdo do ZIP e coloque o diretório SDfat no diretório libraries. Importante: use a versão do meu link. A versão mais recente não compila no arduino 0022.
  • O sketch SDWebBrowse da Adafruit (use a versão .pde)

Mude o sketch para o IP refletir a configuração da sua rede (digamos que seja 192.168.254.177).

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 254, 177 };
Server server(80);

Coloque um cartão no slot e faça o upload do sketch

Importante: sem um cartão corretamente formatado e com arquivos no slot, o exemplo da adafruit vai ficar travado. Nem sequer responderá a um ping.

Agora, de qualquer browser, tente acessar o arduino direto pelo IP:  http://192.168.254.177/

A resposta deverá ser a lista de arquivos no cartão. Atenção: este sketch não tem a capacidade de entrar em pastas, nem exibir imagens. Mas você conseguirá ver o conteúdo de arquivos .txt.

Outro modo de testar é abrindo o monitor serial. Se algo der errado, ele exibirá apenas algo assim:

Mas se estiver tudo certo aparecerá uma lista completa do conteúdo do cartão.

Mensagens de erro

“‘Sd2card’ does not name a type’ – você não instalou a biblioteca SDFatlib corretamente

“cannot declare aparameter ‘client’ to be of abstract type client” – você está usando uma versão do sketch que só funciona com o Arduino 002x, no Arduino 1.x.

Arduino 1.0.1

Para que funcione na versão mais nova do IDE, siga todo o meu procedimento, fazendo as seguintes alterações:

Apesar de eu não ter migrado ainda para essa versão do IDE, fiz um teste aqui e tudo pareceu normal

Para mais informações sobre o funcionamento dos sketches, visite a página da autora.

Como gravar o bootloader usando o próprio Arduino como gravador.

As várias opções estão listadas aqui.

A melhor situação, que vai exigir menos componentes e terá maior chance de dar certo na primeira tentativa é ter duas placas arduino. Uma para funcionar como programador e a outra para colocar o chip a ser programado. É essa que vou usar como exemplo aqui.

O arduino programador precisa estar carregado com o sketch ArduinoISP, que é o que vai tranformá-lo efetivamente em um gravador. Eu não encontrei a opção no Arduino 0022, por isso usei o 1.01. Usar o 1.01 para isso tem a vantagem adicional de garantir a gravação da versão mais recente do bootloader.

A tarefa do programador é receber pela porta serial o bootlader a ser gravado e gravá-lo no chip virgem (não necessariamente), usando a técnica ISP, que só requer três fios + reset.

Após o Arduino “programador” estar pronto, basta fazer as conexões como indicado na figura abaixo. A placa de baixo é o Arduino programador:

Em tools -> programmer, selecione Arduino as ISP.

O tipo de bootloader (duemilanove ou Uno) que você vai gravar é selecionado no mesmo menu onde vai selecionar a placa que você está gravando. Assim, mesmo que o programador seja um Arduino UNO, se você quer gravar um bootloader de Duemilanove, seleciona o Arduino Duemilanove no menu Tools -> Board. Em seguida, selecione Tools -> Burn Bootlader.

Se você ver a mensagem avrdude: usbdev_open(): did not find any USB device “usb”, você esqueceu de selecionar “Arduino as ISP”.

A gravação do bootloader leva de 25 a 30s por chip.

Usando a touchscreen de 4 fios

Este post se refere ao meu item que é uma touchscreen apenas (a placa transparente) e não ao LCD com touchscreen.

Muito cuidado é necessário ao manusear a tela. Ela pode ser inutilizada por qualquer queda, principalmente se bater “de quina”.

Você pode usar a biblioteca da Adafruit ou a do livro Practical Arduino. A da Adafruit funcionou melhor nos meus testes e é mais flexível, pois também mede pressão e permite que você use duas portas digitas e duas analógicas ou quatro analógicas. A do livro requer que você use quatro analógicas.

Material de referência:

AVR341 – Documento da Atmel que explica como touchscreens resistivas de quatro e cinco fios funcionam, com exemplos de código para AVR.

Practical Arduino – Páginas 121 a 137

Dúvidas comuns sobre o shield ethernet Wiznet W5100

O que é esse “HanRun” e esses códigos em cima do conector ethernet? 

Esse conector é especial. É fabricado pela HanRun e dentro dele existem dois LEDs e um componente essencial chamado de “magnetics”. O código HR911105A é o modelo do conjunto. Datasheet abaixo.

Por quê você chama de “Wiznet W5100”?

Porque Wiznet é o fabricante do componente principal do shield, cujo modelo é W5100. É para ele que você tem que procurar exemplos. Veja o que está escrito no quadrado preto no centro da placa.

Por que o arduino não aparece na lista de dispositivos conectados do meu roteador?

Aquela lista não é de dispositivos “conectados” nem “detectados”. É uma lista de dispositivos que pediram um endereço IP ao roteador, através de DHCP.  Se seu sketch não usa DHCP (a maioria usa IP fixo), o seu arduino não vai aparecer na lista de nenhum roteador.

Qual o endereço MAC do shield?

Nem o shield nem o chip tem endereço MAC. O MAC é definido no seu sketch, geralmente desta forma:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

Por um lado, isso te dá liberdade de usar o endereço que quiser. Por outro, pode dar uma baita dor de cabeça por causa da regra inviolável que diz que não podem existir dois MACs iguais em uma mesma rede. Enquanto você estiver brincando apenas com um shield não há problema, mas ao adicionar o segundo você vai ter que estar permanentemente alerta.  Por exemplo, se você já tem um Arduino em rede na sua casa e quiser debugar o programa usando um arduino na sua mesa, precisa se lembrar que o sketch de teste não pode ter o mesmo MAC do que está “em produção” (nem o mesmo IP) e também precisa lembrar que ao fazer o upload do código que  estava em teste para o arduino em produção, tem que alterar o MAC (e o IP).

O melhor modo de evitar dor de cabeça com isso é fazer seus sketches lerem o MAC de uma memória externa, que pode ser um cartão SD (perceba que o shield wiznet tem um slot) ou uma EEPROM. Você grava as memórias com MACs diferentes, bota uma etiqueta em cada uma dizendo qual é (só por organização), e esquece o problema.

Que LEDs precisam estar acesos?

Mesmo que o shield não esteja sendo usado (nenhum sketch que o use carregado), ao plugar o cabo de uma rede de 100Mbps devem acender-se quatro LEDs: PWR, LINK, 100M e FULLD. Se não acenderam esses quatro, o problema pode estar no shield ou no cabo.

Que pinos são usados pelo shield?

D4 (apenas para o SD), D10, D11,D12, D13, alimentação e o conector ICSP.

Por que o shield 1602 com keypad não funciona em conjunto com o Wiznet?

Porque o desenvolvedor do shield escolheu o pino 10 para desligar o backlight, colidindo com o requerido pelo shield Wiznet. Entorte o pino 10 do shield 1602 para que ele não entre e assim ambos vão funcionar.

Por que o sensor ultrassônico não funciona quando conecto o shield Wiznet?

Não sei. Não é defeito do sensor, nem do shield. Basta o shield estar plugado para que o sensor ultrassônico sempre retorne uma distância de 2-4cm. É como se a simples presença do shield interferisse com a temporização da função que mede o tempo de resposta do sensor. Ainda não tenho uma explicação e muito menos solução para isso.

Por que ao desligar a alimentação do arduino, quando a alimentação volta ele “sumiu” da rede?

Esse é um problema curioso que depende da sua placa base (seu arduino). Com algumas nunca acontece e com outras, você sempre precisa apertar o botão RESET   para que a rede volte a responder. É um problema que ocorre com todos os shields da mesma versão, incluindo os fabricados pela Sparkfun e pela Adafruit. Existem artifícios de hardware que podem ser usados para contornar isso, caso ocorra com você.

Ao energizar, os LEDs PWR e FULLD acendem. Plugar o cabo de rede não faz efeito.

Nem é preciso plugar o cabo para perceber que há algo errado, porque apenas PWR devia estar aceso sem um cabo de rede conectado. Apertando o botão RESET funciona? Se sim, o shield está com um problema de inicialização. Os shields com esse problema são rejeitados pelo meu controle de qualidade e reservados para meu uso apenas. Se acontecer com você no período de garantia, solicite a troca.

Datasheet HR911105A
Datasheet HR911105A
HR911105A.pdf
304.6 KiB
1149 Downloads
Detalhes...

Notas sobre comunicação com Android via módulo bluetooth

Este texto se refere a esses módulos.

Do lado Arduino

Como um dispositivo Android, assim como um computador comum, se comporta como um Master, o módulo apropriado para ser usado no Arduino é um slave.

O módulo bluetooth é completamente “transparente”. Para o Arduino, é uma porta serial qualquer. Ele não precisa de programação específica.

No Arduino UNO ou Duemilanove, o módulo é conectado nos pinos D0 e D1, que são compartilhados com a porta USB. Por essa razão:

  • Desconecte o módulo BT do Arduino quando precisar fazer o upload de um sketch. A presença do módulo impede a comunicação pela porta USB.
  • É aconselhável alimentar o Arduino com fonte externa e desconectar a USB quando estiver se comunicando por BT, para evitar que a conexão serial criada via USB interfira com a comunicação via BT.

Você pode rodar no Arduino qualquer sketch que transmita pela porta serial. De preferência continuamente.

Por exemplo: Exemplos-> 4.Communication -> ASCII Table. Esse exemplo só transmite durante o setup, então basta apertar o RESET para transmitir. Se quiser transmitir continuamente, mova a transmissão para o loop.

Do lado Android
As seguintes apps funcionam:

Se ao rodar o Bluetooth SPP a resposta for “Bluetooth serial port connection fail”, tente com outro telefone Android. Nos meus testes funcionou com o Motorola Quench, mas no Hero H200 só o Amarino aparentemente funciona.

Lembre-se:
O LED vermelho no módulo BT só pára de piscar, ficando aceso, quando a conexão serial está aberta. É o mesmo que dizer que se o LED estiver aceso, a porta está em uso. E no Android, assim como no Windows, dois programas não podem acessar uma mesma porta serial ao mesmo tempo.