floe / BTLE

Arduino library for basic Bluetooth Low Energy with the nRF24L01+
GNU General Public License v3.0
263 stars 74 forks source link

transmit humidity data #24

Open cyrax72 opened 3 years ago

cyrax72 commented 3 years ago

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

floe commented 3 years ago

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).

cyrax72 commented 3 years ago

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

include

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); }`

floe commented 3 years ago

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

cyrax72 commented 3 years ago

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.

floe commented 3 years ago

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?

cyrax72 commented 3 years ago

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 ...

floe commented 3 years ago

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).