OpenWRT VLAN und TL-SG105E Switch

Mit OpenWRT wird der TP-Link Router (TL-WR1043ND) zum All-Inclusive Gerät. So wird es zum Beispiel möglich, mit VLANs zu arbeiten.

Bei mir wird mein Internetzugang durch ein Modem bereitgestellt. Mein Router steht auf einem Regal in der Mitte der jLANWohnung. Ein 10 Meter Kabel verbindet die beiden Geräte miteinander. Ich möchte nun einen Drucker in die Ecke zu dem Modem stellen und meine TV Geräte (auch auf der Seite mit dem Modem) ebenfalls in das LAN einbinden.

Um das zu realisieren habe ich diesen Switch (TL-SG105E) von TP-Link gekauft. Die Zeichnung zeigt den logischen Aufbau des Netzwerkes, wie es geplant ist.

Den TP-Link Router (TL-WR1043ND) habe ich schon länger im Einsatz und mit OpenWRT geflasht. Um nun ein VLAN einzurichten wechsle ich von der GUI (Luci) auf die Kommandozeile. Ich habe es anfangs auch per Luci probiert, allerdings hat es nie funktioniert. Nachdem ich es per Kommandozeile (genau die selbe Konfiguration) gemacht habe, hat alles funktioniert.

Router Konfiguration

VLAN anlegen:

Hier habe ich die Datei „/etc/config/network“ editiert und folgendes hinzugefügt:

‚lan‘ steht für den Interface-Namen, der bei Luci unter dem Punkt Interfaces aufgelistet wird.
‚eth0.3‘ ist das physikalische Interface, das der VLAN-ID 3 zugeordnet wurde.

Es gibt auch Router, die mehrere physikalische Interfaces besitzen. Dort müssen die VLAN Interfaces mit z.B. „eth1.3“ angelegt werden. Da mein Router nur ein Interface besitzt, muss ich darauf nicht achten.

VLAN dem Switch-Interface zuordnen:

Der Switch in dem Router (Port 0-4) muss ebenfalls konfiguriert werden. Hier müssen die VLANs entsprechen „getagged“ oder „untagged“ konfiguriert werden.

Meine Konfiguration sieht so aus:

„config switch_vlan“ stellt ein VLAN an dem Switch bereit.

„option device“ gibt das Gerät an.

„option vlan“ gibt die VLAN ID an.

„option ports“ gibt die Ports des Switches an, wobei der Port und ein „t“ dahinter (z.B. 1t) „tagged“ bedeutet.

DHCP einrichten und Neustart

Da für das VLAN „LAN“ (in meinem Fall) auch DHCP aktiviert werden soll, muss das in die Konfigurationsdatei „/etc/config/dhcp“ eingetragen werden:

Mit dieser Konfiguration werden nun aus meinem LAN IP’s aus der Range „192.168.1.100 – 192.168.1.250“ vergeben.

Danach muss noch der Netzwerk Dienst neu gestartet werden:

 Switch Konfiguration

Den Switch kann man nur über die GUI/Software von TP-Link konfigurieren. Diese einfach auf der Webseite herunterladen. Am besten auch gleich noch die aktuellste Firmware. Wenn die Software gestartet wird, erscheint eine Übersicht aller TP-Link Easy Smart Switche. Einfach die IP-Konfiguration des Gerätes anklicken und dort die neue IP angeben. Nachdem der Hostname des Switch und das Passwort des „admin“ Users geändert wurden, kann das VLAN konfigurieren anfangen.

VLANs eintragen

Die VLANs werden in dem oberen Tab-Reiter eingetragen und konfiguriert. Hier habe ich „802.1Q VLAN“ aktiviert und meine VLANs eingetragen. Die Ports habe ich entsprechend meiner Zeichnung oben konfiguriert.

Testen

Nach dem Speichern der Konfiguration konnte ich den Switch testen. Hier war es mir sehr wichtig das Testen abzuschließen, bevor ich das WAN anschließe. Ich wollte ungern eins meiner Geräte direkt ins Internet durch reichen.

