寻求AJ-SR04M超声波传感器Python测距脚本技术指导
AJ-SR04M通过CH340 USB串口测距的Python实现方案
准备工作
- 接线确认:CH340的TX接AJ-SR04M的Trig触发脚,RX接Echo回声脚;传感器需接5V电源,且CH340与传感器共地。若CH340 GPIO为3.3V,需加电平转换模块适配AJ-SR04M的5V电平
- 安装依赖:执行
pip install pyserial
两种实现方案
方案1:Arduino中转(推荐,稳定性更高)
先在Arduino上烧录以下代码,通过CH340串口输出测距数据:
const int trigPin = 9; const int echoPin = 10; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // 发送触发脉冲 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 读取回声时间并计算距离 long duration = pulseIn(echoPin, HIGH); float distanceCm = (duration * 0.0343) / 2; Serial.println(distanceCm); delay(1000); }
然后用Python读取串口数据:
import serial import time # 替换为你的CH340串口端口(Windows为COMx,Linux为/dev/ttyUSB0) ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) try: while True: raw_data = ser.readline().decode('utf-8').strip() if raw_data: distance = float(raw_data) print(f"当前距离: {distance:.2f} cm") time.sleep(1) except KeyboardInterrupt: ser.close() print("程序终止,串口已关闭")
方案2:直接通过CH340 GPIO控制(需模块支持GPIO)
部分CH340模块支持GPIO读写,可直接通过Python控制触发脚并读取回声信号:
import serial import time ser = serial.Serial( port='/dev/ttyUSB0', baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=2 ) def get_distance(): # 发送10us高电平触发信号(指令需根据CH340模块文档调整) ser.write(b'\x01') time.sleep(0.00001) ser.write(b'\x00') # 读取回声引脚的电平持续时间 start_time = time.time() while ser.in_waiting == 0: if time.time() - start_time > 0.5: return "超时未检测到回声" echo_duration = time.time() - start_time # 声速取343m/s,距离计算:(时间*声速)/2,转换为厘米 distance_cm = (echo_duration * 34300) / 2 return round(distance_cm, 2) if __name__ == "__main__": try: while True: dist = get_distance() print(f"当前距离: {dist} cm") time.sleep(1) except KeyboardInterrupt: ser.close() print("程序终止")
关键排查点
- 确认CH340驱动已正确安装,设备管理器/系统串口列表中能识别到对应端口
- 串口波特率、端口号必须与代码配置一致
- 若使用方案2,需确认CH340模块的GPIO引脚定义,部分模块可能需要额外AT指令配置GPIO模式
内容的提问来源于stack exchange,提问作者SDeleon21
相关产品推荐
相关产品推荐

