Terminal für Linux-Heimserver basierend auf ESP8266


Einführung


Dieses Gerät dient für den Remotezugriff auf den Linux-Server über die serielle Schnittstelle und ermöglicht es Ihnen, den lokalen Monitor und die Tastatur zu verlassen. Warum wird es benötigt, wenn es SSH und VNC gibt? Sie müssen eine Reihe von Problemen im Zusammenhang mit der Verwaltung beim Systemstart und der Energieverwaltung berücksichtigen:
  • , recovery mode, memtest. S , fsck .
  • . initramfs dropbear . SSH. , , , .
  • . , Wake-on-LAN (WOL), , , «» , .
  • UPS, .
  • Leider ist die Ausstattung meines Heimservers nicht industriell und weist kein hohes Maß an Zuverlässigkeit auf. Gleiches gilt für Software, häufig funktionieren "rohe" Kernelmodule. Infolgedessen „hing“ der Server mehr als einmal, ohne über das Netzwerk oder auf das Drücken der Tastaturtasten zu antworten. Ich musste einen Hardware-Reset durchführen, indem ich den Netzschalter länger als 3 Sekunden gedrückt hielt.


Bei Industrieanlagen gibt es keine derartigen Probleme. Mit der HP iLO-Lösung können Sie beispielsweise mindestens ein System aus der Ferne installieren, ganz zu schweigen von der Energieverwaltung und der Systemdiagnose. Übrigens haben sie mit dieser Lösung Produkte für zu Hause / kleine Unternehmen. Es kam jedoch vor, dass das System auf der Basis eines herkömmlichen miniITX-Motherboards ohne solche Funktionen aufgebaut wurde.

Es bestand Bedarf an einem Gerät, das Folgendes ermöglichte:
  • Über das Netzwerk verfügbar sein
  • Interagiere mit dem Bootloader und dem Server-Betriebssystem, zumindest im Textmodus
  • Zhelezno interagiert mit dem Netzschalter und kann die Kontakte dieses Knopfes länger als 3 Sekunden schließen, um das Herunterfahren zu erzwingen
  • Ändern Sie die BIOS-Einstellungen (EFI) (noch nicht entschieden, nur für einige Motherboards verfügbar)

Es ist bekannt, dass zuvor verwendete Textterminals an die serielle Schnittstelle des Geräts angeschlossen wurden. In der Vergangenheit gab es Unterstützung für Linux-Terminals und den Grub-Bootloader. Bei modernen Motherboards hat dieser Anschluss nicht die übliche Form des externen DB-9-Anschlusses, sondern wird fast immer zum internen 10-poligen Anschluss geführt.

Mit dem Aufkommen des Penny ESP8266, im Wesentlichen einer Brücke zwischen Wi-Fi und UART, entstand die Idee, ein darauf basierendes Netzwerkterminal mit Energieverwaltungsfunktionen zu implementieren.

Neben dem ESP8266 gibt es verschiedene Optionen.
OpenWRT . UART'a MAX232 ( USB — RS232 ), GPIO, , . , , .

, ./., . . .


Schaltplan



Das Hauptelement - ESP8266 (ESP-03) - verfügt über WLAN für die Kommunikation mit der Außenwelt, UART für die Kommunikation mit dem Server und einige GPIOs, an denen die Statusanzeige und die Relais-LEDs zum Schließen des Netzschalters aufgehängt sind. Es gibt einige kostenlose GPIOs, mit denen I2C, 1-Wire und andere Sensoren und Geräte verbunden werden können.
Der beliebte MAX232-Chip wird verwendet, um UART von ESP8266 auf RS-232 zu konvertieren. Der MAX232 wird mit 5 V versorgt, während der ESP8266 mit einem 5-3,3 V LM1117-Wandler betrieben wird, nur für den Fall, dass eine ESP8266 RX-Leitung einen Spannungsteiler verwendet, der 5 V vom MAX232-Ausgang auf 3,3 V treibt. Der MAX232-Ausgang ist in zwei Anschlüsse unterteilt, einen zum Anschließen an einen DB-9 und einen zweiten IDC-10 zum direkten Anschließen an die Kontakte auf der Hauptplatine mit einer direkten Schleife. Das Relais dient zum Schließen der Kontakte des PC-Netzschalters und ist parallel zum Knopf am Gehäuse geschaltet. Übrigens, um den Netzschalter vom Gehäuse der Systemeinheit aus anzuschließen, können Sie einen Anschluss auf der Platine bereitstellen. Ich habe ihn durch ein Doppel für 2,54 Pins am Anschluss des Motherboards implementiert. Generell ist die Entscheidung über Relais umstritten. Genug von einem Transistor. Im Layout habe ich den Optokoppler 817 eingesetzt, es hat nicht funktioniert,Es wurden radikale Maßnahmen ergriffen und das Relais eingeschaltet ... es funktionierte. Lassen Sie es sein, es kann dann nützlich sein, 220-V-Stromkreise zu schließen / zu öffnen, außerdem sind Klicks zu hören - es ist nützlich für die Diagnose. P6 - Anschluss für einfache Programmierung über chinesische Adapter für Arduino FTDI. Im Programmiermodus wird der Jumper von JP1 aktiviert. Das Gerät wird über den P4-Anschluss direkt über die Standby-Spannung des Netzteils oder über den USB-Anschluss mit Strom versorgt. Der Anschluss P1 dient zum Anschließen einer externen Antenne.Das Gerät wird über den P4-Anschluss direkt über die Standby-Spannung des Netzteils oder über den USB-Anschluss mit Strom versorgt. Der Anschluss P1 dient zum Anschließen einer externen Antenne.Das Gerät wird über den P4-Anschluss direkt über die Standby-Spannung des Netzteils oder über den USB-Anschluss mit Strom versorgt. Der Anschluss P1 dient zum Anschließen einer externen Antenne.
Mögliche Entwicklungspfade
  • CMOS
  • ,



