Arduino Nano BLE未开启Arduino IDE时无法被蓝牙扫描到的问题排查
问题原因与解决方案
核心问题
你的代码里的while (!Serial);语句是导致该现象的关键。这行代码的作用是等待串口连接建立,只有当电脑打开了串口监视器(通常是Arduino IDE的串口窗口),Serial端口被激活后,程序才会继续执行后续的BLE初始化和广播逻辑。
当未运行Arduino IDE时,电脑不会打开对应的Serial端口,Arduino会一直卡在这行代码,根本没机会执行BLE.begin()和BLE.advertise()等广播相关代码,自然无法被蓝牙扫描器发现。
解决方案
若希望设备在无串口连接的情况下也能正常广播,直接删除while (!Serial);这行代码即可。修改后的setup函数如下:
void setup() { Serial.begin(9600); 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."); }
额外说明
如果需要保留串口调试功能,但不想让设备一直卡在等待串口的步骤,可以改成带超时的等待逻辑,比如等待5秒后无论串口是否连接都继续执行:
unsigned long startMillis = millis(); while (!Serial && millis() - startMillis < 5000); // 等待5秒或串口连接成功
内容的提问来源于stack exchange,提问作者BillTheKid
相关产品推荐
相关产品推荐

