Sulla comunicazione seriale

Tutorial video 27 - Comunicazione seriale per inviare dati:

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

Tutorial video 28 - Comunicazione seriale che riceve dati:

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

introdurre

Perché utilizzare la porta seriale?Poiché le informazioni devono essere trasmesse ad altri MCU quando necessario, la porta seriale è semplice e universale. Fondamentalmente ogni MCU avrà una porta seriale.

Una porta seriale TTL richiede almeno 3 fili: TXD, RXD e GND.TXD è l'estremità trasmittente, RXD è l'estremità ricevente e GND è il filo di terra.Durante la connessione, è necessario connettere RXD di OpenMV al TXD di un altro MCU e connettere TXD a RXD.Illustrazione:

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)

Per prima cosa istanziare una porta seriale con una velocità di trasmissione di 19200, quindi chiamare il metodo di scrittura.

Nota: OpenMV RT ha solo la porta seriale UART(1), corrispondente a P4-TX P5-RX.

La porta seriale UART(1) di OpenMV4 H7 Plus, OpenMV4 H7 e OpenMV3 M7 è P0-RX P1-TX.

La porta seriale UART(3) di OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7, OpenMV2 M4 è P4-TX P5-RX

Trasferire dati complessi

Come accennato nella sezione precedente, 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!')

L'output risultante è:

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}]

In questo modo vengono inviati tutti i blob.

Dati ridotti

Ma a volte non vuoi trasferire molti dati.Ad esempio: voglio trasmettere solo le coordinate x, y del centro del blocco colore con l'area più grande.\ Costruisci tutti i dati che desideri trasmettere.

Scrivi un ciclo for, quindi scrivi una funzione 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!')

risultato:

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

Nel codice sopra,

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

E

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

Il risultato è lo stesso poiché la struttura è semplice, puoi utilizzare la funzione di formattazione delle stringhe di Python o la funzione di conversione di JSON.

Nel risultato, anche se vengono trovati più campioni di colore, vengono inviate solo le coordinate del campione di colore più grande.

results matching ""

    No results matching ""