2016-07-16 22 views
0

Я пытаюсь установить связь между макинтошными pi 3 работающими окнами 10 IOT build 14376 инсайдеров и T-REX Manual here с использованием протокола I2C. Дело в том, что он всегда сбой, поэтому после некоторого процесса отладки я обнаружил, что похоже, что он ничего не извлекает из DeviceInformation.FinAllAsync(..), и это вызывает после ArgumentOutOfRangeException. Он должен иметь некоторые вещи, я не понимаю, может быть, в возможностях устройства или разрешений, которые Microsoft учебник не упоминает hereI2C windows iOT find no DeviceInformation

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 

Тогда у меня есть using (I2cDevice device = await I2cDevice.FromIdAsync(dis[0].Id, settings)){...}, который терпит неудачу с ArgumentOutOfRangeException перед тем

упоминалось

Второй способ, которым я пытался использовал этот код:

I2CDevice device; 
var settings = new I2cConnectionSettings(0x07); 
settings.BusSpeed = I2cBusSpeed.StandardMode; 

var controller = await Windows.Devices.I2c.I2cController.GetDefaultAsync(); 
device = controller.GetDevice(settings); 

которые производят NullReferenceException с последней строкой

+0

Это не имеет никакого отношения к устройству I2C. Исключение возникает перед тем, как поговорить с этим подчиненным. – Jackie

ответ

2

Возможно, у вас включен «Драйвер с поддержкой Direct Memory». Вам нужно переключиться обратно на «Inbox Driver».

Ваш код должен работать нормально с помощью «Inbox Driver». Однако с помощью «Direct Memory Mapped Driver» вам необходимо использовать пакет «Microsoft.IoT.Lightning», чтобы поговорить с вашим устройством IoT.

Следить за tutorial использовать библиотеку «Молния», то, как вы настроите ваш контроллер I2c выглядит как-то ниже,

 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"/> 

в вашем package manifest, иначе у вас нет доступа ко всем последовательным периферийным устройствам.

Чтобы переключить драйвер устройства между «Inbox Driver» и «Direct Memory Mapped Driver», выполните следующие действия: tutorial.

+0

О, я не думал об этом, спасибо, я попробую это через несколько часов, чтобы эта тема обновилась –

+0

Как дела? Немного любопытно узнать. – Jackie

+0

Была та же проблема, и ваш ответ был решением в моем случае. Большое спасибо! – Roland