基于RaspberryPi实现的智能家居 - 范文中心

基于RaspberryPi实现的智能家居

04/22

摘 要

本文以树莓派为载体进行智能家居控制器的设计。在对现在三种市面上的网络电视的比较中引出毕设的主角——树莓派。首先是LINUX 系统常识性的介绍;然后是在ARM/LINUX平台上面开发应用的两种方法:调用系统已有资源、做程序(C 经典法、PYTHON 快捷法);然后通过简单的对于GPIO 口的使用(点亮LED ),建立家庭内无线局域网和网络电视的配置展示了本地应用的种种可能;随后简略介绍了基本网络协议(TCP/IP),并在此基础上比较了五种不同服务器的优缺点,并将我们的服务器暴露给外部网络,介绍了实现远程视频监控的两种方法及其比较;最后是软件源的建立及其意义。在结论中详细罗列了自己对于整个平台的总体认识。

关键字 :智能家居;树莓派;Arm ;Linux

Abstract

The whole work of my graduation project is related to Raspberry Pi , an Arm && Linux development platform . As an introduction , the first two chapters show out some methods of smart home application development on this platform and the capability of Raspberry Pi by ticking the GPIO ports and setting up a home-scale local wireless network. Then a briefly description of several primary internet protocol ,comparing 5 different ways of web-server building , putting forward web-server to the outside world .Finally , my judgment about the entire development platform .

Keywords ::Smart Home;Raspberry Pi;Arm ;Linux

目 录

摘 要 . ...................................................................................................................... I Abstract .................................................................................................................. I I 目 录 . ................................................................................................................... III

第1章 绪论 . ......................................................................................................... 1

1.1 课题背景、目的和意义 . ......................................................................... 1

1.1.1课题背景 . ........................................................................................ 1

1.1.2课题目的 . ........................................................................................ 2

1.1.3课题意义 . ........................................................................................ 2

1.2智能家居发展现状 . .................................................................................. 2

1.3主要研究内容及内容安排 . ...................................................................... 3

第2章 控制器平台介绍 . ..................................................................................... 4

2.1设计平台的软硬件介绍 . .......................................................................... 4

2.2 设计方法 . ................................................................................................. 8

2.3 设计功能 . ............................................................................................... 12

第3章 本地应用设计 . ....................................................................................... 13

3.1 GPIO引脚控制 . ...................................................................................... 13

3.2无线路由器的实现 . ................................................................................ 15

3.3 网络电视的配置 . ................................................................................... 17

第4章 网络应用设计 . ....................................................................................... 18

4.1 树莓派网络连接 . ................................................................................... 18

4.2 服务器和Pagekite ................................................................................. 20

4.3 Webiopi配置 .......................................................................................... 21

4.4 Motion的配置 ........................................................................................ 22

第5章 软件源的制作 . ....................................................................................... 25

结 论 . ................................................................................................................... 27

致 谢 . ................................................................................................................. 28

参考文献 . ............................................................................................................. 29

附 录 . ................................................................................................................... 30

第1章 绪论

1.1 课题背景、目的和意义

1.1.1课题背景

首先从我的亲身经历说起。今年4月,考研复试结束之后始耐心做毕业设计,某一天卢老师找我去给他家安装无线路由器。学校网络比校外网络收费高,许多用户转而使用学校外面的电信网络。另外家庭内网络终端,如笔记本电脑、上网本、平板电脑、智能手机,逐渐增多,如何能够让多个终端同时接入网络是一个问题。校方或者说网络中心,引进了新的校园网客户端,正是为了鼓励大家建立家庭内无线局域网,解决多终端上网问题。那天在他家安装TP-LINK 无线路由器很简单的建立起了家庭无线网。不足之处是:新的校园网客户端要求必须有一个上网终端连接TP-LINK 并始终运行认证程序,其他网络终端才可以分享无线网。卢老师家的台式电脑从此以后365天24小时开着,费电不说,像这种家庭用普通台式机持续运行几个月恐怕就要瘫痪了。后来在树莓派官方论坛上看到了几篇关于树莓派连接无线网络的帖子,给了我不少启发。树莓派完全可以将上述台式机客户端认证和TP-LINK 无线路由器的功能和二为一。后文有关于实现过程的详细介绍,尽管没有什么技术含量,的确显示出树莓派或者嵌入式系统在智能家居方面是可以有所作为的。

另外一件事情是有关三网合一、网络电视机顶盒。下面是三则广告:小米高清互联网电视盒299元(上海、杭州、长沙三地市销售进行中);PPTV5月18日零点开放800台工程版PPBOX 的网络预售,价格仅为199元;乐视盒子C1S 再次改变你的电视。自己曾经试着在树莓上面安装XBMC 实现了网络电视的功能,树莓派又可以添加一个功能。还有一件我曾经有切身感受的事情,在我上初中三级的一个下午,奶奶在家突法心肌梗塞,当时她的身边只有刚上幼儿园的小弟,小弟惊慌失措,不知该如何是好。等到其他家庭成员发现情况,着手施救时,为时已晚。如果当时她身边有人能帮一把,或

者及时的告知家里的其他成员,也许奶奶还有机会看看曾孙。你或者你周围的人总是会有家庭财务失窃的经历。主人不在,紧闭的安全门形同虚设,不良分子乘虚而入对我们的个人隐私甚至家庭财产造成损害。其时若能有一个忠诚的管家为我们及时的侦测到不法分子的侵入,通知主人,或者求助于公安民警,便可以及时的避免损失。

另一方面,许多人的智能手机都已经更换了好几部。看那所谓的智能手机,配置动则1GHZ 主频的处理器,1GB 的内存,等等之类硬件配置何其出众。而现在就是这样一个小小的板子,700HZ 主频512MB 内存,已经显示出巨大的潜能。那么是否可以通过某种方式把智能手机的潜能也发挥出来呢?在传统的上网聊天,拍照玩游戏之外是否也是可以有所作为的呢?

1.1.2课题目的

本文所要实现的功能,在市面上都已经有成型的产品。我所做的是要把几个有关智能家庭应用的独立功能同时在一块板子上面实现,并试着扩展自己的功能。在这个过程中,为其他人学习ARM/LINUX开发,或者说在树莓派上面的开发厘清一条道路。同时尝试扩展智能手机的功能。

1.1.3课题意义

本文并没有多少前瞻性的东西,所提到的智能家居的各个方面市面上都已经有了成型的产品。自己感觉比较有意义的是:为我们学校家属区建立家庭无线网提供了一点参考;为测控专业相关课程的开展和自动化协会的发展建立一个坚固的基础;为开源/自由软件的事业做出了一点个人贡献,这个是最重要的。

1.2智能家居发展现状

从个人生活经历来看,智能家居还是一个遥远的词汇,大多数老百姓还没有接触到这些东西。不知道是价格的原因,亦或现在的智能家居还只概念炒作,行业的大方向此处不做过多评论。现仅就上面提到的乐视、小米、PPTV 不过一年左右时间连续发布的价位功能相近的三款扩展普通电视为网络电

视的数字机顶盒做一下简单介绍和比较:

