J'ai un problème bien au-delà de mes petites compétences.
Je veux faire un compte à rebours qui une fois à zéro afficherait le cap donné par le mpu9250.
J'utilise les bibliothèques
<U8g2lib.h>
<Arduino.h>
<SPI.h>
<SparkFunMPU9250-DMP.h>
<Chrono.h>
"OneButton.h"
Dans SparkFunMPU9250-DMP.h pour qu'elle fonctionne sur l'esp8266 et l'ESP32 j'ai suivi les conseils de plus compétent :
Go to your SparkFun library (this is usually Documents\Arduino\libraries\SparkFun_MPU-9250-DMP_Arduino_Library-master) navigate to src/util and edit the file
inv_mpu.h Somewhere at the beginning of file, just below the line that says #defineINV_MPU_H
add the following line: #define min(X, Y) (((X) < (Y)) ? (X) : (Y))
La boussole fonctionne parfaitement seule dans un exemple.
L'écran et le compte à rebours fonctionnent également parfaitement tout seuls.
Lorsque je mets les deux ensemble, si j'appelle d'abord le compte à rebours, cela fonctionne, puis à l'appel de la lecture sur MPU le microcontrôleur reboot.
Si j'appelle d'abord la boussole, la ligne if (imu.begin() != INV_SUCCESS)
en est la cause et si je vais dans la bibliothèque SparkFunMPU9250-DMP.h c'est en ligne 46 result = mpu_init(&int_param);
qui fait rebooter
mpu_init est dans inv_mpu.c
Après je ne sais pas pister
Donc cette bibliothèque MPU a quelque chose que l'ESP n'aime pas du tout
/* Go to your SparkFun library (this is usually Documents\Arduino\libraries\SparkFun_MPU-9250-DMP_Arduino_Library-master)
navigate to src\util and edit the file
inv_mpu.h Somewhere at the beginning of file, just below the line that says
#define _INV_MPU_H_
add the following line:
#define min(X, Y) (((X) < (Y)) ? (X) : (Y))
* Sur ESP8266 Wemos D1 Mini
* février 2022
*
* MPU9250 ESP8266
* VCC 3.3v
* GND GND
* SCL/SCLK D1 SCL
* SDA D2 SDA
*
* Ecran :UC1701x
* 5 LedA vers 3.3v
* 6 Vss GND
* 7 Vdd 3.3v
* 8 SCLK D5 SCK GPIO14
* 9 SDA D7 MOSI GPIO13
* 10 RS D4 dc GPIO 2
* 11 Reset D3 reset GPIO 0
* 12 CS D8 GPIO 15 */
//#include <U8g2lib.h> <=== 1
#include <Arduino.h>
#include <SPI.h>
#include <SparkFunMPU9250-DMP.h>
//U8G2_UC1701_MINI12864_F_4W_SW_SPI u8g2(U8G2_R2, /* clock=D5*/ 14, /* data=D7*/ 13, /* cs=D8*/ 15, /* dc=D2*/ 2, /* reset=D3*/ 0 );
// ^===================
MPU9250_DMP imu;
void compas1(void){
if (imu.begin() != INV_SUCCESS) {
Serial.println("imu.begin() Failed!");
while (1) {
Serial.println("Unable to communicate with MPU-9250");
Serial.println("Check connections, and try again.");
Serial.println();
delay(5000); } }
Serial.println("imu.begin() succeeded");
imu.dmpBegin(DMP_FEATURE_6X_LP_QUAT | // Enable 6-axis quat
DMP_FEATURE_GYRO_CAL, // Use gyro calibration
10); // Set DMP FIFO rate to 10 Hz
Serial.println("setup() completed");
compas2(); }
void compas2(void){
byte boucle =0;
while (boucle == 0) {
delay(10);
if (imu.fifoAvailable()) {
if (imu.dmpUpdateFifo() == INV_SUCCESS) {
delay(10);
imu.computeEulerAngles();
Serial.println("R/P/Y: " + String(imu.roll) + ", " + String(imu.pitch) + ", " + String(imu.yaw));
} } } }
void setup(void) {
Serial.begin(115200);
//u8g2.begin(); <====================
Wire.begin();
compas1();
}
void loop(void) {
delay(10); }
Oui mais ceci fonctionne parfaitement sur ESP8266 et ESP32 avec le define cité plus haut.
Dès que je décommente `//#include <U8g2lib.h> reboot perpétuel, preuve que les deux bibliothèques sont incompatibles et c'est pas U8g2, l'auteur respecte bien tout ce qu'il faut pour ne pas interférer avec d'autres bibliothèques. J'ai déjà eu ce genre de p c'était à chaque fois l'autre qui était en cause.
Malheureusement je suis incapable de trouver où
J'ai essayé toutes sortes de bibliothèques pour le MPU9250, avec des calibrations, jamais je n'ai obtenu de résultats sur le cap magnétique aussi bons de celle de sparkfun.
Je veux un compas qui fonctionne sur un voilier pas que sur une table horizontale
J'essayerais bien sur esp32 mais faut que je dessoude tout et je n'ai que des ESP32-S2