Я создал приложение UWP для получения сообщения, отправленного другим приложением.Сообщение успешно достигает концентратора IoT, как я проверил на вкладке IoT Devices.Сообщение также успешно принимается при запуске на локальном компьютере, комментируя код контактов GPIO.Однако при запуске на реальном Raspberry Pi код выдает исключение «Метод был вызван в неожиданное время», как видно из переменной e отладчика.
Вот исключение, которое выдается
Я пытался изменить целевую сборку, обновить и понизить библиотеку клиентов Azure, создать весь проект с нуля.
namespace Test
{
public sealed partial class MainPage : Page
{
const int LED_PIN = 5;
GpioPin pin;
GpioPinValue pinValue;
string connection = string.Format("HostName=FYPHub.azure-devices.net;DeviceId=Device;SharedAccessKey=7Cw6whjx4EU7s5nqR7PmljY/vOYLY9QMqG2fG+mM0Ig=");
DeviceClient deviceClient;
public MainPage()
{
this.InitializeComponent();
InitGPIO();
deviceClient = DeviceClient.CreateFromConnectionString(connection, TransportType.Amqp);
ReceiveMessage();
}
private async void ReceiveMessage()
{
while (true)
{
var message = await deviceClient.ReceiveAsync();
if (message == null)
continue;
try
{
var bytes = message.GetBytes();
var command = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
TBox.Text = "Command: " + command;
if (command == "On")
{
pinValue = GpioPinValue.High;
pin.Write(pinValue);
}
else
{
pinValue = GpioPinValue.Low;
pin.Write(pinValue);
}
await deviceClient.CompleteAsync(message);
}
catch (Exception) { }
}
}
private void InitGPIO()
{
GpioController gpio = GpioController.GetDefault();
pin = gpio.OpenPin(LED_PIN);
pinValue = GpioPinValue.Low;
pin.Write(pinValue);
pin.SetDriveMode(GpioPinDriveMode.Output);
}
}
}