首先是小米盒子,高清互联网电视,迄今为止小米手机最发烧友的配件,硬件价格299元,视频来源为央视正版授权高清内容,标配遥控器或者小米手机来控制控,体积类似于大屏智能手机,HDMI 接口;Coretex-A9处理器,主频800MHZ ,内存1G 、H.264、VC-1、WMV-HD 、MPEG1/2/4最大至1080p@30帧/秒,10/100M自适应RJ45接口, Micro-USB 接口;其次是PPBOX ,1GHZ 主频处理器、1GB 内存、4G 闪存,支持DLNA 和Airplay 多屏互动,售价299元,HDMI 接口、wifi 、蓝牙、3.5mm 音频输出;最后是乐视盒子,硬件免费,内容收费;乐视网TV 版12个月服务费价格490元,6个月服务费价格290元。CORETEX-A9架构双核1.5G 处理器,无线连接功能,并其集成无线路由器功能,流畅播放1080P 高清电影,内容来源乐视网正版资源。

无论从硬件还是内容资源的角度来看,乐视盒子都更胜一筹,费用自然也是最高的。我想网络电视的本质还是电视,或者说视频内容,如果让我为家里面配备一台这样的设备的话,肯定是要以内容为主要考虑。所以尽管价格高一些,我还是会选择乐视盒子。虽然安装XBMC 的树莓派硬件功能不比这三者差,但是没有内容资源的支持就是无源之水,没有实用价值。从另外一个角度来说,如此的价格去电影院看电影会有更好些的试听享受,并且对普通家庭用户而言肥皂剧和新闻联播也是要看的,大家的需求未必就是每天欧美大片,这样乐视的优势就不会那么明显了。

1.3主要研究内容及内容安排

本文首先介绍了树莓派开发平台的软硬件资源以及在ARM/LINUX平台开发应用的一般方法,提出我将要实现的功能(第二章);然后是智能家居控制器本地开发(第三章)和网络开发(第四章),最后是树莓派软件源的制作和善后工作(第五章)。

第2章 控制器平台介绍

树莓派是英国树莓派基金会推出的一款旨在推动学校计算机科学教育的信用卡大小的单板电脑。由于其强大的计算能力,丰富的外部扩展和低廉的价格而被选作本毕业设计的开发平台。

2.1设计平台的软硬件介绍

下面是树莓派宏观接口图:

图2-1:树莓派B 型板的宏观结构图

树莓派就相当于是一块计算机主板。居于长方形板面中心的是一块BCM2835片上系统,其上包括了一个ARM1176JZF-S 700MHZ 的处理器(可以超频至1GHZ ),和一块VideoCore IV GPU , 还有 512M RAM (A 型板内存为256M )。板子上面没有内置的长期存储设备,但是提供一个SD 插槽,用户可以将自己的SD 卡插入作为硬盘使用。SD 插槽的旁边是一个Micro-USB 电源插孔,由此引入5V 的电源,也可以通过GPIO 接口的2号(VCC )和

3

号(GND )引脚提供5V 电源。在SD 插槽的另一边是26针的扩展接口,其中2脚可以接入或给出5V 电源,1脚给出3.3V 电源,第12脚可以提供PWM ,另外包括一组UART ,一组SPI ,一组I2C ,8个GPIO 引脚。扩展接口还算丰富。

两种视频接口方式。其一是HDMI ,HDMI 兼容的电视或者显示器可以直接通过这个接口获得输出的视频信号,VGA 显示器可以通过HDMI-VGA 转换器得到VGA 信号。在HDMI 相反方向是一个RCA 接口,可以输出模拟视频信号供旧式电视使用。非常显眼的可以看到叠在一起的两个USB 接口(A 型板只有一个USB 接口),可以用来连接鼠标和键盘,总是会遇到USB 接口不够用的时候,这是就需要我们通过USB-HUB 来进行扩展。在USB 接口旁边是10/100 M 以太网接口,作用不言自明。另外有三个不长用的外设。一是,USB 口和RCA 接口之间的音响/测试接口;二是,板上面的类似于扩展接口的JTAG 接口;三是,TFT 触摸屏接口。

核心芯片BCM2835:高清嵌入式多媒体应用处理器BCM2835是一种低成本,全高清多媒体应用处理器,适用于需要高品质多媒体性能的移动和嵌入式应用设备。产品设计充分考虑了电池使用效率,并进行了相关优化。BCM2835使用博通公司的第四代VideoCore 技术来使能应用程序中的各种图像、视频处理。

*低功耗ARM1176JZ-F 应用处理器

*双核第四代VideoCore 多媒体协同处理器

*1080P30帧每秒全高清视编码/解码

*高性能视频输出。1080P60帧每秒持续高分辨率LCD 、HDMI 输出 *低功耗,高性能OpenGL-ES1.1/2.0VideoCoreGPU

*先进的图像传感器流水线(ISP )长达20万像素的摄像头高达220万 像 素每秒

下面是该芯片的内部结构图:

图2-2 BCM2835内部结构图

总的来说,树莓派板子的外部接口还算丰富,处理器、存储设备不够强大。但因其低廉的价格(B 型板35美元,A 型板25美元),在8051单片机和个人电脑之间为我们提供了一个理想的嵌入式开发平台。

软件方面,毫无疑问选择GNU/LINUX平台。做为开源软件平台,GNU/LINUX给予用户以免费或者较低的价格获取操作系统和软件的源代码的权力。这使得用户可以根据自己的需要编辑、修改源代码,分发自己的代码,鼓励人们互相分享。其开放、共享的精神受到了许多科技人员的喜爱。在本毕业设计中笔者使用的操作系统是Raspbian ,一款基于Debian 并根据树莓派硬件条件进行修改的操作系统。如下是维基百科中关于Debain 的描述:

Debian 是由GPL 和其他自由软件许可协议授权的自由软件组成的操作系统,由Debian 计划(Debian Project )组织维护。Debian 计划是一个独立的、分散的组织,由3000人志愿者组成,接受世界多个非盈利组织的资金支持,Software in the Public Interest提供支持并持有商标作为保护机构。Debian 以其坚守Unix 和自由软件的精神,以及其给予用户的众多选择而闻名。现

时Debian 包括了超过37,500个软件包并支持12个计算机系统结构(i386、amd64、arm 、mips 、IBM 等等)。Debian 是一个大的系统组织框架,在这个框架下有多种不同操作系统核心的分支计划,主要为采用Linux 核心的Debian GNU/Linux系统,其他还有采用GNU Hurd核心的Debian GNU/Hurd系统、采用FreeBSD 核心的Debian GNU/kFreeBSD系统,以及采用NetBSD 核心的Debian GNU/NetBSD系统。甚至还有应用Debian 的系统架构和工具,采用OpenSolaris 核心构建而成的Nexenta OS系统。在这些Debian 系统中,以采用Linux 核心的Debian GNU/Linux最为著名。众多的Linux 发布版,例如Ubuntu 、Knoppix 和Linspire 及Xandros 等,都基于Debian GNU/Linux。

笔者使用GNU/LINUX Debian已经有三年时间了,深刻的感觉到Debian 的强大。针对于嵌入式而言,采用Debian 系统有三大优势:

