Most recent activity
-
Update : working now!
Reading the code from @Zakaton and @Gordon's response I added a
characteristic.handle_cccd = 0x0038;
statement.c.handle_cccd = 0x0038; return c.startNotifications();
Now the Notifications are coming through.
Device connected: A4:C1:38:4E:75:A0 public Service: ebe0ccb0-7a0a-4b0c-8a1a-6ff2997da3a6 Characteristic: ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6 C: BluetoothRemoteGATTCharacteristic: { "uuid": "ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6", "handle_value": 54, "handle_decl": 53, "properties": { "broadcast": false, "read": true, "writeWithoutResponse": false, "write": false, "notify": true, "indicate": false, "authenticatedSignedWrites": false } } Done! temp: 2484 Hum: 53 temp: 2487 Hum: 53 temp: 2486 Hum: 53
Thanks for the inspiration.
-
-
Hi,
I have the same error as the topic starter, not sure if my problem is related, I'm rather new to Espruino/BLE so it may be a "user error".
Here's my code, and the output it produces. It seems to run OK until the point when Notifications are enabled:
var d; var out=""; function getData(){ print("Getting data now"); g.drawString("Getting data now",0,60); NRF.connect("A4:C1:38:4E:75:A0 public").then(function(device) { print("Device connected:",device.device.id); out=device.device.id; g.drawString(out,0,80); d=device; return d.getPrimaryService("EBE0CCB0-7A0A-4B0C-8A1A-6FF2997DA3A6"); }).then(function(s) { out=s.uuid; g.drawString(out,0,105); if(s) { print("Service:",s.uuid); } else { print("S-error"); } return s.getCharacteristic("EBE0CCC1-7A0A-4B0C-8A1A-6FF2997DA3A6"); }).then(function(c) { print("Characteristic:",c.uuid); print("C:",c); out=c.uuid; g.drawString(out,0,130); c.on('characteristicvaluechanged', function(event) { buf =E.toString(event.target.value.buffer); g.drawString(buf,0,155); print(buf); print(event.target.value.buffer); // For 26.0 degrees and 54% is like : new Uint8Array([47, 10, 54, 98, 10]).buffer b=event.target.value.buffer; temp=b[1]*256+b[0]; hum=b[2]; print("temp:",temp, " Hum:",hum); }); // c.on return c.startNotifications(); }).then(function() { console.log("Done!"); }); } // end getData function setWatch(function(){ print("Bangle setwatch on TOP button activated"); g.clear(); g.setFont("Vector",15); getData(); },BTN ,{ repeat:true,debounce:25 } ); /* WEBIDE OUTPUT _ | __|___ ___ ___ _ _|_|___ ___ | __|_ -| . | _| | | | | . | |____|___| _|_| |___|_|_|_|___| |_| espruino.com 2v06 (c) 2019 G.Williams > Bangle setwatch on TOP button activated Getting data now Device connected: A4:C1:38:4E:75:A0 public Service: ebe0ccb0-7a0a-4b0c-8a1a-6ff2997da3a6 Characteristic: ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6 C: BluetoothRemoteGATTCharacteristic: { "uuid": "ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6", "handle_value": 54, "handle_decl": 53, "properties": { "broadcast": false, "read": true, "writeWithoutResponse": false, "write": false, "notify": true, "indicate": false, "authenticatedSignedWrites": false } } Uncaught Error: Unhandled promise rejection: CCCD Handle not found > */
The NrfConnect output for the Notification is below.
I know the handle for the notification is 0x0038. When I connect to the device using RPI-gatttool using this handle it starts Notifications immediately.:
pi@raspberrypi3:~/Mydata/python/Xiaomi $ gatttool -b a4:c1:38:4e:75:a0 --char-write-req --handle='0x0038' --value="0100" --listen Characteristic value was written successfully Notification handle = 0x0036 value: c5 09 3a 4e 0a Notification handle = 0x0036 value: c4 09 39 4e 0a
Do I need to specify this handle specifically before using
startNotifcations
, and if so, how do I do that?Any help is welcome.
-
Thanks for the extensive explanation, sounds like a perfect addition for the reference. It's clear for me now.
Coming from other languages it feels "natural" to start with an "open" command, so that's the reason why I chose
Storagefile
in the 1st place.This says it all!
Normal Storage functions are what I'd recommend you use for basically everything unless you intend to append textual data (eg a log file). They're much more efficient to write and read.
-
When I started using Espruino a few weeks ago, I was "fresh" re. Espruino. I found the extensive description really confusing. So I just picked one.
Now being a somewhat "less fresh" user I still wonder why there are 2 different file types. I read and reread the documentation, and still have no idea why the differences. It's probably me .....
Just making sure, my posts were not meant as a gripe, but an attempt to add to the discusion that @MaBe kicked of.
-
Tested my code once more to verify that both
news.txt
andnews.txt\1
are recognised.
IT DOES NOT :Ovar Storage = require("Storage"); l=Storage.list(); print(l); function exists(name){ return Boolean(Storage.open(name,"r").addr); } print(exists("news.txt")); print(exists("news.txt\1")); print(exists("nonews.txt")); print(exists("ABC.txt"));
Output is:
[
"news.txt\1",
"weath0.txt\1",
"weath1.txt\1",
"stocks.txt\1",
"messages.txt\1",
"ABC.txt"
]
true
false
false
falseThe mix of the 2 storage versions does not feel like a blessing anymore :)
-
When I check for files without an added chunk number (f.i. file ABC.txt) it is recognised perfectly with your code, output is:
[
"news.txt\1",
"weath0.txt\1",
"weath1.txt\1",
"stocks.txt\1",
"messages.txt\1",
"ABC.txt"
]
existsAs @fanoush explained there are 2 methods to store a file, I happened to use the files with the added chunk number.
-
Fair enough @MaBe but
news.txt\1
is not recognised either.s = require('Storage'); print(s.list()); filename = 'news.txt\1'; if (s.read(filename)!==undefined) { print("exists"); } else { print("does not exists"); }
Output is:
[
"news.txt\1",
"weath0.txt\1",
"weath1.txt\1",
"stocks.txt\1",
"messages.txt\1"
]
does not exists
I always think it's ME, not this time ;-)