Пи до перо Bluetooth низкоэнергетическая связь - PullRequest
0 голосов
/ 11 ноября 2018

Итак, для проекта я пытаюсь установить двухстороннюю связь между Adafruit Feather 32u4 и Raspberry PI 3 через Bluetooth Low energy. Мне удалось установить связь для работы через службу UART, но я хотел бы создать специальную службу с некоторыми характеристиками, которые можно устанавливать и считывать с обоих устройств. Я запускаю Node с noble на Raspberry Pi, и именно так я планирую устанавливать и читать значения, поступающие из Feather.

У кого-нибудь есть примеры кода для меня, чтобы заставить это работать? Кажется, у меня возникают проблемы с поиском большого количества информации о пользовательских услугах через стандарт BLE.

Вот как я создаю свой сервис:

  Serial.println(F("Adding the definition (UUID = 0x8000): "));
  success = ble.sendCommandWithIntReply( F("AT+GATTADDSERVICE=UUID=0x8000"), &serviceId);
  if (! success) {
    error(F("Could not add service"));
  }

  Serial.println(F("Adding the status characteristic (UUID = 0x8001): "));
  success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID=0x8001, PROPERTIES=0x08, MIN_LEN=2, DATATYPE=INTEGER, VALUE=0, DESCRIPTION=Outlet 1 Status"), &StatusCharId);
    if (! success) {
    error(F("Could not add characteristic"));
  }

И вот как я пытаюсь читать / писать с благородным (узел)

device.discoverServices(['8000'], function(error, services) {
                if(error) {console.log(error);}
                var customService = services[0];
                console.log(customService);

                if(customService) {         
                    customService.discoverCharacteristics(null, function(error, chars) {
                        for(var i in chars) {
                            console.log(' ' + i + ' uuid: ' + chars[i].uuid);

                            if(chars[i].uuid == '8001'){
                                    setInterval(() => {
                                        const convert = (from, to) => str => Buffer.from(str, from).toString(to)
                                        const utf8ToHex = convert('utf8', 'hex')
                                        const hexToUtf8 = convert('hex', 'utf8')
                                        var random = getRandomInt(2);

                                        chars[i].write(new Buffer(random), true, function (error) {
                                            if (error) {
                                            console.log(error);
                                            }
                                        }.bind(this));
                                        chars[i].read(function(error, data) {
                                            // data is a buffer


                                            var val = data.toString('hex');

                                            console.log(data.toString('hex'));
                                        });
                                    }, 2500);               

                            }

Не похоже, что мой код узла правильно устанавливает значение. И я с нетерпением жду изменений на Перо

...