我尝试覆盆子PI 3个运行窗10 IOT建立14376名业内人士和T-REX Manual here使用I2C协议之间进行通信。问题是,它总是崩溃,所以一些调试过程后,我发现,它看起来并不检索DeviceInformation.FinAllAsync(..)
后,从ArgumentOutOfRangeException
任何和原因。它应该有一些东西我不明白,也许在设备能力或权限,微软教程没有提到here
var settings = new I2cConnectionSettings(0x07);
settings.BusSpeed = I2cBusSpeed.StandardMode;
var aqs = I2cDevice.GetDeviceSelector("I2C1");
var dis = await DeviceInformation.FindAllAsync(aqs);
int a = dis.Count; //is always equal to 0
然后,我有一个qazxsw POI其失败,前面提到的qazxsw POI
我尝试了第二种方法是使用下面的代码:
using (I2cDevice device = await I2cDevice.FromIdAsync(dis[0].Id, settings)){...}
其产生与最后一行ArgumentOutOfRangeException
你可能会具有“直接内存映射驱动器”功能。你需要切换回“收件箱驱动程序”。
您的代码应该只是与“收件箱驱动程序”的罚款。然而,随着“直接内存映射驱动程序”,您必须使用“Microsoft.IoT.Lightning”包跟你的物联网设备。
按照此I2CDevice device;
var settings = new I2cConnectionSettings(0x07);
settings.BusSpeed = I2cBusSpeed.StandardMode;
var controller = await Windows.Devices.I2c.I2cController.GetDefaultAsync();
device = controller.GetDevice(settings);
用“闪电”库,您设置您的I 2 C控制器看起来像是下面的样子,
NullReferenceException
请注意,您需要包括
tutorial
在你的包 if (LightningProvider.IsLightningEnabled)
{
LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
}
var i2cProvider = LightningI2cProvider.GetI2cProvider();
var i2cControllers = await I2cController.GetControllersAsync(i2cProvider);
var i2cController = i2cControllers[0];
var i2cDevice = i2cController.GetDevice(new I2cConnectionSettings(0x07));
文件,否则你没有访问所有的串行外设。
按照此<iot:Capability Name="lowLevelDevices"/>
<DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141"/>
切换“收件箱驱动程序”和“直接内存映射驱动器”之间的设备驱动程序。