Forum: Mikrocontroller und Digitale Elektronik Roast me: MQTT-RS232 Umsetzer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tobias S. (herrgesangsverein)



Lesenswert?

Hallo Gemeinde,

vielleicht hat jemand Lust, mein Projekt auseinanderzunehmen und zu 
kritisieren.

Motivation:

Ich bastele mir meine Home Automation Komponenten selber. Vor allem 
Sensoren auf µC Basis. Dabei habe ich immer das Problem, dass die Daten, 
die im Controller entstehen, irgendwann auf einem IT-Server (MQTT) 
gespeichert werden sollen. Da ich an vielen Punkten Cat5-Kabel liegen 
habe, lag nahe, RS232 oder RS485 zu verwenden.
Leider sind professionelle Ethernet-RS232-Umsetzer ziemlich teuer, vor 
allem da ich 20-30 Endpunkte anbinden möchte.

Anforderungen:

* Anschluss von bis zu 20 Endpunkten per RS232
* Bidirektionale transparente Übertragung zwischen MQTT und den 
Endpunkten mit 2400Baud
* Auf die Hutschiene montierbar
* 24V Versorgungsspannung

Meine Lösung:

Da ich eigentlich nur Erfahrung mit PIC18 habe, setze ich diese hier 
auch ein. Da ich mir auch nicht zugetraut habe, Ethernet mit PHY und 
MagJack selbst aufzubauen und zu prüfen, habe ich hier auf das 
Wiznet550io-Modul zurückgegriffen. Dieses wird über SPI an einen 
PIC18F25K80 angeschlossen, der als Master die Aufgaben des Umsetzers 
steuert. An diesem Master hängen bis zu 5 PIC18F26Q43 per SPI. Zwei auf 
einer Basisplatine und 3 auf einer Tochterplatine. Die 43er dienen als 
Datenpuffer für je 4 UARTs. Die UARTs sind mit einem 
4-Port-Leitungstreiber ADM208 verbunden.

Der Master

Der Master baut eine TCP Verbindung über den Wiznet auf und darauf eine 
MQTT Kommunikation mit einem eigenen abgespeckten Funktionssatz. Nach 
einem Slave Discovery abonniert der Master für jeden Kanal ein MQTT 
Topic (chXin). Erhält der Master über MQTT nun eine Nachricht, die bis 
zu 63 Zeichen lang sein darf, legt er diese in einen Sendepuffer. Dieser 
Sendepuffer wird dann periodisch an die Slaves übertragen. Bei dieser 
Übertragung werden auch empfangene Daten vom Slave abgeholt. Die 
empfangenen Daten werden dann an ein entsprechendes MQTT Topic (chXout) 
übertragen.

Der Slave

Ein Slave für sich ist ein SPI-4xUART-Umsetzer. mit 64Byte großem Sende- 
und Empfangspuffer. Wird ein Chip Select ausgelöst, wird eine 
bidirektionale DMA Übertagung vorbereitet. Durch das DMA kann ich 
gleichzeitig Daten auf dem UART empfangen. Wenn die Vorbereitung 
erledigt ist, antwortet der Slave mit einem Chip Ready. Dann überträgt 
der Master 4x64 Byte, zugleich der Slave seine von RX empfangenen Daten. 
Jeweils das erste Byte ist ein Längenbyte. Der Slave fängt dann mit der 
Übertragung der empfangenen Daten über TX an.

ToDo

Es fehlt eine einfache Möglichkeit, die eigene IP-Adresse, 
Server-Adresse
und Port und Basis-Topic zu konfigurieren. Aktuell geschieht das beim 
Brennen ins EEPROM. Ich denke an einen Telnet-Server.

Ich mache das nur als Hobby, also seid nicht zu hart.
Weitere Details gerne auf Nachfrage.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.