Nouveau : le pare-feu IA surveille toute la plateforme et explique chaque incident en termes simples. Découvrez comment ça marche

Réponse à : J'ai relié directement la sortie RS-232 de l'ancienne balance au GPIO du Pi 4, et il sort des caractères absurdes

Traduit de Türkçe par IA ·

Ce n’est pas le débit en bauds, c’est la tension. Si tu as mesuré -9 V, la réponse est déjà là.Le signal RS-232 varie d’environ ±3 à ±15 V et sa logique est inversée : au repos il est négatif, « 1 » est négatif, « 0 » est positif. L’UART du Pi, lui, fonctionne en TTL 3,3 V, de 0 à 3,3 V, avec une logique normale. En les reliant directement, le niveau et la polarité sont tous deux faux, et ces caractères parasites en sortie en sont exactement la conséquence. De plus, appliquer une tension négative et environ 9 V sur le GPIO15 peut détruire la broche. Débranche tout de suite ; c’est un coup de chance si le Pi est encore intact.J’ai résolu le même problème à deux endroits, avec deux méthodes :1. Module MAX3232 (MAX3232, pas MAX232 ; il fonctionne en 3,3 V). VCC sur les 3,3 V du Pi, le côté TTL sur GPIO14/15, le côté RS-232 sur le DB9. 2. La solution plus propre : un convertisseur USB-RS232 (puce PL2303 ou FTDI). Il apparaît comme /dev/ttyUSB0 et tu n’as pas du tout à t’occuper du GPIO.Pour l’écran de connexion : la console série du Pi est active sur /dev/serial0. Dans raspi-config > Interface > Serial Port, réponds Non à « login shell over serial » et Oui à « serial port hardware ».Et pour le croisement TX/RX : on ne sait pas si la balance est DCE ou DTE. Si aucune donnée n’arrive, inverse les broches 2 et 3.Ensuite, l’envoi vers Hermetry est simple : avec paho et un token d’accès, tu publies sur 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.
Solution acceptée♥ 8