Como localizar automaticamente seu projeto na rede

Neste post, ao menos por enquanto, eu não vou dar nenhum código. Apenas explicar em linhas gerais o processo.

Considerações gerais

Os três protocolos mais usados para comunicação com seu projeto são UDP, TCP e HTTP. Cada um deles tem suas vantagens e desvantagens, mas o único realmente apropriado para localização é o UDP, porque é o único que pode enviar mensagens sem ficar esperando por uma resposta.

Digamos que sejam dois dispositivos: cliente e servidor.

  • No cliente, emita um broadcast (mensagem para 255.255.255.255) UDP na rede com uma mensagem do tipo: “onde você está”?. Todos os dispositivos no mesmo segmento de rede recebem o broadcast;
  • No servidor você deve responder essa pergunta de uma forma que o cliente saiba que a resposta vem do dispositivo certo. Você pode responder direto para o cliente ou fazer também um broadcast com a resposta. Por exemplo, se a consulta tiver a pergunta “MEUSERVIDOR?” a resposta pode ser “MEUSERVIDOR!” ou “MEUSERVIDOR1”, “MEUSERVIDOR2”, etc;
  • Na ponta que fez a consulta, extraia da resposta o IP de quem enviou;
  • Pronto, agora você pode usar esse endereço IP para se conectar ou enviar mensagens por outros protocolos, como TCP e HTTP.

Outras considerações

Isso não é gambiarra. Produtos comerciais usam esse mesmo método geral de localização automática. Por exemplo, câmeras IP;

Em condições normais, broadcasts não são propagados através de roteadores. Seria um pesadelo se fossem;

Ao fazer broadcast para 255.255.255.255 o servidor responderá mesmo que esteja em outra sub-rede lógica. Por exemplo, se o cliente tiver um IP do tipo 10.0.0.x e por alguma razão o servidor estiver configurado para 192.168.0.x , ainda assim haverá resposta para o broadcast, mas o cliente só a receberá se a resposta também for um broadcast. Isso é útil para localizar equipamentos mal configurados, mas você não poderá estabelecer uma conexão HTTP ou TCP enquanto não trouxer o servidor para a mesma sub-rede lógica que o cliente. Se quiser que o broadcast somente localize dispositivos na mesma sub-rede lógica, deve mandar a mensagem para o endereço de broadcast da sub-rede. Por exemplo, numa rede do tipo 10.0.0.x o endereço de broadcast é 10.0.0.255.

Sempre que seu servidor iniciar, é recomendável fazer o broadcast de sua identificação. Faça também com que o cliente esteja atento a esses broadcasts para detectar automaticamente a presença do servidor;

 

Postado em Sem categoria | Tags: | Deixe um comentário (responderei para o seu e-mail)

Ferramentas de criação de menus HTML

A melhor opção gratuita que encontrei até agora foi o Easy CSS Menu.

Prós

  • Realmente gratuito e aparentemente sem pegadinhas;
  • Gera menus profissionais, muito bonitos;
  • Gera código HTML e CSS fácil de editar;
  • Você pode usar esse código no seu projeto de automação.

Contras

  • Efeitos dependem de código javascript obfuscado.

Notas

1) Você pode tornar o código javascript “legível” usando o serviço online jsbeautifier.

2) O código javascript gerado impede o uso do evento onClick dos itens de menu. Como o código é obfuscado o jeito mais fácil de habilitar os eventos é remover a linha que carrega o arquivo .js.

Com isso você perde os efeitos, mas de resto tudo continua funcionando.

3) Alternativamente, você pode editar o código apagando todas as referências a .onClick. Mas comigo funcionou bastando dar uma busca pela função que começa com

e apagar o seguinte trecho que vem logo a seguir:

4) Você pode acrescentar manualmente (com copiar e colar em um editor de textos) itens ao menu, mas preste atenção a linhas como esta:

Nas configurações default o número no final da linha precisa corresponder ao número de itens do menu * 36, ou o gradiente ficará bagunçado. No exemplo são (216/36=) 6 itens.

 

 

Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

Notas sobre o uso de RFID em aplicações de segurança.

Nota: O que explico a seguir se aplica certamente a sistemas de 125kHz. Ainda não tenho certeza quanto a sistemas RFID milfare de 13.56MHz.

Evite cometer o erro de usar apenas o valor da tag RFID como identificação. Tags RFID em geral se apresentam a qualquer dispositivo que pergunte seu número, silenciosamente. Então para  obter o número de uma tag (copiar a tag) basta ficar bem próximo da tag por um breve instante. Sua tag é um cartão na forma de crachá ou cartão no bolso ou chaveiro? Um estranho esbarrando em você na rua pode estar copiando sua tag. Basta saber em que parte do corpo você normalmente a carrega.

Mas este é o jeito simples. Um atacante mais sofisticado pode facilmente ler sua tag passando a um metro de você.

Isto se chama “tag snooping”.

E após saber o número da tag, basta transmitir o número nas proximidades do leitor. Isso se chama “tag spoofing” e pode ser feito com um Arduino e alguns componentes extras.

