UART üzerinden kapak sayılarını eski bir Intel Edison'a gönderen OpenMV kamerası: hiçbir veri ulaşmıyor
Yapay zekâ tarafından English dilinden çevrildi ·
Tesis müdürüyüm ve tek kontrol teknisyenimiz izinde olduğu için bu işi kendim yapıyorum. Dolum hattında bir OpenMV H7 kamera kapakları kontrol ediyor, sağlam olanları sayıyor ve hatalıları reddediyor. Yanında, Arduino genişleme kartı üzerinde eski bir Intel Edison var; bu kart zaten dolum makinesinin sayaçlarını okuyor ve hat verilerini Hermetry’ye gönderiyor. OpenMV’nin iki sayısını seri port üzerinden Edison’a aktarmak istiyorum ki diğer verilerle birlikte yukarı gitsin.OpenMV tarafı:
from pyb import UART
uart = UART(3, 115200, timeout_char=1000)
...
uart.write("caps_ok=%d;caps_rej=%dn" % (ok, rej))
Edison tarafı, 115200 hızında /dev/ttyMFD1 okuyan Python: port hatasız açılıyor ama read() hiçbir şey döndürmüyor. OpenMV P4 (TX) pinini genişleme kartının 0 numaralı pinine, P5 (RX) pinini ise 1 numaralı pinine bağladım.İki kart aynı kutuda yaklaşık 40 cm aralıkla duruyor, jumper kablolarla bağlı ve ikisi de aynı 5 V kaynağından besleniyor. OpenMV’yi dizüstü bilgisayarımdaki bir USB seri adaptörle kontrol ettim; 115200 hızında hatlar düzgün çıkıyor.
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.
Yapay zekâ tarafından English dilinden çevrildi ·
Breakout kartının seviye dönüştürücüsü hangi voltaja ayarlı? OpenMV 3.3 V ile çalışıyor, Edison breakout kartı ise jumper ile 5 V’a ayarlanabiliyor.
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.
Yapay zekâ tarafından English dilinden çevrildi ·
İki kart arasında toprak (GND) bağlantısı yapılmış mı? Ben de o yüzden tuzağa düşmüştüm.
Are the grounds connected between the two boards? I’ve been caught by that one.
Yapay zekâ tarafından English dilinden çevrildi ·
Topraklar bağlı. J9 jumper’ı 5 V konumundaydı, onu 3.3 V’a aldım. Hâlâ hiçbir şey yok.
Grounds are connected. The jumper (J9) was on 5 V, I moved it to 3.3 V. Still nothing.
Yapay zekâ tarafından English dilinden çevrildi ·
Geçen yıl bir laboratuvar için Edison breakout kartıyla uğraştım. Bu kartta /dev/ttyMFD1 dosyasını açmak yetmiyor: 0 ve 1 numaralı pinler bir pin çoklayıcı ve seviye dönüştürücülerden geçiyor; bunlar ayarlanana kadar UART başlığa bağlı değildir, pinler yalnızca düz GPIO’dur. Bu yüzden port hatasız açılıyor ama hiçbir şey okunmuyor.Kolay yol, UART’ı kart numarasıyla açtığınızda mux’ı sizin yerinize ayarlayan mraa kütüphanesini kullanmaktır:
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"])
Ayrıca kablolamanın çapraz olduğunu kontrol edin: OpenMV TX, Edison’un RX (pin 0) ucuna; OpenMV RX, Edison’un TX (pin 1) ucuna bağlanmalı. Breakout kartında pin 0 RX’tir; yazdığınız şey kablolamayla birebir aynıysa bunları birbiriyle değiştirin.
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.
Yapay zekâ tarafından English dilinden çevrildi ·
Meğer ikisi de. mraa.Uart(0) pinleri ayarlamıştı, ben de TX ve RX’i ters bağlamışım. Sayımlar artık her saniye geliyor ve dolum verisiyle birlikte artıyor. caps_rej hat panosunda ve vardiya amiri saat 14:00’te neden sıçradığını şimdiden sordu.
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.
Yapay zekâ tarafından English dilinden çevrildi ·
İyi. Yine de o Edison için bir yedek planlayın; yıllardır üretimi durdurulmuş durumda ve yedek parça bulmak giderek zorlaşıyor.
Good. Plan a replacement for that Edison though, it’s been out of production for years and spares get harder to find.
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
Sohbete katılın
Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

