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

 

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.

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;
  • Medindo a resistência entre os terminais com um multímetro, você tem uma alta resistência;
  • É polarizado;
  • Geralmente o terminal positivo é nitidamente maior que o negativo.

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;
  • Medindo a resistência entre os terminais com um multímetro, você tem algo entre 8 e 15 ohms nos dois sentidos;
  • Não tem polaridade, apesar de muitas vezes vir com o sinal + no corpo supostamente indicando onde é o positivo;
  • Geralmente os terminais tem o mesmo tamanho.

O buzzer de PC é do tipo passivo. Hoje em dia ele é só usado para bips por isso parece até que é do tipo ativo. Mas antigamente, até o Windows 98, era comum tocar músicas simples por ele.

Ferramentas para obter polígonos de coordenadas, para uso com GPS.

Quem precisa delimitar áreas (geofencing) a serem observadas por um sistema de automação baseado em GPS, como rotas, áreas proibidas, etc, freqüentemente precisa inserir no código matrizes de coordenadas. Por exemplo, digamos que você queira delimitar a circulação de uma pessoa ou veículo à região aproximada do bairro da Madalena, Em Recife (ou a qualquer lugar menos nessa região).

mapa_madalena_poligono_automalabs.com.br

Você precisaria introduzir no seu código uma matriz de coordenadas semelhante a esta (o formato exato varia):

(-8.050816223141625, -34.91300582885742)

(-8.05922962720018, -34.913434982299805)

(-8.059654541958096, -34.90407943725586)

(-8.049626434722773, -34.90373611450195)

Existem algumas ferramentas que você pode usar para facilitar o trabalho de obter essas coordenadas.

Estas são online e usam o Google Maps.

  • Polygon Creator Class (For Google Map API v3)  – Provavelmente o mais fácil de usar. Clique em Reset, clique no mapa até formar um quadrado e depois clique em “Show Paths”. O autor disponibilizou o código completo para baixar no Github. Mudando as coordenadas em “var singapoerCenter” (no código HTML) você fará o mapa abrir na região desejada;
  • Google Maps API v3 Tool – No topo escolha “Polygon” e “Javascript”. Na caixa ao lado de “Search”, coloque o nome da localidade onde você quer centralizar o mapa, por exemplo, “Madalena, Recife, Pernambuco” e clique em Search para posicionar o mapa. Clique em pelo menos três pontos sobre o mapa que já terá as coordenadas para o triângulo exibidas. Se clicar mais pontos o polígono correspondente será desenhado e as novas coordenadas serão exibidas.  Clique em “Clear Map” para desenhar outro polígono.
  • http://codepen.io/jhawes/pen/ujdgK – Para ver as coordenadas é preciso rolar a tela até ver a caixa de exibição e arrastar um dos pontos do triângulo. Essa é complicada de usar mas poderosa para quem entende algo de javascript. Você pode editar diretamente o código JS à direita da tela e ver as mudanças na hora. É possível mudar o formato com que as coordenadas são apresentadas, determinar coordenadas  padrão, etc. Por exemplo, troque o código JS pelo abaixo para fazer o mapa abrir em Recife , demarcando uma área sobre os bairros das Graças e Madalena e com uma exibição mais “limpa” das coordenadas.

Você pode salvar sua própria cópia, com muito lixo junto mas funcional, clicando em “Change View” -> “Full Page” e então use o comando do seu browser para salvar a página completa no seu HDD. O arquivo a editar depois não é o que você salvou, mas um .htm dentro da pasta criada automaticamente.

Erro “‘min’ was not declared in this scope” quando programando para o ESP8266

Arduino 1.6.5 com ESP8266 board package 2.0.0

Também pode ocorrer com max(), mas não aconteceu comigo.

Me deparei com este erro ao mesclar o programa graphics_test de Adafruit_ILI9341 com um programa que eu já estava usando no ESP8266.

Esse erro só ocorre quando uma das bibliotecas específicas do ESP8266 (não sei apontar qual ainda) é incluída no projeto. Ao usar “min” em um programa simples, compila normalmente.

Contorne o problema acrescentando “std::” antes de cada “min”, desta forma:

std::min()

Fonte

Circuito de auto-reset para programar o ESP8266

