Atlas200 DK A2与Arduino进行UART串口通信

news2024/11/26 2:23:58

我们在做一些人工智能的应用开发时往往使用人工智能开发板作为上位机(比如我们的小滕),Arduino、stm32等作为下位机控制板,通过上位机进行人工智能模型的推理之后进而给下位机传输对应的控制命令实现智能控制。那么如何实现两者的通信呢?这个问题可以通过UART串口通信完成,这篇博客会回答这个问题,并给出具体的案例和详细的实现步骤。

1.什么是UART串口通信?

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)串口通信是一种串行通信协议。它是一种异步通信方式,即发送端和接收端不需要提前约定好通信的时间,而是通过特定的起始位和结束位来标识数据的开始和结束。

UART串口通信主要由三个部分组成:发送器、接收器和波特率发生器。发送器负责将并行数据转换为串行数据并发送出去;接收器负责将接收到的串行数据转换为并行数据;波特率发生器负责生成用于控制数据传输速率的时钟信号。

UART串口通信的主要特点是简单、易用,但是传输距离较短,通常在几米到几十米之间。它广泛应用于各种设备之间的短距离通信,如计算机与打印机、鼠标等外设的通信,以及嵌入式系统中的设备间通信等。

UART 是通用异步接收器/发送器。它不同于 SPI、I2C 那样的通信协议,而是微控制器中的物理电路,或者说是独立的 IC。UART 的主要用途是传输和接收串行数据。在UART通信中,两个UART直接相互通信。发送端 UART 将来自微控制器设备的并行数据转换为串行形式,将其串行数据传输到接收端 UART。

然后接收端UART将串行数据转换回并行数据。在两个 UART 之间传输数据只需要两根线。数据从发送端UART的TX引脚流向接收端UART的RX引脚。

2.如何完成Atlas200 DK A2与Arduino的UART串口通信

2.1 准备硬件

Atlas 200DK A2,Arduino 开发板,三根公母线

2.2 在Arduino上烧录测试程序

void setup() {
  Serial.begin(115200); // 启动串行连接,波特率为115200
}

void loop() {
  if(Serial.available() > 0){
    String str = Serial.readString();
    if(str.equals("1\n")){
      Serial.println("Arduino: 1\n");
    }
  }
}


2.3 连线

将小滕的TX引脚连接Arduino的RX引脚,将小滕的RX引脚连接Arduino的TX引脚,将小滕的GND引脚连接Arduino的GND引脚,如下图。

2.4 配置开发板的/dev/ttyAMA0

之前也是一直卡在了这一步。
在开发板上root用户下输入下面的命令:

ls -l /dev/ttyAMA0

如果该设备节点存在并且具有相应的权限,表示该串口设备已被占用。如果没有显示任何结果,表示该串口设备当前没有被占用。

执行下面的命令查看是被哪个进程占用了

fuser /dev/ttyAMA0

查看这个进程的信息

ps 1423

经查询它是一个终端登录程序,用于在串行接口上提供终端登录功能。我们需要禁用它用/dev/ttyAMA0提供终端登录功能,进而让/dev/ttyAMA0空闲下来用来进行两个开发板的UART通信

执行以下命令以停止终端登录程序:

sudo systemctl stop serial-getty@ttyAMA0.service

执行以下命令以禁用终端登录程序的自动启动:

sudo systemctl disable serial-getty@ttyAMA0.service


再次执行

fuser /dev/ttyAMA0

可以看到没有信息返回,也就是说/dev/ttyAMA0空闲下来了。

2.5 编写小滕侧通信代码

cd /home/HwHiAiUser/samples/notebooks/
bash start_notebook.sh

新建一个00-test_uart文件夹

在这个文件夹下新建一个test.ipython写入代码

from periphery import Serial
import time

ser = Serial("/dev/ttyAMA0", 115200)
flag = True

while flag:
    ser.write(b"1\n")
    readdata = ser.read(32, 2).decode('gbk')
    print(f'Received reply: {readdata}')

运行代码

代码的逻辑功能很简单,就是首先通过小滕在串口中写入一个“1\n”,Arduino开发板侧会一直判断串口中是不是有数据,如果有数据且数据是“1\n”,那么表明Arduino收到了小滕的信息,Arduino向串口写入"Arduino: 1\n"向小滕告知它收到了数据,此时小滕将会打印收到的数据,也就是Received reply: Arduino: 1。由此一直循环,便实现了两者的通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简化交互体验——探索Gradio的ClearButton模块

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

ndarray对象怎样创建?ndarray基本属性列举

numpy中包含一个N维数组对象,即ndarray对象,该对象具有矢量算术能力和复杂的广播能力,常用于科学计算。ndarray对象中的元素可以通过索引访问,索引序号从0开始;ndarray对象中存储的所有元素的类型必须相同。创建ndarray对象的方式…

输入框设置placeholder的文字居中

<input classlogin-form-pwd placeholder请输入商家登录密码 placeholder-class"center"></input> .center{ text-align: center; }

Linux下 MHA故障切换 主从角色提升

目录 所有主机共同操作 manger操作 其他四台安装 搭建主从复制环境 nobe slave1 配置 slave2 slave3 配置 配置MHA环境 简述MHA&#xff1a; MHA&#xff08;Master High Availability&#xff09;目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它由…

MySQL中的DDL操作,MySQL中DML操作,MySQL查询数据,SQL函数,MySQL中的索引,MySQL事务,MySQL的用户管理,MySQL分页查询

目录 MySQL中的DDL操作 一、创建表与删除表 1&#xff0c;创建表 2&#xff0c;查看已创建的表。 3&#xff0c;删除表 二、修改表 1&#xff0c;修改表名 2&#xff0c;修改列名 3&#xff0c;修改列类型 4&#xff0c;添加新列 5&#xff0c;删除指定列 三、MySQ…

劳保鞋厂家带你深入了解防静电安全鞋——百华劳保

静电小则电人&#xff0c;大则引起火灾。静电的能量虽然不大&#xff0c;但其易放电&#xff0c;会出现静电火花&#xff0c;在易燃易爆场所&#xff0c;可能因静电火花引起火灾和爆炸。现在的工厂不少都是要求穿着具有防静电性能的工作鞋&#xff0c;很多劳动者都会穿着防静电…

使用Docker Swarm部署RabbitMQ+HAProxy高可用集群(三节点-镜像模式)

1. 部署规划 当前规划中&#xff0c;只启动一个HAProxy服务&#xff0c;主要用来做RabbitMQ节点的负载均衡和代理&#xff0c;但是HAProxy可能会出现单点故障&#xff0c;后续需要启动多个HAProxy节点&#xff0c;然后结合Keepalived来进行 设置虚拟IP 做故障转移 节点名称节…

nvm安装nodejs-2023年6月29日

nvm安装nodejs-2023年6月29日 cmd命令行&#xff0c;执行如下代码&#xff0c;表示安装最新稳定版本的node,这里默认是国外的node节点服务器 nvm install lts报错的话&#xff0c;找到安装目录&#xff0c;打开settings.txt&#xff0c;添加如下代码 更换node的国内淘宝镜像节…

cnocr安装和识别文字

cnocr 介绍 参考&#xff1a; cnocr: 极简的中文OCR Python包 https://cnocr.readthedocs.io/zh/latest/ cnocr 主要针对的是排版简单的印刷体文字图片&#xff0c;如截图图片&#xff0c;扫描件等。目前内置的文字检测和分行模块无法处理复杂的文字排版定位。如果要用于场景…

《从零开始编写一个直播服务器》音视频封装FLV

流媒体服务系列文章 文章目录 流媒体服务系列文章前言一、FLV 封装格式解析二、实例分析总结 前言 一、FLV 封装格式解析 flv header flv body flv header previous size0 tag1 previous size1 tag2 … prvious sizen tagn1 flv header previous size0 tag1 header ta…

华为OD机试真题 Python 实现【获得完美走位】【2022Q4 200分】

一、题目描述 在第一人称射击游戏中&#xff0c;玩家通过键盘的 A、S、D、W 四个按键控制游戏人物分别向左、向后、向右、向前进行移动&#xff0c;从而完成走位假设玩家每按动一次键盘&#xff0c;游戏任务会向某个方向移动一步&#xff0c;如果玩家在操作一定次数的键盘并且…

经典文献阅读之--Wheel-SLAM(低成本轮式机器人定位算法)

0. 简介 最近随着越来越多的团队开始注重将SLAM应用在机器人和无人驾驶上&#xff0c;最近SLAM的顶刊顶会也开始想着多模态和低成本这两个方向开始发力。而本文讲的这个《Wheel-SLAM: Simultaneous Localization and Terrain Mapping Using One Wheel-mounted IMU》就是讲了如…

Scala中那些奇怪的符号

<- 运算符 用于 for 循环中&#xff0c;如下所示&#xff1a; for ( i <- arr ){println( "i" i ) } -> 只会用在 k->v 里面 // Map 键值对演示 val colors Map("red" -> "#FF0000", "azure" -> "#F0FF…

WPF 控件设置透明度的方法

方法一&#xff1a;通过 Opacity 属性设置背景色透明度。范围从0-1&#xff0c;0表示完全透明&#xff0c;看不见。 通过 Opacity 属性去改变控件透明度 会影响子控件的透明度&#xff0c;是因为Opacity属性是在UIElement 类(以及Brush基类)中定义&#xff0c;所有元素都具有该…

python分析QQ群聊天记录全过程,从获取到可视化

​ 随着社交媒体的兴起&#xff0c;QQ群成为了人们交流的重要平台&#xff0c;而提取这些数据可以帮助我们了解用户关注的重点和行为&#xff0c;那么如何获取QQ群聊天记录呢&#xff1f;如何对其进行处理并分析呢&#xff1f; 这是一套完整的流程&#xff0c;从选定的QQ群中…

2023最新版SpringCloudAlibaba笔记,把微服务玩的出神入化

SpringCloud Alibaba 大家都知道&#xff0c;新的东西出现必然是因为市场的需求。由于 SpringCloud 版本更新较快&#xff0c;日积月累之下产生了许多的 Bug&#xff0c;所以 SpringCloud 微服务实现方式&#xff1a;Spring Cloud Netflix 自然而然地进入了维护状态&#xff0…

java计算器拓展

源代码&#xff1a; package shixun; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.SwingConstants;import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Font; impor…

Golang项目引入第三方依赖库

基本目录 第一步&#xff1a; 初始化依赖&#xff0c;切换到项目根目录下面&#xff0c;执行一下命令&#xff0c;g6 为 module 的名称 go mod init g6 生成 go.mod 文件 module g6 go 1.20 将来我们项目的所有依赖都会依赖于 g6 第二步&#xff1a; 引入第三方依赖 &qu…

禁烟警示器报警器

本例介绍的禁止吸烟警示器&#xff0c;可用于家庭居室或各种不宜吸烟的场合 (例如医院、会议室等)。当有人吸烟时&#xff0c;该禁止吸烟警示器会发出"请不要吸烟!"的语言警示声&#xff0c;提醒吸烟者自觉停止吸烟。 一、电路工作原理 电路原理如图 5 所示。 该…

3-如何创建等比数列?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 3-如何创建等差数列&#xff1f;