Aufbau des Endzustands

Alle Tests verliefen positiv und somit konnte ich die Hardware nach der Zeichnung verkabeln. Performance ist wie zuvor. Ich habe eine 100Mbit Leitung und lade nach wie vor mit maximaler Geschwindigkeit herunter.

Raspberry Car – Aufbau der Hardware

Nachdem ich die L293D verstanden hatte, habe ich mir eine Platine geholt und die Bauteile aufgelötet. Leider hatte ich nur drei verschiedene Farben Draht zur Verfügung. Also habe ich für Ground Weiß, für +V Braun und für alles andere Grün genommen. Sehr übersichtlich ist es nicht. Vielleicht mache ich das Ganze nochmals neu, wenn alles einmal läuft.
AIMG_0118ls nächstes habe ich mir überlegt, wie ich am besten die Akkus anbringe. Diese wollte ich unbedingt auf der unteren Ebene befestigen, vor allem wegen dem Gewicht. Auch die Zugänglichkeit für den Rapberry und Co ist hier wichtiger.
Außerdem steht in der Zukunft noch an, dass ich ein Ladegerät für sechs AA-Akkus organisiere und diese dann über einen Steckmechanismus laden kann. Somit müsste ich die obere Ebene nicht jedes Mal ab- und wieder anschrauben.
Als nächstes habe ich einige Jumper Kabel abgezwickt und mit den einzelnen Kabeln der Motoren verknüpft. Zwei Jumper habe ich noch an die Enden der Batteriefächer gelötet. Auf die Platine habe ich die dementsprechend Anzahl Pins montiert. Jetzt kann ich meine Motoren sehr leicht an und ausstecken.

 

IMG_0119Zusätzlich habe ich noch einen Schalter angebracht, mit dem ich die Batteriefächer zuschalten kann. Eine rote LED mit Vorwiderstand zeigt mir an, ob die Spannung aktiv ist oder nicht.
Die Platine ist mit etwas längeren Schrauben an der oberen Ebene befestigt und der Raspberry Pi versetzt darunter (siehe Bild). Hinter oder unter erstere soll die Powerbank für den Raspberry Pi angebracht werden. Leider ist meine bisherige ein paar Millimeter zu breit. Hier muss ich mir unbedingt noch eine Lösung einfallen lassen.
Die Löcher für die Montage habe ich einfach mit einem passenden Bohrer hinzugefügt. Das Plastik hält das durchaus aus. Trotzdem ist Vorsicht besser als Nachsicht. Laufen zu viele Löcher in einer Bahn, hat man schnell eine Sollbruchstelle. Mir ist beim Verschrauben vorne Rechts der Zapfen mit dem Loch für die Verbindungsstrebe abgebrochen. Obwohl ich mit wenig Druck gearbeitet hatte. Aber mit diesem Schaden kann ich durchaus leben.

 

Ein wenig Code habe ich auch schon geschrieben. Zum eine die Motor Klasse, die ich benutze, um die Motoren zu steuern. Und meine „main“, in der ich eben alles andere regele. Bisher funktioniert leider nur das Testen der Motoren, für den Rest muss ich mir noch ein wenig Steuerungscode ausdenken. Ich möchte unbedingt eine GUI mit Tkinter erstellen und über diese das spätere Webcam Bild ausgeben lassen. Zudem soll auf ihr der Status der einzelnen Räder und aller zusammen angezeigt werden. Ich überlege auch, eine Socket Connection herzustellen und die Steuerungssoftware auf einem Windows PC laufen zu lassen.

Hier die Motor Klasse:

Und das ist meine „main“:

Den aktuellsten Code gibt es immer in meinem GitHub Repo:

github.com/PetzJohannes/RaspberryCar_v2

Hier noch zwei Bilder vom Aufbau:

IMG_0114IMG_0117IMG_0120

L293D – Geschwindigkeit und Richtung von DC Motoren steuern