Leiterplatte


Einzelne Schicht, aber 5 ganze Springer kamen heraus.

Unbeholfen zu Hause gemacht

P6.


Firmware


Der einfachste besteht aus einem TELNET-Server - eigentlich zum Austausch. Alles, was in UART angezeigt wird, wird an alle TELNET-Clients gesendet, alles, was von Clients stammt, wird an UART gesendet. AT-Befehle werden ebenfalls angeschraubt, um den Netzschalter zu steuern und die Port- und Wi-Fi-Parameter zu konfigurieren. Obwohl dies, um ehrlich zu sein, weit entfernt von einem RFC 854-Server ist, werden die Befehle nicht unterstützt. Ich rufe TELNET auf, da Port 23, direkter Textaustausch und TELNET-Clients sich hervorragend für die Interaktion eignen (getestet auf dem Android-Client von ConnectBot und Linux, das Telnet-Dienstprogramm funktionierte für mich korrekt mit der Umgebungsvariablen export TERM = VT100, dem Parameter -8 und dem anschließenden Übergang in den Zeichenmodus ^] Moduszeichen).
Als bemerkenswerte Funktion kann der ESP8266 gleichzeitig als Zugriffspunkt und als drahtloser Netzwerkclient verwendet werden. Dies ist sehr wichtig für die Fehlertoleranz. Sie ermöglicht es Ihnen, bei einem Ausfall der Netzwerkgeräte eine Verbindung zum Terminal herzustellen.
Die Firmware wurde ursprünglich in Sming geschrieben . Der Hauptvorteil von Sming ist, dass Sie das chinesische ESP8266 SDK nicht verstehen müssen. Für alle Anforderungen gibt es bereits einen verdaulichen Wrapper, egal ob es sich um einen WEB-Server handelt, der die Firmware auf dem Luftweg aktualisiert oder mit GPIO arbeitet. Bei Verwendung des Wrappers des TCP-Servers zur Implementierung von TELNET beim Übertragen großer Volumes wurde die Verbindung jedoch unterbrochen und ESP8266 blieb hängen. Es gab Versuche, direkt mit der lwip-API zu arbeiten ...
Aber an diesem Punkt stieß ich auf das ESP8266-Transparent-Bridge- Projekt. Es wurde beschlossen, es einfach für die Implementierung von Befehlen zur Steuerung des Netzschalters zu gabeln, alles andere wurde bereits von seinem Autor erledigt. Bala fügte den AT-Befehl hinzu
+++AT PWBTN <duration: SHORT | LONG | HARDRESET> #       |   | ,        


Es liegt ein Fehler in der Firmware vor. Wenn gleichzeitig eine große Menge an Informationen an das Terminal ausgegeben wird, gehen möglicherweise einige Daten verloren. Der ESP8266 ist jedoch kein Moxa NPort und seine Fähigkeiten sind begrenzt. Wenn wir beispielsweise dmesg erstellen, wird nur ein Teil der Daten angezeigt, sodass wir grep immer seltener verwenden und lange Anzeigen auf dem Bildschirm vermeiden müssen. Im Allgemeinen lohnt es sich, den Übertragungspuffer in der Firmware zu erhöhen. Jetzt sind es nur noch 1024 Bytes, bis Ihre Hände 32768 erreichen und es möglicherweise bequemer wird, mit Dienstprogrammen wie htop zu arbeiten.

Linux-Maschinenkonfiguration


In / etc / default / grub sollte so etwas wie sein:
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Anzeigen des Bootloader-Menüs und der Startmeldungen an der seriellen Schnittstelle. In diesem Fall die erste mit einer Bitrate von 115200. Führen Sie nach der Bearbeitung den Befehl update-grub aus. Im Prinzip kann dies eingeschränkt sein, aber nur für den Fall, dass Sie das Terminal an der seriellen Schnittstelle noch öffnen können, erstellen Sie für diese /etc/init/ttyS0.conf den folgenden Inhalt:
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]
#
respawn
exec /sbin/getty -L 115200 ttyS0 vt102

Anschließen an den Server
Wie bereits erwähnt, erfolgt die Stromversorgung direkt über die Standby-Spannung des Netzteils oder über den USB-Anschluss, die Relaisausgänge sind parallel zum Netzschalter geschaltet, das RS-232-Pad ist über ein direktes Kabel mit dem IDC-10-Anschluss verbunden. Es gibt eine Nuance beim Platzieren des Geräts im Servergehäuse. Sie müssen die Antenne herausnehmen, die an den u.fl-Anschluss des Geräts für das Wi-Fi-Gehäuse angeschlossen ist. Dies ist natürlich nicht möglich, wenn das Gehäuse relativ radio-transparent ist, beispielsweise aus Holz.



Kostenkalkulation


3 US-Dollar für ESP8266, 1 US-Dollar für 10 Stück MAX232, der Rest befindet sich normalerweise auf der Farm.

Videodemonstration





Eisen- und Softwarequellen hier .

Source: https://habr.com/ru/post/de387033/


All Articles