A sugestão vem da equipe Node MCU em um de seus diagramas, cujo detalhe eu adapto a seguir:

 

  • esp8266_nodemcu_autoreset_automalabs.com.br
  • O valor dos resistores não é crítico;
  • Os transistores podem ser qualquer NPN de uso geral;
  • Você, claro, precisará de um adaptador serial que tenha os sinais DTR e RTS.

Exemplo de como fazer uma “montagem aranha” mais ou menos elegante:

NodeMCU_ESP8266_reset_DSC02728_automalabs.com.br
E mais dois fios vindo da porta serial e dois indo para o ESP8266.

NodeMCU_ESP8266_reset_DSC02730_automalabs.com.br

Ao usar o IDE Arduino, selecione “nodemcu” como método de reset e o IDE controlará DTR e RTS de forma que ao fazer o upload o ESP8266 entre automaticamente em modo de programação

arduino_esp8266_ResetMethod_automalabs.com.br

O que acontece se você exceder a corrente máxima do Arduino?

Isso depende do modelo e de como é alimentado. Aqui eu vou documentar em parte baseado na minha experiência.

 

Arduino Nano, alimentado pela porta USB

 

O primeiro a sofrer é o diodo Schottky na entrada. Os dois exemplos abaixo são de placas modelo BAITE BTE14-01, com Schottky de 350mA.

ArduinoNanoV3.0_BTE14-01_CH340_Fundo_SchottkyDanificado_DSC01508_automalabs.com.br

Este não é tão evidente. Mesmo com ampliação você pode ter dificuldade para perceber que está inchado pelo calor.

 

ArduinoNanoV3.0_BTE14-01_CH340_Fundo_SchottkyDanificado_DSC01509

Como rodar o ESP8266 a 160MHz

Do jeito que vem da fábrica a velocidade de CPU do ESP8266 é 80MHz mas com um simples comando você pode mudar para 160MHz. E faz diferença. Um processo gráfico que leva 5,7s a 80MHz terminou em 3,5s a 160MHz.

Existe um pequeno aumento no consumo de corrente e não sei que efeito tem na longevidade da CPU.

Usando o IDE Arduino e a versão 2.0.0 do board package ESP8266 deveria ser possível configurar a freqüência em Tools->CPU Frequency. Mas aparentemente é preciso contornar um bug.

Acrescente isso à área de definições gerais

E isto em setup():

Dessa forma você consegue rodar a 160MHz mesmo que em Tools->CPU Frequency esteja selecionado 80MHz. Eu até prefiro desta forma, porque está claro no sketch a que velocidade eu estou rodando.

A corrente máxima que você pode tirar de um Arduino

Quando você está fazendo seu projeto pode ficar tentado pela simplicidade de alimentar tudo, por exemplo, da porta USB. Seu projeto pode acabar falhando por alimentação insuficiente e você vai quebrar a cabeça procurando o problema em outro lugar.

Por enquanto só vou tratar do Arduino Nano

Quando você alimenta pela USB a soma da corrente drenada da linha de +3.3V e a corrente drenada da linha de +5V não pode exceder o máximo da porta, que no caso do Nano é de 350 a 500mA. Quando você alimenta por Vin o total não pode exceder o máximo tolerado pelo regulador de +5V, porque o regulador de +3.3V está ligado em cascata com ele.  Quando você alimenta por uma fonte externa ligada ao terminal de +5V, o regulador interno de +5V fica inoperante e a corrente total máxima é definida pela corrente máxima da sua fonte externa ou pelo quanto as trilhas do Arduino podem suportar. O valor que for mais baixo.

No terminal de +5V, quando alimentado pela USB

De 350 a 500 mA – Mesmo que sua porta USB forneça mais que isso, existe uma limitação no circuito do Arduino. No caso do Arduino Nano um diodo Schottky MBR0520 previsto no esquema do Nano 3.0 e que pode ser encontrado identificado como “B2” determina o limite de 500mA .  Se seu Arduino Nano tem um diodo marcado “B4” pode ser um SS0540 ou MBR0540 que também suportam 500mA. Mas se estiver marcado “S4” (encontrado em clones chineses com chip serial CH340G), deve ser um SD103AWS, que somente suporta 350mA. Note que se você exceder a corrente máxima possivelmente vai fritar o diodo. Eu já fritei dois.

ArduinoNanoV3.0_BTE14-01_CH340_Fundo_DSC01513_700_automalabs.com.br

Arduino Nano 3.0 – Design BAITE, com chip serial CH340G e schottky de 350mA (componente marcado “S4” no canto superior direito)