1、丰富的软件包和强大简便的软件包管理器

2、通用操作系统,支持多种计算机系统架构

3、强大的志愿者/开发人员组织

如下文所说,对于习惯了微软操作系统的用户来说,一些GNU/LINUX版本绚丽的桌面环境也许会让你感到惊艳,但是相信我GNU/LINUX的精华来源于黑纸白字的文本界面。作为一名嵌入式开发者,应该熟练的使用文本界面解决问题,那样更能节省宝贵的系统资源并且更接近硬件或软件的本质。由于知识过于庞杂,这里仅就个人认识对GNU/LINUX的特色——文件系统,做简要介绍。

文件系统主要包括两部分:文件、目录。文件系统将枯燥的物理细节(在硬盘或者SD 卡中实际就是0和1的排列组合)包装成为操作系统易于读写的形象,也就是用户可见的文件,或者说普通文件。而目录,其本质是仍是文件,或者说特殊的文件,亦即储存其他文件的文件。可以将文件理解为实际的物理存储空间,而目录则包含了指向这些空间的“指针”。记住一个非常重要的概念,GNU/LINUX是建立在文件系统之上的,系统将外部设备甚至网络设备也当做文件进行读写!

在LINUX 系统的 / 根目录下面有:

bin boot dev etc home media mnt opt proc root sbin selinux srv sys user var

bin :本目录下面是常用的命令,如文件的删除、建立、压缩,目录的建立、删除,文件权限的更改,磁盘读写刻录,内存查看等等。 对本目录里面的内容应该熟练掌握,其他命令程序无特别需要建立概念即可,命令的查阅参见,http://linux.chinaitlab.com/special/linuxcom/。

boot :本目录存储系统启动有关的信息,如系统内核,CPU 和GPU 关于内存的分配。我们将看到在树莓派的boot 目录下面有cmdline.txt 这个文件。这个文件控制着树莓派UART 是否输出系统信息。

dev :device , 即设备。光驱cdrom ,优盘ttyUSB ,串口ttyS0,终端tty**在这儿都有体现。有几个非常有趣的设备zero 、null 、random.

以后你会发现他们的妙用。

etc :包含运行在系统上所有程序的配置文件。这个目录很重要,经常用! home :主目录,GNU/LINUX作为多用户操作系统,每一个用户都有各自目录以存储个人信息。这就要引申出文件权限的概念。参考下面的连接: www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions。

proc :该目录下面存放一些系统运行状态信息。如查看lscpu 、lsusb 、lspci 、查看系统登陆用户的一些命令,实际是读取的本目录下面文件的内容。 var :这个目录很有意思,如我们的网络文件储存在/var/www下面。在/var/log 目录下存储各种日志,用户登录,系统运行,开机信息,网络连接信息,内核运行信息等。如果系统运行出现问题应该首先到这里寻找灵感。

2.2 设计方法

接上节,我们将要在ARM + LINUX平台上面实现自己的功能。实现的方法有两种:其一,自己动手写代码;其二,调用系统已有的命令、程序。首先如果自己动手的话,Raspbian 作为一个完整的操作系统,可以编译并执行如C 、C++、PHP 、Python 、java 等各种编程语言构建的程序。笔者主要用到C 、Python 两种语言。C 语言是基础,开发周期长,执行效率高。Python 是一种面向对象的高级语言,有许多针对特定应用的库函数可控调用,开发周期短,执行效率低(Raspberry Pi 中Pi 是python 的缩写)。其次是调用系统已有的命令、程序,GNU/LINUX内置的命令程序都是经受过历史考验的,

尤其是是Debain 这样一个以稳定性为特色的操作系统。大多数命令、程序都可以接受用户的参数做出相应的动作,来完成用户的要求。笔者认为,在实际开发过程中,应该尽量首先使用系统自带的资源,其次是自己编写程序,而在编程语言中优先选择Python 语言,其次是C 语言。然而,从学习的角度来说,应该把C 语言放在最前面,Python 语言或者直接调用系统集成好的工具会把许多细节蒙蔽掉,限制了用户的权力。另外,对于嵌入式系统,从资源和效率的角度考虑,也应该多使用C 语言。

嵌入式开发,尤其是在GNU/LINUX + ARM下面,还有一项非常重要的工具:文本编辑器。编辑器之所以重要,是因为首先很多系统配置文件都是以*.conf 的形式储存在文件系统中,我们可以通过文本编辑器方便的修改;其次,使用文本编辑器而非图形IDE 可以节省许多宝贵的系统资源,熟练掌握文本编辑器之后可以极大的提高我们编写代码的质量和速度。常用编辑器由三款:Nano 、Vim 和Emacs 。相比较而言,Nano 使用非常简单,同时功能无几,适合入门级用户使用。Vim 和Emacs 是GNU/LINUX 系统中最为著名的两款文本编辑神器。笔者使用Vim 两年有余,深刻的被Vim 的强大所折服,通过按键的组合和插件的使用,Vim 赋予机械的二极管、门电路生机和活力。当然Emacs 也是非常强大的一款编辑器。对于经常使用GNU/LINUX,或者做嵌入式开发的人来说,Vim 、Emacs 应该熟练掌握一种。Vim 更加轻盈,所有的GNU/LINUX 操作系统默认安装Vi (Vim 的前身)。相比较而言Emacs 更加灵活。简单根据兴趣爱好来讲,底层开发人员(硬件到操作系统)适宜使用Vim ,上层开发人员(操作系统到网络)使用Emacs 。

通常嵌入式设备,例如树莓派资源有限,我们总是在个人电脑上完成开发过程然后向嵌入式设备移植,另外我们也需要借助个人电脑的一些外设,如键盘和鼠标,完成一些工作。几个工具可以帮助我们远程控制目标机器或者方便调试:SSH 、VNC 、USB 转串口、Minicom/Gtkterm 。 SSH ,Secure Shell 安全壳协议,一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell (壳层或者命令解释器)提供安全的传输和使用环境。SSH 可以使得我们获得远程运行LINUX 系统命令行的能力,另外SCP 命令可以进行文件传输。VNC ,Virtual Network Computing,一种使用RFB 协定的屏幕画面分享及远程操作软件。此软件借由网络,可以传送键盘与鼠标的动作及实时的屏幕画面。例如,笔者使用的是Tightvnc ,正确安装并配置之后,便可以在个人电脑上虚拟树莓派的桌面环境,节省了用于购买鼠标和键盘的费

用,同时方便的进行远程操作桌面。SSH 只能提供给用户命令行工具,更加节省资源,而Tightvnc 的图形界面,更易于新手使用,并且有极少数工作也只能在图形界面下完成,故而也是很有价值的。下面是USB 转串口和Minicom/Gtkterm ,在无法连接网络或者系统出现故障时,我们还可以通过树莓派的串口,对它进行调试。为了方便在个人电脑上显示串口窗口,我们需要将串口桥接至USB 接口。这就要用到PL2303芯片。PL2303将USB 端口和标准RS232端口连接起来,两块大的片上缓存调配两个方向的数据流,为了提高传输速率采用了USB 块状数据,串口自动进行信号握手。这使之获得了比传统UART 控制器更高的信息传送速率。将树莓派的第6脚(地),8脚、10脚(UART 收发)分别与模块的相应引脚相连,USB 口接电脑,树莓派默认将内核启动信息从UART 口输出,同时正常工作时UART 也可以作为调试和控制窗口。如下图示笔者的串口连接方法:

