A conectividade à Internet tornou-se atualmente muito importante para qualquer residência ou empresa, sendo algo até mesmo comparável a se ter energia elétrica ou serviço de abastecimento de água. Sendo assim, testar e monitorar a qualidade da conectividade à Internet torna-se algo muito importante ou até mesmo decisivo para a troca de um plano ou operadora de Internet. Este post irá tratar de um projeto rápido, porém muito útil: como utilizar a Raspberry Pi Zero W para testar taxas de upload e download de sua conexão à Internet.
Material necessário
Para fazer este projeto, você precisará de:
- Uma placa Raspberry Pi Zero W ou Raspberry Pi Zero 2 W com um cartão microSD de 16GB ou mais de capacidade (preferencialmente, de classe 10)
É necessário que a Raspberry esteja com pin headers soldados e também totalmente operacional (Raspbian instalado, conectividade à Internet operacional e acesso local e/ou via SSH a placa). - Uma Fonte DC Chaveada 5V 2A Micro USB
- Um display OLED I²C 0.96″ (da cor de sua preferência)
- Um conjunto de jumpers fêmea-fêmea
Como testar taxas de upload e download
Em resumo, a qualidade da conectividade à Internet pode ser medida em três fatores:
- Downtime: tempo o qual a conectividade à Internet fica inativa em um determinado período
- Taxa de download: taxa de quantos Mbit de informação podem ser baixadas por segundo
- Taxa de upload: taxa de quantos Mbit de informação podem ser transferidas a um computador remoto/servidor remoto por segundo
Portanto, em resumo, a qualidade da conectividade à Internet é tão maior quanto maior for sua disponibilidade e velocidade (tanto para download quanto upload). Cada uso/aplicação necessita de uma disponibilidade e taxas de upload e download, logo diz-se que a qualidade de uma conectividade à Internet é satisfatória/boa quando os três fatores atendem os requisitos de uso da Internet do uso/aplicação em questão. Neste post, será mostrado como a medição das taxas de upload e download.
Aos que tiverem curiosidade sobre a medição da parte de Downtime, já temos um projeto no blog para fazer tal diagnóstico / medição.
Como fazer as medições das taxas de upload e download na Raspberry Pi Zero W?
Há uma ferramenta própria para tal: speedtest-cli. Tal ferramenta permite realizar, via linha de comando (cli: command line interface), tais medições. Este projeto faz uso desta ferramenta, logo para fazer sua instalação, utilize os comandos abaixo. O primeiro instala o PIP (caso você ainda não o tenha) e, o segundo, instala a ferramenta propriamente dita.
sudo apt-get install python-pip sudo pip install speedtest-cli
Para testar a ferramenta basta utilizar o seguinte comando:
speedtest-cli --simple
O comando deve produzir um output similar ao mostrado abaixo, informando o tempo médio de ping, taxa de download e taxa de upload.
Ping: 56.178 ms
Download: 20.20 Mbit/s
Upload: 5.50 Mbit/s
O projeto deste post fará uso do output deste comando.
Circuito esquemático
O circuito esquemático do projeto pode ser visto na figura 1.
Preparação para o projeto: display OLED
Este projeto faz uso do display OLED para exibição das taxas de download e upload mensuradas. Dessa forma, para preparar a Raspberry Pi Zero W para comunicar-se com o display OLED I²C, por favor siga as instruções deste e deste projetos aqui do blog.
Código-fonte do projeto
Abaixo está o código-fonte do projeto, feito na linguagem Python. As medições serão feitas continuamente, e os resultados serão escritos no display OLED.
Copie o código-fonte e salve-o no home de sua Raspberry Pi Zero W com o nome de speedtest_oled.py.
IMPORTANTE: para exibição de informações no display OLED, será utilizada a mesma fonte TTF deste projeto do blog. Logo, a fonte TTF deve ser colocada na mesma pasta do código-fonte.
import time import Adafruit_SSD1306 import Image import ImageDraw import ImageFont import subprocess import re #Variaveis globais # Raspberry Pi - configuracao dos pinos: RST = 24 #embora nao utilizado de fato, eh preciso defini-lo para a biblioteca funcionar # Configura uso do display OLED de 128x64 (comunicacao I2C) disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) #variaveis globais para armazenar taxas de upload e download taxa_download = "" taxa_upload = "" #Funcao: escreve uma informacao (e seu titulo / classificacao) no display OLED #Parametros: Informacao e seu titulo e informacoes do display #Retorno: nenhum def EscreveInformacaoDisplayOLED(TituloInformacao,Informacao,draw,width,height): global image #desenha um retangulo preto em todo o display (garante que o display sera apagado) draw.rectangle((0,0,width,height), outline=0, fill=0) #Fonte do titulo: fonte ttf que simula display 7 segmentos, com tamanho 8 font_titulo = ImageFont.truetype('advanced_pixel_lcd-7.ttf', 8) #Fonte da informacao: fonte ttf que simula display 7 segmentos, com tamanho 12 font_info = ImageFont.truetype('advanced_pixel_lcd-7.ttf', 12) #escreve titulo da informacao e informacao top = 10 draw.text((0, top), TituloInformacao, font=font_titulo, fill=255) draw.text((0, top+20), Informacao, font=font_info, fill=255) #atualiza buffer do display com informacoes a serem escritas disp.image(image) disp.display() return #Funcao: faz a medicao das taxas de download e upload #Parametros: nenhum #Retorno: nenhum (as medicoes sao armazenadas em variaveis globais) def MedeTaxaDownloadUpload(): global taxa_download global taxa_upload response_speedtest = subprocess.Popen('speedtest-cli --simple', shell=True, stdout=subprocess.PIPE).stdout.read() taxa_download = str(re.findall('Download:\s(.*?)\s', response_speedtest, re.MULTILINE)[0])+"\n\nMbits/s" taxa_upload = str(re.findall('Upload:\s(.*?)\s', response_speedtest, re.MULTILINE)[0])+"\n\nMbits/s" return #------------------------------------------------------ # PROGRAMA PRINCIPAL Display Oled com Raspberry Pi #------------------------------------------------------ #Inicializa biblioteca de comunicacao com display e o limpa disp.begin() disp.clear() disp.display() #obtem altura e largura totais do display width = disp.width height = disp.height #Preparacoes necessarias para apagar e desenhar na tela image = Image.new('1', (width, height)) #imagem binaria (somente 1's e 0's) draw = ImageDraw.Draw(image) #laco principal while True: #Faz medicoes das taxas de upload e download EscreveInformacaoDisplayOLED("Aguarde","Medindo..",draw,width,height) MedeTaxaDownloadUpload() #Mostra a taxa de upload por 10 segundos EscreveInformacaoDisplayOLED("Upload",taxa_upload,draw,width,height) time.sleep(10) #Mostra a taxa de upload por 10 segundos EscreveInformacaoDisplayOLED("Download",taxa_download,draw,width,height) time.sleep(10)
Para executar o projeto, utilize o comando abaixo:
sudo python speedtest_oled.py
Projeto em ação!
Veja abaixo uma foto do projeto em ação!
Gostou deste post sobre como testar as taxas de upload e download de sua conexão à Internet com a Raspberry Pi Zero W? Deixe seu comentário logo abaixo.
É possível mostrar esses valores de upload e download de forma gráfica como no speed test e atualizando de tempos em tempos
Olá Cleber.
Favor entrar em contato conosco no [email protected].
Att.
Vitor Mattos.
Suporte Técnico MakerHero.
Bom dia.
Tem como fazer esse projeto com Arduino ?.
Eu sou iniciante e ainda não estou bem habituado.
Obrigado.
Fabiano Antunes
Fabiano, infelizmente nunca fiz um projeto desse tipo com Arduino (que utiliza um shield para internet cabeada ou wi-fi). Porém, acredito ser possível.