I've been going around in circles here so I'll just ask the experts. I have a Nano 33 BLE Sense as a peripheral device and am successfully sending a value from the temperature sensor which I can read on the Android app "nRF Connect" using the sketch below. What I want to do now is use another Arduino set up as central to read the value being sent by the peripheral. I have been trying for days now and I can connect to the peripheral but cannot find a way to download the data I know it is sending. I keep getting verification errors such as:
request for member 'readValue' in '"2A6E"', which is of non-class type 'const char [5]'
'class BLEDevice' has no member named 'read'
Could someone show me a simple way for the central device to read the data from the peripheral?
#include <ArduinoBLE.h>
#include <Arduino_HTS221.h>
#include <Arduino_LSM9DS1.h>
BLEService sensorService("181A");
BLEIntCharacteristic temperatureSensorLevel("2A6E", BLERead );
BLEIntCharacteristic humiditySensorLevel("2A6F", BLERead );
int oldTemperature = 0;
int oldHumidity = 0;
void setup() {
Serial.begin(9600);
//while (!Serial);
delay(10);
// set the LEDs pins as outputs
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
// turn all the LEDs off
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, HIGH);
if (!HTS.begin()) {
Serial.println("Failed to initialize humidity temperature sensor!");
while (1);
}
pinMode(LED_BUILTIN, OUTPUT);
if (!BLE.begin()) {
Serial.println("starting BLE failed!");
while (1);
}
BLE.setLocalName("SteveTempHumidity2");
BLE.setAdvertisedService(sensorService);
sensorService.addCharacteristic(temperatureSensorLevel);
sensorService.addCharacteristic(humiditySensorLevel);
BLE.addService(sensorService);
temperatureSensorLevel.writeValue( oldTemperature);
humiditySensorLevel.writeValue( oldHumidity);
BLE.advertise();
Serial.println("Bluetooth device active, waiting for connections");
}
void loop() {
BLEDevice central = BLE.central();
if (central) {
Serial.print("Connected to central: ");
Serial.println(central.address());
//digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, LOW);
while (central.connected()) {
//long currentMillis = millis();
updateHumidityLevel();
delay (300);
}
//digitalWrite(LED_BUILTIN, LOW);
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, HIGH);
Serial.print("Disconnected from central: ");
Serial.println(central.address());
}
}
void updateHumidityLevel() {
int temp, hum;
temp = HTS.readTemperature();
hum = HTS.readHumidity();
Serial.print("********");
Serial.print(temp);
if (temp != oldTemperature) {
temperatureSensorLevel.writeValue(temp * 100);
oldTemperature = temp;
}
if (hum != oldHumidity) {
humiditySensorLevel.writeValue(hum * 100);
oldHumidity = hum;
}
Serial.print("Temp = ");
Serial.print(temp);
Serial.println("°C");
Serial.print("Humidity = ");
Serial.print(hum);
Serial.println("%");
delay(1000);
}