I been working on two Arduino Nano 33 BLE Sense Rev2 for few weeks now to send sensor data and recieve data via ble. At first i thought I was sending and recieving data but it turns out i wasn't but I have got the two arduino to connect with each other but the central device is not recieving the temperature sensor data been sent by the peripheral device. i'm just getting "0.00" on the central device serial port.
Could someone please offer any advice on how to get it working.
Apologies for no comment on the code.
/*
* Device: Arduino Nano 33 BLE Sense
* Peripheral
* The values of the integrated temperature sensor and
* accelerometer are sent using BLE.
*/
#include <ArduinoBLE.h>
#include <Arduino_HS300x.h>
// Service and characteristics 2
const char* peripheralServiceUuid1 = "19b10000-e8f2-537e-4f6c-d104768a1215"; // Service UUID for Peripheral 2
const char* temperatureCharacteristicUuid1 = "19b10001-e8f2-537e-4f6c-d104768a1215"; // Characteristic UUID for Peripheral
const char* humidityCharacteristicUuid1 = "19b10002-e8f2-537e-4f6c-d104768a1215";
BLEService peripheralService1 (peripheralServiceUuid1);
BLEFloatCharacteristic temperatureCharacteristic1(temperatureCharacteristicUuid1, BLERead | BLENotify);
BLEFloatCharacteristic humidityCharacteristic1(humidityCharacteristicUuid1, BLERead | BLENotify);
float temperatureValue1 = 0.0;
float humidityValue1 = 0.0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while (!Serial);
if (!BLE.begin()) {
Serial.println("* Starting Bluetooth® Low Energy module failed!");
while (1);
}
if (!HS300x.begin()) {
Serial.println("Failed to initialize humidity temperature sensor!");
while (1);
}
BLE.setLocalName("Peripheral Device 1");
BLE.setAdvertisedService(peripheralService1);
peripheralService1.addCharacteristic(temperatureCharacteristic1);
peripheralService1.addCharacteristic(humidityCharacteristic1);
BLE.addService(peripheralService1);
temperatureCharacteristic1.writeValue(temperatureValue1);
humidityCharacteristic1.writeValue(humidityValue1);
BLE.advertise();
Serial.println("Arduino Nano 33 BLE Sense (Peripheral Device)");
Serial.println(" ");
}
void loop() {
// put your main code here, to run repeatedly:
BLEDevice central = BLE.central();
if (central) {
Serial.print("Connected to central: ");
Serial.println(central.address());
Serial.print("* Device name: ");
Serial.println(central.localName());
Serial.print("* Advertised service UUID: ");
Serial.println(central.advertisedServiceUuid());
Serial.print("RSSI: ");
Serial.println(central.rssi());
Serial.println(" ");
BLE.stopScan();
while (central.connected()) {
updateTemperatureValue();
delay(500);
}
Serial.print("Disconnected from central: ");
}
}
void updateTemperatureValue() {
float temp1, humi1;
temp1 = HS300x.readTemperature();
humi1 = HS300x.readHumidity();
Serial.print("---------------------------------");
Serial.print(temp1);
if (temp1 != temperatureValue1 && humi1 != humidityValue1) {
temperatureCharacteristic1.writeValue(temp1 * 100);
humidityCharacteristic1.writeValue(humi1 * 100);
temperatureValue1 = temp1;
humidityValue1 = humi1;
}
Serial.print("Temp = ");
Serial.print(temp1);
Serial.println("°C");
Serial.print("Humidity = ");
Serial.print(humi1);
Serial.println("%");
delay(1000);
}
Here is the central device code:
/*
* Device: Arduino Nano 33 BLE Sense
* Central
* The values of the integrated temperature sensor and
* accelerometer are recieved using BLE.
*/
#include <ArduinoBLE.h>
// Define service and characteristic UUIDs for each peripheral device
const char* peripheralServiceUuid1 = "19b10000-e8f2-537e-4f6c-d104768a1215";
const char* temperatureCharacteristicUuid1 = "19b10001-e8f2-537e-4f6c-d104768a1215";
const char* humidityCharacteristicUuid1 = "19b10002-e8f2-537e-4f6c-d104768a1215";
BLEService peripheralService1(peripheralServiceUuid1);
BLEFloatCharacteristic temperatureCharacteristic1(temperatureCharacteristicUuid1, BLERead | BLENotify);
BLEFloatCharacteristic humidityCharacteristic1(humidityCharacteristicUuid1, BLERead | BLENotify);
float temperature1 = 0.0;
float humidity1= 0.0;
void setup() {
Serial.begin(9600);
while (!Serial);
if (!BLE.begin()) {
Serial.println("Starting BLE failed!");
while (1);
}
BLE.setLocalName("Central Device");
BLE.advertise();
Serial.println(" ");
}
void loop() {
connectToPeripheral1();
}
void connectToPeripheral1() {
BLEDevice peripheral1;
Serial.println("- Discovering BLE Device....");
delay(500);
do {
BLE.scanForUuid(peripheralServiceUuid1);
peripheral1 = BLE.available();
} while (!peripheral1);
if (peripheral1) {
Serial.print("Connected to central device with MAC address: ");
Serial.println(peripheral1.address());
Serial.print(" Device Name: ");
Serial.println(peripheral1.localName());
Serial.print("* Advertised service UUID: ");
Serial.println(peripheral1.advertisedServiceUuid());
Serial.println(" ");
BLE.stopScan();
controlPeripheral(peripheral1);
}
}
void controlPeripheral(BLEDevice peripheral1) {
Serial.println(" Connecting to peripheral 1 device...");
if (peripheral1.connect()) {
Serial.println("Connected peripheral 1 device!");
Serial.println(" ");
} else {
Serial.println("Connection to peripheral 1 device failed!");
Serial.println(" ");
return;
}
Serial.println(" Discovering peripheral 1 device attribute...");
if (peripheral1.connect()) {
Serial.println(" peripheral 1 device! attribute discovered");
Serial.println(" ");
} else {
Serial.println("peripheral 1 device attribute discovery failed!");
Serial.println(" ");
return;
}
while (peripheral1.connected()) {
temperatureCharacteristic1.readValue(&temperature1, 2);
Serial.println(temperature1 );
humidityCharacteristic1.readValue(&humidity1, 2);
Serial.println(humidity1 / 100.0);
}
}