Se seu sistema não exigir uma senha além do número da tag, fica muito vulnerável a ser invadido até por um adolescente.

 

Postado em Sem categoria | Tags: | Deixe um comentário (responderei para o seu e-mail)

Anatomia de um leitor RFID

Um leitor RFID essencialmente se compõe dos seguinte blocos:

  • Alimentação;
  • Antena;
  • Amplificador de sinal.

E opcionalmente existe um microcontrolador para decodificar o sinal e já apresentar o código da tag em um formato compreensível.

Tomando como exemplo o Módulo RDM6300:

Modulo_RFID_UART_RDM6300_DSC00520_640_automalabs.com.br

A antena não aparece na foto, mas da esquerda para a direita temos os seguintes componentes ativos:

  • LM358 – Responsável pela amplificação de sinal – Essencial;
  • 1117 – Regulador de tensão de 3.3V – Poderia não estar presente se a tensão já fosse regulada externamente;
  • SILF330 – Microcontrolador – Não essencial.

O objetivo do microcontrolador neste módulo é simplificar a vida do usuário. Ele decodifica o sinal presente na saída do amplificador baseado em LM358 e apresenta na saída do módulo o valor da tag já com uma interface padrão UART TTL. Isso permite que o próximo estágio, implementado pelo usuário, só tenha o trabalho de comparar as tags lidas com as tags armazenadas.

Porém é perfeitamente possível, se necessário, ligar a saída do amplificador diretamente em um pino de um Arduino e implementar a rotina de decodificação você mesmo. Isso é explicado neste artigo que mostra como fazer seu próprio leitor RFID, de onde eu retirei o diagrama abaixo, que mostra quase todo o essencial em um leitor RFID:

No diagrama acima, temos o LM324 fazendo o mesmo papel do LM358.

Se o leitor tiver interface USB o chip diretamente conectado a ela pode ser um simples conversor UART TTL – USB de baixo custo como um CH340 ou Silabs cp2101. Se assim for será possível obter o código em formato compatível com o Arduino em um dos pinos desse chip. Mas em alguns casos o mesmo microcontrolador que faz a decodificação também faz a interface USB, obrigando-nos a coletar o código ainda modulado na saída do amplificador

Postado em Sem categoria | Tags: | 2 Comments

Notas sobre o uso de portas seriais “soft” no Arduino

  • Não use portas seriais virtuais se puder evitar. Por exemplo, se estiver portando o projeto para um Arduino Mega, mude todas as referências à porta virtual para que se refiram a uma das portas seriais reais do Mega. O seu projeto usará menos CPU e ganhará confiabilidade;
  • Por um tempo, foi recomendado usar a biblioteca de terceiros NewSoftSerial no lugar da biblioteca embutida. Mas desde a versão 1.0 NewSoftSerial foi adotada pelo núcleo do projeto. Se você portou um projeto antigo para a versão 1.x do arduino é recomendável deletar a biblioteca NewSoftSerial e troque todas as referências a “NewSoftSerial” para “SoftwareSerial” no seu sketch.
  • Entretanto, se por alguma razão você precisa ainda usar uma versão do Arduino anterior à 1.x, use NewSoftSerial nesses projetos.
  • Você também pode usar as entradas analógicas como portas seriais. Basta ter em mente que para as bibliotecas seriais essas portas começam a ser numeradas onde a numeração das digitais termina. Assim:
    • A0=14;
    • A1=15;
    • A2=16;
    • A3=17;
    • A4=18;
    • A5=19;
  • Então, “SoftwareSerial mySerial(16, 17);” irá separar as entradas analógicas A2 e A3 como porta serial virtual “mySerial”.
  • O autor da biblioteca sugere de passagem que as portas A6 e A7 também podem ser usadas, mas creio que seja um engano. Além de ser fato conhecido que A6 e A7, ao contrário de A0-A5, só podem ser usadas como entradas analógicas, eu testei em um Nano e não funcionou.
  • É recomendado usar apenas velocidades entre 9600 e 38400 nas portas virtuais. Tanto velocidades muito baixas quanto as muito altas criam problemas;
Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

Notas sobre a utilização das portas analógicas do Arduino

A documentação do Arduino sobre as portas analógicas tem um erro. A página diz que o Arduino só tem 6 portas analógicas (A0 – A5).

The Atmega controllers used for the Arduino contain an onboard 6 channel analog-to-digital (A/D) converter.

Mas isso só é verdade para o Arduino Uno e Mega. Arduino Pro Mini e Nano tem 8 portas (A0 – A7). E as portas extras A6 e A7, ao contrário das outras, não podem ser usadas como portas digitais.

Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

Como medir a tensão de alimentação do arduino.

Quase sempre assumimos que a tensão VCC no arduino seja 5V. Mas nem sempre é. Quando o Arduino está alimentado pela USB, a tensão é geralmente mais baixa que quando alimentado por fonte/bateria externa, não sendo incoum ter um valor de 4.7V ou 4.5V. Isso não faz diferença em um grande número de aplicações, mas em algumas onde use as portas analógicas e requeira precisão, você precisa levar em conta o valor exato de VCC. Saber se o valor está baixo também pode ajudar a diagnosticar problemas gerais de funcionamento.

