# 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! " #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! " (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运行效果:
![](https://img2020.cnblogs.com/blog/1969929/202102/1969929-20210220103905627-85992590.png)
本文章实现了openmv4与arduino的相互通信,各自都能给对方发送并接受Hello World!字符串。
正是步行者,一步步登峰!