设为首页收藏本站

 找回密码
 立即注册

用新浪微博登录

只需一步,快速搞定

搜索
热搜: 活动 交友 discuz
查看: 4081|回复: 0

树莓派实现NAS家庭服务器(流媒体播放、文件共享及下载机)

[复制链接]

1188

主题

1204

帖子

6125

积分

荣誉会员

北林Linux小组

积分
6125
QQ
发表于 2014-10-28 09:11:35 | 显示全部楼层 |阅读模式


一、家庭服务器实现的主要功能


1、流媒体播放服务:利用DLNA实现电视、手机、电脑播放其上面的媒体文件。
2、文件共享:利用samba实现手机、电脑等终端与服务器的文件共享。
3、自动下载:利用aria2c实现自动下载。
先上几张效果图:
用orico的包装盒做了个机箱。

内部效果,线还是有些凌乱

放在桌上,感觉还不错,呵呵


二、准备工作


1、树莓派B+
2、安装raspbian系统,具体安装方法见:树莓派学习笔记(1):入手树莓派
3、设置固定IP为192.168.1.120,设置方法见:树莓派学习笔记(3):利用VNC远程控制树莓派。
4、安装vnc软件,安装方法见:树莓派学习笔记(3):利用VNC远程控制树莓派。
5、准备了一块旧移动硬盘(80G)
6、准备了可外接供电的usb hub一个,树莓派本身输出电流较小,很难保证移动硬盘的运行,所以加了一个可外接供电的usb hub。

三、安装samba实现文件共享



1、准备硬盘


      硬盘进行分区和格式化,这里我直接就分了一个区,格式化为ext4格式,据网上介绍说如果是fat或者ntfs等格式可能会出现权限问题,于是干脆直接格式化为ext4格式。硬盘在树莓派上格式化会比较慢,我就在电脑上进行了格式化。电脑操作系统是windows7,利用软件MiniTool Partition Wizard Home Edition 8.0,下载地址:http://www.partitionwizard.com/download.html。具体使用方法是先将原分区删除,然后点击creat,在格式那里选ext4,类型我选的primary,label用的nas,然后点击apply就开始格式化硬盘了。(如果用容量较小的U盘,可以直接用树莓派格式化,命令为:mkfs -t ext4 /dev/sdb1