Este artigo explica como isso é feito.  Está tudo embutido em uma função:

Exemplo de uso

É importante ter em mente que a tensão que você está medindo é a tensão após o regulador interno. Se você plugar uma bateria de 9V, 12V ou 24V, vai ler sempre 5V, de forma mais ou menos estável. Esta tensão geralmente só vai ser menor que os 5V quando a tensão de entrada cai abaixo do mínimo necessário para que o regulador funcione, ou seja: quando a tensão de entrada estiver menor que 7V ou quando você estiver alimentando por uma porta USB já carregada, usando cabos muito longos ou com uma fonte defeituosa.

Dito isso, temos as duas utilidades dessa medição:

  1. Você consegue detectar quando a bateria está chegando no limite da capacidade. Quando VCC deixar de ser estável e começar a cair, significa que a tensão de entrada caiu abaixo de 7V e o desligamento se aproxima;
  2. Medir qualquer voltagem usando as entradas analógicas requer que você conheça VCC; Se você não requer precisão, simplesmente chutar que é 5V basta. Mas se qualquer diferença comprometer seus resultados, você precisa levar em conta o valor real de VCC.
Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

Apps Android para testes e controle com os protocolos UDP e TCP

As apps abaixo, nas versões indicadas, não pedem nenhuma permissão abusiva e suportam broadcast UDP para envio e recepção. Exceto se indicado em contrário, para fazer um broadcast você sempre precisa definir 255.255.255.255 como IP destino.
  • NetIO – É a única app paga desta lista, mas vale a pena se você quer operar no dia-a-dia algum dispositivo via rede mas não sabe como criar sua própria app Android.  No site do desenvolvedor você tem acesso a um editor online onde você desenha sua própria interface e faz toda a configuração.
  • WiFi TCP/UDP Controller v1.13.1 – e WiFi TCP/UDP Controller 16 v1.7.2 (para telas pequenas) – A app gratuita que mais perto chega de NetIO. Você pode gravar uma grande quantidade de comandos. Você pode ter até cinco controladores virtuais, cada um tendo como alvo um servidor distinto, mas qualquer um deles pode apontar para o endereço de broadcast. Infelizmente só mostra na tela a última recepção por isso pode não ser o melhor para diagnóstico ou acompanhamento do funcionamento da comunicação. Não mostra o IP da recepção, o que pode ser inconveniente quando você monitora broadcasts. Os dados podem ser processados na própria app e você pode exibir apenas a parte da recepção que você quiser.
    OBS.: A porta de recepção é configurada em “Received Data Preference”.
  •  TCP/UDP Terminal v.1.4.0 – Mostra a recepção da forma de um log, mas também não mostra o IP de quem transmitiu.
  •  UDP Receiver and Sender v1.6 – Para quem só quer fazer um teste rápido é muito mais simples de usar. Coloque a porta que deseja escutar e imediatamente a app já mostra um log das recepções. Não mostra IP de quem transmitiu. Tamanho da fonte no LOG não é configurável.
  • UDP Data Log – Lite v1.4 – Apenas faz recepção UDP e é simples de usar. Eu prefiro o TCP/UDP Terminal, mas esta pode ser útil por suportar qualquer Android desde a versão 2.2;
  • UDP tool 1.0 – Não funcionou comigo

 

Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

A diferença entre “shield” e “módulo”.

Todo shield é um módulo. “Shield” é um termo adotado pelos criadores do Arduino para designar módulos que foram construídos especificamente para montagem sobre um Arduino. Shields são convenientes e mais fáceis de usar isoladamente e produzem um resultado final mais elegante. Mas não tem flexibilidade por causa da pinagem fixa. Se dois shields usarem os mesmos pinos do Arduino você precisa fazer alteração em um deles. Módulos são mais flexíveis nesse sentido e mais baratos, por não serem “especializados”. Isto é: quando um fabricante cria um “shield GPS” ele está visando o Arduino apenas mas se ele fizer um “módulo GPS”, vai ter um público mais amplo: usuários de Arduino, ESP8266, Raspberry Pi, etc.

Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

A diferença entre buzzer ativo e passivo

Visualmente eles podem ser idênticos, mas o funcionamento é muito diferente. O buzzer ativo é um produto mais complexo, de uso mais simples. Ele já tem incorporado o circuito oscilador que produz o som e só requer energizar. O buzzer passivo é apenas um transdutor. Pense nele como um “alto falante” miniatura.

Buzzer ativo

  • Mais fácil de testar e usar: ao energizar já apita continuamente;
  • Não é o mais apropriado para criar melodias. É mais apropriado para alarmes/avisos/sinalização.

Buzzer passivo

  • Difícil de testar e usar: ao energizar você só ouve um débil estalo. Parece um buzzer ativo com defeito;
  • É o mais apropriado para fazer melodias, porque você tem o controle sobre os tons gerados.
Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)