Velocidade de transmissão Wi-Fi

System-On-Chip com Wi-Fi embutido, para aplicações IoT

Moderadores: 51, guest2003, Renie, gpenga

Velocidade de transmissão Wi-Fi

Mensagempor macnadbay » 15 Nov 2018 20:00

Escrevi um código na IDE do arduino para o esp8266. Basicamente ele transfere um arquivo de um cartão sd para um servidor FTP na rede. Porém a velocidade máxima de transmissão que consegui foi de 6kb/s. Alguém sabe o que poderia estar acontecendo? Não é limitação da rede, nem creio que seja velocidade de leitura do cartão sd. Alguém já passou por isso? Como resolver?


Enviado do meu iPhone usando Tapatalk
macnadbay
Bit
 
Mensagens: 7
Registrado em: 15 Nov 2018 19:49

Re: Velocidade de transmissão Wi-Fi

Mensagempor andre_luis » 15 Nov 2018 21:09

Do lado do hardware, apesar de voce ter postado na seção ESP8266, não está claro se quando voce menciona Arduino, se a CPU está numa plataforma AVR ou se está no proprio 'shield', o que seria esperado, caso contrário teria o gargalo da comunicação entre a placa principal e o 'modulo RF'. Outra coisa é saber se no lado do firmware como o mesmo foi implementado, transmitindo em blocos de que tamanho, que bibliotecas usou, etc...
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Velocidade de transmissão Wi-Fi

Mensagempor macnadbay » 15 Nov 2018 21:14

Hardware: placa wemos q vem com esp8266 12e
Plataforma avr
Estou colocando o sketch escrito na IDE do Arduino direto no esp
Biblioteca esp8266wifi
O código ler 1024 bytes do sd e envia os 1024 pela Wi-Fi, com client.write
Estava lendo aqui e será que preciso coloca o client.flush logo após cada .write ou colocar um yield() pra dah tempo pra Cpu processar os pacotes TCP?


Enviado do meu iPhone usando Tapatalk
macnadbay
Bit
 
Mensagens: 7
Registrado em: 15 Nov 2018 19:49

Re: Velocidade de transmissão Wi-Fi

Mensagempor andre_luis » 16 Nov 2018 11:31

Hardware: placa wemos q vem com esp8266 12e
Plataforma avr


Sem ver o código, só dá pra dar palpites ás escuras, mas vamos lá...Primeiro, voce não precisaria do AVR, pois a placa Wemos pode executar o Arduino dentro dela, gravando no SDcard, e assim voce eliminaria o gargalo de comunicacao entre o AVR e o ESP. Segundo, nessa comunicação entre o modulo e a CPU, estás usando Serial implementada por hardware ou por firmware ? Terceiro, que bibliotecas estao sendo usadas, e qual a estrutura do programa ? Tem algum delay inserido, ou while que possa causar travamento ? Tem printf ou qualquer outra coisa que despeje dados pela (outra) serial ? Dados esses enviados em bloco ?
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Velocidade de transmissão Wi-Fi

Mensagempor macnadbay » 16 Nov 2018 14:33

Primeiro-obrigado pela ajuda
Vou postar o código mais tarde aqui, mas me expressei mal. O código tá rodando dentro do esp já. Vou colocar resumo aqui pq to digitando do celular:

