
Introducción
Este dispositivo sirve para el acceso remoto al servidor Linux a través del puerto serie y le permite abandonar el monitor local y el teclado. ¿Por qué es necesario si hay SSH y VNC? Debe tener en cuenta una serie de problemas relacionados con la administración en la etapa de inicio del sistema y la administración de energía:- , recovery mode, memtest. S , fsck .
- . initramfs dropbear . SSH. , , , .
- . , Wake-on-LAN (WOL), , , «» , .
- UPS, .
- Desafortunadamente, el equipo de mi servidor doméstico no es industrial y no tiene un alto grado de confiabilidad. Lo mismo se aplica al software, a menudo los módulos de kernel "en bruto" funcionan. Como resultado de esto, más de una vez el servidor se "colgó" sin responder a través de la red o presionar las teclas del teclado. Tuve que usar un reinicio de hardware manteniendo presionado el botón de encendido durante más de 3 segundos.
No existen tales problemas en los equipos industriales, por ejemplo, la solución HP iLO le permite instalar remotamente al menos un sistema, sin mencionar cosas como la administración de energía y el diagnóstico del sistema. Por cierto, tienen productos para el hogar / pequeña empresa con esta solución. Pero sucedió que el sistema fue construido sobre la base de una placa base miniITX convencional sin tales capacidades.Era necesario un dispositivo que permitiera:- Estar disponible a través de la red
- Interactúa con el gestor de arranque y el sistema operativo del servidor, al menos en modo texto
- Zhelezno interactúa con el botón de encendido y puede cerrar los contactos de este botón durante más de 3 segundos para forzar el apagado
- Cambiar la configuración del BIOS (EFI) (aún no decidido, disponible solo para algunas placas base)
Es un hecho bien conocido que anteriormente utilizaba terminales de texto conectadas al puerto serie de la máquina. Históricamente ha habido soporte de terminal de Linux y el cargador de arranque grub. En las placas base modernas, este puerto no tiene la forma habitual del conector externo DB-9, pero casi siempre se enruta al conector interno de 10 pines.Con la llegada del penique ESP8266, esencialmente un puente entre Wi-Fi y UART, apareció la idea de implementar un terminal de red basado en él, con funcionalidad de administración de energía.Además del ESP8266, hay diferentes opciones.OpenWRT . UART'a MAX232 ( USB — RS232 ), GPIO, , . , , .
, ./., . .
.
Diagrama de circuito
El elemento principal: ESP8266 (ESP-03), tiene Wi-Fi para la comunicación con el mundo exterior, UART para la comunicación con el servidor y un par de GPIO en los que se cuelgan el indicador de estado y los LED del relé para cerrar el botón de encendido. Quedan un par de GPIO libres, que, sin embargo, se pueden usar para conectar I2C, 1-Wire y otros sensores y dispositivos.El popular chip MAX232 se usa para convertir UART de ESP8266 a RS-232. El MAX232 funciona con 5V, mientras que el ESP8266 a través del convertidor LM1117 5-3.3V, por si acaso, se utiliza un divisor de voltaje que conduce 5V desde la salida MAX232 a 3.3V en la línea RSP del ESP8266. La salida MAX232 se divide en dos zócalos, uno para conectarse a DB-9 y el segundo IDC-10 para conexión directa directamente a los contactos en la placa base. El relé se usa para cerrar los contactos del botón de encendido de la PC y se conecta en paralelo con el botón de la carcasa. Por cierto, para conectar el botón de encendido de la caja de la unidad del sistema, puede proporcionar un conector en la placa, lo he implementado a través de un doble para 2.54 pines en el conector de la placa base. En general, la decisión de usar relés es controvertida. Suficiente de un transistor. En el diseño, puse el optoacoplador 817, no funcionó,Se tomaron medidas radicales y el relé se encendió ... funcionó. Déjalo ser, entonces puede ser útil para cerrar / abrir circuitos de 220V, además, se escuchan clics, es útil para el diagnóstico. P6 - conector para una fácil programación a través de adaptadores chinos para arduino FTDI. En modo de programación, el puente se activa mediante JP1. El dispositivo se alimenta a través del conector P4 directamente desde el voltaje de espera de la fuente de alimentación o desde el puerto USB. El conector P1 se usa para conectar una antena externa.El dispositivo se alimenta a través del conector P4 directamente desde el voltaje de espera de la fuente de alimentación o desde el puerto USB. El conector P1 se usa para conectar una antena externa.El dispositivo se alimenta a través del conector P4 directamente desde el voltaje de espera de la fuente de alimentación o desde el puerto USB. El conector P1 se usa para conectar una antena externa.Posibles caminos de desarrollo Placa de circuito impreso
Capa única, pero salieron 5 puentes completos.
Torpe hecho en casa
P6.
Firmware
El más simple consiste en un servidor TELNET, en realidad para el intercambio. Todo lo que aparece en UART se lanza a todos los clientes de TELNET, todo lo que proviene de los clientes se lanza a UART. Los comandos AT también se atornillan para controlar el botón de encendido y configurar el puerto y los parámetros de Wi-Fi. Aunque, para ser sincero, esto está lejos del servidor RFC 854, los comandos no son compatibles, llamo a TELNET porque el puerto 23, el intercambio directo de texto y los clientes TELNET son excelentes para la interacción (probado en el cliente Android ConnectBot y Linux, la utilidad telnet funcionó correctamente con la variable de entorno export TERM = VT100, el parámetro -8 y la transición posterior al modo de carácter ^] carácter de modo).Una característica notable, el ESP8266 puede funcionar como un punto de acceso y como un cliente de red inalámbrica al mismo tiempo. Esto es muy importante para la tolerancia a fallas: le permite conectarse al terminal en caso de una falla del equipo de red.El firmware se escribió originalmente en Sming . La principal ventaja de Sming es que no necesita comprender el SDK chino ESP8266, para todas las necesidades ya existe un contenedor digerible, ya sea un servidor WEB, actualizar el firmware por aire o trabajar con GPIO. Pero al usar el contenedor del servidor TCP para implementar TELNET al transferir grandes volúmenes, la conexión se interrumpió y ESP8266 se bloqueó. Hubo intentos de operar directamente con la API lwip ...Pero en este punto me encontré con el proyecto ESP8266-transparent-bridge. Se decidió simplemente bifurcarlo para la implementación de comandos para controlar el botón de encendido, todo lo demás ya lo ha hecho su autor. Bala agregó el comando AT+++AT PWBTN <duration: SHORT | LONG | HARDRESET>
Hay una falla en el firmware. Si se envía una gran cantidad de información al terminal a la vez, algunos de los datos pueden perderse. Sin embargo, el ESP8266 no es un Moxa NPort y sus capacidades son limitadas. Por ejemplo, si hacemos dmesg, solo veremos una parte de los datos, por lo que tenemos que usar grep cada vez con menos frecuencia y evitar impresiones largas. En términos generales, vale la pena intentar aumentar el búfer de transferencia en el firmware, ahora solo tiene 1024 bytes, hasta que alcance sus manos, haga que sea 32768 y puede resultar cómodo trabajar con utilidades como htop.Configuración de la máquina Linux
En / etc / default / grub debería ser algo como:GRUB_CMDLINE_LINUX="console=ttyS0,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
Para mostrar el menú del gestor de arranque y los mensajes de arranque en el puerto serie. En este caso, el primero con una tasa de bits de 115200. Después de la edición, ejecute el comando update-grub. En principio, esto puede ser limitado, pero por si acaso, aún puede abrir el terminal en el puerto serie, para esto cree /etc/init/ttyS0.conf con el siguiente contenido:
start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -L 115200 ttyS0 vt102
Conexión al servidorComo ya se mencionó, la alimentación se toma directamente del voltaje de espera de la fuente de alimentación o del puerto USB, las salidas de relé se conectan en paralelo con el botón de encendido, la almohadilla RS-232 se conecta mediante un cable directo al conector IDC-10. Hay un matiz de colocar el dispositivo dentro de la carcasa del servidor, debe llevar la antena conectada al conector u.fl del dispositivo detrás de la carcasa de Wi-Fi. Por supuesto, esto no se puede hacer si el caso es relativamente radio-transparente, por ejemplo, de madera.
Cálculo de costo
$ 3 por ESP8266, $ 1 por 10 piezas de MAX232, el resto generalmente está en la granja.Video demostrativo
Fuentes de hierro y software aquí .