私は現在、Bluetooth LEデバイスにメッセージを送信するアプリケーションを開発中です。最初の起動時はすべて正常に動作しますが、2回目の起動時には例外が発生します。毎回Bluetooth LEデバイスをペアにしないとメッセージを送信できないのはなぜですか? (UWP)
アプリケーションコード
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 accConfiで
私は例外を取得g線:
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デバイスは、すべての時間をペアに接続されてからの切り替え保持していることです。何が原因なのか分かりません。
UPDATE 2017年4月23日 デバイスコードと情報
私はArduinoの上のコードが含まれています。私は元のHM-10、on this pageを使用しています。私のブランドはブランドなしです(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);
}
}
私はBluetoothデバイスをプログラムすることができますので、このコマンドセットをデータシートに保存するにはどうすればいいですか?[here](http://fab.cba.mit.edu/classes/863.15/doc/チュートリアル/プログラミング/ブルートゥース/ bluetooth40_ja.pdf)可能であれば、デバイスをペリフェラルモードにしておきたいと思います。 – boomkin
本当のJNHuaMao製品であれば問題はありませんが、 "Bolutek"のようなクローンであれば動作しません。ファームウェアを変更する可能性がありますが、私はそれに成功しませんでした。 1ドルをさらに使い、Keyestudio Mini HM-10 Bluetooth V4.0のような本物のものを手に入れよう。 – GrooverFromHolland
私は製品のさまざまなクローンについて知っていますが、私はオリジナルの2番目のオリジナルバージョン(オリジナルはKeyesのロゴなし)を持っていると思いますが、何とかそのペアリング情報を保存することは可能でしょうか? – boomkin