给树莓派加个外设关机键

每次打开树莓派都要连上ssh关机,很是麻烦,所以自己做了个超简洁的关机脚本

原理就是开机之后点亮一个小灯,一直检测某处电平,一旦符合条件就关机

代码如下:

import RPi.GPIO as GPIO
import time
import os,sys

GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.OUT)
GPIO.setup(21,GPIO.IN)
run=True

while run:
  GPIO.output(14,GPIO.LOW)      #开机之后灯亮(GPIO 14接正串二极管)
  shutdown=GPIO.input(21)
  if(shutdown==True):           #GPIO 21跳线帽接地线,当线拔掉之后关机
    GPIO.output(14,GPIO.HIGH)  #二极管灯灭
    run=False
    os.system("poweroff")
    sys.exit()
  time.sleep(1)

加到开机启动里就行了,加入方式见Linux加入开机自启命令

用树莓派开启wifi热点

0x01.安装hostapd

输入下面指令

sudo apt-get update
sudo apt-get install hostapd udhcpd

0x02.配置DHCP

输入下面指令

sudo nano /etc/udhcpd.conf

将:

interface eth0改为interface wlan0

#remaining yes改为remain yes

opt router表示树莓派ip,建议改为192.168.0.1

opt dns表示dns,建议改为阿里云DNS:223.5.5.5 223.5.5.6

保存

0x03.开启DHCP

输入指令

sudo nano /etc/default/udhcpd

将DHCPD_ENABLED="no"改为#DHCPD_ENABLED="no"

0x04.设置静态ip

输入指令

sudo ifconfig wlan0 192.168.0.1

0x05.修改网卡配置

输入指令

sudo nano /etc/network/interfaces

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

改为

#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp

加上

iface wlan0 inet static
	address 192.168.0.1
	netmask 255.255.255.0

0x06.配置AP名称密码

输入指令

sudo nano /etc/hostapd/hostapd.conf

加上

interface=wlan0          #指定网卡名称为wlan0
driver=nl80211
ssid=Raspberry_AP        #热点名称
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2                   #采用WPA2加密
wpa_passphrase=12345678 #热点密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

保存

输入指令

sudo nano /etc/default/hostapd

将#DAEMON_CONF=""改为DAEMON_CONF="/etc/hostapd/hostapd.conf"

0x07.配置IP转发

输入指令

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

输入指令

sudo nano /etc/sysctl.conf

在最后一行加上

net.ipv4.ip_forward=1

输入指令

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

输入指令

sudo nano /etc/network/interfaces

加上

up iptables-restore < /etc/iptables.ipv4.nat

0x80.启动服务

输入指令

sudo service hostapd start
sudo service udhcpd start

开机自启:

sudo update-rc.d hostapd enable
sudo update-rc.d udhcpd enable

至此,教程结束

在树莓派上安装WiringPi库

1.WiringPi简介

 WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C++开发并且可以被其他语言包转,例如python、ruby或者PHP等。WiringPi中的函数类似于Arduino的wiring系统,这使得熟悉arduino的用户使用wringPi更为方便。

  树莓派具有26个普通输入和输出引脚。在这26个引脚中具有8个普通输入和输出管脚,这8个引脚既可以作为输入管脚也可以作为输出管脚。除此之外,树莓派还有一个2线形式的I2C、一个4线形式的SPI和一个UART接口。树莓派上的I2C和SPI接口也可以作为普通端口使用。如果串口控制台被关闭便可以使用树莓派上的UART功能。如果不使用I2C,SPI和UART等复用接口,那么树莓派总共具有8+2+5+2 =17个普通IO。wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。用户可以利用gpio命令通过shell脚本控制或查询GPIO管脚。wiringPi是可以扩展的,可以利用wiringPi的内部模块扩展模拟量输入芯片,可以使用MCP23x17/MCP23x08(I2C 或者SPI)扩展GPIO接口。另外可通过树莓派上的串口和Atmega(例如arduino等)扩展更多的GPIO功能。另外,用户可以自己编写扩展模块并把自定义的扩展模块集成到wiringPi中。WiringPi支持模拟量的读取和设置功能,不过在树莓派上并没有模拟量设备。但是使用WiringPi中的软件模块却可以轻松地应用AD或DA芯片。

2.wiringPi安装

输入以下命令:

sudo apt-get install git-core

如果在这个过程中出现错误,尝试更新软件,例如输入以下指令:

sudo apt-get update
sudo apt-get upgrade

紧接着可以通过GIT获得wiringPi的源代码

git clone git://git.drogon.net/wiringPi

若需要更新wiringPi。

cd wiringPi
git pull origin

进入wiringPi目录并安装wiringPi

cd wiringPi
./build

build脚本会帮助你编译和安装wiringPi

3.测试wiringPi是否安装成功

wiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。

gpio -v       #查看版本
gpio readall  #查看各个gpio口

4.编译写好的程序

以test.c举例,输入如下指令进行编译:

gcc -Wall -o test test.c -lwiringPi

运行程序:

sudo ./test

Linux加入开机自启命令

方法只要在/etc/rc.local中加入自己要加入的指令即可:

先输入指令:

sudo vi /etc/rc.local    //或者 sudo nano /etc/rc.local

然后加入自己要加入的指令:

(文件最好写绝对路径)

保存重启即可看到效果~