cpp code
While(file.available()){
If(millis()-timeprint > 2000){
Serial.println(#% do arquivo lido);
Timeprint=millis()
}
File.read(&buffer, 1024);
ClientWifi.write(buffer, 1024);
}


O código eh mais ou menos esse, só tem um if a mais pra gerenciar o final do arquivo sem dah erro na leitura pela quantidade de dados
Mais tarde mando print do código completo


Enviado do meu iPhone usando Tapatalk
macnadbay
Bit
 
Mensagens: 7
Registrado em: 15 Nov 2018 19:49

Re: Velocidade de transmissão Wi-Fi

Mensagempor macnadbay » 16 Nov 2018 18:36

cpp code
while (file_upload_name.available() && Transfer_ftp) {

if(millis() - time_check > 2000){
Serial.println("DOING FTP");
Serial.print("File % complete = ");
Serial.println(count * 100.0 / file_upload_name.size());
time_check = millis();
ESP.wdtFeed();
}

if(Serial.available()){
serial();
if(!Transfer_ftp)return false;
}

clientBuf[clientCount]= file_upload_name.read();
clientCount++;
count++;
//FtpClient.print(file_upload_name.read());
if (clientCount > (maxSize-1)) {
FtpClient.write((const uint8_t *) &clientBuf[0], maxSize); //envia pacotes de bytes pro servidor ftp
clientCount = 0;
delay(1);
}
}

if(clientCount > 0)FtpClient.write((const uint8_t *) &clientBuf[0], clientCount); //envia pacotes de 128 bytes pro servidor ftp

FtpClient.stop();
if (!eRcv()) {
wifiClient.println("QUIT");
return false;
}
//#ifdef DEBUG_WIFI
Serial.println("Arquivo(s) transferido(s)");
//#endif
file_upload_name.close();
//SD.remove(file_name_char);
}



Enviado do meu iPhone usando Tapatalk
macnadbay
Bit
 
Mensagens: 7
Registrado em: 15 Nov 2018 19:49

Re: Velocidade de transmissão Wi-Fi

Mensagempor tcpipchip » 16 Nov 2018 20:58

reescreve via TCP puro para comparar
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Velocidade de transmissão Wi-Fi

Mensagempor macnadbay » 16 Nov 2018 21:12

Pensei nisso, vou tentar


Enviado do meu iPhone usando Tapatalk
macnadbay
Bit
 
Mensagens: 7
Registrado em: 15 Nov 2018 19:49

Re: Velocidade de transmissão Wi-Fi

Mensagempor andre_luis » 20 Nov 2018 07:24

O que faz exatamente a função serial() na linha 12 acima ? Outra coisa, experimenta comentar o serial.print() já que essa é uma função que bloqueia a execução, e vê se isso causa algum efeito.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Velocidade de transmissão Wi-Fi

Mensagempor macnadbay » 20 Nov 2018 07:44

A função serial verifica se chegou dados pela serial que precisam ser tratados emergencialmente. Mas eu já fiz debug desse código e não é ela que deixa esse bloco lento. É a função .write da classe client mesmo. Comentando essa função .write esse código executa em torno de 1ms, sem comentar ele varia de 2ms até 300ms! Num único loop :-/.
Se alguém já enviou dados pra web pelo esp8266 e já mediu a velocidade de transmissão por favor coloca aqui a velocidade que conseguiu.


Enviado do meu iPhone usando Tapatalk
macnadbay
Bit
 
Mensagens: 7
Registrado em: 15 Nov 2018 19:49

Re: Velocidade de transmissão Wi-Fi

Mensagempor andre_luis » 20 Nov 2018 08:08

Admito que não entendi bem seu código, mas será que o problema não seria o fato de voce estar abrindo e fechando constantemente um socket Ftp a cada novo envio de blocos de bytes? Pelo final do trecho de programa acima parece estar enviando um stop ao final de cada pacote de 128 bytes...mas posso estar enganado.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Velocidade de transmissão Wi-Fi

Mensagempor macnadbay » 20 Nov 2018 09:51

Seguinte, o stop acontece no final do arquivo, pq tem varios arquivos para serem transferidos. Aí pra cada arquivo eu solicito uma porta no ftp e transmito, por causa do nome do arquivo. Não sei se poderia fazer diferente isso e transferir todos os arquivos em uma única porta do ftp, mas a lentidão se dah na transferência do arquivo em si, e não na mudança de porta. Consegui me fazer entender?
Um arquivo de 300kb tá demorando cerca de um minuto pra ser transferido dentro desse loop, mesmo sem as funções Serial.print.
E já testei a leitura do cartão sd, eh muito rápida comparada com a transmissão do esp8266. Já testei mandar pacotes de 1 byte, 64bytes, 1460 q eh o limite TCP (alguém confirma?) no esp8266. Mas sem mudanças na velocidade.


Enviado do meu iPhone usando Tapatalk
macnadbay
Bit
 
Mensagens: 7
Registrado em: 15 Nov 2018 19:49


Voltar para ESP8266/ESP32

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x