2、将硬盘挂载到树莓派上


      树莓派开机后,用putty连接(连接方法见树莓派学习笔记(1):入手树莓派)后,为方便操作直接进行root用户(具体方法见http://www.cnblogs.com/xiaowuyi/p/3980037.html一楼评论处),然后运行df –h,查看硬盘挂载情况。
    [li]root@raspberrypi:/home/pi# df -h[/li][li]Filesystem              Size        Used        Avail     Use%      Mounted on[/li][li]rootfs                  2.9G       2.4G        387M     87%        /[/li][li]/dev/root               2.9G       2.4G        387M     87%        /[/li][li]devtmpfs                183M          0        183M      0%        /dev[/li][li]tmpfs                    38M       792K         37M      3%        /run[/li][li]tmpfs                   5.0M          0        5.0M      0%        /run/lock[/li][li]tmpfs                    75M          0         75M      0%        /run/shm[/li][li]/dev/mmcblk0p1           56M       9.7M         47M     18%        /boot[/li][li]/dev/sda1                70G        24M         67G      1%        /media/nas[/li]


最后一行/dev/sda1说明硬盘已经挂载。为下一步安装samba,将共享文件夹设为/samba。于是新建文件夹:
    [li]mkdir /samba[/li]

设置访问权限:
    [li]shmod 777 /samba[/li]

将硬盘挂载到/samba文件夹,具体步骤:
    [li]umount /dev/sda1   #取消挂载[/li][li] [/li][li]mount /dev/sda1 /samba[/li]

这里再查看df -h,结果为:

这里表示已挂载成功。

3、解决硬盘的自动挂载


      每次树莓派重启或者硬盘插拔都需要对硬盘进行重新挂载,比较麻烦,因此需要自动挂载。这里要修改/etc/fstab文件。有人喜欢用vi进行编辑,我比较喜欢直接vnc连接上后,用编辑器进行编辑。

可以看到,fstab文件其实就是一个表格,表格各列的含意如下:
第一列:磁盘分区名/卷标,一般是/dev/sdaN(N表示正整数)
第二列:挂载点,我们在这里把/dev/sda1挂到/samba上。
第三列:缺省设置,一般用defautls。
第四列:是否备份:0——表示不做 dump 备份;1——表示要将整个 <fie sysytem> 里的内容备份;2 也表示要做 dump 备份,但该分区的重要性比 1 小。
第五列:检测顺序:0——不进行检测;根分区(/),必须填写 1,其它的都不能填写 1。如果有分区填写大于 1 的话,则在检查完根分区后,从小到大依次检查下去。
具体填写方法在图中已注明。

4、安装samba


更新一下源:
    [li]sudo apt-get update[/li]

安装samba
    [li]sudo apt-get install samba samba-common-bin[/li]

安装完成后,配置/etc/samba/smb.conf文件
在其最后添加以下命令:
    [li]#================================================[/li][li] [/li][li][share]                                   #共享文件的名称,将在网络上以此名称显示[/li][li]        path = /samba                     #共享文件的路径[/li][li]        valid users = root pi             #允许访问的用户,这里我用的是root 和 pi 两个用户[/li][li]        browseable = yes                  #允许浏览                                 [/li][li]        public = yes                      #共享开放                                      [/li][li]        writable = yes                    #可写[/li][li] [/li][li]#================================================[/li]

保存后,重启samba服务,输入
    [li]/etc/init.d/samba restart[/li]

最后添加共享用户:
    [li]smbpasswd –a pi  #这里我用的pi。[/li]

设置开机自启动,编辑/etc/rc.loca,如下


5、测试samba安装效果


在windows计算机上,打开我的电脑,在左下角网络点右键,选映射网络驱动器

点击完成会提示输入用户名和密码,这里输入设置的共享用户名和密码。

最后在计算机下会出现共享的文件夹,点开文件夹,新建test.txt文件进行一下测试,如果能正常建立,就说明ok了,如果不行,应该是权限问 题,可再重新设置一下/samba文件夹权限。这里注意,如果在/samba文件夹下新建新的文件夹,也需要设置权限,可以用vnc连接后,用管理员浏 览,点右键设置文件夹权限为read and write,也可以用chmod命令设置。


四、安装DLNA实现流媒体服务器


DLNA主要面向媒体资源(比如视频、音乐)实现网内共享,具体步骤如下:

1、安装minidlna


更新一下安装源
    [li]sudo apt-get update[/li]

安装minidlna
    [li]sudo apt-get install minidlna[/li]


2、设置配置文件


设置/etc/minidlna.conf文件,在文件尾部添加如下内容:
    [li]#===================================================================================[/li][li] [/li][li]media_dir=A,/samba/DLNA/Music                #A表示这个目录是存放音乐的,当minidlna读到配置文件时,它会自动加载这个目录下的音乐文件[/li][li]media_dir=P,/samba/DLNA/Picture                                               [/li][li]media_dir=V,/samba/DLNA/Video                                                 [/li][li]db_dir=/samba/DLNA/db                       #配置minidlna的数库数据的存放目录[/li][li]log_dir=/samba/DLNA/log                     #配置日志目录[/li][li]#=======================================================================================[/li]


3、建立文件夹


在/samba文件夹下,建立以上文件夹,并设置好权限为read and write。

4、重启minidlna

    [li]/etc/init.d/minidlna restart[/li]

测试:
    [li]/etc/init.d/minidlna status[/li]

返回如下结果为正常。


5、在电脑上进行播放


先在树莓派以上对应的video等文件夹内存上一些文件(可利用samba直接从电脑上考入),然后返回到计算机进行操作。
点击我的电脑下面的网络,出现媒体设备

双击进入媒体播放器,在左边的列表栏下方其它媒体库中出现raspberrypi:root,点击后,可选择音乐,视频等。

这时双击就可以欣赏了。

6、手机上进行播放


手机上实现网络共享,可安装es file explorer软件,在其网络处进行设置,设置方法与电脑基本一样,这里不再详述。设置后,文件均可浏览,媒体文件双击可以在线播放。
也可以直接使用updp播放器,这里我安装的是moliplayer,可以在其附近设备里,直接找到raspberrypi:root,访问其媒体问题,注意,这里是访问的DLNA共享,所以不需要再输入密码。

7、智能电视进行播放


智能电视一般都是用的android系统,与手机基本一样。

五、安装aria2实现下载机功能



1、安装aria2


更新一下安装源
sudo apt-get update
安装aria2
    [li]sudo apt-get install aria2[/li]


2、创建配置文件


在/etc目录下创建aria2目录用来存放配置文件:
    [li]sudo mkdir /etc/aria2[/li]

创建空白的aria2.session文件:
    [li]sudo touch /etc/aria2/aria2.session[/li]

创建配置文件
    [li]sudo nano /etc/aria2/aria2.conf[/li]

在该文件中输入以下内容:
    [li]#=========文件保存目录自行修改[/li][li]dir=/samba[/li][li]disable-ipv6=true[/li][li]#打开rpc的目的是为了给web管理端用[/li][li]enable-rpc=true[/li][li]rpc-allow-origin-all=true[/li][li]rpc-listen-all=true[/li][li]#rpc-listen-port=6800[/li][li]continue=true[/li][li]input-file=/etc/aria2/aria2.session[/li][li]save-session=/etc/aria2/aria2.session[/li][li]max-concurrent-downloads=3[/li]

这里为了方便共享,我直接设置将文件下载到samba共享文件夹。

3、启动aria2

    [li]sudo aria2 –conf-path=/etc/aria2/aria2.conf[/li]

如果没有提示任何错误信息,那就按ctrl+c停止上面的语句,转为后台运行:
    [li]sudo aria2 –conf-path=/etc/aria2/aria2.conf -D[/li]

同时其此句写到开机启动中,编辑/etc/rc.loca,如下


4、安装appache


        为了能web管理aria2进行下载,需要安装yaaw和appache环境。
安装appach
    [li]sudo apt-get install appache2[/li]

修改/var/www的权限
    [li]chmod 777 /var/www[/li]


5、安装yaaw


        从https://github.com/binux/yaaw下载yaaw,点击右下角的 ,下载后将解压后的文件夹内内容拷贝到/var/www文件夹下。这时输入树莓派IP,如果出现以下页面,则表示已经正常工作了。

这里可以点add添加下载任务,具体方法不再详述。

6、实现迅雷的离线下载


        很多网站都介绍了aria2实现迅雷离线下载的方法,这里也做一下描述。我以firefox浏览器为例,chrome浏览器本身有一个迅雷离线增加插件,可以从https://chrome.google.com/websto ... lcgckcdphlpainejkja进行安装,安装后就和firefox基本一样了。
在firefox里添加一个书签:

具体为:
===========================================================
名称为:ThunderLixianExporter
地址为:javascript:void((function(){var d=document;var s=d.createElement('script');s.src='http://s.binux.me/tle.js';s.id='TLE_script';d.body.appendChild(s)})())
==================================================================
登录迅雷离线网站:lixian.xunlei.com,登录后,点一下书签中的ThunderLixianExporter,然后点击迅雷页面右上角的配置按钮(小齿轮)。



在上面的窗口中填写aria2.json-RPC Path,这个值来自于yaaw那个页面,具体方法是,输入树莓派IP显示yaaw页面,点击右上的配置图标,如下图

在set页面中存在该值:

保存好后,在离线页面的每行记录的取回本地后面会出现一个下拉菜单,选择yaaw就会直接添加到yaaw任务中了。



到此,树莓派的NAS服务器搭建完成,试了一下效果,还是很满意的。

六、制作外壳



1、外壳


        直接从家里找了一个orico的包装盒,大小正好合适,而且外壳比较硬,外观也比较不错。

2、加装1602显示屏


        加装一个1602显示屏,目的是显示时间和CPU温度,当然也可以显示其它内容,我这里只显示了这两项。这里还需要加装一个电位器(也就是可变电阻,如果没有,可以加一个10K的电阻)

(1)1602硬件连接


1602共16个端口,只用其中12个,具体接法如下:
LCD1602液晶屏模块提供了16个引脚,我们只需接其中的12个即可:
VSS,接地
VDD,接5V电源
VO,液晶对比度调节,接电位器中间的引脚,电位器两边的引脚分别接5V和接地。
RS,寄存器选择,接GPIO14
RW,读写选择,接地,表示写模式
EN,使能信号,接GPIO15
D0,数据位0,4位工作模式下不用,不接
D1,数据位1,4位工作模式下不用,不接
D2,数据位2,4位工作模式下不用,不接
D3,数据位3,4位工作模式下不用,不接
D4,数据位4,接GPIO17
D5,数据位5,接GPIO18
D6,数据位6,接GPIO27
D7,数据位7,接GPIO22
A,液晶屏背光+,接5V
K,液晶屏背光-,接地

注意:1、这里的VSS、VDD等在有些1602的板子上会标明,有些则只标了数字,如一端写着1,一端写着16,1对应的就是VSS端,16对应的就是K端,因此依次连接就可以了。
        2、GPIO各端口及5V、接地等端口见下图,因为我用的是B+的板了,因此这里的图也是B+的端口图。
        3、连接通电后,1602会亮起,其中一行为黑色方格,一行什么也不显示,如果全不显示,可调节一下电位器


(2)代码


对于1602板子的操作,已经有人做了一个示例,这样用起来就比较简单了。示例代码下载地址:https://github.com/lifanxi/rpimenu.git,解压后有Adafruit_CharLCD.py文件,此文件在LCD上会显示两行字符:LCD 1602 Test, 123456789ABCDEF。这里只需要在此文件上进行一下修改就可以了。
    [li]#!/usr/bin/python[/li][li]#<span style="font-family: 宋体; font-size: 12px;">转载请注明:@小五义<a href="http://www.cnblogs.com/xiaowuyi">http://www.cnblogs.com/xiaowuyi</a>   QQ群:64770604</span>[/li][li]#[/li][li]# based on code from lrvick and LiquidCrystal[/li][li]# lrvic - https://github.com/lrvick/raspi-hd44780/blob/master/hd44780.py[/li][li]# LiquidCrystal - https://github.com/arduino/Ardui ... l/LiquidCrystal.cpp[/li][li]#[/li][li] [/li][li]#from time import sleep[/li][li]import time,os[/li][li] [/li][li]class Adafruit_CharLCD:[/li][li] [/li][li]    # commands[/li][li]    LCD_CLEARDISPLAY        = 0x01[/li][li]    LCD_RETURNHOME      = 0x02[/li][li]    LCD_ENTRYMODESET        = 0x04[/li][li]    LCD_DISPLAYCONTROL      = 0x08[/li][li]    LCD_CURSORSHIFT         = 0x10[/li][li]    LCD_FUNCTIONSET         = 0x20[/li][li]    LCD_SETCGRAMADDR        = 0x40[/li][li]    LCD_SETDDRAMADDR        = 0x80[/li][li] [/li][li]    # flags for display entry mode[/li][li]    LCD_ENTRYRIGHT      = 0x00[/li][li]    LCD_ENTRYLEFT       = 0x02[/li][li]    LCD_ENTRYSHIFTINCREMENT     = 0x01[/li][li]    LCD_ENTRYSHIFTDECREMENT     = 0x00[/li][li] [/li][li]    # flags for display on/off control[/li][li]    LCD_DISPLAYON       = 0x04[/li][li]    LCD_DISPLAYOFF      = 0x00[/li][li]    LCD_CURSORON        = 0x02[/li][li]    LCD_CURSOROFF       = 0x00[/li][li]    LCD_BLINKON         = 0x01[/li][li]    LCD_BLINKOFF        = 0x00[/li][li] [/li][li]    # flags for display/cursor shift[/li][li]    LCD_DISPLAYMOVE         = 0x08[/li][li]    LCD_CURSORMOVE      = 0x00[/li][li] [/li][li]    # flags for display/cursor shift[/li][li]    LCD_DISPLAYMOVE         = 0x08[/li][li]    LCD_CURSORMOVE      = 0x00[/li][li]    LCD_MOVERIGHT       = 0x04[/li][li]    LCD_MOVELEFT        = 0x00[/li][li] [/li][li]    # flags for function set[/li][li]    LCD_8BITMODE        = 0x10[/li][li]    LCD_4BITMODE        = 0x00[/li][li]    LCD_2LINE           = 0x08[/li][li]    LCD_1LINE           = 0x00[/li][li]    LCD_5x10DOTS        = 0x04[/li][li]    LCD_5x8DOTS         = 0x00[/li][li] [/li][li] [/li][li] [/li][li]    def __init__(self, pin_rs=14, pin_e=15, pins_db=[17, 18, 27, 22], GPIO = None):[/li][li]    # Emulate the old behavior of using RPi.GPIO if we haven't been given[/li][li]    # an explicit GPIO interface to use[/li][li]    if not GPIO:[/li][li]        import RPi.GPIO as GPIO[/li][li]        GPIO.setwarnings(False)[/li][li]    self.GPIO = GPIO[/li][li]        self.pin_rs = pin_rs[/li][li]        self.pin_e = pin_e[/li][li]        self.pins_db = pins_db[/li][li] [/li][li]        self.GPIO.setmode(GPIO.BCM)[/li][li]        self.GPIO.setup(self.pin_e, GPIO.OUT)[/li][li]        self.GPIO.setup(self.pin_rs, GPIO.OUT)[/li][li] [/li][li]        for pin in self.pins_db:[/li][li]            self.GPIO.setup(pin, GPIO.OUT)[/li][li] [/li][li]    self.write4bits(0x33) # initialization[/li][li]    self.write4bits(0x32) # initialization[/li][li]    self.write4bits(0x28) # 2 line 5x7 matrix[/li][li]    self.write4bits(0x0C) # turn cursor off 0x0E to enable cursor[/li][li]    self.write4bits(0x06) # shift cursor right[/li][li] [/li][li]    self.displaycontrol = self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFF[/li][li] [/li][li]    self.displayfunction = self.LCD_4BITMODE | self.LCD_1LINE | self.LCD_5x8DOTS[/li][li]    self.displayfunction |= self.LCD_2LINE[/li][li] [/li][li]    """ Initialize to default text direction (for romance languages) """[/li][li]    self.displaymode =  self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT[/li][li]    self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) #  set the entry mode[/li][li] [/li][li]        self.clear()[/li][li] [/li][li] [/li][li]    def begin(self, cols, lines):[/li][li] [/li][li]    if (lines > 1):[/li][li]        self.numlines = lines[/li][li]            self.displayfunction |= self.LCD_2LINE[/li][li]        self.currline = 0[/li][li] [/li][li] [/li][li]    def home(self):[/li][li] [/li][li]    self.write4bits(self.LCD_RETURNHOME) # set cursor position to zero[/li][li]    self.delayMicroseconds(3000) # this command takes a long time![/li][li]     [/li][li] [/li][li]    def clear(self):[/li][li] [/li][li]    self.write4bits(self.LCD_CLEARDISPLAY) # command to clear display[/li][li]    self.delayMicroseconds(3000)    # 3000 microsecond sleep, clearing the display takes a long time[/li][li] [/li][li] [/li][li]    def setCursor(self, col, row):[/li][li] [/li][li]    self.row_offsets = [ 0x00, 0x40, 0x14, 0x54 ][/li][li] [/li][li]    if ( row > self.numlines ):[/li][li]        row = self.numlines - 1 # we count rows starting w/0[/li][li] [/li][li]    self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row]))[/li][li] [/li][li] [/li][li]    def noDisplay(self):[/li][li]    """ Turn the display off (quickly) """[/li][li] [/li][li]    self.displaycontrol &= ~self.LCD_DISPLAYON[/li][li]    self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)[/li][li] [/li][li] [/li][li]    def display(self):[/li][li]    """ Turn the display on (quickly) """[/li][li] [/li][li]    self.displaycontrol |= self.LCD_DISPLAYON[/li][li]    self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)[/li][li] [/li][li] [/li][li]    def noCursor(self):[/li][li]    """ Turns the underline cursor on/off """[/li][li] [/li][li]    self.displaycontrol &= ~self.LCD_CURSORON[/li][li]    self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)[/li][li] [/li][li] [/li][li]    def cursor(self):[/li][li]    """ Cursor On """[/li][li] [/li][li]    self.displaycontrol |= self.LCD_CURSORON[/li][li]    self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)[/li][li] [/li][li] [/li][li]    def noBlink(self):[/li][li]    """ Turn on and off the blinking cursor """[/li][li] [/li][li]    self.displaycontrol &= ~self.LCD_BLINKON[/li][li]    self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)[/li][li] [/li][li] [/li][li]    def noBlink(self):[/li][li]    """ Turn on and off the blinking cursor """[/li][li] [/li][li]    self.displaycontrol &= ~self.LCD_BLINKON[/li][li]    self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)[/li][li] [/li][li] [/li][li]    def DisplayLeft(self):[/li][li]    """ These commands scroll the display without changing the RAM """[/li][li] [/li][li]    self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT)[/li][li] [/li][li] [/li][li]    def scrollDisplayRight(self):[/li][li]    """ These commands scroll the display without changing the RAM """[/li][li] [/li][li]    self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT);[/li][li] [/li][li] [/li][li]    def leftToRight(self):[/li][li]    """ This is for text that flows Left to Right """[/li][li] [/li][li]    self.displaymode |= self.LCD_ENTRYLEFT[/li][li]    self.write4bits(self.LCD_ENTRYMODESET | self.displaymode);[/li][li] [/li][li] [/li][li]    def rightToLeft(self):[/li][li]    """ This is for text that flows Right to Left """[/li][li]    self.displaymode &= ~self.LCD_ENTRYLEFT[/li][li]    self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)[/li][li] [/li][li] [/li][li]    def autoscroll(self):[/li][li]    """ This will 'right justify' text from the cursor """[/li][li] [/li][li]    self.displaymode |= self.LCD_ENTRYSHIFTINCREMENT[/li][li]    self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)[/li][li] [/li][li] [/li][li]    def noAutoscroll(self):[/li][li]    """ This will 'left justify' text from the cursor """[/li][li] [/li][li]    self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENT[/li][li]    self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)[/li][li] [/li][li] [/li][li]    def write4bits(self, bits, char_mode=False):[/li][li]        """ Send command to LCD """[/li][li] [/li][li]    self.delayMicroseconds(1000) # 1000 microsecond sleep[/li][li] [/li][li]        bits=bin(bits)[2:].zfill(8)[/li][li] [/li][li]        self.GPIO.output(self.pin_rs, char_mode)[/li][li] [/li][li]        for pin in self.pins_db:[/li][li]            self.GPIO.output(pin, False)[/li][li] [/li][li]        for i in range(4):[/li][li]            if bits == "1":[/li][li]                self.GPIO.output(self.pins_db[::-1], True)[/li][li] [/li][li]    self.pulseEnable()[/li][li] [/li][li]        for pin in self.pins_db:[/li][li]            self.GPIO.output(pin, False)[/li][li] [/li][li]        for i in range(4,8):[/li][li]            if bits == "1":[/li][li]                self.GPIO.output(self.pins_db[::-1][i-4], True)[/li][li] [/li][li]    self.pulseEnable()[/li][li] [/li][li] [/li][li]    def delayMicroseconds(self, microseconds):[/li][li]    seconds = microseconds / float(1000000) # divide microseconds by 1 million for seconds[/li][li]    time.sleep(seconds)[/li][li] [/li][li] [/li][li]    def pulseEnable(self):[/li][li]    self.GPIO.output(self.pin_e, False)[/li][li]    self.delayMicroseconds(1)       # 1 microsecond pause - enable pulse must be > 450ns[/li][li]    self.GPIO.output(self.pin_e, True)[/li][li]    self.delayMicroseconds(1)       # 1 microsecond pause - enable pulse must be > 450ns[/li][li]    self.GPIO.output(self.pin_e, False)[/li][li]    self.delayMicroseconds(1)       # commands need > 37us to settle[/li][li] [/li][li] [/li][li]    def message(self, text):[/li][li]        """ Send string to LCD. Newline wraps to second line"""[/li][li] [/li][li]        for char in text:[/li][li]            if char == '\n':[/li][li]                self.write4bits(0xC0) # next line[/li][li]            else:[/li][li]                self.write4bits(ord(char),True)[/li][li] [/li][li]if __name__ == '__main__':[/li][li]    while 1:[/li][li]        lcd = Adafruit_CharLCD()[/li][li] [/li][li]        lcd.clear()[/li][li] [/li][li]        cputemp=os.popen('vcgencmd measure_temp').readline()[/li][li]        sumcputemp=cputemp.replace("temp=","CPU:").replace("'C\n","")[/li][li]        lcdout=time.strftime('%Y-%m-%d %H:%M',time.localtime(time.time()))+"\n"+sumcputemp[/li][li]         [/li][li]        lcd.message(lcdout)[/li][li]        time.sleep(30)[/li]


3、开面自启动上面的程序


        将以上文件命名为1602.py,保存在/home/pi下面,修改/etc/rc.loca,添加上sudo python /home/pi/1602/py。树莓派开机时,插上电源,当1602能正常显示CPU温度时,表示机器已经启动完成,各项功能可正常使用。

4、一些其它的想法


(1)本想再加装一个风扇用来散热,结果手上没有3.3V的风扇了,所以就没加。感兴趣的朋友可以自己加一下,因为树莓派输出为3.3V,所以最好是直接买3.3V的,如果买5V的,就一定要带个3.3V的继电器,要不没法对风扇控制。如果风扇一直常开那就无所谓了,5V就可以,直接接正负级。我原 本的想法是CPU上了50度,风扇再运转,这样可以降温,同时噪音也不会大。
(2)这个家庭服务器搭建起来以后,后面还有很多文章可做,比如可以依托他建立家庭监控系统,装上两个摄像头什么的,也可以做一些外网访问的设置,这样就可以直接从外网进行操作了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|北林linux用户组 ( 京ICP备14050379号-1|人工智能

GMT+8, 2019-10-21 15:12 , Processed in 0.170165 second(s), 29 queries .

Powered by 北林Linux用户组

© 2014-2019 YTC