Sur la communication série

Tutoriel vidéo27 – Communication série pour envoyer des données :

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

Tutoriel vidéo28 – Communication série recevant des données :

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

introduire

Pourquoi utiliser le port série ? Étant donné que les informations doivent être transmises à d'autres MCU lorsque cela est nécessaire, le port série est simple et universel. Fondamentalement, chaque MCU dispose d'un port série.

Un port série TTL nécessite au moins 3 fils : TXD, RXD et GND. TXD est l'extrémité émettrice, RXD est l'extrémité réceptrice et GND est le fil de terre. Lors de la connexion, vous devez connecter le RXD d'OpenMV au TXD d'un autre MCU et le TXD au RXD. Illustration :

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)

Instanciez d’abord un port série avec un débit en bauds de 19200, puis appelez la méthode d’écriture.

Remarque : OpenMV RT ne dispose que du port série UART(1), correspondant à P4-TX P5-RX.

Le port série UART(1) d'OpenMV4 H7 Plus, OpenMV4 H7 et OpenMV3 M7 est P0-RX P1-TX.

Le port série UART(3) d'OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7, OpenMV2 M4 est P4-TX P5-RX

Transférer des données complexes

Comme mentionné dans la section précédente, chaîne json.

# 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!')

Le résultat résultant est :

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 cette façon, les blobs entiers sont envoyés.

Données réduites

Mais parfois, vous ne souhaitez pas transférer beaucoup de données. Par exemple : je souhaite uniquement transmettre les coordonnées centrales x, y du bloc de couleur ayant la plus grande surface.\ Construisez les données que vous souhaitez transmettre.

Écrivez une boucle for, puis écrivez une fonction 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!')

résultat:

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

Dans le code ci-dessus,

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

et

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

Le résultat est le même. La structure étant simple, vous pouvez utiliser la fonction de formatage de chaîne de Python ou la fonction de conversion de JSON.

En conséquence, même si plusieurs plages de couleurs sont trouvées, seules les coordonnées de la plus grande plage de couleurs sont envoyées.

results matching ""

    No results matching ""