Bajo comunicación serial

Placa de expansión de depuración de puerto serie OpenMV

La placa de expansión de depuración del puerto serie OpenMV conecta el puerto serie OpenMV UART3 a la computadora a través del chip cp2104 y se conecta a la placa de expansión de depuración del puerto serie a través de USB. Puede ver los datos enviados en el puerto serie OpenMV UART3.

https://singtown.com/product/49906

OpenMV y la placa de expansión de depuración del puerto serie están conectados a la computadora a través de 2 cables USB.

Usando el módulo TTL-USB

Si no hay una placa de expansión de depuración del puerto serie OpenMV, también puede utilizar el módulo TTL-USB, que tiene la misma función que la placa de expansión de depuración del puerto serie OpenMV.

Lo primero que debemos entender es: ¡los puertos serie utilizados por varios microcontroladores (incluidos Arduino, OpenMV, esp8266, stm32, 51) son todos puertos serie TTL! ¡Ni rs485, ni rs232!

El voltaje del puerto serie TTL es 3,3 V o 5 V, el voltaje de RS232 es +-15 V y el voltaje de RS485 es 5 V. Sin embargo, las dos líneas de datos son líneas diferenciales con protocolos diferentes y no se pueden usar universalmente.

El módulo que utilizamos es un módulo TTL a USB (se recomienda el módulo cp2104, un poco más caro, pero de buena calidad):

Diagrama de conexión(tenga en cuenta las conexiones tierra común y RXTXescalonadas):

OpenMV FTDI
P4(TX) RX
P5(RX) tx
Tierra Tierra

Inserte el extremo USB del módulo TTL en la computadora y aparecerá un puerto serie.

Asistente de puerto serie de Xingtong

Primero descargue el asistente del puerto serie de Xingtong:\ https://singtown.com/singtownserialport/

Xingtong Serial Assistant es un asistente serial de código abierto simple y fácil de usar que es compatible con Windows, MacOS y Linux.

Ejecutar programa

Tenga en cuenta que algunos programas le permiten seleccionar HEX (hexadecimal) o ASC (ascii). Debe seleccionar ASC para mostrar la cadena.

El programa que ejecuta uart.write("hello world!") en OpenMV (consulte la sección anterior).

El asistente del puerto serie mostrará ¡Hola mundo! personaje.

Si ejecuta el siguiente programa:

import sensor, image, time
import json
from machine import UART
#from pyb import UART
# 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   = ( 46,  100,  -68,   72,   58,   92)
# 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):
    clock.tick() # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot() # Take a picture and return the image.

    blobs = img.find_blobs([yellow_threshold])
    if blobs:
        #print('sum : %d'% len(blobs))
        data=[]
        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
            data.append((b.cx(),b.cy()))

        #{(1,22),(-3,33),(22222,0),(9999,12),(0,0)}
        data_out = json.dumps(set(data))
        uart.write(data_out +'\n')
        print('you send:',data_out)
    else:
        print("not found!")

Se enviarán las coordenadas centrales de todos los bloques de colores.

El asistente del puerto serie de Xingtong mostrará los datos recibidos:

analizador arduino

Debido a que Arduino Uno solo tiene un puerto serie y uno se usa para recibir, no hay forma de enviarlo a la computadora para su visualización. Entonces utilizamos software para simular el puerto serie para realizar el programa de reenvío del puerto serie.

OpenMV arduino
P4(TX) 10(RX)
P5(RX) 11(TX)
Tierra Tierra

La lógica de reenvío es la siguiente: los datos OpenMV se envían al puerto serie suave de Arduino Uno, y el puerto serie Arduino se conecta a la computadora y muestra los resultados.

Por lo tanto, la lógica en ArduinoMega es: leer datos de softSerial (json), luego analizarlos en una matriz y enviarlos a Serial(computer).

código

#include <SoftwareSerial.h>

SoftwareSerial softSerial(10, 11); // RX, TX
typedef struct
{
  int data[50][2] = {{0,0}};
  int len = 0;
}List;
List list;

void setup() {
  // put your setup code here, to run once:
  softSerial.begin(115200);
  Serial.begin(115200);
}

void loop() {
  if(softSerial.available())
  {
    getList();
    for (int i=0; i<list.len; i++)
    {
      Serial.print(list.data[i][0]);
      Serial.print('\t');
      Serial.println(list.data[i][1]);
    }
    Serial.println("============");
    clearList();
  }

}


String detectString()
{
  while(softSerial.read() != '{');
  return(softSerial.readStringUntil('}'));
}
void clearList()
{
  memset(list.data, sizeof(list.data),0);
  list.len = 0;
}
void getList()
{
  String s = detectString();
  String numStr = "";
  for(int i = 0; i<s.length(); i++)
  {
    if(s[i]=='('){
      numStr = "";
    }
    else if(s[i] == ','){
      list.data[list.len][0] = numStr.toInt();
      numStr = "";
    }
    else if(s[i]==')'){
      list.data[list.len][1] = numStr.toInt();
      numStr = "";
      list.len++;
    }
    else{
      numStr += s[i];
    }
  }
}

results matching ""

    No results matching ""