FAVORITAR
FecharPlease login

Maximizando a velocidade do Wi-Fi: Sintonizando o Zephyr para Máximo Desempenho com os SoCs ESP32 em Aplicações IoT

Uma necessidade comum a todos os desenvolvedores de aplicações baseadas no Zephyr OS é mensurar o desempenho alcançado por uma determinada configuração nos parâmetros do stack de rede WiFi. Este artigo tem por objetivo demonstrar como instalar, configurar e utilizar as ferramentas zperf e iperf para quantificar este desempenho.

Ambiente de Testes

Para avaliar o desempenho da comunicação, um setup composto por uma placa de desenvolvimento esp32-s3_devkitc, um roteador Wi-Fi doméstico um computador com Linux rodando Ubuntu 22.04 foi utilizado.

Para facilitar a geração e consumo de pacotes na rede Wi-Fi, nós utilizamos a ferramenta iperf no lado do computador. Já na placa de desenvolvimento esp32-s3_devkitc nós utilizamos a aplicação zperf, quem vem na configuração padrão do Zephyr. Uma abordagem de teste estruturado permitiu analisar sistematicamente o impacto dos ajustes feitos nos parâmetros do stack de rede WiFi do Zephyr em vários cenários reais:

ESP32 Enviando Pacotes UDP para o PC:

PC Enviando Pacotes UDP para o ESP32:

ESP32 Enviando Pacotes TCP para o PC:

PC Enviando Pacotes TCP para o ESP32:

Instalando o iperf no PC

Em um terminal, execute o seguinte comando:

Observe que são necessárias credenciais de administrador para completar a instalação de forma bem-sucedida.

Instalando o Zephyr OS

Para instalar o Zephyr OS e suas dependências, siga passo a passo as seguintes instruções:

Instalando as Dependências:

Em um terminal, execute o seguinte comando:

Instalando o West:

Para instalar o script Python o sistema de build do Zephyr OS, e execute o seguinte comando:

Inicializando o Zephyr:

Agora, inicialize o Zephyr no seu computador executando os seguintes comandos:

Instalando a Dependências Python:

Depois de inicializar o Zephyr, instale as dependências Python adicionais executando:

Download e Instalação do Zephyr SDK:

Para cross-compilar o zperf, download e instale o Zephyr SDK executando os seguintes comandos:

 Instalando os blobs da Espressif:

Para compilar sua aplicação Wi-Fi para o ESP32-S3 com o Zephyr, instale os blobs da hal_espressif:

Instalando as Regras do udev:

Adicionalmente, instale as regras do udev para possibilitar a gravação do ESP32-S3 como um usuário comum:

Fazendo o zperf Funcionar no ESP32-S3_DevKitC-1

Para possibilitar a compilação do zperf no ESP32-S3_DevKitC-1, siga estes passos para alterar os arquivos necessários:

Crie o Arquivo de Overlay:

Crie o arquivo zephyr/samples/net/zperf/boards/esp32s3_devkitc.overlay com o seguinte conteúdo:

Atualize o Arquivo prj.conf : 

Modique o conteúdo do arquivo zephyr/samples/net/zperf/prj.conf para conter as seguintes configurações:

Não se esqueça de substituir <STATION IP ADDRESS> e <GATEWAY IP ADDRESS> pelos endereções de IP de acordo com a sua rede Wi-Fi. 

Compile e grave o zperf:

Depois de cada notificação feita no arquivo zephyr/samples/net/zperf/prj.conf com o propósito de ajustar os valores dos parâmetros de configuração, recompile o zperf e grave o firmware na placa ESP32-S3_DevKitC-1 antes de iniciar a sequência de testes executando os seguintes comandos:

Assegure-se de que o ESP32-S3_DevKitC-1 está conectar a uma porta USB do seu computador durante o processo de gravação do firmware.

Rodando os Testes

Antes de começar uma sequência de testes, lembre-se sempre de compilar e gravar o zperf no ESP32-S3_DevKitC-1:

Depois de executas esses comandos, você estará na interface de linha de comando do zperf. Siga os passos que seguem para conectar o ESP32-S3_DevKitC-1 ao roteador Wi-Fi:

Resultado da execução do comando anterior:

Em seguida, abra um segundo terminal onde você executará o iperf.

ESP32 Enviando Pacotes UDP para o Computador:

No terminal do iperf, digite:

No terminal do zperf, digite:

Computador Enviando Pacotes UDP para o ESP32:

No terminal do zperf, digite:

No terminal do iperf, digite:

ESP32 Enviando Pacotes TCP para o PC:

No terminal do iperf, digite:

No terminal do zperf, digite:

PC Enviando Pacotes TCP para o ESP32:

No terminal do zperf, digite:

No terminal do iperf, digite:

Resultados

Para ilustrar o impacto tangível do ajuste dos parâmetros de rede na velocidade da comunicação Wi-Fi do ESP32-S3 Wi-Fi, foram conduzidas uma série de testes, sempre modificando o valor do parâmetro CONFIG_NET_TCP_MAX_RECV_WINDOW_SIZE. Os resultados demostram a evolução do desempenho antes e depois de cada mudança neste parâmetro:

Configuração Inicial: 

CONFIG_NET_TCP_MAX_RECV_WINDOW_SIZE comentado.

DEVICEPROTOCOL ROLEDIRECTIONRATE

ESP32-S3
UDPSERVERDOWNLOAD10.05 Mbps
CLIENTUPLOAD4.78 Mbps
TCPSERVERDOWNLOAD2.83 Mbps
CLIENTUPLOAD4.22 Mbps

1a Modificação na Configuração (Incremento no Tamanho da Janela): 

CONFIG_NET_TCP_MAX_RECV_WINDOW_SIZE=20000

DEVICEPROTOCOL ROLEDIRECTIONRATE

ESP32-S3
UDPSERVERDOWNLOAD10.05 Mbps
CLIENTUPLOAD4.78 Mbps
TCPSERVERDOWNLOAD3.62 Mbps
CLIENTUPLOAD4.22 Mbps

2a Modificação na Configuração (Incremento no Tamanho da Janela): 

 CONFIG_NET_TCP_MAX_RECV_WINDOW_SIZE=50000

DEVICEPROTOCOL ROLEDIRECTIONRATE

ESP32-S3
UDPSERVERDOWNLOAD10.05 Mbps
CLIENTUPLOAD4.78 Mbps
TCPSERVERDOWNLOAD4.07 Mbps
CLIENTUPLOAD4.22 Mbps

Gráfico comparativo dos resultados obtidos:

Estes resultados demostram claramente a relação direta entre os valores dos parâmetros e a taxa de transferência de dados na rede Wi-Fi utilizando o ESP32-S3. Os desenvolvedores podem utilizar esta informação para promover um ajuste fino em suas aplicações de forma a obter um desempenho ótimo em diversos cenários de comunicação. Pode-se então ajustar os parâmetros de acordo com requisitos e condições específicas a fim de alcançar o objetivo almejado.

Conclusão

O problema de medir a evolução do desempenho da velocidade de comunicação em resposta às mudanças efetuadas nos valores dos parâmetros de configuração do stack de rede Wi-Fi do Zephyr OS utilizando a placa de desenvolvimento ESP32-S3_devkitM  foi apresentado. Por meio da instalação, configuração e utilização das ferramentas iperf e zperf, e seguindo o procedimento descrito nesse artigo, foi possível observar de forma tangível a evolução do desempenho na medida em que os valores dos parâmetros de configuração eram modificados.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Home » Internet Das Coisas » Maximizando a velocidade do Wi-Fi: Sintonizando o Zephyr para Máximo Desempenho com os SoCs ESP32 em Aplicações IoT

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS