Terminal para servidor Linux doméstico baseado em ESP8266


Introdução


Este dispositivo é usado para acesso remoto ao servidor Linux via porta serial e permite abandonar o monitor e o teclado local. Por que é necessário se houver SSH e VNC? Você precisa ter em mente vários problemas relacionados ao gerenciamento no estágio de inicialização do sistema e ao gerenciamento de energia:
  • , recovery mode, memtest. S , fsck .
  • . initramfs dropbear . SSH. , , , .
  • . , Wake-on-LAN (WOL), , , «» , .
  • UPS, .
  • Infelizmente, o equipamento do meu servidor doméstico não é industrial e não possui um alto grau de confiabilidade. O mesmo se aplica ao software, geralmente os módulos do kernel "brutos" funcionam. Como resultado, mais de uma vez o servidor “travou” sem responder pela rede ou pressionar as teclas do teclado. Eu tive que usar uma redefinição de hardware mantendo pressionado o botão liga / desliga por mais de 3 segundos.


Não existem problemas em equipamentos industriais, por exemplo, a solução HP iLO permite instalar remotamente pelo menos um sistema, sem mencionar coisas como gerenciamento de energia e diagnóstico do sistema. A propósito, eles têm produtos para uso doméstico / pequeno com esta solução. Mas aconteceu que o sistema foi construído com base em uma placa-mãe miniITX convencional sem esses recursos.

Havia uma necessidade de um dispositivo que permitisse:
  • Estar disponível na rede
  • Interaja com o gerenciador de inicialização e o SO do servidor, pelo menos no modo de texto
  • Zhelezno interage com o botão liga / desliga e pode fechar os contatos desse botão por mais de 3 segundos para forçar o desligamento
  • Alterar as configurações do BIOS (EFI) (ainda não decidido, disponível apenas para algumas placas-mãe)

É um fato bem conhecido que anteriormente utilizavam terminais de texto conectados à porta serial da máquina. Historicamente, existe o suporte ao terminal Linux e o gerenciador de inicialização grub. Nas placas-mãe modernas, essa porta não está na forma usual do conector externo DB-9, mas quase sempre é roteada para o conector interno de 10 pinos.

Com o advento do centavo ESP8266, essencialmente uma ponte entre Wi-Fi e UART, surgiu a idéia de implementar um terminal de rede baseado nele, com funcionalidade de gerenciamento de energia.

Além do ESP8266, existem opções diferentes.
OpenWRT . UART'a MAX232 ( USB — RS232 ), GPIO, , . , , .

, ./., . . .


Diagrama de circuito



O elemento principal - ESP8266 (ESP-03), possui Wi-Fi para comunicação com o mundo exterior, UART para comunicação com o servidor e alguns GPIOs nos quais o indicador de status e os LEDs de relé estão pendurados para fechar o botão liga / desliga. Existem alguns GPIOs gratuitos que podem ser usados ​​para conectar I2C, 1-Wire e outros sensores e dispositivos.
O popular chip MAX232 é usado para converter UART de ESP8266 para RS-232. O MAX232 é alimentado por 5V, enquanto o ESP8266 através do conversor LM1117 5-3.3V, apenas no caso, um divisor de tensão que conduz 5V da saída MAX232 a 3.3V é usado na linha RSP do ESP8266. A saída MAX232 é dividida em dois soquetes, um para conexão ao DB-9 e o segundo IDC-10 para conexão direta diretamente aos contatos na placa-mãe. O relé é usado para fechar os contatos do botão liga / desliga do PC e é conectado em paralelo com o botão no gabinete. By the way, para conectar o botão liga / desliga do gabinete da unidade de sistema, você pode fornecer um conector na placa, eu o implementei através de um duplo para 2,54 pinos no conector da placa-mãe. Em geral, a decisão de usar relés é controversa. Chega de um transistor. No layout, coloquei o acoplador óptico 817, não funcionou,medidas radicais foram tomadas e o relé ligado ... funcionou. Seja como for, pode ser útil fechar / abrir circuitos de 220V; além disso, são ouvidos cliques - é útil para diagnósticos. P6 - conector para facilitar a programação através de adaptadores chineses para arduino FTDI. No modo de programação, o jumper é ativado por JP1. O dispositivo é alimentado via conector P4 diretamente da tensão de espera da fonte de alimentação ou da porta USB. O conector P1 é usado para conectar uma antena externa.O dispositivo é alimentado via conector P4 diretamente da tensão de espera da fonte de alimentação ou da porta USB. O conector P1 é usado para conectar uma antena externa.O dispositivo é alimentado via conector P4 diretamente da tensão de espera da fonte de alimentação ou da porta USB. O conector P1 é usado para conectar uma antena externa.
Possíveis caminhos de desenvolvimento
  • CMOS
  • ,



Placa de circuito impresso


Camada única, mas foram lançados 5 jumpers inteiros.

Desajeitado feito em casa

P6.


Firmware


O mais simples consiste em um servidor TELNET - na verdade, para troca. Tudo o que aparece no UART é lançado para todos os clientes TELNET, tudo o que vem dos clientes é lançado para o UART. Os comandos AT também são parafusados ​​para controlar o botão liga / desliga e configurar os parâmetros de porta e Wi-Fi. Embora, para ser honesto, isso esteja longe do servidor RFC 854, os comandos não são suportados, eu chamo TELNET porque a porta 23, troca direta de texto e clientes TELNET são ótimos para interação (testado no cliente Android ConnectBot e Linux, o utilitário telnet funcionou corretamente com a variável de ambiente export TERM = VT100, o parâmetro -8 e a transição subsequente para o modo de caractere ^] caractere de modo).
Um recurso digno de nota, o ESP8266 pode funcionar como um ponto de acesso e como um cliente de rede sem fio ao mesmo tempo. Isso é muito importante para a tolerância a falhas - permite conectar ao terminal no caso de uma falha no equipamento de rede.
O firmware foi originalmente escrito em Sming . A principal vantagem do Sming é que você não precisa entender o SDK chinês do ESP8266; para todas as necessidades, já existe um invólucro digerível, seja um servidor WEB, atualizando o firmware por via aérea ou trabalhando com o GPIO. Porém, ao usar o wrapper do servidor TCP para implementar o TELNET ao transferir grandes volumes, a conexão foi interrompida e o ESP8266 travou. Houve tentativas de operar diretamente com a API lwip ...
Mas neste momento me deparei com o projeto da ponte transparente ESP8266. Foi decidido simplesmente bifurcá-lo para a implementação de comandos para controlar o botão liga / desliga, tudo o resto já foi feito por seu autor. Bala adicionou o comando AT
+++AT PWBTN <duration: SHORT | LONG | HARDRESET> #       |   | ,        


Há uma falha no firmware. Se uma grande quantidade de informações for enviada para o terminal de cada vez, alguns dados poderão ser perdidos. No entanto, o ESP8266 não é um Moxa NPort e seus recursos são limitados. Por exemplo, se criarmos dmesg, veremos apenas parte dos dados; portanto, temos que usar grep com mais e menos frequência e evitar longas impressões. De um modo geral, vale a pena tentar aumentar o buffer de transferência no firmware, agora são apenas 1024 bytes, até suas mãos chegarem, torná-lo 32768 e pode ficar confortável trabalhar com utilitários como o htop.

Configuração da máquina Linux


Em / etc / default / grub deve 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 exibir o menu do carregador de inicialização e as mensagens de inicialização na porta serial. Nesse caso, o primeiro com uma taxa de bits de 115200. Após a edição, execute o comando update-grub. Em princípio, isso pode ser limitado, mas por precaução, você ainda pode abrir o terminal na porta serial, para isso crie /etc/init/ttyS0.conf com o seguinte conteúdo:
# 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

Conectando ao servidor
Como já mencionado, a energia é obtida diretamente da tensão de espera da fonte de alimentação ou da porta USB, as saídas de relé são conectadas paralelamente ao botão liga / desliga, o pad RS-232 é conectado por um cabo direto ao conector IDC-10. Há uma nuance de colocar o dispositivo dentro da caixa do servidor. É necessário remover a antena conectada ao conector u.fl do dispositivo da caixa Wi-Fi. Obviamente, isso pode ser omitido se a caixa for relativamente transparente à rádio, por exemplo, feita de madeira.



Calculo de custo


US $ 3 por ESP8266, US $ 1 por 10 peças de MAX232, o restante geralmente fica na fazenda.

Demonstração em vídeo





Fontes de ferro e software aqui .

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


All Articles