#include <Arduino.h>
#include <Wire.h>
const int HMC5883L_Address = 0x3C;
const int Reg_Config_A = 0x00;
const int Reg_Config_B = 0x01;
const int Reg_Mode = 0x02;
const int Reg_Out_X_M = 0x03;
const int Reg_Out_Z_M = 0x05;
const int Reg_Out_Y_M = 0x07;
void setup() {
Serial.begin(9600);
Wire.begin(21, 22);
Wire.beginTransmission(HMC5883L_Address);
Wire.write(Reg_Config_A);
Wire.write(0x70);
Wire.endTransmission();
Wire.beginTransmission(HMC5883L_Address);
Wire.write(Reg_Config_B);
Wire.write(0xA0);
Wire.endTransmission();
Wire.beginTransmission(HMC5883L_Address);
Wire.write(Reg_Mode);
Wire.write(0x00);
Wire.endTransmission();
}
void loop() {
int x, y, z;
Wire.beginTransmission(HMC5883L_Address);
Wire.write(Reg_Out_X_M);
Wire.endTransmission();
Wire.requestFrom(HMC5883L_Address, 6);
if (6 <= Wire.available()) {
x = Wire.read() << 8 | Wire.read();
z = Wire.read() << 8 | Wire.read();
y = Wire.read() << 8 | Wire.read();
}
Serial.print("X: “); Serial.print(x);
Serial.print(” Y: “); Serial.print(y);
Serial.print(” Z: "); Serial.println(z);
delay(500);
}
i use esp32 and i tested this code with hmc5883l address 0x1e and 0x3c both.
in serial monitor, requstfrom return error
[212811][E][Wire.cpp:513] requestFrom(): i2cRead returned Error 263