I have an Arduino sketch uploaded to my Arduino Nano BLE:
#include <ArduinoBLE.h>
BLEService ledService("07694453-2dd6-4a4c-8c1e-1e3466a6c5734");
BLECharCharacteristic switchChar("2cf11b06-ce75-4d8e-ad1a-be116a432fa2", BLEWrite | BLERead); // create switch characteristic
void setup() {
Serial.begin(9600);
while (!Serial);
if (!BLE.begin()) {
Serial.println("Failed to initialize BLE.");
while (1);
}
BLE.setLocalName("Arduino Nano BLE");
BLE.setAdvertisedService(ledService);
ledService.addCharacteristic(switchChar);
BLE.addService(ledService);
BLE.advertise();
Serial.println("BLE Peripheral device started advertising.");
}
void loop() {
BLEDevice central = BLE.central();
if (central) {
Serial.print("Connected to central MAC: ");
Serial.println(central.address());
digitalWrite(LED_BUILTIN, HIGH);
while (central.connected()){
switchChar.writeValue('H');
delay(1000);
}
digitalWrite(LED_BUILTIN, LOW);
}
}
When Arduino IDE is open, I can see that the Arduino is advertising and get's connected to the computer through Bluetooth. I can verify that from the computer. However, when I plug the Arduino to a pc that is not running Arduino IDE the device is not discoverable by a Bluetooth scanner. Am I doing something the wrong way in this code, or is this expectable? If so, why?
Thank you.
It looks like because your Arduino is waiting for serial (USB) connection at while (!Serial);
.
An example of fix is adding timeout there.
unsigned long startTime = millis();
while (!Serial && millis() - startTime < 1000);