Teste taxas de upload e download com a Raspberry Pi Zero W 2

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:

Como testar taxas de upload e download

Em resumo, a qualidade da conectividade à Internet pode ser medida em três fatores:

  1. Downtime: tempo o qual a conectividade à Internet fica inativa em um determinado período
  2. Taxa de download: taxa de quantos Mbit de informação podem ser baixadas por segundo
  3. 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.

 

circuito para testar taxas de upload e download
Figura 1 – circuito esquemático do projeto

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.

Faça seu comentário

Acesse sua conta e participe

2 Comentários

  1. Bom dia.
    Tem como fazer esse projeto com Arduino ?.
    Eu sou iniciante e ainda não estou bem habituado.
    Obrigado.
    Fabiano Antunes

    1. 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.