Índice:

Crie um botão liga / desliga Raspberry Pi melhor: 4 etapas
Crie um botão liga / desliga Raspberry Pi melhor: 4 etapas

Vídeo: Crie um botão liga / desliga Raspberry Pi melhor: 4 etapas

Vídeo: Crie um botão liga / desliga Raspberry Pi melhor: 4 etapas
Vídeo: Configurações visuais no Raspbian - Curso Raspberry Pi 2024, Novembro
Anonim
Image
Image

É muito fácil fazer um botão de desligar ou desligar o Raspberry. Existem muitos desses projetos na web e alguns aqui no Instructables, mas nenhum deles (que eu possa ver) informa quando seu Pi realmente terminou de desligar e, portanto, é seguro puxar a energia. Na verdade, eles nem mesmo reconhecem que o botão foi pressionado.

Também existem projetos para reiniciar um Pi que foi encerrado, mas também não fornecem nenhum feedback visual.

Mas quem precisa de um botão assim? Se você for um pouco nerd como eu, ou apenas um aspirante a nerd, você sempre pode fazer login no seu Pi localmente ou pela rede e digitar sudo shutdown -h now. Mas se você estiver construindo um projeto para usuários não técnicos, isso simplesmente não vai funcionar. É verdade que você quase sempre consegue se safar apenas puxando o cabo de alimentação, mas observe, eu disse quase sempre! A sorte de todos acaba mais cedo ou mais tarde. Eu tive um cartão SD morrendo comigo na semana passada, embora nunca saberei se foi ou não devido a uma queda repentina de energia.

No meu caso, precisei adicionar um botão liga / desliga a um Pi que usamos como sequenciador midi para gravar e reproduzir hinos e canções na igreja, para quando não tivermos um pianista ao vivo disponível. Sempre posso digitar o comando de desligamento, mas preciso desqualificá-lo para quando não estiver lá.

Minha intenção aqui não é dar a você um produto acabado, completo com uma linda caixa impressa em 3D, como tantos outros Instructables. Cada pessoa terá um uso diferente para ele ou deseja incorporar em seu próprio projeto. Em vez disso, configurarei a tecnologia que você pode adicionar ao seu projeto, seja um centro de mídia, um dispositivo IoT ou qualquer outra coisa.

(No vídeo, estou demonstrando isso com um Pi Zero v1.2 e um monitor que fiz a partir de uma tela de laptop adaptada e um controlador do Extremo Oriente.)

Etapa 1: o design

Como funciona
Como funciona

Isso é o que meu botão liga / desliga fará por você:

  • Quando o Pi está funcionando, um LED fica aceso continuamente. Se for desligado manualmente, o LED só se apagará quando for seguro desconectar a energia.
  • Durante a execução, se você pressionar o botão por pelo menos um segundo, um desligamento é iniciado e o LED pisca por um quarto de segundo a cada segundo até que seja seguro desconectar a energia.
  • Em um estado de desligamento (se a energia não tiver sido removida), pressionar o botão inicia a inicialização e acende o LED por um quarto de segundo a cada segundo até que seja inicializado. (Pode demorar um pouco mais até que todos os serviços, como ssh e vnc, estejam em execução.)

Os componentes são muito baratos. Tudo o que você precisa é:

  • ATTiny85 (chip compatível com Arduino)
  • 3 resistores: 2 x 330Ω e 1 x 10kΩ
  • 1 LED - sugiro verde ou azul, mas a escolha é sua
  • breadboard e fios de jumper, ou stripboard, ou como você quiser construí-lo.

Etapa 2: como funciona

Como acontece com todos os botões de energia do Pi, este coloca um pino GPIO em um estado baixo para sinalizar uma solicitação de desligamento para um programa auxiliar em execução no Pi. Usei GPIO4 (pino 7), mas você pode usar qualquer outro pino.

A única maneira de saber se um Pi completou o desligamento é observando o pino 8 do TxD, que então fica baixo. Isso depende do console serial estar habilitado, o que é por padrão. Na verdade, o TxD sobe e desce regularmente enquanto está sendo usado como um console serial, mas nunca fica baixo por mais de cerca de 30 ms de cada vez, mesmo na taxa de transmissão comum mais lenta. Ele ainda pode ser usado para um console serial, visto que apenas o assistimos passivamente.

Para reiniciar, precisamos puxar brevemente SCL1 (pino 5) para baixo. Este pino é usado por qualquer dispositivo I2C (incluindo minha interface midi), mas depois de iniciar a inicialização, nós o deixamos sozinho.

A maior parte da complexidade está no esboço do Arduino que carregamos no ATTiny85. Isso implementa uma "máquina de estados" - uma forma muito útil e poderosa de codificar qualquer problema que possa ser representado por vários "estados". Uma máquina de lavar funciona da mesma maneira. Os estados representam os estágios do ciclo de lavagem e cada um define o que a máquina deve estar fazendo naquele ponto (motores ou bombas a funcionar, válvulas a serem abertas ou fechadas) e quais entradas de sensor (temperatura, nível de água, temporizadores) determinar quando passar para o próximo estado e qual próximo estado escolher.

O esboço da mão é meu primeiro esboço de um diagrama de estado, mostrando todas as transições de estado. Isso é apenas para mostrar como você pode planejar inicialmente seus estados e transições de estado - pode não ser completamente preciso como era antes de eu começar a depurar.

Em nosso caso, temos 6 estados que chamei de OFF, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST e SHUTTING DOWN. (Depois de DESLIGAR, ele volta para DESLIGADO.) Eles são identificados por comentários no esboço e, para cada um, comentários adicionais dizem o que deve ser feito e quais eventos o moverão para outro estado.

O programa auxiliar em execução no Pi é um pouco mais complicado do que a maioria dos botões de desligamento. Ele responde a um pulso longo e baixo no pino GPIO iniciando um desligamento, mas também responde a um pulso curto puxando brevemente o pino GPIO para baixo. É assim que o ATTiny85 pode saber que está funcionando e, portanto, pode passar do estado BOOTING para o estado RUNNING.

Etapa 3: Construindo um Protótipo de Demonstração

Construindo um Protótipo de Demonstração
Construindo um Protótipo de Demonstração
Construindo um Protótipo de Demonstração
Construindo um Protótipo de Demonstração
Construindo um Protótipo de Demonstração
Construindo um Protótipo de Demonstração

Para fins de demonstração, você pode prototipá-lo em uma placa de ensaio sem solda, como mostrado, mas também forneci o esquema para que você possa trabalhar em seu próprio layout usando stripboard ou um PCB personalizado, talvez parte de um projeto mais amplo.

Etapa 4: Programando o ATTiny85

O esboço do Arduino e o programa auxiliar estão anexados a esta etapa. Na pasta de esboços do Arduino, crie uma pasta chamada PiPwr e copie o arquivo PiPwr.ino nela. Ao iniciar o IDE do Arduino, você agora o encontrará em seu bloco de desenho.

Existem várias maneiras de programar um ATTiny85. Se a sua tem um bootloader instalado, você pode usar uma placa de desenvolvimento ATTiny85 que custa apenas alguns libras. Isso se conecta ao seu PC através de uma porta USB. Usei um Hidiot que é essencialmente o mesmo, mas com uma área de prototipagem.

No IDE do Arduino em Arquivo - Preferências, adicione

digistump.com/package_digistump_index.json

aos URLs do gerenciador de placas adicionais.

Em Ferramentas - Placa, você deve ver agora várias opções do Digispark. Selecione Digispark (padrão - 16,5 MHz).

Se o seu ATTiny85 não tiver um bootloader (ou você não souber), você pode obter um programador AVR ISP por alguns quilos. Ou você pode usar um Arduino Uno ou um Pro Mini ou Nano mais barato como programador. Procure no Google por "arduino as isp attiny85" (sem as aspas) para obter instruções.

Se você quiser modificar o esboço, irá achá-lo totalmente comentado e, com sorte, fácil de seguir. Para depurar é muito mais fácil usar um Arduino Pro Mini ou Nano. Remova o comentário de serial.begin () em Setup e as instruções de impressão em loop () para ver as etapas que ele executa usando o monitor serial. Existem definições alternativas de pinos na fonte, comentadas, para um Uno, Pro Mini ou Nano.

No seu Raspberry Pi, copie o arquivo shutdown_helper.py para a pasta / etc / local / bin e defina-o como executável com o comando

sudo chmod + x /usr/local/bin/shutdown_helper.py

Agora edite o arquivo /etc/rc.local com seu editor favorito. (Você precisará fazer isso como root.) Antes da última linha (saída 0), insira a linha

nohup /usr/local/bin/shutdown_helper.py &

Reinicie e o programa auxiliar será iniciado automaticamente.

Recomendado: