树莓派默认是没有关机按键的,要么强制断电,要么通过界面里的关机选项,那么如何实现按键关机?是我们今天要讨论的问题.

    思路很清晰,就是写一个可执行程序,通过按键触发中断,中断函数实现关机功能,同时这个程序能自动开机运行.

    那么实现起来就相对简单了,此处我们用C++实现,代码如下.

int  set_gpio(void)
{
 
    if (wiringPiSetup () == -1)
    {
      fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;
      return 1 ;
    }
 
    pinMode(shout_down,INPUT);            //配置1脚为输入
    pullUpDnControl(shout_down,PUD_UP);  //将1脚上拉到3.3v
 
    //注册中断处理函数
 
    if(0>wiringPiISR(shout_down,INT_EDGE_FALLING,Shout_down_Callback))
   {
     printf("interrupt function register failure");
     xit(-1);
   }
}
//中断处理函数:shout_down
void Shout_down_Callback(void)
{
    delay(50);
    if(digitalRead(shout_down)==0)
    {
        system("sudo shutdown -h now");//调用关机命令。
        while(1);
    }
}

   那么shut_down就是定义的关机引脚,可以通过宏定义设置.

#define shout_down   22

   最后就是写个main函数调用上面的函数就好了. 

   此处我们设置的是将22号引脚接地,即可实现关机功能,运行后,将可执行文件设置成自启动即可实现按键关机的功能.
    关于树莓派如何设置程序自启动的方法请参考这里.