Почему я не могу отправить сообщение, если я не отключаю устройство Bluetooth LE каждый раз? (UWP)

В настоящее время я работаю над приложением, которое отправит сообщение на устройство Bluetooth LE. Все работает нормально при первом запуске, но при втором запуске я получаю исключение.

Код приложения

функция getDevices()

 public async Task<List<string>> getDevices()
    {
        Debug.WriteLine("C");
        foreach (DeviceInformation di in await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(new Guid("0000ffe0-0000-1000-8000-00805f9b34fb"))))
        {
            Debug.WriteLine("D");
            Debug.WriteLine(di.Name);
            Debug.WriteLine(di.Id);
            Debug.WriteLine(di.IsEnabled);
            GattDeviceService bleService = await GattDeviceService.FromIdAsync(di.Id);
            Debug.WriteLine(bleService.Device.ConnectionStatus.ToString());
            Debug.WriteLine("E");
            Debug.WriteLine(GattCharacteristic.ConvertShortIdToUuid(0xFFE1).ToString());
            // TODO: Throws exception if not paired before startup because pairing info is not stored on device
            accConfig = bleService.GetCharacteristics(GattCharacteristic.ConvertShortIdToUuid(0xFFE1))[0];
            Debug.WriteLine("F");
        }
        return deviceList;
    }

функция sendMessage()

 public async void sendMessage(string messageToSend)
        {
            // TODO: implement
            await accConfig.WriteValueAsync((Encoding.UTF8.GetBytes(messageToSend)).AsBuffer());
            Debug.WriteLine("G");
        }

ошибки

В строке await accConfig я получаю исключение:

An exception of type 'System.Exception' occurred in mscorlib.ni.dll but was not handled in user code

Additional information: [...] (Exception from HRESULT: 0x80070572)

Другое дело, что на вкладке "Настройки" мое устройство Bluetooth постоянно переключается с "Подключено" на "Подключено". Я понятия не имею, что вызывает это.

ОБНОВЛЕНИЕ 2017/04/23Код устройства и информация

Я включаю код на Arduino. Я использую оригинальный HM-10, на этой странице первая версия сверху. У меня нет бренда (поэтому на нем нет логотипа Keyes), но кроме этого, он не должен иметь никакой разницы. (Хотя это может быть клон, но я в этом сомневаюсь настолько, насколько я знаю).

#include <SoftwareSerial.h>
SoftwareSerial bluetooth(9, 10); // RX, TX
  char commandbuffer[50];
      int j = 0;
void setup()
{

  memset(commandbuffer, 0, sizeof(commandbuffer));
  analogWrite(12, 255);
  analogWrite(11, 0);
  // Start the hardware serial port
  Serial.begin(19200);
  bluetooth.begin(9600);
  // un REM this to set up a Master and connect to a Slave

  Serial.println("BLE CC41A Bluetooth");
  Serial.println("----------------------------------");
  Serial.println("");
  Serial.println("Trying to connect to Slave Bluetooth");
  delay(1000);
  bluetooth.print("AT"); // just a check
  delay(2000);

  delay(2000);
  bluetooth.print("AT+ROLE0");
  delay(2000);
  /*
    bluetooth.println("AT+HELP");
    delay(2000);
    bluetooth.println("AT+CONA0xE4F89CF8AB87");*/
  /*bluetooth.println("AT+CONE4F89CF8AB87");
    delay(2000);*/
  // discover

  /*
    bluetooth.println("AT+INQ"); // look for nearby Slave
    delay(5000);
    bluetooth.println("AT+CONN1"); // connect to it */
}
void loop()
{
  bluetooth.listen();
  // while there is data coming in, read it
  // and send to the hardware serial port:
  while (bluetooth.available() > 0) {
    char inByte = bluetooth.read();
    Serial.write(inByte);
  }
  // Read user input if available.
  if (Serial.available()) {
    delay(10); // The DELAY!
    char temp = Serial.read();
    if (temp == '\n')
    {
      bluetooth.print(commandbuffer);
      Serial.print('\n'); // Because it needs it even if Bluetooth received command happened earlier
      Serial.println(commandbuffer);
      memset(commandbuffer, 0, sizeof(commandbuffer));
      j = 0; // Reset
    }
    else
    {
      commandbuffer[j++] = temp;
    }
    delay(500);
  }

}

1 ответ

Это всегда происходит, если информация о сопряжении не сохраняется на устройстве. Каждый раз, когда вы переподключаетесь, вы должны отсоединять и заново связывать, потому что в Windows 10 ваше устройство сопряжено, а ваше устройство - нет.

Другие вопросы по тегам