Página 1 de 1
Velocidade de transmissão Wi-Fi

Enviado:
15 Nov 2018 20:00
por macnadbay
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
Re: Velocidade de transmissão Wi-Fi

Enviado:
15 Nov 2018 21:09
por andre_luis
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...
Re: Velocidade de transmissão Wi-Fi

Enviado:
15 Nov 2018 21:14
por macnadbay
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
Re: Velocidade de transmissão Wi-Fi

Enviado:
16 Nov 2018 11:31
por andre_luis
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 ?
Re: Velocidade de transmissão Wi-Fi

Enviado:
16 Nov 2018 14:33
por macnadbay
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
Re: Velocidade de transmissão Wi-Fi

Enviado:
16 Nov 2018 18:36
por macnadbay
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
Re: Velocidade de transmissão Wi-Fi

Enviado:
16 Nov 2018 20:58
por tcpipchip
reescreve via TCP puro para comparar
Re: Velocidade de transmissão Wi-Fi

Enviado:
16 Nov 2018 21:12
por macnadbay
Pensei nisso, vou tentar
Enviado do meu iPhone usando Tapatalk
Re: Velocidade de transmissão Wi-Fi

Enviado:
20 Nov 2018 07:24
por andre_luis
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.
Re: Velocidade de transmissão Wi-Fi

Enviado:
20 Nov 2018 07:44
por macnadbay
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
Re: Velocidade de transmissão Wi-Fi

Enviado:
20 Nov 2018 08:08
por andre_luis
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.
Re: Velocidade de transmissão Wi-Fi

Enviado:
20 Nov 2018 09:51
por macnadbay
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