Índice:

Medidor de velocidade da Internet: 4 etapas (com imagens)
Medidor de velocidade da Internet: 4 etapas (com imagens)

Vídeo: Medidor de velocidade da Internet: 4 etapas (com imagens)

Vídeo: Medidor de velocidade da Internet: 4 etapas (com imagens)
Vídeo: Como criar sites RÁPIDOS? 4 TÉCNICAS para MELHORAR a velocidade do seu site (SEO) 2024, Novembro
Anonim
Image
Image
Medidor de velocidade da Internet
Medidor de velocidade da Internet
Medidor de velocidade da Internet
Medidor de velocidade da Internet

Visão geral

Este "Medidor de velocidade da Internet" fornecerá uma visão quase em tempo real do uso da rede. Essas informações estão disponíveis na interface da Web da maioria dos roteadores domésticos. No entanto, para acessá-lo, é necessário interromper sua tarefa atual para procurá-lo.

Eu queria visualizar essas informações sem ter que interromper minha tarefa atual, exibi-las em um formato que fosse compreensível com apenas um rápido olhar e obter as informações de uma forma que funcionasse com o maior número possível de roteadores, para que outros pudessem potencialmente usá-lo também.

Como faz as coisas

Decidi usar SNMP (Simple Network Management Protocol) como a forma de obter as informações do roteador. O SNMP é amplamente usado em equipamentos de rede e, se o seu dispositivo não o suportar por padrão, o DDWRT (firmware do roteador de código aberto) pode ser usado para implementar o SNMP.

Para exibir as informações de uma maneira fácil de entender, usei um medidor de um carro. Os medidores automotivos são projetados para fornecer informações sem distrair ou confundir, para que o motorista possa manter os olhos na estrada. Além disso, eu tinha alguns por aí.

Já que isso estaria na minha mesa, decidi que também faria a luz de fundo RGB porque os acessórios do computador deveriam ser RGB. Direito?

Desafios

Os medidores que eu tinha usavam um atuador Air-Core. Eu nunca tinha ouvido falar deles antes deste projeto.

Da Wikipedia: O medidor de núcleo de ar consiste em duas bobinas perpendiculares independentes em torno de uma câmara oca. Um eixo de agulha se projeta para dentro da câmara, onde um ímã permanente é afixado ao eixo. Quando a corrente flui pelas bobinas perpendiculares, seus campos magnéticos se sobrepõem e o ímã fica livre para se alinhar com os campos combinados.

Não consegui encontrar uma biblioteca para Arduino que suportasse SNMP na configuração do gerenciador. O SNMP tem duas formas principais, agente e gerenciador. Os agentes respondem à solicitação e os gerentes enviam a solicitação aos agentes. Consegui fazer com que a funcionalidade do gerenciador funcionasse modificando a biblioteca Arduino_SNMP criada por 0neblock. Eu nunca programei em C ++ além de fazer o LED piscar em um Arduino, então se houver problemas com a biblioteca SNMP, me avise e tentarei corrigi-los, mas agora está funcionando.

Além disso, o SNMP não foi projetado para visualização em tempo real. O uso pretendido é para rastrear estatísticas e detectar interrupções. Por causa disso, as informações no roteador só são atualizadas a cada 5 segundos (seu dispositivo pode variar). Essa é a causa do atraso entre o número do teste de velocidade e o movimento da agulha.

Etapa 1: Ferramentas e materiais

Ferramentas e Materiais
Ferramentas e Materiais
Ferramentas e Materiais
Ferramentas e Materiais
Ferramentas e Materiais
Ferramentas e Materiais
Ferramentas e Materiais
Ferramentas e Materiais
Projeto de Circuito
Projeto de Circuito

Precisaremos de 3 pontes H completas. Os modelos que usei são Dual TB6612FNG e Dual L298N.

Cada atuador Air-Core requer 2 pontes H completas porque as bobinas precisam ser controladas de forma independente.

