Caméra OpenMV envoyant le nombre de capsules à un vieil Intel Edison via UART : rien n'arrive
Traduit de English par IA ·
Je suis responsable de l’usine, et notre seul technicien en automatisme est en congé, donc je m’occupe moi-même de ce point. Sur la ligne d’embouteillage, une caméra OpenMV H7 contrôle les capsules, compte les bonnes et rejette les autres. À côté se trouve un vieil Intel Edison sur sa carte d’extension Arduino, qui lit déjà les compteurs de la remplisseuse et envoie les données de ligne à Hermetry. Je voudrais que l’OpenMV transmette ses deux compteurs à l’Edison via la liaison série, afin qu’ils remontent avec le reste.Côté OpenMV :
from pyb import UART
uart = UART(3, 115200, timeout_char=1000)
...
uart.write("caps_ok=%d;caps_rej=%dn" % (ok, rej))
Côté Edison, Python lisant /dev/ttyMFD1 à 115200 : le port s’ouvre sans erreur, mais read() ne renvoie rien du tout. J’ai relié OpenMV P4 (TX) à la broche 0 de la carte d’extension et P5 (RX) à la broche 1.Les deux cartes sont à environ 40 cm l’une de l’autre dans le même boîtier, reliées par des fils de connexion, et toutes deux alimentées par la même alimentation 5 V. J’ai testé l’OpenMV avec un adaptateur USB série sur mon ordinateur portable, et les lignes sortent correctement à 115200.
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.
Traduit de English par IA ·
Sur quelle tension est réglé le convertisseur de niveau de la carte breakout ? L’OpenMV fonctionne en 3,3 V, la carte breakout de l’Edison peut être configurée par cavalier pour 5 V.
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.
Traduit de English par IA ·
Les masses sont-elles reliées entre les deux cartes ? Je me suis déjà fait piéger par ce problème.
Are the grounds connected between the two boards? I’ve been caught by that one.
Traduit de English par IA ·
La masse est connectée. Le cavalier (J9) était sur 5 V, je l’ai déplacé sur 3.3 V. Toujours rien.
Grounds are connected. The jumper (J9) was on 5 V, I moved it to 3.3 V. Still nothing.
Traduit de English par IA ·
Je me suis battu avec la carte d’extension de l’Edison pour un laboratoire l’an dernier. Ouvrir /dev/ttyMFD1 ne suffit pas sur cette carte : les broches 0 et 1 passent par un multiplexeur de broches et des adaptateurs de niveau, et tant qu’ils ne sont pas configurés, l’UART n’est pas relié au connecteur, les broches sont de simples GPIO. C’est pourquoi l’ouverture réussit mais rien n’est lu.La solution simple consiste à utiliser la bibliothèque mraa, qui configure le multiplexeur à votre place lorsque vous ouvrez l’UART par son numéro de carte :
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"])
Vérifiez aussi que le câblage est croisé : TX de l’OpenMV vers RX de l’Edison (broche 0), RX de l’OpenMV vers TX de l’Edison (broche 1). La broche 0 est RX sur la carte d’extension, donc si votre câblage correspond exactement à ce que vous avez écrit, inversez-les.
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.
Traduit de English par IA ·
Les deux, en fait. mraa.Uart(0) a configuré les broches, et j’avais inversé TX et RX. Les comptages arrivent maintenant chaque seconde et augmentent avec les données de remplissage. caps_rej est sur la carte de ligne, et le chef d’équipe a déjà demandé pourquoi il avait grimpé à 14 h.
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.
Traduit de English par IA ·
Bien. Prévoyez tout de même un remplacement pour cet Edison : il n’est plus produit depuis des années et les pièces de rechange deviennent de plus en plus difficiles à trouver.
Good. Plan a replacement for that Edison though, it’s been out of production for years and spares get harder to find.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

