openmv4arduino_uart arduino串口

# OpenMV 和 Arduino Merge2560 基本uart通信

# 1) OpenMV Cam 与 Arduino Uno 按如下连线:
#定义了软串口
# OpenMV Cam Ground Pin   ----> Arduino Ground
# OpenMV Cam UART3_TX(P4) ----> Arduino Uno UART_RX(10)
# OpenMV Cam UART3_RX(P5) ----> Arduino Uno UART_TX(11)


openmv代码:
import  ustruct, time
from pyb import UART

text = "Hello World!\n"
#data = ustruct.pack("<bi%ds" % len(text), 85, len(text), text) # 85 is a sync char.

# 使用 "ustruct" 来生成需要发送的数据包
# "<" 把数据以小端序放进struct中
# "b" 把一个 signed char 放进数据流
# "i" 把一个 signed integer 放进数据流
# "%ds" 把字符串放进数据流,比如:"13s" 对应的 "Hello World!\n" (13 chars).
# 详见 https://docs.python.org/3/library/struct.html


# 零填充数据为4字节加4字节的倍数。
#data += "\x00" * (4 + (len(data) % 4))



# UART 3, and baudrate.
uart = UART(3, 19200)

while(True):
    uart.write(text)
    if (uart.any()):
        print(uart.read())
    time.sleep(500)       #延时的准确设定很重要

 

arduino代码:

#include <SoftwareSerial.h>

SoftwareSerial softSerial(10, 11); // RX, TX

void setup() {
  // 初始化串口
  softSerial.begin(19200);
  Serial.begin(19200);
  
}

/*//每次只获取单个字符
void loop() {
  // 读取输入的信息
  char byteRead;
  if(softSerial.available()){
  byteRead=softSerial.read();
  // 输出信息
  Serial.println(byteRead);
  softSerial.write(byteRead);
  delay(1000); 
  }
}
*/

//获取字符串函数
void loop(){
    int32_t temp = 0;
    char buff[100] = {0};
    //String byteRead;
    if(softSerial.available()){
      while (softSerial.available()) buff[temp++] = softSerial.read();
      // 输出信息
      //byteRead= softSerial.read();
      Serial.println(buff);
      softSerial.write(buff);
      delay(1000); 
  }
}

 

openmv运行效果:


arduino运行效果:




本文章实现了openmv4与arduino的相互通信,各自都能给对方发送并接受Hello World!字符串。







正是步行者,一步步登峰!
posted @ 2021-02-20 10:42  oldxi  阅读(681)  评论(0编辑  收藏  举报