BTLE icon indicating copy to clipboard operation
BTLE copied to clipboard

transmit humidity data

Open cyrax72 opened this issue 3 years ago • 7 comments

Please tell me how to use this library to transmit humidity data?

cyrax72 avatar Apr 15 '21 10:04 cyrax72

I would suggest you start with the temperature example (https://github.com/floe/BTLE/blob/master/examples/temperature/temperature.ino) and change the UUID to the one for humidity (should be in the BTLE specification UUID list).

floe avatar Apr 15 '21 11:04 floe

Thank you for your answer. I tried, I succeeded. However, I need battery power, temperature and humidity. I tried to use NRF_DEVICE_INFORMATION_SERVICE_UUID, but nothing works. Please tell me what I'm doing wrong?

`#include <BTLE.h> #include <RF24.h>

RF24 radio(9, 10); BTLE btle(&radio);

struct battery_level_data { uint16_t service_uuid; uint8_t battery_percentage; };

void setup() { Serial.begin(9600); Serial.println("BTLE multichunk sender"); btle.begin("RD"); //can be emptystring }

void loop() {

battery_level_data battery_data; battery_data.service_uuid = NRF_BATTERY_SERVICE_UUID; battery_data.battery_percentage = 80;

nrf_service_data temp_data; temp_data.service_uuid = NRF_TEMPERATURE_SERVICE_UUID; //temp_data.value = BTLE::to_nRF_Float(36); temp_data.value = 36;

nrf_service_data hum; hum.service_uuid = NRF_DEVICE_INFORMATION_SERVICE_UUID; //hum.value = BTLE::to_nRF_Float(77); hum.value = 77;

btle.preparePacket();

if (!btle.addChunk(0x16, sizeof(battery_data), &battery_data)) { Serial.println("Battery level does not fit"); }

if (!btle.addChunk(0x16, sizeof(temp_data), &temp_data)) { Serial.println("Temperature does not fit"); }

if (!btle.addChunk(0x16, sizeof(hum), &hum)) { Serial.println("hum does not fit"); }

btle.transmitPacket(); btle.hopChannel();

delay(500); }`

cyrax72 avatar Apr 16 '21 13:04 cyrax72

INFORMATION_SERVICE won't work for humidity, that's something entirely different. 0x2A6F seems to be correct, see also here: https://github.com/NordicSemiconductor/Android-nRF-Connect/issues/52

floe avatar Apr 17 '21 13:04 floe

I probably asked the question not quite correctly .. I managed to send the humidity, as you advised, replacing 0x1809 with 0x2A6F. But I do not understand how to transfer 3 parameters at once in one package - tempurature, humidity, and battery charge. My sensor needs all of them.

cyrax72 avatar Apr 21 '21 09:04 cyrax72

I think the code you posted actually looks pretty correct (apart from the humidity UUID). What does e.g. the nRF Connect app show for your device when all 3 parameters are present?

floe avatar Apr 21 '21 10:04 floe

Only 2 parameters will arrive in NRF connect. There is no third at all (humidity). The message "hum does not fit" arrives in the serial port. It feels like btle.addChunk doesn't add a third parameter. If we swap the blocks if (! btle.addChunk (0x16, sizeof (temp_data), & temp_data)) { Serial.println ("Temperature does not fit"); } and if (! btle.addChunk (0x16, sizeof (hum), & hum)) { Serial.println ("hum does not fit"); } in some places, then in the series the message "Temperature does not fit" and in the NRF connect there is no temperature ...

cyrax72 avatar Apr 21 '21 13:04 cyrax72

OK, then you're running out of space in the advertisement, for the nRF24, you can only have at most 21 bytes of payload. Try setting the name to "" (empty string).

floe avatar Apr 21 '21 16:04 floe