En comunicación serie

Video Tutorial 27 - Comunicación serial para envío de datos:

https://singtown.com/learn/50235/

Videotutorial 28 - Comunicación serie recibiendo datos:

https://singtown.com/learn/50240/

introducir

¿Por qué utilizar el puerto serie? Debido a que la información debe transmitirse a otras MCU cuando sea necesario, el puerto serie es simple y universal. Básicamente, cada MCU tendrá un puerto serie.

Un puerto serie TTL requiere al menos 3 cables: TXD, RXD y GND. TXD es el extremo transmisor, RXD es el extremo receptor y GND es el cable de tierra. Al conectarse, debe conectar el RXD de OpenMV al TXD de otra MCU y conectar TXD a RXD. Ilustración:

import time
from machine import UART
#from pyb import UART

# OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7, OpenMV2 M4 的UART(3)是P4-TX P5-RX
uart = UART(3, 19200)   #OpenMV RT 注释掉这一行,用下一行UART(1)
#uart = UART(1, 19200)  #OpenMV RT 用UART(1)这行,注释掉上一行UART(3)
# OpenMV RT 只有串口UART(1),对应P4-TX P5-RX; OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7 的UART(1)是P0-RX P1-TX

while(True):
    uart.write("Hello World!\r")
    time.sleep_ms(1000)

Primero cree una instancia de un puerto serie con una velocidad de baudios de 19200 y luego llame al método de escritura.

Nota: OpenMV RT solo tiene puerto serie UART(1), correspondiente a P4-TX P5-RX.

El puerto serie UART(1) de OpenMV4 H7 Plus, OpenMV4 H7 y OpenMV3 M7 es P0-RX P1-TX.

El puerto serie UART(3) de OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7, OpenMV2 M4 es P4-TX P5-RX

Transferir datos complejos

Como se mencionó en la sección anterior, json string.

# Blob Detection and uart transport
import sensor, image, time
#from pyb import UART
from machine import UART
import json
# For color tracking to work really well you should ideally be in a very, very,
# very, controlled enviroment where the lighting is constant...
yellow_threshold   = (65, 100, -10, 6, 24, 51)
# You may need to tweak the above settings for tracking green things...
# Select an area in the Framebuffer to copy the color settings.

sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.

# OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7, OpenMV2 M4 的UART(3)是P4-TX P5-RX
uart = UART(3, 115200)   #OpenMV RT 注释掉这一行,用下一行UART(1)
#uart = UART(1, 115200)  #OpenMV RT 用UART(1)这行,注释掉上一行UART(3)
# OpenMV RT 只有串口UART(1),对应P4-TX P5-RX; OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7 的UART(1)是P0-RX P1-TX

while(True):
    img = sensor.snapshot() # Take a picture and return the image.

    blobs = img.find_blobs([yellow_threshold])
    if blobs:
        print('sum :', len(blobs))
        output_str = json.dumps(blobs)
        for b in blobs:
            # Draw a rect around the blob.
            img.draw_rectangle(b.rect()) # rect
            img.draw_cross(b.cx(), b.cy()) # cx, cy

        print('you send:',output_str)
        uart.write(output_str+'\n')
    else:
        print('not found!')

La salida resultante es:

sum : 1
you send: [{x:17, y:23, w:37, h:12, pixels:178, cx:40, cy:29, rotation:3.060313, code:1, count:1}]
sum : 2
you send: [{x:34, y:24, w:19, h:13, pixels:149, cx:45, cy:30, rotation:3.120370, code:1, count:1}, {x:23, y:30, w:8, h:2, pixels:17, cx:27, cy:30, rotation:0.046378, code:1, count:1}]

De esta forma, se envían los blobs completos.

Datos reducidos

Pero a veces no quieres transferir muchos datos. Por ejemplo: solo quiero transmitir las coordenadas centrales x, y del bloque de color con el área más grande.\ Construya los datos que desee transmitir.

Escriba un bucle for y luego escriba una función find_max().

# Blob Detection and uart transport
import sensor, image, time
#from pyb import UART
from machine import UART
import json
# For color tracking to work really well you should ideally be in a very, very,
# very, controlled enviroment where the lighting is constant...
yellow_threshold   = (65, 100, -10, 6, 24, 51)
# You may need to tweak the above settings for tracking green things...
# Select an area in the Framebuffer to copy the color settings.

sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.

# OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7, OpenMV2 M4 的UART(3)是P4-TX P5-RX
uart = UART(3, 115200)   #OpenMV RT 注释掉这一行,用下一行UART(1)
#uart = UART(1, 115200)  #OpenMV RT 用UART(1)这行,注释掉上一行UART(3)
# OpenMV RT 只有串口UART(1),对应P4-TX P5-RX; OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7 的UART(1)是P0-RX P1-TX

def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob.pixels() > max_size:
            max_blob=blob
            max_size = blob.pixels()
    return max_blob

while(True):
    img = sensor.snapshot() # Take a picture and return the image.

    blobs = img.find_blobs([yellow_threshold])
    if blobs:
        max_blob=find_max(blobs)
        print('sum :', len(blobs))
        img.draw_rectangle(max_blob.rect())
        img.draw_cross(max_blob.cx(), max_blob.cy())

        output_str="[%d,%d]" % (max_blob.cx(),max_blob.cy()) #方式1
        #output_str=json.dumps([max_blob.cx(),max_blob.cy()]) #方式2
        print('you send:',output_str)
        uart.write(output_str+'\r\n')
    else:
        print('not found!')

resultado:

sum : 6
you send: [63,45]
sum : 2
you send: [60,50]
sum : 1
you send: [61,51]

En el código anterior,

output_str="[%d,%d]" % (max_blob.cx(),max_blob.cy()) #方式1

y

output_str=json.dumps([max_blob.cx(),max_blob.cy()]) #方式2

El resultado es el mismo. Debido a que la estructura es simple, puede usar la función de formato de cadena de Python o la función de conversión de JSON.

Como resultado, incluso si se encuentran múltiples parches de color, solo se envían las coordenadas del parche de color más grande.

results matching ""

    No results matching ""