Pessoal, tenho um chip QMC5883L (clone Chinês) do HMC5883 pelo que andei pesquisando.
O clone tem endereço 0x0d Quando rodo um programa i2c scan no Arduino, ele encontra o endereço, e consigo usar esse chip na placa do Arduino com a biblioteca QMC5883LCompass.h
O que não tenho conseguido de forma alguma é achar esse chip em uma ESP32 com o i2c scan, ou mesmo utilizar a biblioteca QMC5883LCompass.h com a placa ESP32.
Alguém já passou por esse problema.
Tags:
Olá, Mateus !
Não tenho experiência com o ESP32, mas a maioria dos problemas que enfrentei com I2C referem-se à ausência ou inadequação dos resistores de pullup necessários a este tipo de barramento.
Talvez a biblioteca wire, quando usada com o UNO ou Nano, por exemplo, ative os pullups internos destes micros, tornando desnecessários os pullups externos.
Quem sabe o ESP32 não disponha do recurso de pullups internos e, neste caso, devam ser acrescentados externamente?
O minerin RV que tem um grande conhecimento, entre outras coisas, do ESP32, e que está online agora, talvez possa esclarecer melhor esta questão, já que, como disse, não conheço o ESP.
Sucesso!
D. T. Ribeiro.
Olá, Mateus!
Verificou se a interface I2C do display tem os pullups?
D. T. Ribeiro.
Eu não tenho certeza, mas acredito que os dois módulos possuem os pullups:
A bússola é essa
https://pt.aliexpress.com/item/32683701249.html?spm=a2g0o.order_lis...
E o display é esse:
https://pt.aliexpress.com/item/4001028369082.html?spm=a2g0o.order_l...
Instalei a python na ESP e tem o mesmo comportamento, só encontra o display. Já o Arduino acha os dois sem problemas.
Bom dia,
você diz:
"Pessoal, tenho um chip QMC5883L"
Você tem o chip ou um modulo com o chip?
Se for o modulo, poste uma foto ou link dele.
Se for modulo, quando usando com ESP32, com que voltagem vc está alimentando o modulo.
RV mineirin
Estou alimentando com 5v -
https://pt.aliexpress.com/item/32683701249.html?spm=a2g0o.order_lis...
Olá, Mateus!
Achei um link com um esquema de display OLED I2C, que talvez seja o mesmo do que você está usando.
No esquema aparecem os pullups da I2C. Veja o LINK -> http://wiki.sunfounder.cc/index.php?title=File:Rer.png
Por que você não tenta colocar os pullups ( ≈ 10 kΩ ) no circuito com a bússola. Se for este o problema, está resolvido. Se não adiantar, aí teremos de esperar que o minerim resolva! :-)
Saudações!
D. T. Ribeiro.
Olá.
Sempre que eu vi problemas assim foi questão de fiação/pullup, endereço, etc.
Mas, estava vendo a outra possiblidade, que seria a velocidade.
Veja em:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-ref...
Fala que a velocidade maxima do i2c é de 4MHz.
Ela é configurável pelo comando: i2c_config_t()
Do outro lado tem o:
https://datasheet.lcsc.com/szlcsc/QST-QMC5883L-TR_C192585.pdf
Em que na pagina 14, Tabela 9, fala que o clock maximo é 400KHz.
Deve ser isso.
Olá, tentei inicialmente compilar o código que baixa a frequência do barramento i2c, mas o código não compila. Vou me dedicar a isso agora, tentar rodar e baixar frequência.
Essa dica faz muito sentido, pois o Arduino acha e a ESP não. Sendo ela muito mais rápida que o Arduino, pode ser por aí o problema.
Comprei 4 bússolas de um site nacional a primeira que abri está com o endereço 0x0d (clone chinês).
Ainda não foi, fiz as seguintes modificações na inicialização do Wire.
Wire.begin(14,2);
Ou
Wire.begin(14,2,4000);
Olá, Mateus!
A velocidade pode ser problema, como o Eduardo salientou, mesmo sendo a I2C uma interface síncrona, i. e., tendo uma linha de clock separada da linha de dados que determina o instante em que o dado é válido.
Por quê? Porque sendo uma comumnicação entre dois ( ou mais ) sistemas abertos, não necessariamente as velocidades máximas de todos são iguais.
Aí, se um dos sistemas estiver operando em uma velocidade maior do que a máxima de algum outro, a comunicação não será possível para estes dois.
Inclusive o documento que o Eduardo conseguiu, que diz que a velocidade máxima é 400 kHz, indica que o modo utilizado é o fm+ ( fast mode plus ), o modo mais rápido disponível para a I2C nos primórdios de sua criação.
Normalmente, neste caso, eu inicio testando com a velocidade padrão da I2C: 100 kHz porque, se os dispositivos obedecem o padrão, nesta velocidade tem que se comunicar.
Depois vou aumentando, se necessário. Na maioria dos casos esta velocidade está de bom tamanho.
D. T. Ribeiro.
P. S.: Quando você diz "Olá, eu verifiquei que há resistores de. 4k7 em pull-ups.", imaginei que esteja falando da bússola, não do display.
Se tiver um osciloscópio, meça os sinais SCL e SDA a poste-os, por favor.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2023 Criado por Marcelo Rodrigues.
Ativado por