图2-3 USB转串口连接笔记本

另外注意,树莓派可以通过对GPIO 第2脚+5V来供电,而PL2303也正好有一个+5V引脚,如果树莓派外接设备不是很多的话(如只接网线),我们可以直接将上述的+5V对应连接,使树莓派正常工作。上图,是笔者总结出的树莓派最简工作方式。下面需要一款程序查看串口发送来的信息,这就要用到Minicom/Gtkterm 。Minicom 是一种文本模式的串口通信工具,类似于微软系统的超级终端,可以模拟ANSI 和VT102终端。功能强大,应用

稍显复杂。Gtktrem 是基于GTK+开发的串口调试程序,图像界面,简单实用。笔者使用的是Gtkterm ,感觉不错,但是Minicom 的文本操作模式更适合GNU/LINUX环境。如果个人电脑安装的是微软系统的话,可以是使用超级终端。

虽然最近几年GNU/LINUX系统特别是UBUNTU 发行版,在图形界面方面已经做的相当花哨,但是对于一名高手或者针对嵌入式开发来说,我们应该熟练掌握文本界面的使用,甚至在文本里面浏览网页。这里要提到两款比较著名的文本浏览器Lynx 和W3m 。Lynx 是纯文本网页浏览器,可以在UNIX/LINUX/MAC系统中使用,历史悠久,并且仍在积极的开发之中。用户众多,功能强大。W3m 是一款基于文本的网页浏览器,支持多种操作系统,在命令行终端可以很好的支持中文,和Emacs 有一定渊源。这里不做详细介绍。

另外要提及一个GNU/LINUX下的图形界面开发工具,GTK+。GTK+,GIMP ToolKit ,一个生成跨平台的图形界面开发工具。GTK+提供一整套开发控件,使得我们可以使用他来开发小到“HelloWorld !”大至Gnome 桌面的各种应用。由于其跨平台性,GTK+开发的工具在GNU/LINUX,微软系统上都可以运行。尽管GTK+自身采用C 语言开发,在其设计之初就考虑到了对于多种语言的支持,如C++、java 、python 等。下图是笔者的Debian 桌面:

图2-4 笔者漂亮的Gnome 桌面

补充一点内容,尽管笔者在设计过程中没有用到,还是比较有意义的一个开源软硬件平台——Arduino 。Arduino 是一个开源的单片机控制器,它使用Atmel A VR 单片机,采用了开放源代码的软硬件平台,并且使用类似

JA V A 、C 语言的Processing/Wiring开发环境。与8051单片机不同,其集成开发环境可以非常方便的帮助我们实现USB 读写、图像采集等功能。树莓派硬件操作的实时性不好,而Arduino 的网络通信和计算能力不够,二者结合,以树莓派作为上位机进行网络通信处理大量数据,使用Arduino 作为下位机控制外部器件,是一个不错的组合(当然可以换成如UDOO 之类的高级ARM 板子)。下图是Arduino 开发环境的简图:

图2-5 Arduino IDE 展示

2.3 设计功能

在ARM+GNU/LINUX软硬件平台下面,我们可以实现各种功能,简单来说可以分为本地应用、网络应用。本地应用主要包括GPIO 口、串口、SPI 和I2C 的使用,用来控制外部引脚的高低电平或者数据流以控制外部器件。还能建立家庭无线局域网,将树莓派打造成为网络视频播放器。网络应用,主要包括建立服务器、服务器开放以及软件源的制作。

第3章 本地应用设计

3.1 GPIO引脚控制

本地应用开发主要有三种方法,介绍如下。

1、经典法的C 语言开发:

首先下载并安装airspayce 网站BCM2835有关输入输出的库函数,编译并安装。该库函数提供了各种端口操作函数可供使用,主要有:GPIO 引脚、SPI 、I2C 、系统时钟。附录里面有SPI 测试程序可供参考。其中缺少串口函数,但是各种外设,例如笔者曾经在树莓派上用到的心电采集模块、北斗模块、与上位机或者Arduino 通信等等,都需要用到串口,所以串口非常重要。另外,树莓派以及一些嵌入式系统默认的会将启动信息通过串口输出,串口也可以被当做调试终端来使用。如果要把串口回归其本性,我们需要修改一些设置。将/boot/cmdline.txt 和ttyAMA0有关的信息删除,并将/etc/inttab文件找到包含/ttyAMA0/ 的行,在前面加“#”将该项注释掉。 2、简洁的Python 语言开发:

上面我们提到的是传统的经典的C 语言开发方法,而是用Python 可以极大的提高我们的开发效率。Python 是面向对象的高级编程语言,使用它可以加速开发,高效的与系统整合,效率高且维护费用低,跨平台、开源。在使用的过程中我们会发现Python 体现在树莓派的方方面面。下面的例子Blink.py ,简单展示了一个Python 脚本,其简练可见一斑:

import wiringpi from time import sleep

io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_SYS)

io.pinMode(18,io.OUTPUT) #Setup pin 18 (GPIO1)

while True:

io.digitalWrite(18,io.HIGH) # Turn on light sleep(2) io.digitalWrite(18,io.LOW) # Turn off

对于电脑初学者来说,Python 有不可抗拒的魅力。注意,篇幅有限,本文没有对具体GPIO 引脚的编程进行详尽的说明。

3、功能强大的Shell 编程:

sleep(2)

但凡使用过GNU/LINUX肯定对于Shell 非常熟悉,它不仅是一个命令解释器,其内置的命令可以非常方便帮助我们完成系统各种日常维护、编辑文件、查看网络等等工作。在Shell 双击TAB 系统会提示你是否输出各种命令,例如在我的Debian 系统中显示有2756个命令可用。Python 编程和Shell 编程非常类似,这里不做详细介绍,在用户熟练使用LINUX 之后应该试着学习Shell 解决日常工作。

硬件编程之外我们需要注意一些事情。树莓派GPIO 口默认除电源脚为+5v,其他引脚均为+3.3v高,0V 低。上面提到的Arduino 默认为+5v高,0v 低,二者不可直接相连,最好使用三极管电路将3.3V 电平转成5V 。如果外部设备需要较大电流的话,也需要可虑各个引脚的负载能力。切记,切记!树莓派GPIO 引脚内部没有保护电路,千万不要不将+5V与地短路,后果很严重。

如果使用电池供电的话,需要用到线性电源或者开关电源。相比较而言线性电源效率低但噪声小,开关电源效率高但噪声大。两种电源笔者都曾经使用过,因为自己所连接的外设需要的电流较大(总电流大于1.5A ),使用7805做线性电源自身功耗相当大,散热效果很差。后来改用LM2576做开关电源,效果明显好转。开关电源核心是LM2576芯片,外加几个电容、二极管、电感即可,考虑到兼容性采用USB 接口输出+5V。下图笔者自制的开关电源外形图:

图3-1 LM2576开关电源

3.2无线路由器的实现

树莓派自身连接有线网络(参看下一章),通过外接无线模块,建立无线局域网。本项目所使用的无线模块是RT5370,主要是RT5370 的配置:

我们要用到两款软件Hostapd 、Udhcp 。Hostapd 是一个接入点和验证服务器的用户空间守护进程,它实现了IEEE802.11的接入管理、IEEE802.1X/WPA/WPA2/EPA身份验证、RADIUS 客户端和EPA 认证服务器。Udhcp 是一款专用于嵌入式设备的DHCP 软件,功能比个人电脑上面的DHCP 程序弱,使用简单方便。在这里我们只用到udhcpd ,亦即dhcp 客户端程序。

1、 连接各个外设启动树莓派,运行下面命令查看RT5370是否被正确识别。

$ sudo lsusb

Bus 001 **************************

Bus 001 **************************

Bus 001 **************************

Bus 001 Device 007 :ID 148f:5370 Ralink Technology , Corp, RT5370

2、 本机识别正常,安装相关软件:

$ sudo apt-get install hostapd udhcpd

3、下面配置DHCP 服务器,编辑文件 /etc/udhcpd.conf , 添加如下内容:

start 192.168.42.2 #DHCP可分配的IP 地址空间

end 192.168.42.15

interface wlan0

remaining yes #应为是在家庭内使用,数量不必过多 # Udhcp服务器的工作设备

# DHCP客户端设备使用的DNS 服务器 opt dns 8.8.8.8 4.2.2.2

opt subnet 255.255.255.0 # 子网掩码

opt router 192.168.42.1 # 无线网的网关,即树莓派的无线IP 地址 opt lease 864000 # DHCP服务器默认运行时间,10天后自动关闭

4、 使能DHCP 服务器开机运行,修改/etc/default/udhcpd 将

DHCP_ENABLED=”no”

改为:#DHCP_ENABLED=”no”

5、 将/etc/network/interface 添加或者对相应行做如下修改:

iface wlan0 inet static#固定树莓派的无线地址作为局域无线网的网关

address 192.168.42.1

netmask 255.255.255.0

#allow-hotplug wlan0

#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

#iface default inet dhcp

6、配置hostapd 。可以参看/etc/hostapd/examples/hostapd.conf.gz 中的内容。

编辑(或者生成)文件/etc/hostapd/hostapd.conf 添加以下内容:

interface=wlan0

driver=nl80211

ssid=My_AP

hw_mode=g

channel=6

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=My_Passphrase

wpa_key_mgmt=WPA-PSK

wpa_pairwise=TKIP

rsn_pairwise=CCMP

修改完上述文件后,编辑文件/etc/default/hostapd

将#DAEMON_CONF=””

改为:DAEMON_CONF=”/etc/hostapd/hostapd.conf”

7、配置网络地址转换(NAT ),该技术可以使几台终端设备通过一根网线连接网络。首先修改/etc/sysctl.conf 文件

找到行 net.ipv4.ip_forward = 1 ,去掉前面的“#” 将该选项使能。

为了将NAT 在linux 内核中使能运行一下命令, 修改防火墙设置:

$ 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

现在树莓派就可以进行NAT 了,当然我们想把刚刚的设置选项永久保存, # 要使用的网卡 # 驱动名称 # 无线局域网的名称 # # hostapd 运作的频率 # 无线网的密码

运行下面的命令将现在的防火墙设置生成文件:

$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

设置开机启动时加载上面的防火墙设置,在/etc/network/interfaces 文件底部添加下面的一行:

up iptables-restore

8 现在我们就可以建立无线局域网了,设置hostapd 和udhcpd 开机自启动:

$ sudo update-rc.d hostapd enable

$ sudo update-rc.d udhcpd enable

树莓派开机重启,使用手机或者电脑可以检测到我们刚刚建立的无线信号。

3.3 网络电视的配置

首先添加相应的软件源,打开文件/etc/apt/sources.ist.d/mene.list

添加下面的内容:

deb http://archive.mene.za.net/raspbian wheezy contrib

然后导入存档签名秘钥:

$sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 5243CDED 完成之后,更新系统:

$ sudo apt-get update

安装网络电视软件:

$ sudo apt-get install xbmc

速度较慢,完成之后,关机重启,进入xbmc. 更改系统设置正常显示中文,安装相应的ZIP 文件,添加对于youku 、toudu 、qiyi 等国内视频网站的支持。 如下图是作者通过树莓派的网络电视观看“舌尖上的中国”:

图3-2 XBMC观看舌尖上的中国

第4章 网络应用设计

在我的理解中,从一个整体的角度考虑computing , 硬件资源是土地,驱动程序是地基,操作系统便是我们的建筑物,应用程序是我们房子的装饰品,而网络则是这样一个家庭和外界进行沟通的邮政系统。对亲朋好友的祝福与问候是书信的内容。而若要合理地投送我们的真情惬意的话,需要Tcp/Ip/Udp等通信协议作为信封,将地址,发件人,收件人,时间等一一表述。现在已经很少有人写信了,网络通信却越来愈多。如果要写出高质量的网络应用或者自己要实现特殊的功能(如Pagekite 反向代理服务器)应该对于网络底层细节有一定的认识。因为所涉及的内容较多,这里仅仅就常见的几个通信协议TCP/UDP/IP/DNS做简要介绍。TCP ,Transmission Control Protocol, 传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF 的RFC793定义。在简化的计算机网络OSI 模型中,它完成第四层传输层所指定的功能。UDP ,User Datagram Protocol,用户数据报协议,相比较而言,UDP 协议只是简单的将信息打包按照目的地址往外传输。邮件只是简单的送到邮筒里面,任其自生自灭。当然他也是有特殊用途的,例如DNS 服务就是采用的UDP 协议。IP ,Internet Procotol,网络通信协议,为计算机网络相互连接进行通信而设计的协议。简单来说就是,信封上面的发件人地址和收件人地址,或者说本机和目标机器在英特网上面的位置坐标。DNS ,Domain Name System ,域名系统。信件从发件人地址到收件人地址,走铁路,高速公路,还是空邮这就是DNS 的任务,寻找连接两个地址之间的通路。有关于网络的详细内容,参见《UNIX NETWORK PROGRAMING 》。

4.1 树莓派网络连接

共有三种网络连接方式,无线、WLAN 、3G 。有线网络的连接最简单,将网线连接入网口,然后设置相应ip 地址即可。但是我们学校最近新出了一个Dr.com 的网络认证客户端造成了不小的麻烦。城市热点公司开发的这个客户端,没有对应Arm 的版本,我在开始毕设的前半个月无法联网,宝贵的时间浪费掉了。最后跟学校网络中心申请了一个可以通过网页认证的账号才

把有线联网的问题解决。对应的只需要在/etc/network/interface 修改相应的配置即可。如下面是我的配置:

iface eth0 inet static

address 172.29.37.5

netmask 255.255.255.0

gateway 172.29.37.1

另外还要在/etc/resov.conf 中加入本地DNS 服务器的地址。

连接无线稍微有点复杂。图像界面下使用wpa-configure 搜索无线信号,连接即可。命令行工具也可以解决这个问题,不过稍显麻烦。需要用到iwlist ,ifup ,ifconfig 等几个工具,这里不做详细介绍,参看参考文献第一本书中第六章,网络连接。最后一个网络连接方式,是自己的亮点,使用ZTE-A356 3G上网卡连接网络。对于智能家居而言,这一联网方式意义不大。笔者的好友殷鹏做的智能导航车可以用到,意义在于不受地理限制的传送大数据量信息(100K/S)。不过笔者并不推荐使用中兴的这款这款设备,故不作介绍,参看下面的连接如果你要用到3G 上网卡或者首先参看下面的连接然后再选择使用何种外设,http://elinux.org/RPi_VerifiedPeripherals 。下图是笔者使用的 3G 上网卡:

图4-1ZTE-A356

4.2 服务器和Pagekite

五种网络控制方案及其比较:

1 LAMP :Linux + Apache + Mysql + Php + CGI

2 Socket :TCP/IP/UDP

3 Django Pi :Python + Django (flask )

4 WEBIOPI :Python

5 LLSP : Linux + Lighttpd + SQLlite + Php + CGI 最先想到的LAMP ,标准的服务器配置,然而这个方案又最先被否定。Apache 和Mysql 体量有些大,树莓派的本身的资源有限,服务器消耗过多的资源留给其他程序的资源不足,影响了主体功能的发挥。另外网络电视Xbmc 也需要消耗很多资源,所以这个方案不行。然后是Socket ,曾经非常愚蠢的尝试着进行底层socket 编程。从最基本的TCP/UDP协议建立自己的服务器。这样做太浪费时间,而且短时间内不可能有什么成果。此方案不适用于我们在树莓派上面建立服务器,但是对于黑客或者想在网络方面有所为的人,应该花时间理解TCP/IP.下面是Django Pi,Django 和Flask 都是基于python 的网络服务器框架。Python 实在强大,最近几年使用Python 建立网络服务也越来越流行。个人学艺不精,没有把他的强大功能发挥出来。曾经有一个Django Pi 的项目,现在已经搁浅。这个方案不好评价,还待时间验证。然后是Webiopi ,强烈的依赖于Python 语言。该软件已集成了一个网络服务器,和各种GPIO 函数,多种传感器函数,可以方便的的扩展服务器端脚本和客户端javascript 脚本。的确非常方便,到目前为止已经基本实现了笔者既定的目标。但是在后续的使用过程中,却也感觉到诸多限制。在引脚功能扩展之外,比如添加实时视频或者上传文件,立感不便。所以仅限于毕业设计使用Webiopi 实现功能,如果做实用话智能家居应用的话,本方案不可。

最后是LLSP 。Lighhtpd :安全、高速、兼容性好、灵活,高效率的网络服务器,低内存使用量,高校CPU 使用,功能丰富。SQLLite :一个关系数据库管理系统中包含一个小的(〜350 KB)C 编程库。在其它数据库管理系统相比,SQLite 是不是一个单独的过程,是从客户端应用程序的访问,但它的一个不可分割的一部分。与LAMP 相比较而言,这个方案更加节省资源,对资源紧张的嵌入式系统的来说这更重要。相比较Webiopi ,我们需要自己重写新客户端和服务器程序,但灵活型好,我们可以按需要扩展自己的功能。

这个方案挑筛选出来时,毕设所剩时间已经没有多少了,没有办法实施了。但是自己感觉,如果真的要实际应用的话,不能采用树莓派这个平台,应该采用一款资源更多的板子,或者自己根据需要做板子。

Pagekite :

一如校园网,居民家庭内的网络一般都是局域网,外界无法直接访问到内网的服务器,许多网络服务提供商为了减少流量复核也会默认关闭用户的网络端口。通常我们需要申请自己的域名,安装动态DNS 客户端,才可以使得外网可以通过域名找到我们的机器。幸运的是,还有pagekite 。Pagekite 是一种逆向代理工具将本地服务器连接至外部网路。她赋予运行在localhost 的服务器以合适的域名,穿透防火墙和NAT 使之外部可见。支持多种操作系统,各种网络连接方式。无论是黑客,学生,嵌入式开发者,系统管理员都可以发现她的妙用。她可以使任何运行python 并可以连接到外部网络的设备同时可以被外部网络设备所访问。

Pagekite 的使用。首先我们在 https://pagekite.net/ 网站上面注册账号,申请域名。比如笔者的域名 richardmarx.pagekite.me ,记住密码。需要注意的是免费的pagekite 服务只能提供31天或者2.5G 流量的服务。如果你需要更高质量的服务的话,你需要支付一定的资金。例如6美元每月,我们就可以得到8个域名,15流量的服务。作为学习的话免费服务足够使用的了,如果推广智能家居的话,我们需要自己筹建pagekite 服务器。然后下载pagekite.py 至树莓派,运行该程序。输入一些信息之后,我们就可以通过刚刚的域名看到自己的网站了。通过下面的命令暴露自己的web 端口(80):

$pagekite.py 80 richardmarx.pagekite.me

通常我们需要远程登录树莓派进行控制,下面的命令可以帮助我们打开 22端口进行ssh 远程访问:

$ pagekite.py 22 ssh:foo.pagekite.me

Pagekite 对于智能手机也是有意义的。安装了对应的python 工作环境和pagekie.py 之后,在配以类似于lighhtpd 和php 之类的软件,每一部智能手机都可以打造成为一个网络服务器。我向这肯定是有用途。

4.3 Webiopi配置

Webiopi ,一个完全集成的物联网框架 通过浏览器或者应用程序远程或

者本下载安装相应的包,如上图所示是,默认的head.html ,这个软件不做详细介绍。我并没有使用webiopi 具体的去控制某个电器,而是用控制小车的运动模拟了对家电的操作。这个小软件的的确确令我眼前一亮,服务器、底层硬件控制,全部依靠python 语言实现,也足见Python 的强大,有必要对之深入理解。另外,这个软件中体现一个好东西,COAP ,我没有能深入理解。下图是Webiopi 的默认配置:

图4-2webiopi 示意图

COAP :Constrained Application Procotol 一种专门应用于简单电子器件的软件协议,使之可以通过网络进行互相沟通。目标就是要通过标准网络远程监控低功耗器件,如开关、传感器、阀门等。COAP 是用于资源有限的网络器件如物联网的应用层协议。

4.4 Motion的配置

Motion ,图像、视频采集程序,同时可以鉴别运动物体。内置小型web 服务器可以将图像或者视频实时传递到网络或者压缩存储。功能丰富,消耗CPU 和内存较多。Mjpg-Stream ,图像、视频采集,并将之时间传递到网络或者压缩存储。CPU 消耗很大,完成视频监视功能是可以的,但是不实用。在毕业设计过程中,我首先使用的是Motion ,当加入其它功能之后明显感觉

资源的瓶颈。Motion 的使用非常简单,通过命令sudo motion 调用。修改/etc/motion/motion.conf文件中的一些选项,可以motion 的使用有较大改观。

setup_mode off width height area_detect 5 #启动运行模式 #图像的高度和宽度 #检测动态区域 #存储全部图片 #存储运动图片 #视屏流输出端口 output_all off output_motion on webcam_port 8081 webcam_maxrate webcam_localhost ffmpeg_cap_new o n #图像采集的同时压缩成视频 10 #视频输出帧频率 on #本机输出

以上仅仅介绍了,笔者用到的几个选项,实际Motion 还有很多可配置选项,比如事件触发邮件,控制云台,事件触发程序,内置服务器。我没有将Motion 的强大很好的发挥出来。上面提到的图像输出选项和视频压缩选项都设置为off 的话,就可以大幅度的降低CPU 和内存的负担,很有意思的一件事情,理由却也简单。图像采集之后存储的话,需要有SD 卡读写行为,正如读写硬盘一样,速度非常慢,这就消耗了大量系统资源。而刚刚修改那几个选项后,将采集的图像直接通过网络传播出去,避免了慢速的读写操作,因而可以节省系统资源。这只是我个人的理解,未必准确。相比较而言,mjpg-stream 在每秒5帧和每秒30帧速率下的视频输出流下CPU 使用量都高居95%左右。我没有仔细阅读上诉二者的源代码,不这道内部如何处理图像采集和视频压缩输出的,不明白CPU 和内存到底消耗在什么过程中了。这就是调用成型命令、程序的弊端。下图是笔者的实际效果图:

图4-3视频监视效果图

第5章 软件源的制作

毕设过程中,自己动手写程序不多,几个有关UDP 通信和串口通信的程序也因为不实用而被否定。自己感觉比较骄傲的一点是建立校内的软件源。微软操作系统是微软公司的私有财产,占据全世界桌面计算机系统的绝大多数市场份额,很多第三方公司在在微软平台,或者说生态环境上面开发软件。而GNU/LINUX则不同,其所依靠的是庞大数量的志愿者。例如,Debian 计划是一个独立的、分散的组织,由3000人志愿者组成,接受世界多非盈利组织的资金支持,Software in the Public Interest 提供支持并持有商标作为保护机构。正是这样一个组织在维护debian 操作系统,同时开发、管理数量庞大的软件资源。统一的软件资源集合在一起就是软件源,一个巨大的软件池。最为一名debian 用户我从来不去下第三方的软件,而只从debian 的官方软件池获得(因其开源特性没有版权的后顾之忧,同时了避免流氓软件)。我在树莓派运行的raspbian ,是一款基于debian 并根据具体硬件和应用目标做了相应修改的操作系统,她继承了debian 绝大多数的软件池。树莓派的官方软件池由树莓派基金会在维护,国内现在有中国科技大学,大连理工大学等共计四个软件池,这几个池子可以方便国内树莓派用户的软件安装,同时减轻英国总源的负担。我自己的确做成了国内第五个软件池(就在H408),本来的想法是通过树莓派基金会将我们哈尔滨工业大学(威海)的名字告诉全人类,无奈校方以资源有限为由不允许把该池向外界公布。尽管如此,我和自动化的殷鹏同学,张辰同学在毕设过程中的确感觉到这个小板子可有作为。器件自动化协会的建立,以及测控专业相关课程的筹划,更加鼓舞了我们。把自己的毕设内容和个人见解通过软件源这样一个载体留给学弟学妹,希望大家再接再励,更创辉煌。

软件源的制作比较简单。我首先是使用wget 克隆的中国科技大学的源:(http|rsync)://mirrors.ustc.edu.cn/raspbian/raspbian/。

然后使用rysnc 定期和官方的源进行同步:

rsync --archive --verbose --delete --delete-delay --delay-updates \

archive.raspbian.org::archive /path/to/local/mirror

我把自己的论文以及期间所有的文献和网页全部存储在/var/www/目录下面, 若有需要可以自行获取。

图5-1 软件源效果图

结 论

本毕业设计完成了的任务,还存在许多不足之处。首先,树莓派平台自身资源相对于个人电脑仍显不足,在运行三大功能时CPU 占用率和内存使用量居高不下。另外,毕设只是简单的模拟了开关家电的电路,而没有对具体的电器特性进行考虑,实用性不强。如果想要投入实际应用的话,还有很多工作要做。树莓派作为学习嵌入式开发的入门平台是足够的,在此基础之上做相应的改进。自己有几个问题,留待解决。

1、自己在毕业设计的过程中尝试了多种不同的方案,发现了许多有用的软件,自己真正动手编程反而很少。若要更好的实现本课题下的预定目标,还需要团队合作,发挥大家的力量,每个人把自己的工作做好,然后团结起来做出来的东西才会更好。其中提到的两个软件motion 、pagekite 都非常优秀,我只是简单的用到了,还需要深入的读其代码才能真正发挥他们的功能。上述两款软件深入理解的话是可以有所创新的。

2、我是否可以在自己的程序中将GPU 的强大功能发挥出来。在我们不必给出视频信号的情况下,是否可以将GPU 用来进行图形处理。如果可以的话,这将极大的减轻CPU 的负荷,更大的发挥树莓派平台的威力。还有一点,应为板子上面跑起了操作系统,就不可避免的会出现多任务切换,程序不能认为设定执行时刻,例如我要用GPIO 口控制小车的步进电机,各个车轱辘的控制是不能同时执行的。如果系统任务繁忙的话,这个不同诚心要之间时延难以确定。这就要用到实时操作系统,举两例RTLINUX ,Xenomail.

3、软件源的制作是一个亮点。我还有自动化的殷鹏同学、张辰同学,在树莓派这个小板子上面做了一些有益的探索,将各种资料都留下来。希望以后的同学可以再接再励更创佳绩。如果所做项目对计算能力有更高要求或者需要跟多的外部接口(比如控制电机要用到PWM 调速),可以尝试使用BeagleBoard 或者Udoo 。

4、如果上述的功能被某家企业完全整合在一起的话,家庭隐私也是一个值得考量的问题。前几天曝光出来的“棱镜门”事件便是很好的一例。技术不应该只成为少数人的专利,个人隐私必须受到保护。

致 谢

本课题是在赵涛老师的亲切关怀和悉心指导下完成的。首先要感谢老师的宽容,给我提供了很多自由发挥的空间,然后,在毕设进行的过程中多次遇到硬件资源不足的情况,谢谢老师慷慨解囊。毕设期间,动作幅度较大,制造了不少噪音,谢谢周围同学的宽容。同时,好友殷鹏,张辰的点子的确也帮了我不少,感谢二位。

参考文献

1 Maik Schmidt , Raspberry Pi A quick Start Guide ,Progmatic Bookshelf, August 8 ,2012

2

4

5 Matt Richardson && Shawn Wallace jklfd , Start with raspberry pi , O`Reily Media,December 7, 2012 2006 Fredrik Lundh,Python standard library , O`Reilly Media , May 2001 W.Richard Stevens/Bill Fenner/Andre , Unix Network Programing I, 3 Christopher Hallinan , Embeded Linux Primer , Prentice Hall , September 18 , Addison-Wesley Professional , November 24 , 2003

6 Brian W. Kernighan and Dennis M. Ritchie, C Programing Language ,

