Boa noite pessoal!

Peço socorro! Hehe não tenho mais nenhum alternativa que eu saiba para um problema que talvez seja comum. 

Atualmente estou usando um ESP32, preciso fazer leituras do sensor de temperatura DS18b20, consigo fazer as leituras usando as lib da Dallas (DallasTemperature) e uso o protocolo 1-wire.

Funciona praticamente 100% usando o cabo original que tem em torno de 1 metro de comprimento, no entanto preciso levar esse sensor ha uns 40m, usei um cabo LAN CFTV e os resultados foram péssimos, tenho como retorno quando requisito as temperaturas valor como -127.00 ºC ou 85.00 ºC e raramente valores que não são os reais como por exemplo uns 20 graus a mais da temperatura real.

Então decidi usar o CAT5 Blindado, já que esse cabo deve passar junto e/ou próximo a fios elétricos, usando esse cabo eu tive uma pequena melhora mas não resolveu, ainda recebo muuuitos erros ao ler as temperaturas. Esse cabo blindado estou usando da seguinte forma:

Pares verdes para o fio de dados; Pares azuis para o neutro; Pares marrom para o fase (3.3v); a blindagem capa metálica está devidamente aterrada.

Como pull-up estou usando um resistor 4k7 que fica ao lado do ESP. Já testei usando o resistor próximo ao DS18b20 e o resultado foi o mesmo.

Eu acredito que seja interferência da rede elétrica, ou impedância do cabo mas não faço a mínima ideia de como melhoras essas leituras. 

Alguém já passou por essa situação ou possui alguma ideia de como resolver, algum tipo de filtro talvez?

EDIT:

Conclusão, pessoal, acabei de testar com 43 unidades ESP32.

Para realizar as leituras do sensor ds18b20 enquanto a wifi do ESP está ativa é necessário que a rotina de leitura esteja sendo executada no Core1 do ESP.

Sendo assim, nas 43 unidades testadas, TODAS tem leitura livre de erros quando executadas no Core1.

Quando as leituras ocorrem no Core0, ao usar a wifi, o ESP consegue ler o sensor somente as vezes. 

Dispenso a ideia de ter vindo um lote de ESP com problema, pois meus ESP's foram adquiridos de diferentes estados/locais.

Em outros fórum este problema já foi relatado e resolvido da mesma maneira, então deixo aqui a conclusão para quem busca um resultado rápido, talvez não seja a melhor forma mas resolveu.

Se alguém tiver outra sugestão, estou disposto a testar.

Um grande abraço, e obrigado à todos pelas sugestões!

Exibições: 347

Responder esta

Respostas a este tópico

Boa tarde Elcids, tudo bem?

Fiz conforme suas anotações, com exceção dos diodos o resto eu usei todos os mesmos itens de seu esquema e nos diodos eu usei então o (4148) que é o que eu tinha por aqui... Segui o mesmo padrão de cores do cabo que foram apontados por você, e usei um cabo cat5 de uns 5 metros. 

O resultado foi que eu tenho exatamente os mesmo problemas, o código pode ser visto aqui: https://pastebin.com/QS80WiMt, para biblioteca estou usando a DallasTemperature disponível na própria IDE do Arduino, como você pode ver, no código estou atrelando a tarefa de leitura em apenas um núcleo que só faz isso, então não é um problema para mim se ela "travar" o código ali durante a leitura porque não tem nada mais pra fazer, sendo assim acredito que o método assíncrono não teria diferença nesse caso.

Como resultado, o ESP faz as leituras normais enquanto você não esteja conectado na wifi, e ao conectar começam os problemas de leitura. Os problemas ocorrem mesmo usando todo esse esquema proposto por você e também ocorrem utilizando apenas um único resistor de pull-up.


Como visto na imagem acima, se não houver conexão com o roteador, as leituras são excelentes, sem erros.

Agora veja a próxima imagem:

Assim que o ESP se conecta ao roteador tenho muitos erros, retorna o valor de temperatura lido como -127.00.

Realmente não sei o que fazer mais, esses erros aparecem mesmo ao utilizar 1 metro de cabo como se eu utilizar 10 metros de cabo.
Outro colega aqui do fórum suspeitou da alimentação, mas ja usei fontes externas, usei o VIN alimentando com uma fonte de 5V por uns 10A ou mais. Usei também direto, alimentando o ESP no 3.3v com uma fonte ATX de 3.3v por uns 20A, e da mesma forma o problema ocorre sempre após se conectar na wifi. Assim elimino a falta de energia ao ESP.

Alguma sugestão a mais que eu possa tentar?

OBS.: Quando eu compro um lote de ESP, uma boa quantia funciona bem, outra quantia ocorre esse problema. Existe ESP32 falso (pago aproximadamente 35 reais por ESP)? Quem sabe, sei lá, esse seria o problema? A qualidade de produção do ESP? Não tenho ideia. Tenho aqui uns 30 ESP com esse problema de leitura, funcionam bem nas demais tarefas.

olá Mateus.

      Que bom que vc fez os testes com o Hardware proposto no post anterior.

      Se possível mantenha o Hardware daquela forma, pois é uma técnica adequada para a conexão a longas distâncias (com filtro de sinal  e proteção contra spikes de tensão  em ambas as pontas do cabo).

      Sobre o resultado ainda não positivo,  sim ainda há coisas que podem ser feitas. Mas desta forma que estamos nos comunicando, me parece que resta apenas uma alternativa. Para isso, vou analisar o código que vc postou, e irei aplicar esta técnica nele, e então irei postar o código modificado aqui para vc testar. Minha opinião:  há grandes chances dos resultados serem positivos com a mudança que irei propor no código. Então mantenha a confiança.

      Postarei assim que possível.

      Abrçs,

      Elcids

Bom dia Elcids,

Que bom que você ainda tem sugestões, eu realmente esgotei todas.

Enquanto você tenta bolar algo, vou tentar ir trocando o sensor de porta no ESP pra ver se ajuda, mas acredito que não fará diferença, mas é o que me resta!

Estou no aguardo de novas atualizações, por enquanto, muuuuuito obrigado!

Ótimo final de semana à todos!

Bom dia Matheus,

Se você já tentou de tudo, seguiu as recomendações do fabricante e ainda persistem os problemas de comunicação, tenho mais uma sugestão! 

Desligue o WIFI e o Bluetooth do ESP32 e faça seus testes.

Será que a radiofrequencia estará interferindo na sua montagem? 

Existe essa possibilidade. 

https://github.com/espressif/arduino-esp32/issues/1077

https://www.esp32.com/viewtopic.php?t=13275

Recomendo a leitura desse projeto:

https://randomnerdtutorials.com/esp32-plot-readings-charts-multiple/

Faça essa montagem, teste e nos informe o resultado. 

Bom dia José,

então nesse caso, como no código por mim feito, se eu não uso a wifi as leituras do sensor são perfeitas e sem erros...

O problema só ocorre quando eu uso a wifi.

Se há essa possibilidade de interferência, há como resolver? 

OBS.: Alguns ESP's não tem esse problema, posso usar a WIFI e não me causam erros nas leituras. Mas outros ESP's, ao usar a WIFI me causam erros nas leituras.

Caraca, matei a cobra! 

Todos os módulos são ESP32? Todos são do mesmo modelo?

Use um Gerenciador de WIFI para identificar os canais de WIFI usados. Talvez tenha relação com o canal de WIFI. 

WIFI Analyzer: 

https://play.google.com/store/search?q=wifi%20analyzer

Todos eles são ESP32, alguns estão escritos embaixo DEVKITV1 outros ESP32S. Mas todos são iguais em questão de pinos, a foto eu tirei agora, são novinhos só usei uma única vez pra testar, no entanto José, aqui no meu ambiente muitos funcionam direitinho as leituras, outros não funcionam, se seria interferência dos roteadores todos deveriam dar problema pois o ambiente físico é o mesmo, certo? OBS.: Testo todos os ESP's com o mesmo sensor e no mesmo lugar.

Sobre as wifi, segue o print das redes aqui, lembrando que estou no mesmo lugar onde testo os ESP32.

José, trago noticias bombásticas! 

Montei o esquema do seu post em randomnerd... Adivinha? Tudo funcionou perfeitamente, sem erro de leitura nenhum. Só fiz pequenas alterações, usei um resistor de pull-up de 5k (2x10k em paralelo que é o que eu tinha bem disposto na mesa kkk) e alterei a porta do seu código pra ler os sensores na GPIO15 (mesma do meu código que lê errado, você usa a porta 4).

Tudo funcionando perfeitamente sem erros...

Detalhe, não baixei nenhuma biblioteca do seu post, porque tenho todas elas e são as mesmas que uso.

Nesse caso, qual é o problema do meu código meu deusssss? Aqui no seu você lê os sensores por endereço, eu leio por índice, como só uso um sensor então uso "sensors.getTempCByIndex(0);". Também estou atrelando as tarefas a núcleos específicos, seria esse o problema será? Vou testar não atrelando elas....

Boa tarde,

"Como pull-up estou usando um resistor 4k7 que fica ao lado do ESP. Já testei usando o resistor próximo ao DS18b20 e o resultado foi o mesmo."

Quer dizer que o problema está no seu código? Seus comentários estão confusos. 

Boa tarde José,

Com relação ao pull-up, quis dizer que já usei várias configurações e valores e todas visivelmente tem o mesmo efeito.

Ao que vejo o problema pode estar no código em função do atrelamento de tarefas (não sei o porque) mas pelos testes é isso. Se eu fazer o Core0 ler o sensor ai da problema, se eu fazer o Core1 ler o sensor então não ocorre problema. Conforme respondi ao Elcids, lá estão alguns print's dos resultados.

Mateus, 

O projeto do Random Nerds usa o Core 0 e você informou que funcionou. 

Está confuso isso...

Oi José,

Olha, eu fui ver agora que disse, simplesmente só adicionei o print ali no método que faz a leitura pra ver em qual core estava sendo executado e retorna no core 1.

Outra coisa interessante, é que pesquisando agora, há outras pessoas com esse mesmo problema: Link1    Link2

Outro ponto interessante é que o mesmo também resolveu mudando a task de leitura do sensor para o Core1.

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço