zoukankan      html  css  js  c++  java
  • 给树莓派添加开、关机键

    本文来自 bxgj 的投稿,原发于 blog.csdn.net

    声明
    本文由 u013062709 原创,禁止二次修改发布。转载及引用内容请注明出处,并标明本站网址。文中程序仅供学习使用,本人不承担任何由使用文中代码产生的法律责任。

    作为一个硬件爱好者、嵌入式系统工程师、技术宅,树莓派肯定是要玩一玩的,但是用的时间长了总会发现它有一些不完美的地方,比如:没有电源键!

    常用的关机方法有两种(外接屏幕和键盘的就不说了):
    1、远程登录然后敲命令(这是最合适的关机方法,但是太麻烦,如果没有电脑在身边就没法关机了)
    2、拔电源(简单粗暴,但很容易导致文件损坏)

    所以为了愉快的使用树莓派,最好还是给它添加一个像电脑一样的电源键,百度了一大圈发现国内(没错,我就是针对国内,来来回回就那么几篇文章,还反反复复互相抄)只有一种添加电源键的方法,那就是写个python脚本、或者其他脚本、或者编译一个程序,反正原理都是一样的,让这个脚本(或程序)开机启动,程序中一直检测设置为电源键的GPIO,如果被触发则关机。这个方法虽然能解决问题,但真的low爆了!!!而且只能关机,不能开机。

    在这里跟大家分享一个非常优雅,能关机也能开机的方法:
    打开并仔细阅读 /boot/overlays/README
    好了今天的分享到此结束,谢谢大家。

    其实 /boot/overlays/README 里面已经说的很详细了,为了造福广大人民群众,我就整理一下。

    不少人看见英文就头疼,而且这个文件有上千行,很少有人会仔细阅读,这里我就只把电源相关的内容摘录出来(不同版本系统文件的内容略有不同):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Name:   gpio-shutdown
    Info:   Initiates a shutdown when GPIO pin changes. The given GPIO pin
            is configured as an input key that generates KEY_POWER events.
            This event is handled by systemd-logind by initiating a
            shutdown. Systemd versions older than 225 need an udev rule
            enable listening to the input device:
     
                    ACTION!="REMOVE", SUBSYSTEM=="input", KERNEL=="event*",
                            SUBSYSTEMS=="platform", DRIVERS=="gpio-keys",
                            ATTRS{keys}=="116", TAG+="power-switch"
     
            This overlay only handles shutdown. After shutdown, the system
            can be powered up again by driving GPIO3 low. The default
            configuration uses GPIO3 with a pullup, so if you connect a
            button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
            you get a shutdown and power-up button.
    Load:   dtoverlay=gpio-shutdown,<param>=<val>
    Params: gpio_pin                GPIO pin to trigger on (default 3)
     
            active_low              When this is 1 (active low), a falling
                                    edge generates a key down event and a
                                    rising edge generates a key up event.
                                    When this is 0 (active high), this is
                                    reversed. The default is 1 (active low).
     
            gpio_pull               Desired pull-up/down state (off, down, up)
                                    Default is "up".
     
                                    Note that the default pin (GPIO3) has an
                                    external pullup.

    这里已经说得很明白了,只要在 /boot/config.txt 中添加相关配置就能实现关机。

    比如像这样:

    1
    2
    # 使用GPIO3(这里的GPIO指3BCM GPIO编号,也就是SCL1)作为电源键,下降沿为按下,上升沿为弹起,内部上拉
    dtoverlay=gpio-shutdown

    保存并重启,之后你只需要在GPIO3和GND之间接个按键就能实现关机,是不是很简单?

    开始划重点!!考试要考的!!记住了!!
    不需要添加任何配置,正常关机后不切断树莓派电源,将GPIO3拉到低电平就能开机!没错,这样就实现了开机键!如果不需要GPIO3做开机键,请自行阅读 /boot/overlays/README 中 gpio-poweroff 相关内容

    前面提到的配置默认使用GPIO3,也就是SCL1作为电源键,占用了I2C接口,虽然可以用其他GPIO软件模拟I2C,但显然很不方便,最好如下改成其他GPIO,注意这样改了以后这个GPIO口只能做关机键使用,开机键还是GPIO3,目前我没有找到自定义其他开机键的方法。

    1
    2
    # 使用gpio_pin=17,即GPIO_0(物理引脚PIN_11)做关机键
    dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up

    GPIO3与SCL1冲突,具体表现为,当启用I2C以后,GPIO3做SCL1使用,因此只能使用GPIO3开机,不能关机。所以如果想只用一个按键作为开、关机键,必须放弃硬件I2C,用其他引脚软件模拟I2C;如果一定要即有开、关机键又同时使用硬件I2C,那么就用GPIO3做开机键,另外配置一个按键做关机键。

    以上内容我只在树莓派3B+(系统版本:Raspbian Buster with desktop, Image with desktop based on Debian Buster, Version:July 2019, Release date:2019-07-10, Kernel version:4.19)上做过验证,其他版本不保证可用

    /boot/overlays/README 中还有很多非常有用的配置,有兴趣的同学自己去研究。

    最后希望大家赶紧行动起来!!抛弃那些 low 爆的开关机按键方案吧!

    出处:https://shumeipai.nxez.com/2019/08/27/add-the-open-and-shutdown-keys-to-the-raspberry-pi.html

    您的资助是我最大的动力!
    金额随意,欢迎来赏!
    款后有任何问题请给我留言。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

    如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,求打             付款后有任何问题请给我留言!!!

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【Jack_孟】!

  • 相关阅读:
    js验证及限制文本框输入
    在鼠标单击位置显示一个层,而不影响其它超级链接或按钮
    js创建弹出DIV层并锁定背景层
    SQLConvert(varchar(12),getdate(111))中的111,112,110
    C#提高的一些要点
    简洁纯js分页
    java排序集锦
    企业中vsftp虚拟用户高级配置实战
    MySQL的timeout那点事
    MYSQL管理之索引改造
  • 原文地址:https://www.cnblogs.com/mq0036/p/13230862.html
Copyright © 2011-2022 走看看