Wie im letzten Eintrag angesprochen, muss ich für die vier Motoren des RaspberryCars verschiedene Geschwindigkeiten ermöglichen, um z.B. Kurven zu fahren.

Als Steuerung nehme ich hierfür den L293D Controller. Dieser ermöglicht es mir, mit zwei Input Pins an den Raspberry die Richtung der Drehung zu bestimmen. Mit einem dritten Pin, den ich ein PWM Signal ausgeben lasse, kann ich dann die Geschwindigkeit regeln.

Schaltbild L293DZwei Ausgänge gehen hier zu einem Motor (Grün & Gelb).

Zwei Eingänge werden mit dem Raspberry Pi verbunden (Braun). Sie sind für IN/OUT (Vorwärts/Rückwärts) zuständig.

Ein Eingang wird mit einem weiteren Pin des Raspberry Pis verbunden (Cyan). Dieser wird der PWM Pin (Geschwindigkeit).

Nun fehlt noch Ground, 5V Eingang vom Raspberry aus und die Grundspannung für die Motoren (Rot & Blau). Diese sollten unbedingt durch eine andere Quelle als den Raspberry betrieben werden. Der Rasbperry kann nicht alles versorgen und ist dann schnell überlastet.

Wenn man alles richtig verbunden hat, kann folgendes Skript den Motor vorwärts und rückwärts drehen lassen, sowie die Geschwindigkeit verändern. Mit „f“ oder „r“ kann vor und zurück gesteuert werden. Mit 0-9 die Geschwindigkeit. Mit x wird das Skript abgebrochen und die GPIOs zurückgesetzt.

Der Code kann auch in meinem GitHub Repo gefunden werden. Dort werde ich auch alle Änderungen ergänzen.

Das Skript stammt ursprünglich von Adafruit. Ich habe es als Grundlage für dieses Skript benutzt. Mit einem Motor funktioniert das ursprüngliche Skript sehr gut. Allerdings hat es den nachteil, dass nur ein PWM Pin definiert werden kann. Hierzu ist auch zwingend das Betriebssystem Occidentalis von Adafruit notwendig. In meiner Lösung benutzt ich Raspbian.

Achtung! Mit Occidentalis ist es nicht möglich, dieses Skript korrekt auszuführen!

Schaut man sich die L293D genau an, sieht man, dass sie symmetrisch aufgebaut ist:
L293DEN1 und EN2 sind für die jeweilige Seite die PWM Steuerung.

IN1/IN2 und IN3/IN4 sind die Pins, die an den Raspberry führen und zum steuern der Richtung der jeweiligen Seite verantwortlich sind.

OUT1/OUT2 und OUT3/OUT4 sind die Pins, die an die Motoren führen.

+V ist die Versorgungsspannung über den Raspberry Pi.

+Vmotor ist die Spannung, die für die Motoren benutzt wird.

0V ist Ground. Es ist egal, an welchen der vier Pins angelegt wird.

 

 

Ich habe das ganze mit zwei Motoren getestet und werde meinen Aufbau hier einstellen, sobald ich alles verlötet und die Platine auf die Chassis montiert habe.

Raspberry Car Version 2 Vorwort und Overview

Mit der alten Chassis hat das Raspberry Car wenig Möglichkeiten gehabt. Der Servo, den ich für die Lenkung verbaut hatte, ist nicht genau genug und zu schwach. Die Reifen sind aus relativ hartem Plastik und haben auf Teppichböden so viel Widerstand, dass der Motor es nicht mehr antreiben kann. Also muss etwas Neues her. Aber was?
Raspberry Car Version 2 Vorwort und Overview weiterlesen

Yowsup-cli 2.0.2, Linux WhatsApp Nachrichten verschicken

„Über die Kommandozeile WhatsApp Nachrichten zu verschicken.“, das wäre was, habe ich mir vor zwei Wochen gedacht. Kurz gegooglet und yowsup entdeckt. Klingt sehr spannend und ich war sofort begeistert.

Yowsup-cli 2.0.2, Linux WhatsApp Nachrichten verschicken weiterlesen