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)
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)

