nanoFrameWork.Iot.Device.Ak8963 1.2.590
控制前缀保留
dotnet add package nanoFramework.Iot.Device.Ak8963 --version 1.2.590
NuGet\Install-Package nanoFramework.Iot.Device.Ak8963 -Version 1.2.590
<PackageReference Include="nanoFramework.Iot.Device.Ak8963" Version="1.2.590" />
paket add nanoFramework.Iot.Device.Ak8963 --version 1.2.590
#r "nuget: nanoFramework.Iot.Device.Ak8963, 1.2.590"
// Install nanoFramework.Iot.Device.Ak8963 as a Cake Addin #addin nuget:?package=nanoFramework.Iot.Device.Ak8963&version=1.2.590 // Install nanoFramework.Iot.Device.Ak8963 as a Cake Tool #tool nuget:?package=nanoFramework.Iot.Device.Ak8963&version=1.2.590
AK8963 - 磁力计
AK8963 是一款磁力计,可以通过 I2C 或 SPI 控制。它存在于其他传感器中,例如 MPU9250。此实现完全支持 I2C 模式并通过 MPU9250 的使用。它不支持 SPI。
文档
有关 AK8963 的文档,请参阅此处
使用方法
重要:在创建 I2cDevice
之前,请确保正确设置 I2C 引脚,特别是对于 ESP32,确保安装了 nanoFramework.Hardware.ESP32 nuget
//////////////////////////////////////////////////////////////////////
// when connecting to an ESP32 device, need to configure the I2C GPIOs
// used for the bus
Configuration.SetPinFunction(21, DeviceFunction.I2C1_DATA);
Configuration.SetPinFunction(22, DeviceFunction.I2C1_CLOCK);
对于其他设备,如 STM32,请确保使用你想要使用的 I2C 互连的总线的预设引脚。
你可以在示例目录中找到一个例子。用法简单,包括进行校准的可能性。
var mpui2CConnectionSettingmpus = new I2cConnectionSettings(1, Ak8963.Ak8963.DefaultI2cAddress);
// This will use the default I2C interface
Ak8963 ak8963 = new Ak8963(I2cDevice.Create(mpui2CConnectionSettingmpus));
if (!ak8963.CheckVersion())
throw new IOException($"This device does not contain the correct signature 0x48 for a AK8963");
while (true)
{
var magne = ak8963.ReadMagnetometer(true);
Debug.WriteLine($"Mag X = {magne.X, 15}");
Debug.WriteLine($"Mag Y = {magne.Y, 15}");
Debug.WriteLine($"Mag Z = {magne.Z, 15}");
Thread.Sleep(100);
}
校准和偏置
您可以通过CalibrateMagnetometer
函数访问自检和校准,它将返回偏差校准。请注意,校准需要几秒钟时间。
var magBias = ak8963.CalibrateMagnetometer();
Debug.WriteLine($"Factory Bias:");
Debug.WriteLine($"Mag X = {magBias.X}");
Debug.WriteLine($"Mag Y = {magBias.Y}");
Debug.WriteLine($"Mag Z = {magBias.Z}");
Debug.WriteLine($"Bias from calibration:");
Debug.WriteLine($"Mag X = {ak8963.MagnometerBias.X}");
Debug.WriteLine($"Mag Y = {ak8963.MagnometerBias.Y}");
Debug.WriteLine($"Mag Z = {ak8963.MagnometerBias.Z}");
您可以在MPU9250样本中找到一个如何在没有校准的情况下提取原始数据的完整示例。
如果没有进行校准,您将获得一个类似这样的原始数据云。
正确运行校准需要在校准过程中将传感器移动到所有可能的方向。您应考虑使用足够的样本运行它,至少几百个。默认设置为1000。在校准过程中移动传感器到远离磁场的位置时,您将获得上述云数据。从这些云数据中计算平均值并将其从读取值中减去,将给出中心化数据云,如下所示
要创建这些云点图,每个云表示X-Y, Y-Z和Z-X的坐标。
校准完成后,您将能够使用ReadMagnetometer
函数读取经过偏差校正的数据。您仍然可以使用ReadMagnetometerWithoutCalibration
函数读取无需校准的数据。
使用不同的I2C接口
例如,此传感器用于MPU9250。在这种情况下,MPU9250是一个主I2C控制器,控制从AK8963 I2C传感器。提供了一个抽象类来实现基本的I2C操作
public abstract class Ak8963I2cBase
{
public abstract void WriteRegister(I2cDevice i2CDevice, Register reg, byte data);
public abstract byte ReadByte(I2cDevice i2CDevice, Register reg);
public abstract void ReadBytes(I2cDevice i2CDevice, Register reg, Span<byte> readBytes);
}
例如,以下是一个基本的I2C实现:
public class Ak8963I2c : Ak8963I2cBase
{
public override byte ReadByte(I2cDevice i2cDevice, Register reg)
{
i2cDevice.WriteByte((byte)reg);
return i2cDevice.ReadByte();
}
public override void ReadBytes(I2cDevice i2cDevice, Register reg, Span<byte> readBytes)
{
i2cDevice.WriteByte((byte)reg);
i2cDevice.Read(readBytes);
}
public override void WriteRegister(I2cDevice i2cDevice, Register reg, byte data)
{
Span<byte> dataout = stackalloc byte[] { (byte)reg, data };
i2cDevice.Write(dataout);
}
}
嵌入到MPU9250中的类更复杂,例如,以下代码用于执行WriteRegister操作:
public override void WriteRegister(I2cDevice i2cDevice, Ak8963.Register reg, byte data)
{
Span<byte> dataout = stackalloc byte[2] { (byte)Register.I2C_SLV0_ADDR, Ak8963.Ak8963.DefaultI2cAddress };
i2cDevice.Write(dataout);
dataout[0] = (byte)Register.I2C_SLV0_REG;
dataout[1] = (byte)reg;
i2cDevice.Write(dataout);
dataout[0] = (byte)Register.I2C_SLV0_DO;
dataout[1] = data;
i2cDevice.Write(dataout);
dataout[0] = (byte)Register.I2C_SLV0_CTRL;
dataout[1] = 0x81;
i2cDevice.Write(dataout);
}
如果您必须使用不同的I2C接口,您必须使用构造函数,在其中您可以传入它
ak8963 = new Ak8963(_i2cDevice, new Ak8963Attached(), false);
电路
本版本只支持I2C。
- SCL - SCL
- SDA - SDA
- VCC - 3.3V
- GND - GND
根据您拥有的版本,您可能需要选择I2C而不是SPI。这取决于您将使用的板子。
产品 | 版本 兼容的和额外的计算目标框架版本。 |
---|---|
.NET Framework | net是兼容的。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.System.BuffersBinary.BinaryPrimitives (>= 1.2.586)
- nanoFramework.System.Device.I2c (>= 1.1.16)
- nanoFramework.System.Device.Model (>= 1.2.586)
- nanoFramework.System.Math (>= 1.5.43)
- nanoFramework.System.Numerics (>= 1.2.586)
NuGet包
此包未被任何NuGet包使用。
GitHub仓库
此包未被任何流行的GitHub仓库使用。
版本 | 下载 | 上次更新 |
---|---|---|
1.2.590 | 64 | 7/17/2024 |
1.2.570 | 89 | 6/14/2024 |
1.2.436 | 230 | 11/10/2023 |
1.2.416 | 105 | 11/8/2023 |
1.2.329 | 159 | 5/26/2023 |
1.2.313 | 138 | 5/12/2023 |
1.2.297 | 149 | 5/3/2023 |
1.2.253 | 262 | 2/22/2023 |
1.2.222 | 293 | 1/9/2023 |
1.2.217 | 302 | 1/6/2023 |
1.2.212 | 275 | 1/5/2023 |
1.2.208 | 294 | 1/3/2023 |
1.2.203 | 269 | 12/28/2022 |
1.2.159 | 365 | 11/14/2022 |
1.2.153 | 364 | 11/5/2022 |
1.2.141 | 395 | 10/25/2022 |
1.2.128 | 381 | 10/22/2022 |
1.2.87 | 490 | 9/15/2022 |
1.2.82 | 488 | 9/14/2022 |
1.1.116.8772 | 395 | 6/24/2022 |
1.1.113.2032 | 406 | 6/23/2022 |
1.1.97.17326 | 429 | 6/13/2022 |
1.1.92.53000 | 434 | 6/8/2022 |
1.1.58.10097 | 428 | 5/23/2022 |
1.1.3 | 471 | 4/15/2022 |
1.1.1 | 442 | 4/14/2022 |
1.0.300 | 433 | 3/31/2022 |
1.0.288-preview.114 | 120 | 3/25/2022 |
1.0.288-preview.113 | 109 | 3/25/2022 |
1.0.288-preview.106 | 108 | 3/23/2022 |
1.0.288-preview.104 | 103 | 3/22/2022 |
1.0.288-preview.100 | 106 | 3/19/2022 |
1.0.288-preview.99 | 118 | 3/18/2022 |
1.0.288-preview.98 | 111 | 3/18/2022 |
1.0.288-preview.93 | 111 | 3/15/2022 |
1.0.288-preview.87 | 110 | 3/10/2022 |
1.0.288-preview.86 | 111 | 3/8/2022 |
1.0.288-preview.65 | 120 | 2/18/2022 |
1.0.288-preview.48 | 130 | 2/4/2022 |
1.0.288-preview.41 | 126 | 1/31/2022 |
1.0.288-preview.29 | 121 | 1/28/2022 |
1.0.288-preview.20 | 131 | 1/27/2022 |
1.0.288-preview.19 | 123 | 1/27/2022 |
1.0.288-preview.5 | 133 | 1/24/2022 |
1.0.288-preview.1 | 122 | 1/21/2022 |
1.0.272 | 306 | 1/10/2022 |
1.0.259 | 328 | 12/9/2021 |
1.0.218 | 365 | 10/18/2021 |
1.0.155 | 316 | 8/31/2021 |
1.0.130 | 183 | 7/6/2021 |
1.0.129 | 152 | 7/6/2021 |
1.0.125 | 193 | 7/5/2021 |
1.0.121 | 201 | 6/29/2021 |
1.0.119 | 219 | 6/28/2021 |
1.0.56 | 194 | 5/25/2021 |
1.0.9 | 194 | 5/21/2021 |