Benewake(北醒) 单点TF系列雷达在 ESP32 DEVKIT_V1 开发板上的运用

2023-11-20 12:30

本文主要是介绍Benewake(北醒) 单点TF系列雷达在 ESP32 DEVKIT_V1 开发板上的运用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 前言
  • 一、硬件准备
  • 二、硬件接线说明
    • 串口接线示意图:
    • I2C接先示意图
  • 三、软件搭建及测试
    • 1、使用Arduino IDE编译教程
    • 2、使用vsCode+Arduino教程
      • 2.1 在vsCode上使用Arduino的环境搭建
      • 2.2 配置烧录和测试
    • 3、使用vsCode+PlatformIO编译教程
  • 四、源代码
    • 串口版本源代码:
    • I2C版本原代码
  • 五:常见问题

前言

此文档介绍了北醒系列激光雷达在ESP32 DEVKIT_V1开发板上的运用,其中包含了

  • 两种雷达的接口 TTLIIC
  • 三种编译方式 通过Arduino IDE \ vsCode+Arduino \ vsCode+PlatformIO

此文档的编译代码可以在Github上下载:https://github.com/benewake-zoran/ESP32-DEVKIT_V1


一、硬件准备

  1. 北醒TF系列雷达一台(相关可参考论坛首页产品介绍)https://blog.csdn.net/zoran_wu/article/details/109445751
  2. ESP32 DEVKIT_V1开发板一块
  3. MicroUSB数据线一条
  4. 杜邦线若干

二、硬件接线说明

串口接线示意图:

在这里插入图片描述

I2C接先示意图

待添加

三、软件搭建及测试

1、使用Arduino IDE编译教程

环境搭建:关于ESP32 DEVKIT_V1板子资料及环境搭建可以参考
https://blog.csdn.net/zoran_wu/article/details/123224154

2、使用vsCode+Arduino教程

2.1 在vsCode上使用Arduino的环境搭建

参考:【vsCode + Arduino】在Visual Studio Code编译Arduino项目
https://blog.csdn.net/zoran_wu/article/details/127630939

2.2 配置烧录和测试

步骤一: 使用vsCode打开Arduino建好的ino,项目文件,选择对应的开发板DOIT DEVKIT_V1
请添加图片描述
步骤二: 选择对应的编译器
请添加图片描述
步骤三: 选择对应COM口并编译,如果COM口正常(以下COM口处理略过)
如果没有COM口,请确认板子是否已经正常连接,对应驱动是否已经正常安装,此处可以参考
关于ESP32 DEVKIT_V1板子资料及环境搭建可以参考
https://blog.csdn.net/zoran_wu/article/details/123224154
请添加图片描述
步骤四: 此处一般会出现一个编译警告,如下图,通过更改json来避免此警告,并加速编译(此处参考待添加)
请添加图片描述
添加一句"output": “./Arduino/build”,如下所示
在这里插入图片描述
步骤五: 编译后进行烧录
烧录方式:先按住BOOT键点烧录,待出现正在上传时可以放开并开始烧录
请添加图片描述
步骤六: 测试
此处手动打开串口监控器,开始打印雷达数据
请添加图片描述

3、使用vsCode+PlatformIO编译教程

参考:【vsCode + PlatformIO】在Visual Studio Code编译Arduino项目
https://blog.csdn.net/BX_Zoran/article/details/123707123

四、源代码

串口版本源代码:

// Note the format for setting a serial port is as follows: Serial2.begin(baud-rate, protocol, RX pin, TX pin);
#define RXD2 16
#define TXD2 17
int dist;     /*----actual distance measurements of LiDAR---*/
int strength; /*----signal strength of LiDAR----------------*/
float temprature;
unsigned char check; /*----save check value------------------------*/
int i;
unsigned char uart[9];      /*----save data measured by LiDAR-------------*/
const int HEADER = 0x59;    /*----frame header of data package------------*/
int rec_debug_state = 0x01; // receive state for frame
void Get_Lidar_data();
void setup()
{delay(2000);Serial.begin(115200);Serial.println("\nBenewake TFmini-S UART LiDAR Program");Serial2.begin(115200);
}
void loop()
{Get_Lidar_data();
}
void Get_Lidar_data()
{if (Serial2.available()) // check if serial port has data input{if (rec_debug_state == 0x01){ // the first byteuart[0] = Serial2.read();if (uart[0] == 0x59){check = uart[0];rec_debug_state = 0x02;}}else if (rec_debug_state == 0x02){ // the second byteuart[1] = Serial2.read();if (uart[1] == 0x59){check += uart[1];rec_debug_state = 0x03;}else{rec_debug_state = 0x01;}}else if (rec_debug_state == 0x03){uart[2] = Serial2.read();check += uart[2];rec_debug_state = 0x04;}else if (rec_debug_state == 0x04){uart[3] = Serial2.read();check += uart[3];rec_debug_state = 0x05;}else if (rec_debug_state == 0x05){uart[4] = Serial2.read();check += uart[4];rec_debug_state = 0x06;}else if (rec_debug_state == 0x06){uart[5] = Serial2.read();check += uart[5];rec_debug_state = 0x07;}else if (rec_debug_state == 0x07){uart[6] = Serial2.read();check += uart[6];rec_debug_state = 0x08;}else if (rec_debug_state == 0x08){uart[7] = Serial2.read();check += uart[7];rec_debug_state = 0x09;}else if (rec_debug_state == 0x09){uart[8] = Serial2.read();if (uart[8] == check){dist = uart[2] + uart[3] * 256;       // the distancestrength = uart[4] + uart[5] * 256;   // the strengthtemprature = uart[6] + uart[7] * 256; // calculate chip tempraturetemprature = temprature / 8 - 256;Serial.print("dist = ");Serial.print(dist); // output measure distance value of LiDARSerial.print('\n');Serial.print("strength = ");Serial.print(strength); // output signal strength valueSerial.print('\n');Serial.print("\t Chip Temprature = ");Serial.print(temprature);Serial.println(" celcius degree"); // output chip temperature of Lidarwhile (Serial2.available()){Serial2.read(); // This part is added becuase some previous packets are there in the buffer so to clear serial buffer and get fresh data.}delay(100);}rec_debug_state = 0x01;}}
}

I2C版本原代码

五:常见问题

这篇关于Benewake(北醒) 单点TF系列雷达在 ESP32 DEVKIT_V1 开发板上的运用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394617

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma