Как написать характеристику с Bluez 5.48 - PullRequest
0 голосов
/ 24 июня 2018

Я использую Bluez 5.50;5.48 была версия acqu-write, официально поддерживаемая (не экспериментально).Правильно ли я использую функцию приобретения-записи / записи?

На моем Raspberry Pi Zero W:

pi@raspberrypi:~ $ bluetoothctl
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# scan on
Discovery started
[bluetooth]# connect B8:27:E8:72:33:7A
Attempting to connect to B8:27:E8:72:33:7A
Connection successful
[DSD TECH]# menu gatt
[DSD TECH]# select-attribute 0000ffe1-0000-1000-8000-00805f9b34fb
[DSD TECH:/service0010/char0011]# acquire-write
[CHG] Attribute /org/bluez/hci0/dev_B8_27_E8_72_33_7A/service0010/char0011 WriteAcquired: yes
AcquireWrite success: fd 7 MTU 23
[DSD TECH:/service0010/char0011]# write("h")
[DSD TECH:/service0010/char0011]# write('h')
[DSD TECH:/service0010/char0011]# write(h)
[DSD TECH:/service0010/char0011]# write(0x68)

На моем Arduino Nano, подключенном к HM-10:

void setup() 
{
  Serial.begin(9600);
}

void loop() {
  delay(10);
  if (Serial.available())
  {
    char c = Serial.read();
    Serial.println("Read value");
  }
}

Я использую приложение для iOS под названием "Serial"который подключается к моему HM-10.Я отправляю письмо h и читаю «Читать значение» на серийном мониторе Arduino.Я делаю это непосредственно до и после использования Rasberry Pi, на том же серийном мониторе Arduino.Уведомления малины пи никогда не приходят через.Да, я уверен, что это тот же HM-10.Это единственный HM-10, который я включил в диапазоне BLE, и я не могу подключиться к UUID, когда подключен мой телефон.(На самом деле, я отправляю connect B8:27:E8:72:33:7A в raspberry pi, и продолжаю пытаться, а затем отключаюсь от телефона, и rpi автоматически подключается).

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

acqu-write возвращает файловый дескриптор, который можно использовать для записи в признак GATT, использование записи будет заблокировано.так что используйте или команду write-write (которая требует флаг записи без ответа) или используйте write.

            void WriteValue(array{byte} value, dict options)

                    Issues a request to write the value of the
                    characteristic.

                    Possible options: "offset": Start offset
                                      "device": Device path (Server only)
                                      "link": Link type (Server only)
                                      "prepare-authorize": boolean Is prepare
                                                           authorization
                                                           request

                    Possible Errors: org.bluez.Error.Failed
                                     org.bluez.Error.InProgress
                                     org.bluez.Error.NotPermitted
                                     org.bluez.Error.InvalidValueLength
                                     org.bluez.Error.NotAuthorized
                                     org.bluez.Error.NotSupported

            fd, uint16 AcquireWrite(dict options) [optional]

                    Acquire file descriptor and MTU for writing. Usage of
                    WriteValue will be locked causing it to return
                    NotPermitted error.

                    For server the MTU returned shall be equal or smaller
                    than the negotiated MTU.

                    For client it only works with characteristic that has
                    WriteAcquired property which relies on
                    write-without-response Flag.

                    To release the lock the client shall close the file
                    descriptor, a HUP is generated in case the device
                    is disconnected.

                    Note: the MTU can only be negotiated once and is
                    symmetric therefore this method may be delayed in
                    order to have the exchange MTU completed, because of
                    that the file descriptor is closed during
                    reconnections as the MTU has to be renegotiated.

                    Possible options: "device": Object Device (Server only)
                                      "MTU": Exchanged MTU (Server only)
                                      "link": Link type (Server only)

                    Possible Errors: org.bluez.Error.Failed
                                     org.bluez.Error.NotSupported
0 голосов
/ 28 сентября 2018

При использовании сервисов gatt с bluetoothctl, оставьте скобки и просто используйте:
write 0x68

...