rentice-Hall , 1988

7 Steve Levine and Maria Rodriguez , Web Programming in Python with Python ,

Mit , January 2010

8 Mendel Copper , Advanced Bash-Scripting Guide , The Linux Document Project ,Nov

2012

9 Robert Sedgewick, Algorithem in C , Addison-Wesley , Sep 1997

10 Richard Stallman , Free as in Freedom , O ’Relly ,March 2002

附 录

GNU 圣地:

http://www.gnu.org/ http://www.raspberrypi.org/

http://en.wikipedia.org/wiki/Raspberry_Pi

BCM2835 结构图:

http://www.petervis.com/Raspberry_PI/BCM2835_Block_Diagram/BCM2835_B l ock_Diagram.html

RT5370 :

http://www.mediatek.com/_en/01_products/04_pro.php?sn=1018

WiFi :

http://elinux.org/RPI-Wireless-Hotspot

Hostapd :

http://hostap.epitest.fi/hostapd/

XBMC :

http://michael.gorven.za.net/raspberrypi/xbmc

Xbmc Chinese:

http://code.google.com/p/xbmc-addons-chinese/wiki/XbmcAddonsChine seIntroduction2

https://pagekite.net/

Webiopi :

http://code.google.com/p/webiopi/

Ligttpd :

http://www.lighttpd.net/

SQLLite :

http://www.sqlite.org/

Raspberry : Pagekite :

MOTION :

http://www.lavrsen.dk/foswiki/bin/view/Motion

SSH:

http://zh.wikipedia.org/wiki/Secure_Shell

TIGHTVNCSERVER:

Minicom :

UART :

http://www.raspberry-projects.com/pi/programming-in-c/uart-serial-port/using-the-uart

PYTHON :

GTK :

http://zh.wikipedia.org/wiki/VNC PL2303 USB-RS232: http://www.krn.ru/GMT/ds_pl2303_v14.pdf http://en.wikipedia.org/wiki/Minicom http://gtkterm.feige.net/ http://wiki.ubuntu.org.cn/W3m http://www.airspayce.com/mikem/bcm2835/ Gtkterm : W3M: BCM2835 C library : http://www.python.org/ http://en.wikipedia.org/wiki/Constrained_Application_Protocol COAP : http://www.gtk.org/

嵌入式linux :

小米盒子:

http://www.xiaomi.com/hezi http://ppbox.pptv.com/ PBOX :

乐视盒子:

http://www.hd1etv.com/pro3.asp

BCM2835 ,C 语言示例程序:

// spi.c

//

// Example program for bcm2835 library

// Shows how to interface with SPI to transfer a byte to and from an SPI device //

// After installing bcm2835, you can build this

// with something like:

// gcc -o spi spi.c -l bcm2835

// sudo ./spi

//

// Or you can test it before installing with:

// gcc -o spi -I ../../src ../../src/bcm2835.c spi.c

// sudo ./spi

//

// Author: Mike McCauley

http://elinux.org/Main_Page http://www.udoo.org/ http://beagleboard.org/ Udoo : BeagleBoard :

// Copyright (C) 2012 Mike McCauley

// $Id: RF22.h,v 1.21 2012/05/30 01:51:25 mikem Exp $

#include

#include

intmain(int argc, char **argv)

{

// If you call this, it will not actually access the GPIO

// Use for testing

// bcm2835_set_debug(1); return1;

bcm2835_spi_begin();

bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST); // The default

bcm2835_spi_setDataMode(BCM2835_SPI_MODE0); // The default

bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_65536); The default

bcm2835_spi_chipSelect(BCM2835_SPI_CS0); // The default

bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW); // the default // Send a byte to the slave and simultaneously read a byte back from the slave // If you tie MISO to MOSI, you should read back what was sent

uint8_t data = bcm2835_spi_transfer(0x23);

printf("Read from SPI: %02X\n", data);

bcm2835_spi_end();

bcm2835_close();

return0;

}

引至:

http://www.airspayce.com/mikem/bcm2835/spi_8c-example.html //


相关内容

  • 蓝宙电子智能创新实验室
    智能创新实验室建设方案 芜湖蓝宙电子科技有限公司 -飞思卡尔大学计划官方合作伙伴 版 本:Version 2.0 所 有 者:蓝宙电子 日 期:2014.03.12 目录 一. 二. 实验室介绍 . .................... ...
  • [晶睿通讯.安防百科]对比几种无线技术在智能家居的应用
    随着经济高速的发展,社会不断的进步,对智能家居的需求也日益强烈.同时,节能和环保已是大势所趋,采用新型节能LED光源.节能电器以及如何通过控制的方式来达到节能的目的,已被人们广泛接受.目前,有线的照明控制系统,不但布线麻烦,系统的可扩展性也 ...
  • [人工智能导论]教学大纲
    <人工智能导论>教学大纲 大纲说明 课程代码:3235042 总学时:32学时(讲课32学时) 总学分:2学分 课程类别:限制性选修 适用专业:计算机科学与技术,以及有关专业 预修要求:C程序设计语言,数据结构 课程的性质.目的 ...
  • 嵌入式系统在智能家居中的应用
    新疆工程学院 毕 业 论 文 题 目: 嵌入式系统在智能家居 中的应用 院(系): 计算机工程系 专业年级 : 通信技术10-02 姓 名 : 魏文华 学 号 : 2010230083 指导教师 : 贾勇 2013年04月17 论文题目:嵌 ...
  • 人工智能概述_胡勤
    第6卷第年5月)13期(2010电脑知识与技术ComputerKnowledgeandTechnology Vol.6,No.13,May2010,pp.3507-3509ISSN1009-3044电脑知识与技术ComputerKnowle ...
  • 嵌入式技术推动工控网络化发展及应用
    嵌入式技术推动工控网络化发展及应用 王海宽1, 2 费敏锐1, 2 黄丹青1, 2 (1. 上海市电站自动化技术重点实验室,上海 200072:2. 上海大学机电工程与自动化学院, 上海 200072) 摘要:嵌入式技术在芯片集成.系统开发 ...
  • 住建部20**年-20**年建筑业信息化发展纲要
    住建部2011-2015建筑业信息化发展纲要 深入贯彻落实科学发展观,坚持自主创新.重点跨越.支撑发展.引领未来的方针,高度重视信息化对建筑业发展的推动作用,通过统筹规划.政策导向,进一步加强建筑企业信息化建设. 1 各省.自治区住房和城乡 ...
  • 短距离无线通信技术在智能交通领域中的应用
    短距离无线通信技术在智能交通领域中的应用 作者:周柏宏 摘要:本文主要论述基于无线单片机片上系统的短距离无线通信技术在智能交通领域中的应用, Abstract: This paper focuses on wireless MCU-base ...
  • 一流城市配电网需要哪些配电技术?了解这些提前布局!
    配电自动化是智能配电网的技术基础,我国配电自动化起步于20世纪90年代,经历了起步阶段.反思阶段以及发展阶段.随着我国社会经济在不断的迅速发展,电力作为推动国民经济发展的主要能源之一,对人们的生产和生活作用越发重要,人们对供电质量的要求也越 ...