diff --git a/README.md b/README.md index 518f6f2..a749ba5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ # raspberrypi -raspberrypi_zero GPIO 实现的智能家居 -- 根据 http://shumeipai.nxez.com/2016/06/26/raspberry-pi-diy-with-a-smart-home-server.html +raspberrypi zero w GPIO 实现的智能家居 +- 参考:http://shumeipai.nxez.com/2016/06/26/raspberry-pi-diy-with-a-smart-home-server.html + +- 我发现传感器的数据是实时的,传感器的工作必须是实时的 +- 有时做不到数据的准确 +- 就做了多进程的shell(不同pid)来满足传感器数据现状,一个进程收集传感器数据,另一个进程处理. +_ diff --git a/raspberrypi_zero/gpio/.info.sh.swp b/raspberrypi_zero/gpio/.info.sh.swp new file mode 100644 index 0000000..2d8f6f5 Binary files /dev/null and b/raspberrypi_zero/gpio/.info.sh.swp differ diff --git a/raspberrypi_zero/gpio/info.sh b/raspberrypi_zero/gpio/info.sh index ac2f90d..81ba268 100644 --- a/raspberrypi_zero/gpio/info.sh +++ b/raspberrypi_zero/gpio/info.sh @@ -18,12 +18,17 @@ function DATE() S=$(date "+%S"); } +function SLEEP() +{ + sleep $@ +} + function get18b20data() { MODEL="28-04174019f0ff"; if test -d "/sys/devices/w1_bus_master1/${MODEL}"; then temperature=$(cat /sys/devices/w1_bus_master1/28-04174019f0ff/w1_slave | grep 't=' | sed 's/^.*t=//g' | awk '{print $1/1000}'); - echo $y年$m月$d日$H时$M分$S秒 + #echo $y年$m月$d日$H时$M分$S秒 echo -ne "当前室内温度: "; echo -e "\e[1;31m${temperature}℃ \e[0m"; else @@ -46,20 +51,23 @@ function lightinfo() bindir="/root/gpio" ! test -d ${bindir} && exit 1; #时间范围 - high="1900"; + high="1500"; low="2400"; + #当前时间 now=$(date +%H%M); - bcm_lightpin="21"; - wiringpi_lightpin="29"; - #wiringpi_infrared="20"; + bcm_lightpin="20"; + wiringpi_lightpin="28"; + + wiringpi_infrared="6"; #判断手机是否在线 - phoneip="192.168.137.27"; - phonelogic="$(ping ${phoneip} -c 1 -S 1 &> /dev/null; echo $?)"; + #phoneip="192.168.137.27"; + #phonelogic="$(ping ${phoneip} -c 1 -S 1 &> /dev/null; echo $?)"; #判断人体红外线传感器 - infrared=$(${bindir}/info_infrared ${wiringpi_infrared}); + #infrared=$(${bindir}/info_infrared ${wiringpi_infrared}); + infrared=$(cat ${bindir}/infrared.log 2> /dev/null); #距离传感器 l="60"; @@ -78,20 +86,31 @@ function lightinfo() } -DATE; +#DATE; #getcpudata; #get18b20data >> ~/temperature.txt; lightinfo; + +function WHILE() +{ + while true; do + ${bindir}/info_infrared ${wiringpi_infrared} > infrared.log + SLEEP 1 + done +} + function main_() { while true; do if [ "${now}" -ge "${high}" -a "${now}" -le "${low}" ]; then #检测时间段 - if [ "${phonelogic}" == "0" ]; then #检测手机IP - #if [ "${infrared}" = "1" ]; then #检测人体红外线 + #if [ "${phonelogic}" == "0" ]; then #检测手机IP + #echo ${infrared} + if [ "${infrared}" = "1" ]; then #检测人体红外线 #if [ "${distance}" -ge ${l} -a "${distance}" -le ${s} ]; then #检测距离范围 if test "${lightpinvalue}" = "0"; then #检测灯pin值 ${start_light}; + SLEEP 9; fi else if test "${lightpinvalue}" = "1"; then #如果开着就关闭 @@ -104,20 +123,47 @@ while true; do fi fi lightinfo; #再次获取信息 - sleep 7; #睡眠 + SLEEP 1; #睡眠 done } -while getopts :d pi +while getopts :ds: pi do case ${pi} in d) daemon='&'; ;; + s) + case $OPTARG in + "stop") + array=$(ls ${bindir}/log/) + for arr in ${array[@]}; do + kill $(cat ${bindir}/log/${arr}) + done + exit 0 + ;; + *) + : + ;; + esac + exit 0 + ;; h|?) - : + echo " +raspberrypi zero w 智能灯控 +$0 Usage: $0 [-?|h] [-d] [-s] + -d Daemon. + -s kill Daemon, signal: stop. + +by aixiao. +" +exit 0 ;; esac done +WHILE & +WHILEID="$(echo $!)" +echo ${WHILEID} > log/infrared.pid 2> /dev/null eval main_ ${daemon} +echo $! > log/main.pid 2> /dev/null diff --git a/raspberrypi_zero/gpio/infrared.log b/raspberrypi_zero/gpio/infrared.log new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/raspberrypi_zero/gpio/infrared.log @@ -0,0 +1 @@ +1 diff --git a/raspberrypi_zero/gpio/log/infrared.pid b/raspberrypi_zero/gpio/log/infrared.pid new file mode 100644 index 0000000..e83f6f1 --- /dev/null +++ b/raspberrypi_zero/gpio/log/infrared.pid @@ -0,0 +1 @@ +14389 diff --git a/raspberrypi_zero/gpio/log/main.pid b/raspberrypi_zero/gpio/log/main.pid new file mode 100644 index 0000000..35c7a33 --- /dev/null +++ b/raspberrypi_zero/gpio/log/main.pid @@ -0,0 +1 @@ +14392