Unter serieller Kommunikation

OpenMV-Erweiterungskarte zum Debuggen der seriellen Schnittstelle

Die OpenMV-Debugging-Erweiterungskarte verbindet den seriellen OpenMV-Port UART3 über den cp2104-Chip mit dem Computer und stellt über USB eine Verbindung zur seriellen Port-Debugging-Erweiterungskarte her. Sie können die über den seriellen OpenMV-Port UART3 gesendeten Daten sehen.

https://singtown.com/product/49906

OpenMV und die Debugging-Erweiterungskarte für den seriellen Port sind über zwei USB-Kabel mit dem Computer verbunden.

Verwendung des TTL-USB-Moduls

Wenn keine OpenMV-Erweiterungskarte zum Debuggen der seriellen Schnittstelle vorhanden ist, können Sie auch das TTL-USB-Modul verwenden, das die gleiche Funktion wie die OpenMV-Erweiterungskarte zum Debuggen der seriellen Schnittstelle hat.

Zunächst müssen wir Folgendes verstehen: Die von verschiedenen Mikrocontrollern verwendeten seriellen Ports (einschließlich Arduino, OpenMV, esp8266, stm32, 51) sind alle serielle TTL-Ports ! Nicht RS485, nicht RS232!

Die Spannung des seriellen TTL-Ports beträgt 3,3 V oder 5 V, die Spannung von RS232 beträgt +-15 V und die Spannung von RS485 beträgt 5 V. Allerdings sind die beiden Datenleitungen Differenzleitungen mit unterschiedlichen Protokollen und können nicht universell verwendet werden.

Das von uns verwendete Modul ist ein TTL-zu-USB-Modul (es wird empfohlen, das Modul cp2104 zu verwenden, das etwas teurer, aber von guter Qualität ist):

Anschlussdiagramm(beachten Sie die gemeinsame Masse und die versetzten RXTX-Anschlüsse):

OpenMV FTDI
P4(TX) RX
P5(RX) TX
GND GND

Stecken Sie das USB-Ende des TTL-Moduls in den Computer und ein serieller Anschluss wird angezeigt.

Singtown-Assistent für die serielle Schnittstelle

Laden Sie zunächst den Singtown-Assistenten für die serielle Schnittstelle herunter:\ https://singtown.com/singtownserialport/

Singtown Serial Assistant ist ein einfacher und benutzerfreundlicher Open-Source-Serienassistent, der Windows, MacOS und Linux unterstützt.

Programm ausführen

Beachten Sie, dass Sie bei manchen Programmen HEX (Hexadezimal) oder ASC (ASCII) auswählen können. Sie müssen ASC auswählen, um die Zeichenfolge anzuzeigen.

Das Programm, das uart.write("hello world!") auf OpenMV ausführt (siehe vorheriger Abschnitt).

Der Assistent für die serielle Schnittstelle zeigt „Hallo Welt!“ an. Charakter.

Wenn Sie das folgende Programm ausführen:

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!")

Die Mittelpunktkoordinaten aller Farbblöcke werden gesendet.

Der Singtown-Assistent für die serielle Schnittstelle zeigt die empfangenen Daten an:

Arduino-Parser

Da Arduino Uno nur über einen seriellen Anschluss verfügt und einer zum Empfangen dient, gibt es keine Möglichkeit, ihn zur Anzeige an den Computer zu senden. Deshalb verwenden wir Software, um die serielle Schnittstelle zu simulieren und das Weiterleitungsprogramm für die serielle Schnittstelle auszuführen.

OpenMV Arduino
P4(TX) 10(RX)
P5(RX) 11(TX)
GND GND

Die Weiterleitungslogik ist wie folgt: OpenMV-Daten werden an die weiche serielle Schnittstelle von Arduino Uno gesendet, und die serielle Schnittstelle von Arduino wird mit dem Computer verbunden und zeigt die Ergebnisse an.

Daher lautet die Logik in ArduinoMega: SoftSerial-Daten (JSON) lesen, dann in ein Array analysieren und an Serial(Computer) senden.

Code

#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 ""