ESP8266-Arduino编程实例-MLX90393磁场传感器驱动 MLX90393磁场传感器驱动 1、MLX90393介绍 MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis® 技术提供与沿 XYZ 轴感应的磁通密度成比例的 16 位输出,还提供温度输出信号。 这些数字值可通过 I2C 和 SPI 获得,其中 MLX90393 是总线上的从设备。
通过选择要测量的轴,原始数据可用作进一步后处理的输入,例如用于操纵杆应用、旋钮和更复杂的 3D 位置传感应用。 该传感器实现了无与伦比的性能,主要针对工业和消费应用。
2、硬件准备
ESP8266 NodeMCU开发板一块
MLX90393磁场传感器模块一个
面板板一个
杜邦线若干
数据线一条
硬件接线如下:
传感器引脚
ESP8266开发板引脚
Vin
5v
Gnd
Gnd
SCL
D1
SDA
D2
3、软件准备
Arduino IDE或VSCode + PlatformIO
在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:
ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:
4、代码实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 #include<Wire.h> // MLX90393 I2C Address is 0x0C(12) #define Addr 0x0C void setup() { // Initialise I2C communication as MASTER Wire.begin(); // Initialise serial communication, set baud rate = 9600 Serial.begin(9600); // Start I2C Transmission Wire.beginTransmission(Addr); // Select Write register command Wire.write(0x60); // Set AH = 0x00, BIST disabled Wire.write(0x00); // Set AL = 0x5C, Hall plate spinning rate = DEFAULT, GAIN\_SEL = 5 Wire.write(0x5C); // Select address register, (0x00 << 2) Wire.write(0x00); // Stop I2C Transmission Wire.endTransmission(); // Request 1 byte of data Wire.requestFrom(Addr, 1); // Read status byte if(Wire.available() == 1) { unsigned int c = Wire.read(); } // Start I2C Transmission Wire.beginTransmission(Addr); // Select Write register command Wire.write(0x60); // Set AH = 0x02 Wire.write(0x02); // Set AL = 0xB4, RES for magnetic measurement = 0 Wire.write(0xB4); // Select address register, (0x02 << 2) Wire.write(0x08); // Stop I2C Transmission Wire.endTransmission(); // Request 1 byte of data Wire.requestFrom(Addr, 1); // Read status byte if(Wire.available() == 1) { unsigned int c = Wire.read(); } delay(300); } void loop() { unsigned int data[7]; // Start I2C Transmission Wire.beginTransmission(Addr); // Start single meaurement mode, ZYX enabled Wire.write(0x3E); // Stop I2C Transmission Wire.endTransmission(); // Request 1 byte of data Wire.requestFrom(Addr, 1); // Read status byte if(Wire.available() == 1) { unsigned int c = Wire.read(); } delay(100); // Start I2C Transmission Wire.beginTransmission(Addr); // Send read measurement command, ZYX enabled Wire.write(0x4E); // Stop I2C Transmission Wire.endTransmission(); // Request 7 bytes of data Wire.requestFrom(Addr, 7); // Read 7 bytes of data // status, xMag msb, xMag lsb, yMag msb, yMag lsb, zMag msb, zMag lsb if(Wire.available() == 7); { data[0] = Wire.read(); data[1] = Wire.read(); data[2] = Wire.read(); data[3] = Wire.read(); data[4] = Wire.read(); data[5] = Wire.read(); data[6] = Wire.read(); } // Convert the data int xMag = data[1] \* 256 + data[2]; int yMag = data[3] \* 256 + data[4]; int zMag = data[5] \* 256 + data[6]; // Output data to serial monitor Serial.print("Magnetic Field in X-Axis : "); Serial.println(xMag); Serial.print("Magnetic Field in Y-Axis : "); Serial.println(yMag); Serial.print("Magnetic Field in Z-Axis : "); Serial.println(zMag); delay(500); }
文章来源: https://iotsmart.blog.csdn.net/article/details/126417702
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!