前言
本文介绍了如何将 Benewake 单点 LiDAR 与 Raspberry Pi Pico 微控制器通过MicroPython连接起来。 运用本文档前提:
最终用户手上有 Pico 微控制器和任何单点激光雷达(Luna、TFmini-Plus、mini-S、TF02-pro)
LiDAR接口模式为IIC(默认IIC地址:0x10 )
注: 关于如何配置为IIC模式请参考雷达使用说明书
关于Pico准备工作请参考
2021-09-15 Raspberry Pi Pico 初上手
本文档例程编译经使用Windows 10 64位系统
PICO产品介绍请参考上方链接
PICO与Benewake Lidar的硬件连接
根据 Pico 的规格,它有两个 UART 端口,这些端口可以指向可对应的引脚。 在我们的代码中,我们使用了GPIO-8和9。
需要注意的是,PICO电压供应只有一个引脚,也是3.3V,而Benewake LiDAR的额定电压是5V。 如果电压不是5V,精度会受到影响,误差会超过额定误差,在某些情况下,误差是非线性的,随着距离的增加而增加。 它可能达到40厘米。 因此建议为 LiDAR 使用单独的 5V 电源。
注
以上图片的线缆颜色并非匹配目前所有的Benewake雷达,建议接线前详细参考对应的雷达使用说明书
雷达IIC协议说明
通讯时序
雷达返回9byte协议格式
注 此例程是通过指令获取雷达数据,Luna产品兼容此指令,Luna也可通过内存方式获取,详细请参考Luna使用说明书
例程源码
from machine import Pin, I2C
import time
i2c0 = I2C(0, scl=Pin(9), sda=Pin(8), freq=100000) #初始化I2C总线
print(i2c0.scan()) #扫描一下当前设备的地址
address = 16 #雷达默认地址0x10
getLidarDataCmd = bytearray([0x5A,0x05,0x00,0x01,0x60]) #获取距离值指令
def getLidarData(I2C,I2C_ADDR,CMD):
temp = bytes(9) #雷达每次返回9BYTE数据
I2C.writeto(I2C_ADDR, CMD)
temp = I2C.readfrom(16, 9)
if temp[0] == 0x59 and temp[1] == 0x59 :
distance = temp[2] + temp[3] * 256 #获取距离值
strengh = temp[4] + temp[5] * 256 #获取信号强度值
temperature= (temp[6] + temp[7]* 256)/8-256 #获取芯片温度值
print("distance =%5dcm,strengh = %5d,temperature = %5d℃"%(distance,strengh,temperature))
while True:
getLidarData(i2c0,address,getLidarDataCmd) #获取雷达测量距离值
time.sleep(0.1) # 睡眠100ms
结果输出
USB接口直接打印结果