树莓派4B基于OpenCV的C++环境的串口通信

2023-05-16

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

第二次积分赛我们队选择了飞控,我负责图像方面,我先简要说明一下该题中树莓派所需要的功能:用OpenCV图像处理进行巡线,同时识别红圆和绿圆。然后就是关键的一步,树莓派与飞控的通信

树莓派将处理好的数据(为巡线所确定的点、圆心等)发送给飞控,飞控端再通过PID等算法对接收到的数据进行解析,从而控制飞行器的运动。在这里就需要树莓派与飞控通信,我们选择了简单的uart串口通信

本以为会比较顺利,因为树莓派在网上有很多的开源教程,我也找了许多的教程一步步试,费尽了许多周折将串口配置好、下载的库也配置好,程序也编译通过,但是和CH340连电脑,就。。。啥也没显示。。。:-)此时我的心是悲剧的。

最终找了学长才解决的问题。(这里先感谢srh学长!!学长也超级耐心!)

目前网上找到的大多数关于树莓派 4B 串口的文章,包括B站树小悉的视频教程,大都是将硬件串口(ttyAMA0,UART0)设置为主串口(Serial0)关闭蓝牙,这个做法针对树莓派3B及以下是必须的,因为本身串口不够用。但对树莓派 4B 来说并不需要,因为有额外 4 个串口可以利用,默认配置好的硬件串口和miniUART 可以保留设置。我参考了网上的教程,但就是无法串口收发数据,不过使用树莓派的这额外四个串口就成功了。(串口相关的具体可以查看这篇官方文档,用浏览器自带网页搜索“serial”可以较快查到)

然后,在配置WiringPi库的时候也遇到了版本加入OpenCV环境等问题。

话不多说,先分享我的配置过程,也为了让后来人少走一些弯路。这里先默认读者已经会使用树莓派的基本操作,且已经装好OpenCV的C++环境,并且会cmake编译运行。如果不会,请参考这篇文章。下面的操作也是基于这篇文章的基础之上的。

一、串口配置

1. 展示所有串口命令

命令行输入:

dtoverlay -a | grep uart

2. 查看串口信息

我们来康康树莓派4B额外4个串口之一的uart2,命令行输入:

dtoverlay -h uart2

可以查看到配置信息:

相关信息会展现 GPIOs 与树莓派4B额外的4个UART 串口的分配:0-3 对应 UART2, 4-7 对应 UART3,8-11 对应 UART 4,以及 12-15 对应UART 5。

3. 开启串口 UART2-5

执行编辑 config.txt 命令,命令行输入:

sudo nano /boot/config.txt

拉到文件结尾,添加如下代码:

dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5

按ctrl+x,然后保存,enter退出。

重启树莓派,命令行输入:

sudo reboot

重启后查看串口是否打开,命令行输入:

ls /dev/ttyAMA*

可以看到几个串口都打开了。(AMA1-4分别对应UART2-5)

4、串口接线

接下来我们看看这4个串口分别对应于树莓派的哪些引脚:

UART0: GPIO14 = TXD0 -> ttyAMA0     GPIO15 = RXD0 -> ttyAMA0
UART2: GPIO0  = TXD2 -> ttyAMA1     GPIO1  = RXD2 -> ttyAMA1
UART3: GPIO4  = TXD3 -> ttyAMA2     GPIO5  = RXD3 -> ttyAMA2
UART4: GPIO8  = TXD4 -> ttyAMA3     GPIO9  = RXD4 -> ttyAMA3
UART5: GPIO12 = TXD5 -> ttyAMA4     GPIO13 = RXD5 -> ttyAMA4

我们这里使用UART2,可以看到 GPIO0对应于uart2的TX(引脚编号为27),GPIO1对应于uart2的RX(引脚编号为28)。故将CH340的TX和28号引脚相连,RX引脚和27号引脚相连,GND和30号引脚相连共地。

二、安装WiringPi库

什么?WiringPi?你确定是WiringPi?不是WritingPi?没错,你的英语没问题,就是WiringPi。。:-)

