Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

Re: Conecté directamente la salida RS-232 de la báscula antigua al GPIO de la Pi 4, y salen caracteres absurdos

Traducido del Türkçe por IA ·

No es la velocidad en baudios, es la tensión. Si mediste -9 V, la respuesta ya está ahí.La señal RS-232 oscila aproximadamente entre ±3 y ±15 V y su lógica es invertida: en reposo es negativa, el «1» es negativo y el «0» es positivo. La UART de la Pi, en cambio, es TTL de 3,3 V, de 0 a 3,3 V, con lógica normal. Al conectarlas directamente, tanto el nivel como la polaridad son incorrectos, y esos caracteres basura en la salida son exactamente lo que cabe esperar. Además, aplicar una tensión negativa y unos 9 V al GPIO15 puede dañar el pin. Desconéctalo ya; es cuestión de suerte que la Pi siga en buen estado.En dos de mis instalaciones hice el mismo trabajo y usé dos caminos:1. Módulo MAX3232 (MAX3232, no MAX232; funciona a 3,3 V). VCC a los 3,3 V de la Pi, el lado TTL a GPIO14/15 y el lado RS-232 al DB9. 2. La opción más limpia: un convertidor USB-RS232 (chip PL2303 o FTDI). Aparece como /dev/ttyUSB0 y no tienes que tocar nada del GPIO.Sobre la pantalla de inicio de sesión: la consola serie de la Pi está abierta en /dev/serial0. En raspi-config > Interface > Serial Port, responde No a «login shell over serial» y Sí a «serial port hardware».Y sobre el cruce de TX/RX: no sabemos si la báscula es DCE o DTE. Si no llegan datos, intercambia los pines 2 y 3.Enviar los datos a Hermetry después es sencillo: con paho y un token de acceso, publicas en 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.
Solución aceptada♥ 8