Ionic/Cordova и Arduino bluetooth

Я создаю приложение с помощью Ionic и пытаюсь отправить простую строку из Arduino в свое приложение с помощью bluetoothLE< /а>.

Я использую Arduino с bluetooth-адаптером HM-10, мне удалось подключиться и отключиться от устройства, но я не могу понять, как отправлять или получать данные.

Просто чтобы проверить это, я пробовал метод записи и имел простой скрипт на Arduino, ищущий любые данные через последовательную связь, но безуспешно.

это метод, который я использую:

$rootScope.writeH =function(address, serviceUuid, characteristicUuid, value) {
    var string = "H";
    var bytes = bluetoothle.stringToBytes(string);
    var encodedString = bluetoothle.bytesToEncodedString(encodedString);

    var params = {address:address, serviceUuid:serviceUuid, characteristicUuid:characteristicUuid, value:encodedString};

    console.log("Write : " + JSON.stringify(params));

    $cordovaBluetoothLE.write(params).then(writeSuccess, writeError);
}

И вот как я вызываю функцию:

<div class="col">
  <a class="button button-balanced button-small" ng-click="writeH(selectedDevice.address, selectedService.uuid, selectedCharacteristic.uuid)">Write H</a>
</div>

Я использую iPhone 6 под управлением iOS 9.

Это мой эскиз Arduino, на данный момент я просто пытаюсь получить ЛЮБЫЕ данные:

char val; // variable to receive data from the serial port
int ledpin = 8; // LED connected to pin 48 (on-board LED)

void setup() {

  pinMode(ledpin, OUTPUT);  // pin 8 (on-board LED) as OUTPUT
  Serial.begin(9600);       // start serial communication at 9600bps
}

void loop() {

  if( Serial.available() )       // if data is available to read
  {
    val = Serial.read();         // read it and store it in 'val'
  }
  if( val == NULL )               // if any NO data was received
  {
    digitalWrite(ledpin, LOW);  //  LED is OFF
  } else { 
    digitalWrite(ledpin, HIGH);   // otherwise turn it ON
    delay(2000);
  }
  delay(100);                    // wait 100ms for next reading
} 

Редактировать:

Я использую чип HM10, я только что попробовал это приложение: http://itunes.apple.com/us/app/hm10-bluetooth-serial/id1030454675?mt=8 и все работало отлично, просто нужно было изменить настройку на "записывать без ответа" - я Я не уверен, какой тип записи я использую в своем javascript, и это может быть проблемой, поскольку «запись с ответом» не будет работать.

Редактировать 2:

Только что проверил исходные файлы для iOS из плагина bluetooth Cordova, и тип записи установлен на отсутствие ответа, так что это не так ...

//Write Type
NSString *const writeTypeNoResponse = @"noResponse";

Журнал консоли:

[Log] Initialize : {"request":true} (index.js, line 58)
[Log] Initialize Success : {"status":"enabled"} (index.js, line 64)
[Log] Enabled (index.js, line 68)
[Log] Start Scan : {"serviceUuids":[],"allowDuplicates":false} (index.js, line 129)
[Log] Start Scan Success : {"status":"scanStarted"} (index.js, line 135)
[Log] Scan Started (index.js, line 145)
[Log] Start Scan Success : {"status":"scanResult","advertisement":"zgAG1R1JwPI=","rssi":-54,"name":"Avea_6C73","address":"4BED6ECD-A5A9-6625-61A6-D693B02EAC78"} (index.js, line 135)
[Log] Scan Result (index.js, line 139)
[Log] Start Scan Success : {"status":"scanResult","advertisement":"SE30uF7wPYo=","rssi":-82,"name":"HMSoft","address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 135)
[Log] Scan Result (index.js, line 139)
[Log] Connect : {"address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 302)
[Log] Connect Success : {"name":"HMSoft","address":"07929248-D56A-1FDB-9036-D012FBC4F10B","status":"connecting"} (index.js, line 308)
[Log] Connecting (index.js, line 316)
[Log] Connect Success : {"name":"HMSoft","address":"07929248-D56A-1FDB-9036-D012FBC4F10B","status":"connected"} (index.js, line 308)
[Log] Connected (index.js, line 312)
[Log] Discover : {"address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 417)
[Log] Discover Success : {"status":"discovered","services":[{"characteristics":[{"descriptors":[{"descriptorUuid":"2902"},{"descriptorUuid":"2901"}],"properties":{"writeWithoutResponse":true,"read":true,"notify":true},"characteristicUuid":"ffe1"}],"serviceUuid":"ffe0"}],"name":"HMSoft","address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 423)
[Log] Discovered (index.js, line 427)
[Log] Write Descriptor : {"address":"07929248-D56A-1FDB-9036-D012FBC4F10B","characteristicUuid":"ffe1","descriptorUuid":"2901","value":""} (index.js, line 879)
[Log] Read Descriptor Error : {"message":"Service not found","name":"HMSoft","error":"service","address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 868)
[Log] Write Descriptor : {"address":"07929248-D56A-1FDB-9036-D012FBC4F10B","characteristicUuid":"ffe1","descriptorUuid":"2902","value":""} (index.js, line 879)
[Log] Read Descriptor Error : {"message":"Service not found","name":"HMSoft","error":"service","address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 868)
[Log] Subscribe : {"address":"07929248-D56A-1FDB-9036-D012FBC4F10B","serviceUuid":"ffe0","characteristicUuid":"ffe1"} (index.js, line 757)
[Log] Subscribe Success : {"status":"subscribed","characteristicUuid":"ffe1","name":"HMSoft","serviceUuid":"ffe0","address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 763)
[Log] Subscribed (index.js, line 771)
[Log] Write Descriptor : {"address":"07929248-D56A-1FDB-9036-D012FBC4F10B","characteristicUuid":"ffe1","descriptorUuid":"2901","value":""} (index.js, line 879)
[Log] Read Descriptor Error : {"message":"Service not found","name":"HMSoft","error":"service","address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 868)
[Log] Write : {"address":"07929248-D56A-1FDB-9036-D012FBC4F10B","serviceUuid":"ffe0","characteristicUuid":"ffe1","value":""} (index.js, line 823)
[Log] Write Error : {"message":"Write value not found","name":"HMSoft","error":"write","address":"07929248-D56A-1FDB-9036-D012FBC4F10B"} (index.js, line 843)

person Marcos Soares    schedule 30.11.2015    source источник
comment
ты соединил свой телефон с ардуино?   -  person Mostafa    schedule 30.11.2015
comment
не через настройки на iPhone, так как телефон не может обнаружить bluetooth вне приложения, я думаю, что когда я нажимаю «подключиться» внутри приложения, оно подключается к устройству, и маленький красный светодиод на bluetooth перестает мигать.   -  person Marcos Soares    schedule 30.11.2015
comment
а также после нажатия подключения в приложении я получаю информацию о модуле bluetooth, например, Uuid и характеристики — это означает, что устройства сопряжены, верно?   -  person Marcos Soares    schedule 30.11.2015


Ответы (1)


Вы должны обнаружить службы и характеристики, прежде чем отправлять и читать данные. Используйте bluetoothle.discover

person yog    schedule 01.12.2015
comment
Я использую пример приложения: github.com/randdusing/BluetoothLE/tree/ master/example/www Итак, я открыл приложение и сделал: Инициализировать - Начать сканирование - Имя устройства - Подключиться - Обнаружить (вы были правы) - ffe0 - ffe1 Теперь у меня есть два дескриптора uuid: 2901 и 2902, попытался пишите обоим и ничего не происходит... - person Marcos Soares; 01.12.2015
comment
просто чтобы проверить, все, что я хочу, это иметь последовательную связь, подобную той, что у вас есть между arduino и компьютером с bluetooth, я немного смущен этим... - person Marcos Soares; 01.12.2015
comment
Ваш Javascript кажется правильным. Я думаю, что проблема может быть связана с вашим кодом Arduino. Вы сделали правильную настройку. вы уверены, что ваша связь с характеристикой должна проходить по серийному номеру? Какой чип BLE вы используете с ардуино? - person yog; 01.12.2015
comment
Я использую чип HM10, я только что попробовал это приложение: itunes.apple.com/us/app/hm10-bluetooth-serial/id1030454675?mt=8, и это сработало отлично, просто нужно было изменить настройку, чтобы писать без ответа - я не уверен, что за запись я использую в своем javascript, и это может быть проблемой, так как запись с ответом не будет работать - просто попытался удалить .then(writeSuccess, writeError) из $cordovaBluetoothLE.write(params).then(writeSuccess, writeError); не повезло... - также удалил тот же фрагмент кода из функции записи.. тоже не повезло... - person Marcos Soares; 01.12.2015
comment
Вы используете HM-10 с Arduino. похоже вы не правильно настроили блютуз. Согласно этой [ссылке]( bellcode.wordpress. com/2012/01/02/). вы можете запустить Bluetooth для последовательной связи. - person yog; 01.12.2015
comment
я собираюсь попробовать этот скетч, хотя это странно, так как другое приложение работало с моим скетчом... - person Marcos Soares; 01.12.2015
comment
попробовал скетч, оба приложения перестали работать... - я почти уверен, что это вид записи - person Marcos Soares; 01.12.2015
comment
используйте var params = {адрес:адрес, serviceUuid:serviceUuid, characterUuid:characteristicUuid, value:encodedString,type:noResponse}; - person yog; 01.12.2015
comment
сейчас смотрю лог консоли из приложения, ошибок нет, метод работает как надо... я просто не правильно делаю - person Marcos Soares; 01.12.2015
comment
только что добавил лог выше, почему-то значение пустое - person Marcos Soares; 01.12.2015
comment
Хорошо, я изменил скетч Arduino, чтобы отправлять данные, а не ждать их получения, и как только я нажимаю «Подписаться» в приложении, я получаю сообщения Arduino, просто не могу отправлять сообщения на Arduino… wtf… - person Marcos Soares; 01.12.2015
comment
лол, вы добавили для записи параметров тип свойства: noResponse . если да то очень странно - person yog; 01.12.2015
comment
[Журнал] Запись: {address:07929248-D56A-1FDB-9036-D012FBC4F10B,serviceUuid:ffe0,characteristicUuid:ffe1,value:encodedString,type:noResponse} (index.js, строка 828) [Журнал] Ошибка записи: {сообщение : Значение записи не найдено, имя: HMSoft, ошибка: запись, адрес: 07929248-D56A-1FDB-9036-D012FBC4F10B} (index.js, строка 848) - person Marcos Soares; 01.12.2015
comment
а просто абсурдный вопрос, характеристика записываемая? свойства: {запись: истина, запись без ответа: истина, чтение: истина} - person yog; 01.12.2015