OpenMV communication with Arduino Mega

How can I communicate the openmv camera with the arduino through UART, so that the arduino receives a digit and does something when it detects that.

I am using P4 TX and P5 RX camera.
Arduino PIN 1 TX, PIN 0 RX

Code Openmv:

Edge Impulse - OpenMV Object Detection Example

import sensor, image, time, os, tf, math, uos, gc
from pyb import UART
uart = UART(3,9600)

sensor.reset() # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240)
sensor.set_windowing((240, 240)) # Set 240x240 window.
sensor.skip_frames(time=2000) # Let the camera adjust.

net = None
labels = None
min_confidence = 0.5

# load the model, alloc the model file on the heap if we have at least 64K free after loading
net = tf.load(“trained.tflite”, load_to_fb=uos.stat(‘trained.tflite’)[6] > (gc.mem_free() - (64*1024)))
except Exception as e:
raise Exception(‘Failed to load “trained.tflite”, did you copy the .tflite and labels.txt file onto the mass-storage device? (’ + str(e) + ‘)’)

labels = [line.rstrip(‘\n’) for line in open(“labels.txt”)]
except Exception as e:
raise Exception(‘Failed to load “labels.txt”, did you copy the .tflite and labels.txt file onto the mass-storage device? (’ + str(e) + ‘)’)

colors = [ # Add more colors if you are detecting more than 7 types of classes at once.
(255, 0, 0),
( 0, 255, 0),
(255, 255, 0),
( 0, 0, 255),
(255, 0, 255),
( 0, 255, 255),
(255, 255, 255),

clock = time.clock()

img = sensor.snapshot()

# detect() returns all objects found in the image (splitted out per class already)
# we skip class index 0, as that is the background, and then draw circles of the center
# of our objects

for i, detection_list in enumerate(net.detect(img, thresholds=[(math.ceil(min_confidence * 255), 255)])):
    if (i == 0): continue # background class
    if (len(detection_list) == 0): continue # no detections for this class?

    print("********** %s **********" % labels[i])
    for d in detection_list:
        [x, y, w, h] = d.rect()
        center_x = math.floor(x + (w / 2))
        center_y = math.floor(y + (h / 2))
        uart.write("Victims" 'x %d\ty %d' % (center_x, center_y))
        print('x %d\ty %d' % (center_x, center_y))
        img.draw_circle((center_x, center_y, 12), color=colors[i], thickness=2)

print(clock.fps(), "fps", end="\n\n")

Code Arduino:

String str;
int ds = 4;
#include <SoftwareSerial.h>
SoftwareSerial mySerial(0, 1); // RX, TX

void setup() {

void loop(){
if (mySerial.available()){
delay(100); // Wait for all data.
while (mySerial.available()) {
char d =;
char t[str.length()+1];
str.toCharArray(t, (sizeof(t)));
int intdata = atoi(t);


Hi, if you are using the example code it works. Not sure what you need help with. Are you connecting both device grounds and have rx wired to tx and tx to rx.

You might wish to start with the basic example code first for UART support and get that working before adding the tensorflow part.

I had already been able to communicate it but then I didn’t want to, it took a long time. One question: I can send bytes when I detect something.

Yes, the system can do this.

Please stop posting unformatted code. There’s a code tag option when you are using the web editor.

However, we have an RPC library for communication between the OpenMV Cam and an Arduino.

openmv/openmv-arduino-rpc: Remote Procedure/Python Call Library for Arduino (

It’s a library that you can download in the Arduino IDE. If you want to do multi-processor comms it works great for UART/I2C/SPI with the H7/H7 Plus. You can use it with UART for the RT1062.

I wrote this library after getting posts like yours with people asking for help. It’s not generally possible for me to debug serial protocol stuff for folks. Please use the work I put in to make this easy. As long as you wire things up correctly which the example files detail then things will work.

I was already able to communicate it with my code

Okay, so what part do you need help with exactly? Please make the ask specific. Thank you,

I already solved the problem I had but I have a question how I can leave a program loaded so that I no longer have to use the micro USB cable.

Tools->Save Script to Camera.