由于项目需求,我在淘宝买了两个激光测距模块。
模块接口

  • RS485 接口:A/B
  • 电源接口:Vin+/GND

实物图:
激光测距模块 树莓派3b+ 485通信转串口
以下是关于这个模块的简单使用方法:
硬件连接

  • 激光测距模块电源端可接9-36 v的电压,我这里使用的是12v的电池。
  • 树莓派貌似无法没有485的接口,我们可以使用485转串口模块连接树莓派与激光测距模块。
  • 将正负接好,485接口A端与485转串口模块的A端连接,同样的将B端连接,再将两个模块的GND连接起来,也就是共地。
  • 根据树莓派40pin 引脚对照表,树莓派1号引脚为3.3v电源,6号为GND。我们将这两个引脚分别于485转串口模块的vcc和GND连接起来。8号和10号引脚分别为TXD, RXD,这两个引脚分别接到485转串口模块的RXD, TXD,也就是对调连接。

接入树莓派使用之前,我先使用windows电脑串口助手进行测试:

  • 使用默认的115200的串口波特率,根据ASCII通信协议,发送单次测量指令iSM,若激光测距模块能返回“距离 + 回光量”这样的数据,则模块能够正常使用。
  • 根据Modbus 协议,使用串口助手发送16进制指令0x01 0x03 0x00 0x0F 0x00 0x02 0xF4 0x08,看是否得到正常响应。
  • 由于我要使用到两个激光测距模块,所以现在使用ASCII协议更改其中一个激光测距模块的地址为0x02,另一个不做改变,仍为0x01。更改方法为发送ASCII指令iSET:6,02 ,设置成功会返回“OK”。

现在接入树莓派来使用:

  • 树莓派的串口使用要将蓝牙功能关闭,将8号、10号引脚作为串口使用。
  • 测试这两个模块的代码如下

import serial
import binascii

    port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0)
    
    while True:
        print("Please input the command:")
        cmd = raw_input()
    	if(cmd == "d1"):
    	    print("Modbus test...")
    	    Single_measure_cmd ="\x01\x03\x00\x0F\x00\x02\xF4\x08"
    	    port.write(Single_measure_cmd)
    	    rcv = port.read(16)
    	    new_receive = int(binascii.hexlify(rcv[5:7]), 16)
    	    print("The detected instance is " + str(new_receive) + " mm")
    
    if(cmd == "d2"):
        print("Modbus test...")
        Single_measure_cmd ="\x02\x03\x00\x0F\x00\x02\xF4\x3B"
        port.write(Single_measure_cmd)
        rcv = port.read(16)
        new_receive = int(binascii.hexlify(rcv[5:7]), 16)
        print("The detected instance is " + str(new_receive) + " mm")

相关文章: