Von Türkçe mit KI übersetzt ·
Es liegt nicht an der Baudrate, sondern an der Spannung. Wenn du -9 V gemessen hast, steht die Antwort bereits da.Das RS-232-Signal liegt etwa zwischen ±3 und ±15 V und seine Logik ist invertiert: Im Ruhezustand ist es negativ, „1“ ist negativ, „0“ ist positiv. Die UART des Pi arbeitet dagegen mit 3,3 V TTL, 0 bis 3,3 V, und mit normaler Logik. Verbindest du beides direkt, stimmen sowohl Pegel als auch Polarität nicht, und genau dieser Zeichensalat ist die Folge. Außerdem kann eine negative Spannung bzw. rund 9 V an GPIO15 den Pin zerstören. Trenne das sofort; es ist Glück, wenn der Pi noch heil ist.Bei mir in zwei Lagern ist dieselbe Aufgabe angefallen, ich habe zwei Wege genutzt:1. MAX3232-Modul (MAX3232, nicht MAX232; das arbeitet mit 3,3 V). VCC an die 3,3 V des Pi, die TTL-Seite an GPIO14/15, die RS-232-Seite an die DB9. 2. Die sauberere Variante: ein USB-RS232-Wandler (PL2303 oder FTDI-Chip). Er erscheint als /dev/ttyUSB0, und du musst dich gar nicht mit GPIO befassen.Zur Login-Bildschirm-Frage: Die serielle Konsole des Pi ist über /dev/serial0 aktiv. In raspi-config > Interface > Serial Port beantwortest du „login shell over serial“ mit Nein und „serial port hardware“ mit Ja.Und zur TX/RX-Kreuzung: Wir wissen nicht, ob die Waage DCE oder DTE ist. Kommen keine Daten an, tausche Pin 2 und 3.Das Weiterleiten an Hermetry ist danach einfach: Mit paho und Access-Token veröffentlichst du auf v1/telemetry:
import re, json, serial
import paho.mqtt.client as mqtt
c = mqtt.Client(client_id="kantar-1")
c.username_pw_set(TOKEN, "")
c.tls_set()
c.connect(BROKER_HOST, 8883, keepalive=60)
c.loop_start()
s = serial.Serial('/dev/ttyUSB0', 9600, timeout=2)
while True:
line = s.readline().decode('ascii', 'ignore')
m = re.search(r'(-?d+.d+)s*kg', line)
if m:
c.publish("v1/telemetry", json.dumps({"weight_kg": float(m.group(1))}), qos=1)
Baud değil, voltaj sorunu. -9 V ölçtüysen zaten cevap orada.
RS-232 sinyali yaklaşık ±3 ile ±15 V arası ve mantığı ters: boşta negatif, „1“ negatif, „0“ pozitif. Pi’nin UART’ı ise 3.3 V TTL, 0 ile 3.3 V arası ve düz mantık. Doğrudan bağlayınca hem seviye hem polarite yanlış, çıktıdaki çöp tam olarak bu. Üstelik GPIO15’e negatif ve 9 V civarı gerilim vermek pini öldürebilir. Hemen sök, Pi’nin hâlâ sağlam olması şans.
Bende iki depoda aynı iş var, iki yol kullandım:
1. MAX3232 modülü (MAX232 değil, 3232; 3.3 V ile çalışan). VCC’yi Pi’nin 3.3 V’una ver, TTL tarafı GPIO14/15, RS-232 tarafı DB9’a. 2. Daha temizi: USB-RS232 çevirici (PL2303 ya da FTDI çipli). /dev/ttyUSB0 olarak çıkıyor, GPIO ile hiç uğraşmıyorsun.
Login ekranı meselesi: Pi seri konsolu /dev/serial0 üzerinden açık. raspi-config > Interface > Serial Port’ta „login shell over serial“ sorusuna Hayır, „serial port hardware“ sorusuna Evet de.
Bir de TX/RX çaprazlaması: gösterge DCE mi DTE mi bilmiyoruz. Veri gelmezse 2 ile 3’ü yer değiştir.
Okuduktan sonra Hermetry’ye gönderme kısmı basit, paho ile access token’la v1/telemetry‚ye yayınlıyorsun:
import re, json, serial
import paho.mqtt.client as mqtt
c = mqtt.Client(client_id="kantar-1")
c.username_pw_set(TOKEN, "")
c.tls_set()
c.connect(BROKER_HOST, 8883, keepalive=60)
c.loop_start()
s = serial.Serial('/dev/ttyUSB0', 9600, timeout=2)
while True:
line = s.readline().decode('ascii', 'ignore')
m = re.search(r'(-?d+.d+)s*kg', line)
if m:
c.publish("v1/telemetry", json.dumps({"weight_kg": float(m.group(1))}), qos=1)

