Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Antwort auf: Ich habe den RS-232-Ausgang der alten Waage direkt an den GPIO des Pi 4 angeschlossen, es kommen wirre Zeichen

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)
Kayıtta yoksa olmamıştır.
Akzeptierte Lösung♥ 8