Um dos medidores que estou usando tem uma bobina em curto com o terra com um diodo e resistor. Não tenho certeza da ciência por trás disso, mas fazer isso permite que ele gire cerca de 90 graus com apenas uma bobina alimentada.

Vou usar o regulador de 12v a 5v que faz parte da placa L298N que selecionei para alimentar o ESP32.

Todos os circuitos do LED são opcionais, assim como os conectores JST. Você poderia facilmente soldar os fios diretamente no ESP32 e no driver do motor.

Etapa 3: Design de código

Configuração de código

Precisaremos configurar o Arduino para poder usar a placa ESP32. Há um bom guia localizado aqui que o orientará na configuração do ESP32 Arduino.

Você também precisará da biblioteca Arduino_SNMP localizada aqui.

Para configurar o código, você precisará coletar algumas informações.

  1. IP do roteador
  2. Velocidade máxima de upload
  3. Velocidade máxima de download
  4. Seu nome de WiFi e senha
  5. OID que contém as contagens de octetos para "entrada" e "saída" na interface WAN de seus roteadores

Existem OIDs (Identificadores de Objeto) padrão para as informações que desejamos. De acordo com o padrão MIB-2, os números que desejamos são:

ifInOctets.1.3.6.1.2.1.2.2.1.16. X

ifOutOctets.1.3.6.1.2.1.2.2.1.10. X

Onde X é o número atribuído à interface de onde você deseja obter as estatísticas. Para mim, esse número é 3. Uma maneira de confirmar que este é o OID correto para você e de identificar qual número de interface você precisa usar é usar uma ferramenta como o navegador MIB.

Para obter velocidades máximas, usei o SpeedTest.net. depois de ter suas velocidades em Mbps, você precisará convertê-las em octetos usando esta fórmula.

Octetos por segundo = (Resultado do teste de velocidade em Mbps * 1048576) / 8

Função de Código

O código envia uma solicitação get SNMP ao roteador. O roteador então responde com um número, o número representa a contagem de octetos que foram enviados ou recebidos. Ao mesmo tempo, registramos o número de milissegundos que se passaram desde que o Arduino foi iniciado.

Uma vez que esse processo tenha acontecido pelo menos duas vezes, podemos calcular a porcentagem de uso com base em nossos valores máximos usando este código

percentDown = ((float) (byteDown - byteDownLast) / (float) (maxDown * ((millis () - timeLast) / 1000))) * 100;

A matemática se divide assim:

octetsDiff = snmp_result - Previous_ snmp_result

timeFrame = currentTime - timeLast

MaxPosableOverTime = (timeFrame * Octets_per_second) / 1000

Percent = (octetsDiff / MaxPosableOverTime) * 100

Agora que temos a porcentagem de uso da rede, só precisamos registrá-la no medidor. Fazemos isso em 2 etapas. Primeiro, usamos a função updateDownloadGauge. Nesta função, usamos “map” para converter a porcentagem em um número que representa uma posição em radianos no medidor. Em seguida, atribuímos esse número à função setMeterPosition para mover a agulha para a nova posição.

Etapa 4: Design do caso

Design de Caso
Design de Caso
Design de Caso
Design de Caso
Design de Caso
Design de Caso

Para conter tudo, projetei um gabinete no fusion360 e imprimi-lo em 3D. O design que fiz é relativamente simples. Usei cola quente para prender os componentes por dentro e o medidor é mantido no lugar sendo pressionado entre a capa frontal e a capa traseira. Você não precisa usar a impressão 3D para criar o caso. Por exemplo, você pode fazer uma caixa de madeira ou pode colocar tudo de volta na caixa original em que os medidores vieram.

Meus arquivos STL estão disponíveis no thingiverse se você quiser vê-los, mas é improvável que funcionem para você, a menos que você obtenha exatamente os mesmos medidores que usei.

Arquivos do caso:

Obrigado pela leitura. Entre em contato se tiver alguma dúvida e farei o possível para responder.

Recomendado: