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

我们在做一些人工智能的应用开发时往往使用人工智能开发板作为上位机(比如我们的小滕),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。由此一直循环,便实现了两者的通信。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: Arduino和OpenMV可以通过UART通信。UART是一种串行通信协议,可以在两个设备之间传输数据。在Arduino和OpenMV之间建立UART通信,需要将它们的TX和RX引脚连接起来,并使用相同的波特率进行通信。在Arduino中,可以使用Serial库来实现UART通信,而在OpenMV中,可以使用UART库来实现。通过UART通信,Arduino和OpenMV可以互相发送数据,实现更加复杂的功能。 ### 回答2: Arduino和OpenMV都是比较常见的嵌入式开发板,在实际应用中可能会遇到需要它们之间进行通信的情况。其中,UART通信是常见的一种方式。下面,我将从以下几个方面详细介绍Arduino和OpenMV之间的UART通信: 一、硬件连接 Arduino和OpenMV之间的UART通信需要通过串口线进行连接,Arduino的TX口需连接至OpenMV的RX口,而Arduino的RX口需连接至OpenMV的TX口。这样,就能够通过串口将两个开发板之间的数据进行传输。 二、Arduino串口通信的基本操作 通过Arduino对串口进行配置和操作,实现和OpenMV之间的UART通信。其中,涉及到常见的Serial.begin()、Serial.available()、Serial.write()等方法,还需要注意数据传输中的速率(比特率)设置等问题。 三、OpenMV串口通信的基本操作 OpenMV也有自己的串口通信相关库函数和接口,其中,包括uart_init()、uart.write()、uart.any()等方法。在实现和Arduino之间的UART通信时,OpenMV也需要通过这些方法进行串口的配置和操作。 四、数据传输 在串口通信的过程中,具体的数据传输需要通过一定的协议进行。一般来说,Arduino和OpenMV之间的串口通信需要进行双向数据的传输,即数据的收发均需要考虑。要实现有效的通信需要注意数据的格式和编码方式,同时还需要对数据进行一定的解析和处理。 总之,实现Arduino和OpenMV之间的UART通信需要硬件和软件两方面的合作。在实际应用中,需要根据具体的需求进行相应的设置和调整,才能实现有效的通信效果。 ### 回答3: Arduino是一个广泛使用的开源单板微控制器平台,可以用于从简单的自动化系统到复杂的科技项目的各种应用。OpenMV则是一个基于ARM Cortex-M7微控制器的开源低功耗电路板,主要用于图像识别、跟踪和计算机视觉应用。在需要同时进行传感器采集和图像处理时,结合Arduino和OpenMV可以实现双方的协同工作。 为了实现Arduino与OpenMV之间的通信,可以采用UART(通用异步收发传输)协议。UART是计算机和外部设备之间按比特传输数据的一种常见标准,应用广泛。很多基于串口通讯接口的外设,如GPS模块、GPRS模块、蓝牙模块等都可以和Arduino和OpenMV进行通信。 在Arduino和OpenMV之间进行UART通信,需要首先设置两个板子的波特率等参数一致,以确保通信正常。然后,可以在Arduino中使用Serial.print()函数向OpenMV发送命令或数据,OpenMV则可以使用pyb.UART()对象读取UART接口中的数据。这些数据可以是传感器的测量值、控制指令或者其他的需要传输的信息,通过UART协议进行数据传输的同时,也确保了板间的通信效率和稳定性。 总之,基于UART协议的通信是Arduino和OpenMV之间通信的一种有效方式,提高了两个板子的协同工作效率,为实现更高级的科技项目奠定了基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值