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)
1 ответ
Вы должны обнаружить услуги и характеристики, прежде чем отправлять и читать данные. Используйте bluetoothle.discover