首页 > 其他分享 >arduino 串口通信

arduino 串口通信

时间:2024-08-03 12:28:14浏览次数:8  
标签:arduino communication rosnoetic 通信 rospy 串口 VirtualBox

arduino 串口通信

1. 编写arduino通信程序

新建arduino代码管理空间,用于存放arduino的串口通信程序。

rosnoetic@rosnoetic-VirtualBox:~$ mkdir arduino_ws

需求:通过串口,由arduino向计算机发送数据

实现:

新建arduino文件

添加如下代码:

/*
 * 需求:由arduino向PC发送数据:hello world
 * 实现:
 *  1.设置波特率
 *  2.Serial.print()或println()发送数据
 */

//初始化
void setup() {
  // put your setup code here, to run once:
  // 设置波特率115200
  Serial.begin(115200);
}

// 循环
void loop() {
  // put your main code here, to run repeatedly:
  // 延迟0.1s
  delay(100);
  // 打印信息
  Serial.print("hello  ");
  Serial.println("world");
}
  • 问答

    问:9600的波特率每秒可以传输多少个字节?

    答:波特率的单位是bit/s,表示1s的时间可以传输多少比特的数据,一个字节包含8bit(为什么是8bit呢,因为一个字节通常可以表示一个ASCII码),那么直观上来说9600的波特率表示每秒可以传输9600/8=1200的字节数。但是在串口通信传输中传输的不是字节流,而是数据包!所要传输的字节是包含在数据包中的,数据包中还包含了其余的辅助传输位。例如对于UART数据包,其含有1个起始位,数据位的个数一般是5到9个,一个可选的奇偶校验位以及1个或2个停止位,默认是。在UART数据包中起始位和停止位是必须的。那么在只有起始位和1个停止位的情况下,传输一个字节的数据包长度为10bits,在这种情况下,每秒传输的数据包个数为:9600/10=960个,实际上解析之后,收到了960个字节数。

保存为comm文件

点击验证,没有红色的输出,则表示验证通过

点击上传,没有红色的输出,则表示上传成功

打开串口监视器,选择115200波特率,即可查看得到相应的结果

同时观察Arduino,可以看到RX灯在闪烁。

2. 编写上位机接收程序

2.1 创建 ROS 工作空间

rosnoetic@rosnoetic-VirtualBox:~$ mkdir -p communication/src

rosnoetic@rosnoetic-VirtualBox:~$ cd communication/

rosnoetic@rosnoetic-VirtualBox:~/communication$ catkin_make

  • catkin_make

2.2 启动 VSCode

rosnoetic@rosnoetic-VirtualBox:~/communication$ code .

2.3 VSCode 中编译 ROS

快捷键 Ctrl+Shift+B 调用编译,选择:catkin_make:build

可以点击配置设置为默认

修改.vscode/tasks.json文件

替换成如下内容:

{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make:debug", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

2.4 创建 ROS 功能包

右击工作空间下的src,选择“create catkin package

设置包名:plumbing_pub_sub

添加依赖:roscpp rospy std_msgs

2.5 python 实现

右击功能包plumbing_pub_sub ,选择”新建文件夹

新建文件夹:scripts

右击scripts ,选择“新建文件

新建python文件:comm.py

python文件中添加如下内容:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import serial
import rospy

"""
    使用python实现下位机消息读取
            1. 导包
            2. 初始化ros节点
            3. 读取串口数据并打印
            4. 循环
"""

if __name__ == '__main__':
    # 串口号
    port = '/dev/ttyUSB0'  
    # 下位机波特率
    baud = 115200  
    # 初始化ros节点
    rospy.init_node("serial_node")
    ser = serial.Serial(port, baud, timeout=0.5)
    rate = rospy.Rate(1)
    # 如果端口开通
    if ser.isOpen():
        rospy.loginfo("成功打开端口")
        while not rospy.is_shutdown():
             data = ser.readline() # 读取数据并去掉换行符
             rospy.loginfo(data)
             rate.sleep()  #休眠
        # rospy.spin()作用是当节点停止时让python程序退出
        rospy.spin() 
    else:
        rospy.loginfo("无法打开端口")

添加可执行权限

右击scripts,选择“在集成终端中打开

修改 python 文件的可执行权限,在终端执行:chmod +x *.py

rosnoetic@rosnoetic-VirtualBox:~/communication/src/plumbing_pub_sub/scripts$ chmod +x *.py

2.6 配置 CMakeLists.txt

Python配置

修改功能包plumbing_pub_sub下的CMakeLists.txt

CMakeLists.txt 中找到如下部分:

修改为如下内容

catkin_install_python(PROGRAMS
  scripts/comm.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

2.7 编译执行

2.7.1 编译

ctrl+alt+T打开终端,执行如下指令进行编译:

rosnoetic@rosnoetic-VirtualBox:~$ cd communication/

rosnoetic@rosnoetic-VirtualBox:~/communication$ catkin_make

  • catkin_make

2.7.2 执行

arduino连接上虚拟机,注意不要打开arduino串口监视器,因为串口只能给其中的一方发送数据。

ctrl+alt+T打开终端,执行如下指令启动 ros 核心

rosnoetic@rosnoetic-VirtualBox:~$ roscore

ctrl+alt+T打开新的终端,重新刷新我们的环境变量

rosnoetic@rosnoetic-VirtualBox:~$ cd communication/

rosnoetic@rosnoetic-VirtualBox:~/communication$ source ./devel/setup.bash 

rosnoetic@rosnoetic-VirtualBox:~/communication$ rosrun plumbing_pub_sub comm.py 

即可看到如下图所示的hello world输出

标签:arduino,communication,rosnoetic,通信,rospy,串口,VirtualBox
From: https://www.cnblogs.com/windandchimes/p/18340323

相关文章

  • arduino 开发环境搭建
    arduino开发环境搭建将Arduino与笔记本相连,如下图所示:基于Arduino的开发实现,毋庸置疑的必须先要准备Arduino电路板(建议型号:ArduinoMega2560,因为它提供了更多的中断引脚),除了硬件之外,还需要准备软件环境,安装ArduinoIDE,在Ubuntu下,Arduino开发环境的搭建步骤如下:(1)硬件......
  • 【学术会议征稿】第二届智能通信与网络国际学术会议(ICN 2024)
    第二届智能通信与网络国际学术会议(ICN2024)The 2ndInternationalConferenceonIntelligentCommunicationandNetworking第二届智能通信与网络国际学术会议(ICN2024)将于2024年11月15-17日在中国沈阳召开。ICN2024将围绕智能通信与网络的最新研究领域,为来自国内外高等......
  • 电子科技集团WJ20057型热网智能终端数据监测MODBUS通信协议
    WJ2007型热网智能终端数据监测MODBUS通信协议  1、 WJ2007终端增加数据通信协议,上传实时数据;采用MODBUS通信协议,格式见表1;   地址功能起始地址点数CRC校验0x010x030x000x000x000x420xC50xFB1byte1bytes2byt......
  • 基于STC8H4K64TL单片机的串口1打印RTC(即实时时钟)功能调试
    基于STC8H4K64TL单片机的串口1打印RTC(即实时时钟)功能调试STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚说明STC8H系列单片机I/O......
  • 基于STC8H系列单片机的串口1打印片内EEPROM擦除数据、读取数据、写入数据功能调试
    基于STC8H系列单片机的串口1打印片内EEPROM擦除数据、读取数据、写入数据功能调试STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚......
  • 探索Mojo编程语言在实时通信领域的应用
    在当今快速发展的技术世界中,实时通信已成为许多应用程序的核心需求。无论是在线游戏、协作工具还是实时数据流应用,WebSockets和其他实时通信协议都扮演着至关重要的角色。本文将深入探讨一种假想的编程语言——Mojo——在实现这些实时通信功能方面的潜力和应用。1.引言实......
  • Java串口编程:与硬件通信的实现
    Java串口编程:与硬件通信的实现大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!串口编程在与硬件设备通信时扮演着重要角色,尤其是在工业自动化、嵌入式系统和其他硬件设备的控制中。Java虽然在串口编程上并不直接支持,但通过第三方库(如JavaSerialPortAPI......
  • C-V2X安全证书:保障车路云系统通信安全的关键
    前言  随着智能网联(C-V2X)技术和车路云一体化系统的快速发展,汽车、道路和云端之间的信息交换变得越来越频繁和复杂。在这个信息高度互联的时代,如何确保车路云一体化通信的安全性成为了亟待解决的问题。 车路云一体化系统与C-V2X安全证书  车路云一体化系统通过新一代......
  • 用于从连接到 LAN 交换机的四个 Arduino 扩展板读取/保存数据的 Python 代码
    我有四个Arduino扩展板连接到LAN交换机。每个人都会发出一条“HelloJane”消息。LAN交换机已连接到我的PC。我需要将每个Arduino的数据/消息保存在PC上的单独文件夹中。请帮助使用Python脚本/代码。我能够看到来自所有四个Arduino的消息,但无法将它们保存到文......
  • Arduino之串口通信函数
    串口通信,也称为串行通信,是一种数据传输方式,其中数据以串行的形式按位顺序发送和接收。Arduino板通常具有内置的串口通信功能,允许它与其他设备(如计算机、传感器或其他微控制器)进行数据交换。Arduion的串口通信主要是通过TX/RX引脚实现的。TX(发送)和RX(接收)引脚是Arduino等微控制......