J'ai relié directement la sortie RS-232 d'un ancien indicateur de pesage au GPIO du Pi 4, et des caractères bizarres arrivent
Traduit de Türkçe par IA ·
Bonjour, je suis développeur logiciel et le côté matériel m’est un peu étranger, alors dites-moi si je raconte n’importe quoi.À l’entrée de l’entrepôt d’un client, il y a un ancien indicateur de balance avec une sortie DB9 RS-232 à l’arrière. D’après le manuel, il imprime le poids ligne par ligne à chaque pesée. Mon objectif est de lire ces données avec un Raspberry Pi 4, de les envoyer à Hermetry en télémétrie, puis d’afficher le tonnage journalier sur un tableau de bord.Ce que j’ai fait : j’ai relié les broches 2, 3 et 5 du DB9 avec des fils de liaison aux broches GPIO14 (TX), GPIO15 (RX) et GND du Pi. J’ai activé le port série via raspi-config. En Python, je lis comme ceci :
import serial
s = serial.Serial('/dev/serial0', 9600, timeout=2)
while True:
print(s.readline())
La sortie ressemble à ceci :
b'ùæ þ'
b'ø '
b'àþ'
Il n’y a rien d’utile dedans. De temps en temps, un terminal affiche aussi quelque chose qui ressemble à mon propre écran de connexion, et je n’ai pas compris cela non plus. Je ne suis pas non plus sûr de ne pas griller l’indicateur ou le Pi, car j’ai mesuré environ -9 V sur la sortie de l’indicateur avec un multimètre.
Selam, ben yazılımcıyım, donanım tarafı biraz yabancı, o yüzden saçmalıyorsam söyleyin.
Bir müşterinin depo girişinde eski bir kantar göstergesi var, arkasında DB9 RS-232 çıkışı var. Kılavuza göre her tartımda satır satır ağırlık basıyor. Amacım bunu Raspberry Pi 4 ile okuyup Hermetry’ye telemetri olarak göndermek, sonra dashboard’da günlük tonaj göstermek.
Yaptığım: DB9’un 2, 3 ve 5 numaralı pinlerini jumper kabloyla Pi’nin GPIO14 (TX), GPIO15 (RX) ve GND pinine bağladım. raspi-config’den serial’i açtım. Python’da şöyle okuyorum:
import serial
s = serial.Serial('/dev/serial0', 9600, timeout=2)
while True:
print(s.readline())
Çıktı şöyle:
b'ùæ þ'
b'ø '
b'àþ'
Hiç anlamlı bir şey yok. Bir de arada bir terminalde kendi login ekranım gibi bir şey çıkıyor, onu da anlamadım. Göstergeyi ve Pi’yi yakar mıyım diye de içim rahat değil açıkçası, gösterge çıkışında multimetreyle -9 V gibi bir şey ölçtüm.
Traduit de Türkçe par IA ·
Le débit en bauds est-il correct ? Il pourrait être de 4800 ou quelque chose comme ça dans le menu de l’indicateur.
Baud doğru mu? Göstergenin menüsünde 4800 falan olabilir.
Traduit de Türkçe par IA ·
J’ai regardé dans le menu, il indique 9600 8N1. La notice le dit aussi.
Menüden baktım, 9600 8N1 yazıyor. Kılavuz da öyle diyor.
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)
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)
Traduit de Türkçe par IA ·
Il est important de le convertir en nombre avec une regex. Si l’indicateur affiche du texte comme " 12.45 kg" et que tu l’envoies tel quel, il reste du texte dans Hermetry, n’est pas tracé sur le graphique, et il n’y a ni moyenne horaire ni total. Dans un projet, nous avons envoyé du texte pendant deux semaines, et quand nous l’avons remarqué, les données historiques étaient inutilisables.
Regex’le sayıya çevirmesi önemli. Gösterge " 12.45 kg" gibi metin basıyorsa ve onu olduğu gibi gönderirsen Hermetry’de metin olarak kalır, grafikte çizilmez, saatlik ortalama ya da toplam da çıkmaz. Biz bir projede iki hafta metin göndermişiz, fark ettiğimizde geçmiş veri işe yaramıyordu.
Traduit de Türkçe par IA ·
Résolu, merci.Je n’ai pas trouvé de convertisseur USB-RS232, j’ai donc obtenu un module MAX3232 auprès de l’électronicien. Je l’ai branché, toujours des caractères parasites, puis comme l’a dit Esra, j’ai inversé les broches 2 et 3, et les lignes ont enfin commencé à arriver correctement. J’ai aussi désactivé la console série, l’écran de connexion a disparu. GPIO15 est aussi resté intact, j’ai eu de la chance.Grâce à la note de Tuğba, weight_kg part en nombre dès le départ, et un graphique s’affiche sur le tableau de bord.
Çözüldü, sağ olun.
USB-RS232 çevirici bulamadım, elektronikçiden MAX3232 modülü aldım. Bağladım, yine çöp geldi, sonra Esra’nın dediği gibi 2 ile 3’ü çaprazladım, satırlar düzgün gelmeye başladı. Seri konsolu da kapattım, login ekranı kayboldu. GPIO15 da sağlam çıktı, şanslıymışım.
Tuğba’nın notu sayesinde ilk günden weight_kg sayı olarak gidiyor, dashboard’da grafik çiziliyor.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