ArduinoNanoV3.0_Generic2_CH340_Fundo_DSC01518_700_automalabs.com.br

Arduino Nano 3.0 – Design chinês genérico, com chip serial CH340G e schottky de 500mA (componente marcado “B2” à direita)

ArduinoNanoV3.0_Gravitech_Fundo_DSC01516_700_automalabs.com.br

Arduino Nano 3.0 – Design original Gravitech, com chip serial FTDI e schottky de 500mA (componente marcado “B4” no meio da placa)

No terminal de +5V, quando alimentado pelo terminal Vin

Depende do CI regulador que veio no seu modelo exato. Se for um AMS1117, o máximo é 1A, mas na prática isso pode ser menor porque depende do valor de Vin. Quanto mais alto esse valor, maior potência o regulador tem que dissipar e menor é a corrente limite.

No terminal de +3.3V, não importa por onde você alimente

Se o seu Nano tem um chip FTDI FT232RL, é o regulador interno dele que fornece isso e a máxima corrente que você pode drenar está definida no datasheet como meros 50mA. O FTDI usa isso como tensão de referência mas deixa explicito que você pode usar para alimentar algo, desde que não exceda esse limite.

Se no lugar do chip FT232RL existe um CH340G, o valor máximo é incerto, porque ao contrário da FTDI a WCH não colocou essa informação no datasheet. Mas é certamente um valor pequeno porque o pino 4 do CH340G também é definido como uma “referência” de 3.3V e por isso não tem a intenção de alimentar nada. Eu tive sucesso ao usar essa tensão de referência do CH340G para alimentar o CI HCF4050 da interface que criei para o ILI9341, mas não recomendo ficar abusando da sorte.

Módulo conversor DC-DC GW1584, baseado em MP1584

O grande diferencial deste módulo é ser minúsculo, podendo assim ser instalado em espaços realmente apertados. Você consegue tirar 2A dele mas precisa de apenas um décimo do volume ocupado por módulos como os baseados em LM25XX. Siga o link que acabei de indicar se precisar saber o básico sobre o propósito de um conversor DC-DC chaveado.
GW1584_DSC01444_350_automalabs.com.br

MP1584_datasheet_TypicalApplication_automalabs.com.br

O esquema do módulo é bem semelhante ao circuito de aplicação típica acima, mas não é igual. Na imagem abaixo eu identifiquei os componentes tomando como base o exemplo acima.

GW1584_DSC00874_320_bright_marks_automalabs.com.br

A tensão de saída é ajustada em P1 e se mantém constante mesmo variando a tensão de entrada. Eu acho preocupante a escolha de um trimpot comum, “monovolta”, para esse módulo, pois um uma leve variação no ponto de contato provocada por sujeira ou envelhecimento gera uma grande variação na tensão de saída. Acho os módulos que usam trimpot multivoltas mais seguros. Mas mais seguro ainda é trocar o trimpot por um resistor adequado, porém pode ser bastante difícil encontrar o valor certo.

  • D1 – Baseado na inscrição “SS34” é provavelmente um diodo schottky 1N5822, que suporta no máximo 3A. Mas fabricantes como a Vishay só se referem ao diodo como “SS34” mesmo.
  • U1 – MP1584
  • R2 – 8K2
  • R3, R4, R5 e R6 – 100K

Em relação ao circuito de aplicação típico mostrado no datasheet:

  • Não há nenhum capacitor eletrolítico (nem na entrada, nem na saída);
  • O indutor é de 4.7uH (marcado 4R7);
  • O resistor ligado a FB (R2) nesta placa é de 100K, o que dá segundo o datasheet uma freqüência de operação de aproximadamente 1MHz.

Eu fiz um teste simples para determinar quanta corrente o módulo realmente suporta. Coloquei 19V como tensão de entrada (uma fonte de notebook), ajustei para 5V e coloquei uma carga resistiva que drenava uma corrente de 2A. A temperatura medida no módulo com um termômetro digital infravermelho foi de 85 graus. Deixei assim por um bom tempo e não houve alteração. Essa é a temperatura máxima de operação recomendada pelo datasheet (a máxima absoluta é de 150 graus). Então não é recomendado exigir do módulo mais que 2A sem refrigeração. Entretanto, segundo o datasheet, o CI possui proteção térmica e desliga se a temperatura subir demais.