如何在macOS上获取HC-05蓝牙模块的可用通信端口?
HC-05蓝牙模块Mac下通信端口问题及代码修复
问题概述
搭建HC-05蓝牙模块连接Mac控制LED开关电路时,执行终端命令:
ls /dev/cu.* ls /dev/tty.*
已识别到cu.HC-05和tty.HC-05两个端口,但均无法正常通信,需确定正确端口并修复代码逻辑问题。
Arduino代码问题及修复
原代码中while(1)死循环会完全阻塞后续指令处理逻辑,导致无法响应蓝牙发送的控制命令,修复后的代码如下:
#include <SoftwareSerial.h> const int RxD = 3; const int TxD = 2; const int LED_PIN = 6; SoftwareSerial HC05(RxD, TxD); // RX, TX void setup() { pinMode(RxD, INPUT); pinMode(TxD, OUTPUT); pinMode(LED_PIN, OUTPUT); HC05.begin(9600); digitalWrite(LED_PIN, LOW); // 初始化LED为关闭状态 } void loop() { // 仅在连接初期发送一次连接提示,避免频繁发送冗余信息 static bool connectedPromptSent = false; if (!connectedPromptSent) { HC05.println("bluetooth connected!"); connectedPromptSent = true; } // 处理蓝牙接收的指令 if (HC05.available()) { String cmd = HC05.readStringUntil('\n'); cmd.trim(); // 去除字符串首尾空白,避免换行/空格干扰指令匹配 if (cmd == "on"){ HC05.println("LED is on"); digitalWrite(LED_PIN, HIGH); } else if (cmd == "off") { HC05.println("LED is off"); digitalWrite(LED_PIN, LOW); } else { HC05.println("Command not found"); } } }
PySerial代码修复
原代码存在发送逻辑错误(直接发送字符串user_inp而非用户输入内容),同时需指定正确端口,修复后的代码:
import serial import time # Mac下蓝牙串口优先使用cu开头的端口 ser = serial.Serial( port='/dev/cu.HC-05', baudrate=9600, timeout=1 ) time.sleep(5) # 给串口连接留足初始化时间 if ser.isOpen(): print("Serial is open") try: while True: user_inp = input("输入on/off控制LED: ").strip() # 将用户输入转为字节流并添加换行符发送 ser.write(f"{user_inp}\n".encode('utf-8')) # 读取并解码返回数据 data = ser.readline().decode('utf-8').strip() print("Received data:", data) except KeyboardInterrupt: print("\n退出程序") finally: ser.close() # 确保程序退出时关闭串口
端口选择说明
Mac系统中:
/dev/cu.*是主动连接型端口,适合Mac作为主设备连接HC-05从设备,优先使用/dev/cu.HC-05/dev/tty.*多用于被动监听场景,不推荐用于HC-05的主动连接
如果仍无法连接,可尝试:
- 断开HC-05与Mac的蓝牙配对,重新配对后再执行
ls /dev/cu.*确认端口 - 检查HC-05的波特率是否与代码中9600一致(部分模块默认波特率为38400或115200)
- 确认接线正确:HC-05的TX接Arduino的RX(引脚3),HC-05的RX需串联1k电阻后接Arduino的TX(引脚2),做5V转3.3V电平转换
内容的提问来源于stack exchange,提问作者Nothing Around Us
相关产品推荐
相关产品推荐

