OpenMV-Kamera sendet Kappenzählungen per UART an einen alten Intel Edison: es kommt nichts an
Von English mit KI übersetzt ·
Ich bin Werksleiter, und unser einziger Steuerungstechniker ist gerade in Urlaub, deshalb mache ich das selbst. An der Abfüllanlage prüft eine OpenMV-H7-Kamera die Kappen und zählt die guten sowie die aussortierten. Daneben steht ein alter Intel Edison auf seiner Arduino-Breakout-Platine, der bereits die Zähler der Füllmaschine liest und die Liniendaten an Hermetry sendet. Ich möchte, dass die OpenMV ihre beiden Zählwerte über die serielle Schnittstelle an den Edison übergibt, damit sie zusammen mit dem Rest nach oben übertragen werden.OpenMV-Seite:
from pyb import UART
uart = UART(3, 115200, timeout_char=1000)
...
uart.write("caps_ok=%d;caps_rej=%dn" % (ok, rej))
Edison-Seite, Python liest /dev/ttyMFD1 mit 115200: Der Port öffnet sich ohne Fehler, aber read() liefert gar nichts zurück. Ich habe OpenMV P4 (TX) mit Pin 0 der Breakout-Platine verbunden und P5 (RX) mit Pin 1.Die beiden Boards stehen etwa 40 cm auseinander im selben Gehäuse, verbunden über Jumperkabel, und beide werden von derselben 5-V-Versorgung gespeist. Ich habe die OpenMV mit einem USB-Seriell-Adapter an meinem Laptop geprüft, dort kommen die Leitungen bei 115200 sauber an.
Plant manager, and our only controls tech is on leave, so I’m doing this one myself. On the bottling line an OpenMV H7 camera checks caps and counts good ones and rejects. Next to it is an old Intel Edison on its Arduino breakout board, which already reads the filler’s counters and sends line data to Hermetry. I want the OpenMV to pass its two counts to the Edison over serial so they go up with the rest.
OpenMV side:
from pyb import UART
uart = UART(3, 115200, timeout_char=1000)
...
uart.write("caps_ok=%d;caps_rej=%dn" % (ok, rej))
Edison side, Python reading /dev/ttyMFD1 at 115200: the port opens without errors, but read() returns nothing at all. I connected OpenMV P4 (TX) to the breakout’s pin 0 and P5 (RX) to pin 1.
The two boards sit about 40 cm apart in the same enclosure, joined by jumper wires, both powered from the same 5 V supply. I checked the OpenMV with a USB serial adapter on my laptop and the lines come out fine at 115200.
Von English mit KI übersetzt ·
Auf welche Spannung ist der Pegelwandler des Breakouts eingestellt? Die OpenMV arbeitet mit 3,3 V, das Edison-Breakout kann per Jumper auf 5 V umgestellt werden.
What voltage is the breakout’s level shifter set to? The OpenMV is 3.3 V, the Edison breakout can be jumpered for 5 V.
Von English mit KI übersetzt ·
Sind die Masseleitungen zwischen den beiden Boards verbunden? Da bin ich auch schon reingefallen.
Are the grounds connected between the two boards? I’ve been caught by that one.
Von English mit KI übersetzt ·
Masse ist angeschlossen. Der Jumper (J9) stand auf 5 V, ich habe ihn auf 3.3 V umgesteckt. Immer noch nichts.
Grounds are connected. The jumper (J9) was on 5 V, I moved it to 3.3 V. Still nothing.
Von English mit KI übersetzt ·
Ich habe mich letztes Jahr für ein Labor mit dem Edison-Breakout herumgeschlagen. Das Öffnen von /dev/ttyMFD1 reicht auf dieser Platine nicht aus: Die Pins 0 und 1 laufen über einen Pin-Multiplexer und die Pegelwandler, und solange diese nicht eingerichtet sind, ist die UART gar nicht an die Header-Leiste angeschlossen, die Pins sind reines GPIO. Deshalb lässt sie sich problemlos öffnen, liest aber nichts.Der einfache Weg ist die mraa-Bibliothek, die beim Öffnen der UART über ihre Board-Nummer den Mux für Sie setzt:
import mraa
u = mraa.Uart(0) # pins 0/1 on the Arduino breakout, sets the mux
u.setBaudRate(115200)
u.setMode(8, mraa.UART_PARITY_NONE, 1)
while True:
if u.dataAvailable(1000):
line = u.readStr(64).strip() # "caps_ok=1823;caps_rej=12"
vals = dict(kv.split("=") for kv in line.split(";"))
# add to the payload the Edison already sends:
payload["caps_ok"] = int(vals["caps_ok"])
payload["caps_rej"] = int(vals["caps_rej"])
Prüfen Sie außerdem, ob die Verkabelung gekreuzt ist: OpenMV TX an RX des Edison (Pin 0), OpenMV RX an TX des Edison (Pin 1). Pin 0 ist auf dem Breakout RX, also tauschen Sie die Leitungen, falls Ihre Verkabelung genau so ausgeführt ist, wie Sie sie beschrieben haben.
I fought the Edison breakout for a lab last year. Opening /dev/ttyMFD1 isn’t enough on that board: pins 0 and 1 go through a pin multiplexer and the level shifters, and until those are set up the UART isn’t connected to the header at all, the pins are plain GPIO. That’s why it opens fine and reads nothing.
The easy way is the mraa library, which sets the mux for you when you open the UART by its board number:
import mraa
u = mraa.Uart(0) # pins 0/1 on the Arduino breakout, sets the mux
u.setBaudRate(115200)
u.setMode(8, mraa.UART_PARITY_NONE, 1)
while True:
if u.dataAvailable(1000):
line = u.readStr(64).strip() # "caps_ok=1823;caps_rej=12"
vals = dict(kv.split("=") for kv in line.split(";"))
# add to the payload the Edison already sends:
payload["caps_ok"] = int(vals["caps_ok"])
payload["caps_rej"] = int(vals["caps_rej"])
Also check the wiring is crossed: OpenMV TX to the Edison’s RX (pin 0), OpenMV RX to the Edison’s TX (pin 1). Pin 0 is RX on the breakout, so if what you wrote is exactly how it’s wired, swap them.
Von English mit KI übersetzt ·
Beides, wie sich herausstellte. mraa.Uart(0) hat die Pins eingerichtet, und ich hatte TX und RX vertauscht. Die Zählungen kommen jetzt jede Sekunde an und steigen mit den Fülldaten. caps_rej steht auf der Linienplatine, und der Schichtleiter hat schon gefragt, warum es um 14 Uhr gesprungen ist.
Both, as it turns out. mraa.Uart(0) set up the pins, and I had TX and RX the wrong way round. Counts now arrive every second and go up with the filler data. caps_rej is on the line board and the shift lead already asked why it jumped at 2 pm.
Von English mit KI übersetzt ·
Gut. Plane aber einen Ersatz für diesen Edison ein, er wird seit Jahren nicht mehr produziert und Ersatzteile werden immer schwerer zu finden.
Good. Plan a replacement for that Edison though, it’s been out of production for years and spares get harder to find.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

