Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Como sempre me perguntei qual largura de banda é fornecida atualmente pelo meu ISP (eu uso um modem LTE para a conexão com a Internet), pensei em um sistema de monitoramento de largura de banda. Como o sistema deve ser compacto e econômico, escolhi um Raspberry Pi Zero como componente central. O Raspberry está conectado ao modem via WLAN, portanto, problemas de WLAN também podem ser detectados.
Suprimentos
- Raspberry Pi Zero WH
- Visor de tinta eletrônica Waveshare (módulo de papel eletrônico de 2,9 polegadas)
- Conversor DC-DC (por exemplo, DEBO DCDC 20W)
- LED RGB (retirado de um dispositivo antigo)
- Botão de apertar
- Trocar
- Módulo de relé (por exemplo, módulo de relé de 2 vias, módulo de relé de 2 vias)
- Conector macho + conector fêmea (ambos ajustando-se ao tamanho do plugue de alimentação do modem)
- Caixa impressa em 3D
Etapa 1: Recursos
- O Raspberry Pi Zero é conectado via WLAN, testa a velocidade de upload e download e executa uma medição de ping a cada meia hora. Uma versão de linha de comando de speedtest.net é usada como base para as medições.
- O resultado da largura de banda e da medição de ping é mostrado em um visor de tinta eletrônica. O tempo da medição também é mostrado.
- Se a velocidade de download cair abaixo de um valor limite definido, um relé desliga e liga o modem por um curto período. O modem é assim reiniciado sem qualquer modificação do dispositivo (apenas a alimentação é interrompida).
- Um botão na frente do dispositivo está disponível para acionar a medição da largura de banda manualmente.
- Os valores medidos são exibidos em um painel Ubidots (Portal IOT). Na visão geral, você também pode ver o histórico de tempo dos valores medidos e os motivos das últimas reinicializações.
- No Portal IOT, você também pode encontrar um botão para redefinir remotamente o modem.
- O monitor de largura de banda usa a fonte de alimentação do modem. Nenhum suprimento adicional necessário. O relais interrompe o encaminhamento da fonte de alimentação para o modem - o raspberry permanece ligado.
Etapa 2: Fiação
Na primeira foto você pode ver o design interno do monitor de largura de banda:
Os principais componentes são:
- Botão de apertar
- E-ink Display
- Raspberry Pi Zero
- Módulo de Relé
- LED RGB + resistores (dependendo do LED RGB que você usa)
- Trocar
- Conversor DC-DC
- Conector fêmea
A segunda imagem mostra um esquema da fiação. O pólo positivo da tensão de alimentação é alimentado por meio do interruptor para o conversor de tensão DC-DC (que converte a tensão de alimentação de 12 V do roteador em 5 V para o Raspberry) e por meio do relé (por meio do pino normalmente conectado) de volta para o conector de saída. Assim, o modem também é alimentado com energia quando o monitor de largura de banda é desligado.
A medição da largura de banda pode ser iniciada manualmente por meio de um botão. Um LED RGB é usado para visualizar os vários estados operacionais.
A conexão entre o Raspberry Pi e o visor de tinta eletrônica não é mostrada no diagrama de circuito. Conecte o display de acordo com a tabela e a pinagem acima.
Etapa 3: impressão 3D e construção da perseguição
As seguintes peças são necessárias para o caso (veja a imagem acima):
- parte inferior
- parte de cima
- frente
- de volta
- Montagem 4x
Todas as peças podem ser impressas sem suportes. Você também pode encontrar os arquivos e alguns de meus outros designs no Thingiverse:
A tela pode ser fixada no painel frontal com os suportes e uma fita dupla-face. O interruptor de botão e o conector feminino são aparafusados nos painéis traseiro e traseiro. Usei parafusos 3x20mm para conectar as duas metades da caixa. As tolerâncias nas ranhuras dos painéis dianteiro e traseiro são relativamente estreitas. Se necessário, os painéis dianteiro e traseiro devem ser lixados na borda (na parte interna para evitar a destruição da superfície).
Etapa 4: Configurando o Raspberry PI
Este guia de configuração é baseado na compilação de várias instruções de instalação de diferentes fontes (fabricantes de monitores e-Ink, …). Para mim, as instruções levaram ao resultado desejado. Como não sou um especialista em Linux, nenhuma otimização ou algo semelhante foi feito. Estou ciente de que certamente existem soluções melhores e mais eficientes.
Vamos supor que você já tenha o Raspbian instalado em seu Pi (há muitos tutoriais sobre como instalar o sistema operacional básico) e você tenha um monitor (via miniHDMI), mouse e teclado conectados. Uma conexão WLAN corretamente configurada com o roteador ou a Internet também é considerada. Salvo indicação em contrário, todos os procedimentos de instalação são executados no terminal.
Instale a área de trabalho remota (para acessar o PI de seu computador):
sudo apt-get update
sudo apt-get
instalar xrdp
ou você também pode trabalhar sem controle via ssh (consulte, por exemplo, Mudar senha:
www.raspberrypi.org/forums/viewtopic.php?t=193620
Instale o speedtest:
sudo
apt-get install python-pip
sudo pip install speedtest-cli
para testar se a instalação foi bem-sucedida, execute o Speedtest no terminal:
speedtest-cli
se tudo estiver correto, você deve obter algo como na primeira foto acima.
Instale wiringPI
sudo apt-get install git-core
git clone git: //git.drogon.net/wiringPi
cd wiringPi
./construir
(consulte também
Alternativ:
sudo apt-get install wiringpi
(consulte
Instale BCM2835
(consulte
Baixe bcm2835-1.60.tar.gz (ou uma versão mais recente, se disponível)
tar zxvf bcm2835-1.60.tar.gz
cd bcm2835-1,60
./configure
faço
sudo fazer verificação
sudo make install
Instale a biblioteca de imagens Python
sudo apt-get install python-imaging
Alternativ:
sudo apt-get install python-pil
Habilite a função I2C.
Execute o seguinte comando para configurar sua placa Raspberry Pi:
sudo raspi-config
Selecione Opções de interface-> I2C -> sim, para iniciar o driver principal I2C. Em seguida, você também precisa modificar o arquivo de configuração. Execute o seguinte comando para abrir o arquivo de configuração:
sudo nano / etc / modules
Adicione as duas linhas a seguir ao arquivo de configuração
i2c-bcm2708
i2c-dev
Veja também
Habilite a função SPI
Execute o seguinte comando para configurar sua placa Raspberry Pi:
sudo raspi-config
Selecione Opções de interface-> SPI -> sim, para iniciar o driver do núcleo SPI.
Instale fontes adicionais:
sudo apt-get install ttf-mscorefonts-installer
Baixe e instale fontes (Roboto + Droid)
gksudo
pcmanfm
Para iniciar o gerenciador de arquivos com privilégios de root e copiar fontes truetype para a pasta / usr / share / fonts / truetype
Alternativ:
Copie as fontes para a pasta Downloads com WinSCP (ssh deve estar habilitado para usar WinSCP)
sudo cp -r / home / pi / Downloads / droid / usr / share / fonts / truetype
sudo cp -r / home / pi / Downloads / roboto / usr / share / fonts / truetype
Você precisa de privilégios de root para acessar a pasta de fontes. Talvez haja maneiras melhores de fazer isso (como já mencionei, não sou um especialista em Linux), mas as duas funcionaram para mim.
Arquivos Python:
Use o gerenciador de arquivos para criar uma nova pasta "bandwidth_monitor"
Copie todos os arquivos para o diretório bandwidth_monitor
Tornar arquivos Python e scripts executáveis
chmod + x *.py
chmod + x speedtest-cron.sh
Configurar crontab
crontab -e
O Crontab é usado para agendar a execução do programa, por exemplo teste de velocidade a cada 30 min. Adicione as seguintes linhas ao seu crontab (veja também a segunda figura):
@reboot / usr / bin / python /home/pi/bandwidth_monitor/post_restart_message.py &
@reboot sleep 30 && / usr / bin / python /home/pi/bandwidth_monitor/poll_test_now_button.py * / 30 * * * * /home/pi/bandwidth_monitor/speedtest-cron.sh * / 3 * * * * / usr / bin / python /home/pi/bandwidth_monitor/poll_killswitch.py 13 03 * * * / usr / bin / python /home/pi/bandwidth_monitor/refresh_display.py
Descrição das tarefas agendadas:
- na reinicialização, a mensagem de reinicialização é gravada no painel IOT
- na reinicialização, a enquete test_now_button é iniciada
- a cada 30 minutos uma medição de largura de banda é realizada
- a cada 3 minutos, o status do botão de redefinição remota (no painel IOT) é verificado
- uma vez por dia, um ciclo de atualização da tela é iniciado.
Consulte a seção de software para uma breve descrição dos programas.
Etapa 5: Software
O software está dividido em vários arquivos / programas:
bandwidth_monitor_0_4.py é o programa principal que é invocado pelo Crontab a cada meia hora. Ele executa um teste de largura de banda (por meio da versão de linha de comando do speedtest.net). Durante o teste, o LED RGB fica azul. Se a largura de banda estiver acima do limite selecionado, o valor é mostrado no visor e-ink (junto com um carimbo de data / hora) e exportado para o painel Ubidots. Se a largura de banda estiver abaixo do limite, o LED fica vermelho e a medição é repetida após um pequeno atraso. Após 3 tentativas negativas, o relé é ativado e, portanto, a alimentação do modem é interrompida. O código de redefinição (valor = 2) é gravado na seção de log.
poll_killswitch.py lê o status de uma variável booleana no painel. Se killswitch_state for true, o relais é ativado e o fornecimento de energia do modem é interrompido. O LED RGB fica verde durante a pesquisa do killswitch. Após a redefinição, o killswitch_state é definido como falso e uma entrada na seção de log do painel é gerada (valor = 1).
poll_test_now_button.py está esperando que o botão no painel frontal do gabinete seja pressionado. Ao ativar o botão, uma medição de largura de banda é disparada manualmente. Quando o programa é iniciado (na reinicialização do Raspberry Pi), o LED RGB está piscando em vermelho.
post_restart_message.py grava o código de redefinição (valor = 3) na seção de log do painel. Isso indica que o monitor de largura de banda foi reiniciado. Durante o início do programa, o LED RGB pisca em azul.
test_LED.py e test_relay.py são scripts simples que podem ser usados para testar a função de hardware do LED RGB e do relé.
epdconfig.py e epd2in9.py são drivers de dispositivo para a tela e-ink fornecida pelo Waveshare.
Para permitir que os programas acessem o painel do Ubidots, você deve adicionar seus tokens individuais e nomes de dispositivos ou variáveis (se você usar notações diferentes). Pesquise a seção como a mostrada na imagem acima (substitua XXXXXXXX pelo seu token).
Tutoriais abrangentes sobre como construir o painel e como integrá-lo a um programa Python podem ser encontrados diretamente na página Ubidots (https://help.ubidots.com/en/) ou via Google.
Etapa 6: Painel IOT
O painel hospedado pela Ubidots (consulte https://ubidots.com) contém várias áreas que são descritas resumidamente a seguir.
- Sequência de tempo de velocidade de upload e download. A cada meia hora, um novo valor é inserido no diagrama.
- Curso de tempo do tempo de ping medido. A cada meia hora, um novo valor é inserido no diagrama.
- Sequência de tempo da velocidade média de download. O valor médio em 24 horas é calculado e gravado no diagrama.
- Representação em planilha dos valores de medição atuais, incluindo registro de data e hora.
- Botão de controle remoto para reinicializar o modem via Internet. A consulta ocorre a cada 3 minutos, ou seja, pode levar algum tempo até que a ação seja realizada.
- Registro das últimas reinicializações, incluindo o motivo da reinicialização (acionamento remoto, desligamento ou perda de tensão, queda abaixo da largura de banda mínima)
Tutoriais abrangentes sobre como construir o painel e como integrá-lo a um programa Python podem ser encontrados diretamente na página Ubidots (https://help.ubidots.com/en/) ou via Google.