设置并使用树莓派进行Python和C语言编程 (上)

Python部落(www.freelycode.com)组织翻译, 禁止转载


简介


这篇文章用来帮助初学者设置树莓派开发环境,并使用Python和C语言在树莓派上进行编程开发


主要内容如下, 主要关于树莓派,Python和C


树莓派编程

    文件管理器

    网页浏览器

    文本编辑器

    shell

命令行

    提示和技巧

    文件和文件系统

树莓派和Python

    Python版的Hello World

        方法1

        方法2

    多讲一点Python

        Python函数

关键字

    和条件语句有关的关键字

和循环语句有关的关键字

和内建函数有关的关键字

和类、模块有关的关键字

和错误处理有关的关键字

设置树莓派编程环境

安装VIM

安装Python

安装RPi.GPIO

调试提示

用C编程

安装BCM2835-C

安装WiringPi

C语言写的光传感器程序


背景


如果你是第一次使用树莓派,请参考本文的姊妹篇--Raspbian版树莓派简介对树莓派进行设置,链接见下


Raspbian版树莓派简介(http://www.codeproject.com/Articles/839230/Introduction-to-Raspberry-Pi-with-Raspbian-OS)


树莓派编程


请参考上面提到的文章对树莓派进行初次设置并启动进入系统


树莓派设置完毕并且进入桌面环境LXDE(针对Raspbian的轻量级图形界面)后,先来快速浏览一些编程将会用到重要内容


文件管理器


你可以在“开始菜单”中找到它,完全可以把它当作windows文件浏览器,这意味着你可以使用鼠标进行文件移动,而不必依赖于命令行。借助文件管理器,你可以像其它带有图形界面的操作系统一样使用图标和文件夹浏览文件系统



网页浏览器


默认的网页浏览器是Midori,这是一款针对低性能处理器的轻量级浏览器。常见的浏览器,如Chrome,IE,Safari,会在后台运行很多任务而占用较多资源,对于树莓派来说,运行这些程序就会有些吃力了。但是“小身板”的Midori并没有实现前面几款“重量级”浏览器的所有功能

比如:

    Midori不能运行Flash

    Midori不能运行Java插件

    Midori不支持全部HTML5标签,比如不支持Video

Raspbin系统上还自带另一款浏览器Netsurf


文本编辑器


Leafpad是Raspbian系统上的默认浏览器。传统的编辑器如VIM和emacs并没有预装,但是你可以手动安装


Shell


我们在树莓派上执行的大多数任务都是命令行程序,可以通过LXTerminal(一种虚拟终端)运行命令行程序。LXTerminal用于访问shell(又称命令行)。Raspbian系统上的默认shell是BASH.


命令行


提示和技巧


在树莓派上编程会频繁使用命令行。默认可以通过LXTerminal访问命令行。这里有两个重要的技巧可以帮助我们更轻松地使用命令行


自动补全:很多时候,我们可以只键入命令或者文件名称的几个字符然后敲击tab键,shell就会自动补全其余部分。shell基于当前环境比如所在文件夹或者常使用的文件夹如/bin和/usr/bin里的程序来尝试进行自动补全


命令历史:这个技巧使我们可以再次使用以前运行过的命令。可以通过向上箭头键浏览以前的命令,最近使用的会先显示。当一条长命令里出现小错误而需要纠正时,你就可以不用再输入整条命令了。



文件和文件系统


下表列出了一些常用的文件夹,这其中的大部分符合Linux目录结构,但是也有一些是树莓派独有的。/sys文件夹里是树莓派上的所有硬件设备,你可以通过这个文件夹来使用它们




/boot    放置Linux内核以及其他用来启动树莓派的软件包

/bin      放置与Raspbian有关(包括运行图形界面所需的)的二进制可执行文件

/dev     这是虚拟文件夹之一,用来访问所有连接设备,包括存储卡

/etc      系统管理和配置文件

/home      Linux上的我的文档,包含用户名命名的文件夹

/lib       各种应用需要的代码库

/lost+found     一般情况下是空的,当系统非法关机后,这里就存放了一些文件

/media     放置可移动存储驱动器,比如USB和CD

/mnt       用来手动挂在外部硬件驱动器或存储设备

/opt       可选软件文件夹,非系统部分的软件将会放置在这里

/proc        另一个虚拟文件夹,包含运行进程(或程序)的信息

/selinux     由美国国家安全局开发的安全工具,用于增强Linux安全性

/sbin     放置超级用户使用的系统管理命令

/sys      放置操作系统文件

/tmp      放置临时文件

/usr       放置用户使用的程序

/var        虚拟文件,用于程序保存数据


提示符前面会显示当前路径。在Linux里,~代表主目录,当我们刚打开命令行时,显示内容如下


pi@raspberrypi ~ $


该行文本各部分的含义为


pi          当前用户名,其后是@字符

raspberrypi         设备或计算机名称。默认为Raspberry pi

~            shell的当前工作目录,默认工作目录为主文件夹

$            shell提示符,其后为命令。输入命令后按回车键执行命令


接下来,了解如何用Python和C进行树莓派编程


树莓派和Python


Python简单明了,并且Python社区庞大,可以向很多人寻求帮助,这使得Python被认为是最好的编程入门语言之一


Python是一门解释型语言,这意味着代码运行前不需要编译,即程序直接执行而不需要编译为机器语言。这种语言用来编程更方便些。解释型语言还有一些隐藏的优点,比如不需要声明变量类型。我们不需要在程序中明确的声明变量是字符串还是数字或是列表,这些都由解释器在代码执行时确定。

有两种启动Python解释器的方式:

1. 作为交互式shell运行,一条一条地执行命令

2. 作为命令行程序运行,执行Python编写的独立脚本

Raspbian系统上的Python集成开发环境(IDE)是IDLE。下图展示了如何找到这个程序


Python版的Hello World


如前所述,Python程序可以有两种不同的运行/执行方式。接下来分别用两种方式说"Hello world"


方法一:

1. 通过桌面图标或开始菜单打开IDLE3

2.  IDE加载可能需要一点时间

3.  IDE加载完成后会显示一个Python shell窗口

4. 在Python shell窗口中键入如下命令

      print("Hello World")

5. 按下回车键你将看到下方输出的Hello World


方法二:

1. 通过桌面图标或开始菜单打开IDLE3

2.  IDE加载可能需要一点时间

3.  IDE加载完成后会显示一个Python shell窗口

4. 在Python shell窗口中,点击菜单项“文件”,点击下拉菜单中的“新窗口”选项

5. 在4中出现的新窗口里输入下面的代码

        print("Hello World")

6. 保存文件并命名为HelloWorld.py

7. 打开LXTerminal然后输入下面的命令来执行文件里的程序

        python HelloWorld.py


多讲一些Python


我们中有些人来自Arduino世界,习惯于写setup和loop,并且称它们为sketches

对于Python,sketches被称为脚本,下面是一个Python版setup和loop的示例

#setup part

initNum = 0

#repenating loop

While True:

initNum = iniNum + 1

if((initNum%2)==0):

print(n)

上面的程序将会打印所有的偶数。从IDLE里运行该脚本,可以运行菜单项里的运行模块并保存文件,下图展示了这个过程。


可以按下Ctrl+C组合键停止shell里程序的执行


在上面的程序里,我们没有使用括号而是用空白符分隔代码块。空白符是4个空格,在IDLE里按TAB键会输入4个空格


Python函数


Python是一门高度结构化的语言,空白用来决定逻辑行的缩进层次,从而决定语句的分组。同一层次的语句必须有相同的缩进,每一组这样的语句成为一个块,由空白把语句块从主程序里分离出来作为函数,可以在程序的任何地方调用函数。


下面是一个使用函数的示例

# global declaration

i=0

# define setup function

def setup():

    global i

    i=100


# define the loop function

def loop():

    global i

    i=i+1

    if((i%2)==0):

        print(i)

# main program

setup()

while True:

    loop()


可以注意到这个程序和上一个有些不同:

  • 1. 在定义函数前声明全局变量i

  • 2. 定义setup函数但不执行

  • 3. 定义loop函数也不执行

  • 4. 在两个函数里都通过global关键字加变量名的方式访问全局变量,这将避免创建一个和全局变量名称相同的局部变量(作用域被限制在函数内)

  • 5. 程序的主要部分调用setup函数一次,在无限while循环里调用loop()函数


英文原文: http://www.codeproject.com/Articles/850842/Setting-up-and-Programming-Raspberry-Pi-in-Python

译者: cmsl