树莓派打造低成本智能家居系统


视频中的Raspberry Pi已经设置并连接到家中的无线网络上,我们可以通过WEB控制页面发送一个指令脚本到树莓派上,树莓派连接了家里的的百叶窗和空调控制系统。到控制页面发送指令“打开百叶窗”后,树莓派驱动外置电源的步进机使得百叶穿缓缓开启,马达是通过树莓派上的GPIO针脚编程后发出的。控制空调的原理也差不多,通过WEB控制页面发送指令,通过树莓派上的LIRC库发送和记录红外线信号来控制空调。

需要用到哪些零件:

  • 一个能正常运行的Raspberry Pi
  • WIFI加密狗(可选:用于安全考虑)
  • 5V 1.5A电源(用于给树莓派和步进机提供电源驱动)
  • 步进机
  • EasyDriver V4.4步进机驱动主板
  • 红外线接收器
  • 红外线二极管
  • NPN晶体管

文件资料:点击下载

相关资料:

  • GPIO Guide: https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/
  • LIRC Guide: http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/
  • Raspberry Pi Pins: http://gallery.kulish.com/main.php?g2_view=core.DownloadItem&g2_itemId=5469&g2_serialNumber=1

树莓派打造低成本智能家居系统

实现步骤:

将系统镜像烧录至SD卡:

sudo dd if=path_of_your_image.img of=/dev/diskn bs=1m
# Where n is the disk number as per disk utility. Ensure card is unmounted.

接上WiFi并准备相关软件,你可以执行下面的命令:

sudo apt-get update
sudo apt-get install vim
sudo apt-get install wicd wicd-curses
sudo vim /etc/network/interfaces

……

auto lo

	iface lo inet loopback
	iface eth0 inet dhcp

	allow-hotplug wlan0
	iface wlan0 inet static
	        address 192.168.1.18
	        network 255.255.255.0
	        gateway 192.168.1.0  

	wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

	iface default inet dhcp
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

……

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
	update_config=1

	network={
	        ssid="HomeWireless-N"
	        proto=RSN
	        key_mgmt=WPA-PSK
	        pairwise=CCMP TKIP
	        psk=“YourPassword”
	}

	network={
	        ssid="HomeWireless"
	        proto=RSN
	        key_mgmt=WPA-PSK
	        pairwise=CCMP TKIP
	        psk=“YourPassword”
	}

准备完成后,下面需要安装GPIO针脚的驱动“wiringPi”,用来控制步进机等设备。这些驱动包都在上面的链接中给出,你可以去相关页面下载,下面简单说下过程:

cd /tmp
sudo apt-get install libi2c-dev
wget http://project-downloads.drogon.net/files/wiringPi.tgz
tar xfz wiringPi.tgz
cd wiringPi/wiringPi
make
sudo make install
cd ../gpio
make
sudo make install
sudo apt-get install nginx
sudo apt-get install php5 php5-fpm php5-cgi php5-cli php5-common
sudo mkdir /var/www
sudo chmod 775 /var/www -R 
sudo chown www-data:www-data /var/www
sudo mkdir /var/www/local
sudo chown www-data:www-data /var/www/local

sudo nano /etc/nginx/sites-available/local

……

server
{
    access_log /var/log/nginx/local.access.log;
    error_log /var/log/nginx/local.error.log;

    #Error Redirect
    error_page 404 /404.html;

    ### Default location
    root /var/www/local;
    index index.php index.html index.htm;

    ### Static content passed through
    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
        expires 5d;
        access_log off;
    }

    if (-f .php) {
        rewrite ^(.*)$ /.php;
    }

    # use fastcgi for all php files
    location ~ .php
    {
        try_files  =404;
        include /etc/nginx/fastcgi_params;
        keepalive_timeout 0;
        fastcgi_param   SCRIPT_FILENAME  ;
        fastcgi_pass    127.0.0.1:9000;
    }

    # deny access to apache .htaccess files
    location ~ /.ht
    {
        deny all;
    }
}
sudo ln -s /etc/nginx/sites-available/local /etc/nginx/sites-enabled/local
sudo service nginx restart

将步进机链接到GPIO引脚上并在默认情况下为关闭状态,这样可以确保不会耗费太多的电力,这个步进机是用来驱动百叶窗自动打开的或关闭的,所以我们需要添加一个脚本启动文件:

gpio -g mode 11 out
gpio -g write 11 11

创建一个CRON计划任务,启动用来控制设备的脚本:

sudo touch /etc/cron.d/blinds
sudo chmod a+w /etc/cron.d/blinds

现在,将下载好的WEB控制页面文件复制到Ngine文件夹中,然后设置权限为可执行:

sudo chmod +x /var/www/local/controller.sh

控制空调,用LIRC库来控制红外LED,首先需要先复制空调遥控器所发出的单元信号。设置LIRC的指南可以在上面的链接表里面找到。

sudo apt-get install lirc
lirc_dev
lirc_rpi gpio_in_pin=23 gpio_out_pin=22

将lircd.conf和hardware.conf文件复制到/etc/lirc文件夹中,

sudo service lirc restart

为了保证红外信号的正常收发,我们需要设置一下软件:

sudo service lirc stop
mode2 -d /dev/lirc0 >> ~/temp.conf

为了得到数据放入到正确的格式,删除第一行中刚刚创建的temp.conf文件,它是在记录开始,你开始按下按钮之间仅仅是’空间’。然后使用下面的命令在VIM正确地格式化代码。

vim ~/temp.conf
:%s/^.{5}
:%s!^!    !
:%s/n/

完成之后,您可以插入代码到配置文件中。您可以参考附件中lird.conf比较如何布局数据。现在,添加代码以irrecord在原始模式下创建的原始文件。 LIRC似乎不兼容的选项卡中的lidcd.conf文件,所以记得要使用空格。最后,重新启动LIRC过程,并检查您的遥控器确认:

irsend LIST "" ""
irsend LIST DAIKIN ""

系统会发送出一组信号:

irsend SEND_ONCE DAIKIN KEY_POWER

所包含的conroller.sh脚本会自动从网页时收到处理这些命令的信息,并生成运行日志文件,你可以查看日志文件查看系统记录。

树莓派打造低成本智能家居系统