WiringPi是一个用C语言编写的树莓派软件包,可用于树莓派GPIO引脚控制、串口通信、SPI通信及I2C通信等功能。其官方网址为http://wiringpi.com。我们可以看到这个库作者已经停止维护了。我们在这里用的是串口通信,故只用它的wiringSerial库。

安装WiringPi,我试了试若直接apt-get install wiringpi的话不行,只能卡在2.32版本,而树莓派4B要树莓派2.52版本才行。(有可能是我安装的问题)好在 GitHub 仓库上的有源码可以下载。

在命令行输入:

git clone https://github.com/WiringPi/WiringPi.git
cd ~/wiringPi
./build

这样我们就在wiringPi目录下安装好了WiringPi库。

我们查看一下版本,在命令行中输入:

gpio -v

可以看到版本号是 2.7。在树莓派4B上可以正常使用。

三、在OpenCV环境中cmakeWiringPi库

cmake原来OpenCV程序时(OpenCV相关目录下已创建cpp文件test_opencv.cpp)需要在CMakeLists.txt里写如下代码:(如不懂,具体还是请看这篇文章)

cmake_minimum_required(VERSION 2.6)
project(test_opencv)
find_package(OpenCV REQUIRED)
add_executable(test_opencv test_opencv.cpp)
target_link_libraries(test_opencv ${OpenCV_LIBS})

要加入WiringPi库,只需在CMakeLists.txt里写:

cmake_minimum_required(VERSION 2.6)
add_definitions( -lwiringPi  )
project(test_opencv)
find_package(OpenCV REQUIRED)
find_library(WIRINGPI_LIBRARIES NAMES wiringPi)
add_executable(test_opencv test_opencv.cpp)
target_link_libraries(test_opencv ${OpenCV_LIBS})
target_link_libraries(test_opencv ${WIRINGPI_LIBRARIES}  -lpthread)    //-lpthread后缀要写上,否则编译会不通过

四、cpp代码编写

使用WiringPi库来串口通信要包含头文件:

#include 
#include 

其实用wiringSerial.h就可以了。

在main函数里写串口初始化代码:

wiringPiSetup();

然后打开串口2,并设一个变量fd来作为串口文件描述符:

int fd =serialOpen("/dev/ttyAMA1",9600);   //这里波特率设置为9600

发送函数:

//写在while里,每隔3秒发送一个hello world!!
serialPrintf(fd,"hello world!!\n");   
delay(3000);

功能类似于printf,可以同时发送多个字符串。

注:

**以上发送函数只是把数据推送到发送缓冲区里,不会等待串口发送完成。**后续程序如果要用到用到串口返回数据应当要考虑到串口传输时间。并且最好等之前的数据全部发送完成后再发送新数据,否则可能会出问题,这也要考虑到串口发送数据的时间,可能需要等待。

我们在项目的目录下输入:

cmake .
make
./test_opencv

可以编译并运行程序了!编译也没有报错!

这样电脑端可以在串口调试助手上接收到数据。图中是vofa上接收数据情况。

当然,我们串口通信是为了发送图像处理后的数据,并和我们的飞控通信,在树莓派端,我们需要将需要的数据打包成帧,建立一个自己写的通信协议,发送给飞控,飞控端解析这些数据帧就可以了。这些会在第二次积分赛总结里写,不过估计要鸽到暑假了。:-)

参考文章:

https://blog.csdn.net/weixin_40796925/article/details/107907991

  • 一、串口配置

  • 1. 展示所有串口命令

  • 2. 查看串口信息

  • 3. 开启串口 UART2-5

  • 4、串口接线

  • 二、安装WiringPi库

  • 三、在OpenCV环境中cmakeWiringPi库

  • 四、cpp代码编写

    __EOF__

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Oh5cqJj-1649524729903)(https://blog.csdn.net/qhwyx)]Loafing日寄 - 本文链接: https://blog.csdn.net/qhwyx/p/16123125.html

  • 关于博主: I am a college student who is good at loafing.
  • 版权声明: 版权所有,侵权必究
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角**【[推荐](javascript:void(0)😉】**一下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派4B基于OpenCV的C++环境的串口通信 的相关文章

  • tkinter 出现两个窗口 tk(未响应) 解决方法

    问题 xff1a tkinter界面开发 xff0c 莫名出现一个叫 tk 未响应 的小窗口 xff0c 最后发现是因为自定义了窗口图标导致产生多余窗口 解决方法 xff1a 将设置窗口图标代码放到设置窗口大小代码之后即可 xff08 该方
  • python3适配pykml教程

    pykml是用python2写的 xff0c 由于python3和python2语法及函数名有所不同 xff0c python3使用的时候需要手动修改几个地方 xff0c 如下 xff1a 1 出现 xff1a ModuleNotFound
  • c51单片机学习笔记-独立按键实验

    目的 xff1a 通过开发板上的独立按键 K1 控制 D1 指示灯亮灭 编译软件 xff1a keil5 过程 xff1a xff08 1 xff09 定义独立按键控制脚 sbit KEY1 61 P3 1 sbit KEY2 61 P3
  • openpyxl为指定区域设置边框为粗匣框线

    前言 xff1a 最近在用openpyxl分析Excel数据 xff0c 为了让表格层次更分明 xff0c 想给制定区域添加粗匣框线 xff0c 网上没有找到现成的方法 xff0c 自己摸索了一下 xff0c 终于解决了 xff0c 现在记
  • ubuntu上网问题以及ping通网络设备

    问题一 xff1a ubuntu上网问题 如何ping www baidu com Ubuntu上网模式有两种 xff1a 桥接和NAT 1 桥接模式 xff1a 前提是 xff1a 主机是连接的无线网 xff0c 主机有线网卡的IP设置的
  • Python脚本调用C++动态库,C++调用Python脚本实操

    一 Python调用C 43 43 动态库 实现方法 xff1a 使用python 的ctypes 模块加载dll 首先 xff0c 需要用VS创建一个dll动态库 xff0c 网上方法很多 xff0c 就不细说了 xff0c 代码如下 x
  • 利用GPU训练时的常见错误

    1 CUDA VIDIBLE DEVICES 61 4 5 python3 main py 我想在集群条件下利用4 5号GPU xff0c 由于模型较小 xff0c 并不清楚是都可以指定4 5号GPU xff08 内存占用情况看不出来 后续
  • Jetson TX1底板的接口调试

    1 I2C总线上外设查询 I2C Tools的安装和使用 在控制台输入 sudo apt get install i2c tools 安装完成后可以使用命令验证安装成功 sudo i2cdetect l I2C设备查询使用 sudo i2c
  • 驱动——platform驱动总线三种匹配方式

    三种platform驱动匹配方式代码案例以及现象 方式一 xff1a 通过设置名字进行匹配 相关API简介 xff1a 1 platform device的API 分配对象 struct platform device const char
  • 开源框架APM工具--SkyWalking原理与应用

    一 分布式链路追踪简介 随着业务系统的不断发展 微服务架构的演进 xff0c 从原来的单体应用架构 垂直应用架构 分布式 SOA 架构到现在的微服务架构 xff0c 系统逐步走向微服务化以适应用户高并发请求等需求 在微服务架构中 xff0c
  • 什么是弹性云服务器?

    ecs云服务器是由CPU 内存 镜像 云硬盘组成的一种可随时获取 弹性可扩展的计算服务器 xff0c 同时它结合虚拟私有云 虚拟防火墙 数据多副本保存等能力 xff0c 为您打造一个高效 可靠 安全的计算环境 xff0c 确保您的服务持久稳
  • linux下修改MAC地址的问题解决

    在linux中 xff0c 修改MAC地址 ifdown eth0 ifconfig eth0 hw ether 12 xff1a 34 xff1a 56 xff1a 78 xff1a 90 xff1a 12 xff08 修改的MAC地址跟
  • 51串口发送数据的格式

    串行口控制寄存器SCON SCON的字节地址是98H xff0c 其格式如下 xff1a SM0 SM1 xff1a 串行口工作方式控制位 xff1a SM0 SM1 工作方式 功能 波特率 00 方式0 同步移位寄存器 fosc 12 0
  • c51单片机学习笔记-矩阵按键实验

    目的 xff1a 通过数码管显示矩阵按键 S1 S16 按下后键值 0 F 编译软件 xff1a keil5 过程 xff1a xff08 1 xff09 定义各端口 include 34 reg52 h 34 typedef unsign
  • CMake 添加第三方库的几种依赖方式

    转载链接 xff1a C 43 43 工程 xff1a 总结 CMake 添加第三方库依赖方式git submodule find library FetchContent CPM等 github地址 cpp cmake example 第
  • vue.js中v-for的使用及索引获取

    vue js中v for的使用及索引获取 1 v for 直接上代码 示例一 xff1a lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt
  • (转贴)Windows CE 5.0下串口驱动硬件FIFO控制Bug分析及修正方法

    转贴自 xff1a 驱动开发网 原贴地址 xff1a http bbs driverdevelop com read php tid 61 109193 amp fpage 61 0 amp toread 61 amp page 61 1
  • 四剑客和正则表达式常见故障及困惑集合(待更新)

    一 find命令 warning警告 maxdepth 这个参数要放在其他参数之前 root 64 oldboyedu59 find type d maxdepth 1 find warning you have specified the
  • sed的使用

    一 xff0c 替换文本 s pattern replacement flags replacement会替换pattern 例如 xff1a root 64 node1 sed cat data2 txt This is a test o
  • KVM虚拟化-创建-桥接-硬盘-快照

    1 创建 使用virt manager进行创建 virt manager进入管理器 点击如图进行创建 将ISO下载到虚拟机里面 点击浏览 下面是虚拟机名字 选择本地浏览 选中CentOS的iso 选择后前进 选择内存和cpu xff0c 前

随机推荐

  • 串口专题(一)——基础知识

    前言 xff1a 为了方便查看博客 xff0c 特意申请了一个公众号 xff0c 附上二维码 xff0c 有兴趣的朋友可以关注 xff0c 和我一起讨论学习 xff0c 一起享受技术 xff0c 一起成长 1 概念介绍 串行口是计算机一种常
  • STM32中晶振的原理与作用

    前言 xff1a 为了方便查看博客 xff0c 特意申请了一个公众号 xff0c 附上二维码 xff0c 有兴趣的朋友可以关注 xff0c 和我一起讨论学习 xff0c 一起享受技术 xff0c 一起成长 转载地址 STM32中晶振的原理与
  • STM32学习笔记一一UCOSII(1)

    前言 xff1a 为了方便查看博客 xff0c 特意申请了一个公众号 xff0c 附上二维码 xff0c 有兴趣的朋友可以关注 xff0c 和我一起讨论学习 xff0c 一起享受技术 xff0c 一起成长 1 简介 UCOSII 是一个可以
  • PADS 原理图库文件绘制

    前言 xff1a 为了方便查看博客 xff0c 特意申请了一个公众号 xff0c 附上二维码 xff0c 有兴趣的朋友可以关注 xff0c 和我一起讨论学习 xff0c 一起享受技术 xff0c 一起成长 1 PADS Logic 参数设置
  • prometheus监管平台(一)(开源)

    prometheus监管平台 xff08 一 xff09 xff08 开源 xff09 一 登录二 首页三 General Management功能四 Host Management功能五 Job Management功能六 Alarm M
  • vncserver连接后窗口显示太小

    VNC server的默认的分辨率是1024x768 如果要改变VNC server的分辨率 1 可以用一下命令启动VNC server root 64 localhost vncserver geometry 1280x1024 这种修改
  • dfs (二进制枚举,暴力,马的管辖)

    在中国象棋中 xff0c 马是走日字的 一个马的管辖范围指的是当前位置以及一步之内能走到的位置 xff0c 下图的绿色旗子表示马能走到的位置 如果一匹马的某个方向被蹩马脚 xff0c 它就不能往这个方向跳了 xff0c 如下图所示 xff0
  • linux进程(四)——进程的几种状态

    usr src linux headers 4 15 0 45 include linux Used in tsk gt state define TASK RUNNING 0x0000 define TASK INTERRUPTIBLE
  • linux网络设备驱动(一)

    一 框架 1 xff09 网络协议接口层 向网络层协议提供统一的数据包收发接口 xff0c 不论上层协议是ARP xff0c 还是IP xff0c 都通过dev queue xmit 函数发送数据 xff0c 并通过netif rx 函数接
  • linux taskset命令

    一 简介 taskset命令用于设置进程 xff08 或线程 xff09 的处理器亲和性 xff08 Processor Affinity xff09 xff0c 可以将进程 xff08 或线程 xff09 绑定到特定的一个 或 多个CPU
  • STM32使用cubemx、HAL库硬件SPI驱动ICM20602

    软件平台 xff1a cubemx mdk 硬件平台 xff1a stm32f103rct6 ICM20602 工程源代码链接 xff1a https download csdn net download wwwlyj123321 1099
  • 【OBS】OBS Studio 的安装、参数设置和录屏、摄像头使用教程

    提示 xff1a 作者简介 xff1a 盐焗小星球 wyb xff0c 一名在读的电子信息工程专业大学生 x1f4d1 个人主页 xff1a 盐焗小星球 wyb的主页 x1f4eb 如果文章知识点有错误的地方 xff0c 请指正 xff01
  • IMU:姿态解算算法集合

    文章目录 一 IMU原理二 源码 一 IMU原理 二 源码 源文件 xff1a span class token comment include 34 IMU h 34 span span class token comment inclu
  • ORB特征提取、匹配及位置估计

    1 什么是ORB特征点 xff1f 图像特征点可以理解为图像中比较显著的点 xff0c 如轮廓点 xff0c 较暗区域中的亮点 xff0c 较亮区域中的暗点等 ORB采用FAST xff08 features from accelerate
  • c51单片机学习笔记-LED点阵实验(点亮一个点)

    目的 xff1a xff1a 在点阵屏上点亮一个点 方法 xff1a 让 LED 点阵的左上角第一个点点亮 xff0c 实际上就是将第一个点对应的行为高电平 xff0c 列为低电平 即可 也就是让 74HC595 输出 0X80 xff08
  • tepedef和define的区别

    xfeff xfeff 1 xff1a typedef 可以简化复杂的类型声明 2 xff1a 定义与平台无关的类型 3 xff1a 可以与 struct 结合使用 4 xff1a typedef 和 define 执行时间不同 关键字ty
  • 如何让虚拟机里的Ubuntu通过连接手机USB数据线上网

    目录 一 前言 二 Windows联网方法 三 Ubuntu联网方法 一 前言 最近遇到了这样一个问题 xff0c 有一台台式机 xff0c 地插网口无法访问外网 xff0c 周边也没有无线路由器 xff0c 要访问外网 xff0c 该如何
  • 老的Struts项目还在维护。但新的项目开发,更多转向了Spring MVC

    在Java后端开发中 xff0c MVC模型还是主流 而Struts作为一个MVC框架 xff0c 单从技术上来说 xff0c 还是很优秀的 但是 xff0c 现在Spring实在是太强势了 xff0c 越来越成为Java开发中的 一站式
  • 从Windows走入Docker(四)如何使用Docker Desktop的快速5步教程

    学习自www docker com 步骤1 xff1a 使用本地Web服务器 在不设置IIS的情况下运行IIS 如果您以前没有运行过Docker xff0c 这里有一个快速的方法来了解Docker在工作中的力量 首先 xff0c 确保您正在
  • 树莓派4B基于OpenCV的C++环境的串口通信

    Python微信订餐小程序课程视频 https blog csdn net m0 56069948 article details 122285951 Python实战量化交易理财系统 https blog csdn net m0 5606