精华内容
下载资源
问答
  • 所需材料一个已经安装配置好了的树莓派连接控制树莓派所用的其他必须设备200Ω电阻 x 8led x 8面包板及连接线若干电路连接电路图按照电路图所示,面包板上进行连接。编写程序安装RPi.GPIO首先得确定RPi.GPIO已安装...

    所需材料

    一个已经安装配置好了的树莓派

    连接控制树莓派所用的其他必须设备

    200Ω电阻 x 8

    led x 8

    面包板及连接线若干

    电路连接

    电路图

    按照电路图所示,在面包板上进行连接。

    编写程序

    安装RPi.GPIO

    首先得确定RPi.GPIO已安装。最新的系统已经自带了,如果没有的可以使用命令

    sudo apt-get update

    sudo apt-get install python-dev python-rpi.gpio

    来安装

    编写模块

    用文本编辑器新建一个led.py文件。(高手们都用vi,我只会用nano…)

    cd

    mdir GPIO

    cd GPIO

    nano led.py

    python代码如下:

    import RPi.GPIO as GPIO

    import time

    channels = [16,18,22,24,26,19,21,23]

    def init():

    GPIO.setmode(GPIO.BOARD)

    for x in channels:

    GPIO.setup(x,GPIO.OUT)

    pass

    def on(i):

    GPIO.output(channels[i], GPIO.HIGH)

    def off(i):

    GPIO.output(channels[i], GPIO.LOW)

    def ctrl(data):

    for i in channels:

    GPIO.output(i, data & 0×1)

    data = data >> 1

    pass

    def test():

    for i in xrange(512):

    ctrl(i)

    time.sleep(0.1)

    def clean():

    GPIO.cleanup()

    你可以在树莓派上直接编辑这个文件,也可以将文件在电脑上编辑好,然后用SFTP或者Linux下的scp命令传到树莓派上。

    调用模块

    你可以编写一个test.py调用刚刚编写好的led模块:

    import led

    led.init()

    led.test()

    led.clean()

    也可以直接在python shell中操作,这里是我在python shell中调用写好的模块的一个例子

    要注意的是,GPIO操作需要管理员权限,因此要用sudo。譬如视频中我在启动python shell的时候前边加了sudo:

    sudo python

    而在运行自己写的test.py的时候也要加sudo:

    sudo python test.py

    知识补充:

    RPi.GPIO模块函数说明:

    RPi.GPIO.setmode(naming_system)

    设置将GPIO针的命名方式。naming_system可用的取值有 RPi.GPIO.BCM 和 RPi.GPIO.BOARD,分别代表boardcom命名系统和树莓派板子上的命名系统。而因为使用BCM 的时候(据说)不同的版本BVM针脚定义不一样,所以同一套程序在多个树莓派系统上使用的时候建议用BOARD。

    RPi.GPIO.setup(channel, state)

    将标号为channel的针设置为state模式。channel取值为1~26,state取值为RPi.GPIO.IN 或者RPi.GPIO.OUT,分别表示输入和输出。例如 RPi.GPIO.setup(1, RPi.GPIO.IN)表示将1号针设置为输入模式;RPi.GPIO.setup(3, RPi.GPIO.OUT)表示将3号针设置为输出模式。具体哪个号是哪根取决于setmode()中设置成什么。

    RPi.GPIO.output(channel, state)

    将标号为channel的针设置为state指定的电平。channel取值为1~26,state取值为RPi.GPIO.HIGH 和RPi.GPIO.LOW,或者1和0,或者True和False,表示高电平和低电平。例如RPi.GPIO.output(1, 1) 表示把1号针设置为高电平,RPi.GPIO.output(3, Flase) 表示将3号针设置为低电平。具体哪个号是哪根取决于setmode()中设置成什么。

    RPi.GPIO.input(channel)

    获取将标号为channel的针的电平砖头。channel取值为1~26。例如RPi.GPIO.input(1) 表示获取1号针的状态。

    RPi.GPIO.cleanup()

    清除掉之前RPi.GPIO.setup()设置的状态。退出程序之前一定要调用,否则下次调用的时候会报错。

    led.py模块说明

    channel 中保存的是连接中使用的针的标号,按顺序。

    init() 是初始化GPIO接口的代码,使用控制lcd去前要调用。主要工作是设置接口命名模式和 将channel中的针设置为输出模式

    on() / off() 是将channel 中第i个针设置为高电平/低电平

    ctrl() 是根据参数设置全8根针的电平。参数的低0位、低1位、低2位…分别表示channel下标为0、1、2…的针的电平状况,1为高电平、0为低电平

    test() 是测试函数。用8位二进制表示8个灯的状态,每隔0.1秒到下一个状态: 0000 0000, 0000 0001, 0000 0010, 0000 0011,0000 0100 … 实际上就是从0数到255

    clean() 是对 RPi.GPIO.cleanup() 的一个封装

    展开全文
  • 任何拥有一个可编程处理中心的东西都可以称作计算机。游戏终端、智能手机、全球卫星定位系统(GPS)单元、平板电脑以及其他许多令人难以置信的设备都说明了这一点。它们都是计算机,并且它们已经接管了这个世界。...

    计算机已经不再只是用来工作的方盒子。任何拥有一个可编程处理中心的东西都可以称作计算机。游戏终端、智能手机、全球卫星定位系统(GPS)单元、平板电脑以及其他许多令人难以置信的设备都说明了这一点。它们都是计算机,并且它们已经接管了这个世界。我们用它们来工作、通信,以及娱乐。事实上,很难找到有哪个领域还从未使用过计算机。

    销售人员喜欢用智能来描述嵌入式计算机设备(智能手机、智能电视、智能手表等),事实上它们却并不智能。处理单元只是块执行指令的硅片。智能手机的“智能”并非来自计算机芯片,而是来自对它们编程的人。

    计算机是迄今为止人类发明的最强大的工具,但是由于很少有人知道如何开发它的潜能,目前我们只是使用了它的一小部分功能。在充满计算机的世界中,最重要的就是那些可以发挥计算机全部性能的编程人员。编程,是一项基本技能,并且在未来会变得更重要。

    什么是编程

    我们已经指出,计算机并不智能。它只是个按照清单一步步执行指令的单元。这个指令清单就是程序。编程,就是接受任务,将其分解成多个步骤,然后把它们用计算机可以理解的语言写下来。

    树莓派可以理解多种语言,在本书中,你将学习到Python3——一种非常强大易学的语言。

    本书适用于拥有树莓派并希望学些计算机编程的读者。学习本书不要求读者具有编程经验或者其他类似的技术。即便你只爱看漫画和科幻小说,都没关系,只要你具备前两个基本条件,这本书就是为你准备的。

    读完本书,你将会对Python3有很深的理解,并且熟悉许多非常有用的模块(Python 附加模块)。通过Python3和这些模块,你将能控制树莓派的各个功能。你可以通过控制基本输入输出口(GPIO)使它和外界交互,或者用它连通互联网。拥有一个摄像头,你可以用树莓派拍照片,也可以制作游戏,操纵三维世界。简而言之,这是一本介绍如何发掘你的树莓派的全部潜力的图书。

    什么是树莓派

    树莓派是个用来学习编程的优秀设备。第一,它很便宜。价格差不多只有低端计算机的十分之一,作为你的主计算机的一个附件它非常便宜。由于程序员往往需要调试开发设备,而调试就有可能破坏某些东西,这就使树莓派显得很有用。通常来说,调试并不会破坏到设备本身,但是可能需要重装系统,这就有可能损失数据并且在几个小时内你都无法使用计算机。如果你有个树莓派,用它来编程,这些就不是问题。如果你的计算机需要和别人共享,使用树莓派就显得更重要。

    第二,树莓派是个裸设备。它没有藏在盒子里或者在一个完整的系统中。这意味着你可以自己决定将其做成一个什么系统。你可以将其放到盒子里,也可以就让它裸着运行。你也可以使用GPIO,这在其他机器上是无法做到的。大多数计算机的用途都已经预先设计好了(如用来网上冲浪或者玩游戏的平板电脑,用来看电影或玩游戏的游戏终端,用来工作或玩游戏的笔记本电脑等)。而只要一点技术手段树莓派就可以做任何事情。

    第三,树莓派使用Linux——一个类似于Windows或Mac OS X的操作系统。它提供了视窗系统和一个用来操控树莓派的基于文本的命令行接口。如果你之前没有使用过Linux,会发现它和你使用过的系统有点不同。对于崭露头角的程序员来说,最重要的区别就是Linux比其他系统更灵活。正如树莓派的物理设计崇尚体验一样,这个操作系统也是如此。

    如何阅读本书

    前3章介绍了如何在树莓派上使用Python。读完这3章后,你将对Python编程有个很好的认识。本书剩余部分将分章来介绍不同的应用,如游戏和多媒体。这些章节涉及Python的不同领域。因此前一章没有读完不会影响你对后一章的理解(有些时候,我们可能会引用前面的某些概念,但我们会在引用时标注清楚)。

    这意味着你可以在读本书第二部分时自己决定阅读顺序。例如,如果你对多媒体很感兴趣,可以直接跳到这一章,之后再去读其他章节。

    学习编程必须多动手实践。也就是说,仅仅坐下来读完本书是不够的。你必须去实践这些学到的东西。贯穿本书,我们设计了很多练习让你来实践所学到的知识。有时通过特定的练习来培养你的技能,有时你需要给我们介绍过的程序添加特性。编程的一个重要部分就是确定程序要完成什么的创造力。因此你不需要完全听从我们的建议。事实上,我们鼓励你把我们的建议和代码作为一个起点——一个开启你的数字艺术征程的起点。

    致  谢?Acknowledgements

    感谢大家帮助我完成此书。在Wiley公司,Kezia Ednsley和Craig smith从本书开始写作起就帮忙审稿。感谢Erin Zeltner,是他让本书的文字看起来更优美,也让排版更合理。

    还有许多人需要感谢。没有编程环境就不会有这本关于编程的书。基于树莓派的Python包含了数以千计的程序员的工作,其中有很多人还是免费贡献。这些人都需要感谢,受限于篇幅,我们仅列出三位:Guido van Rossum、Linux Torvalds和Richard Stallman。

    当然,软件需要运行在硬件之上,我们也要感谢Eben Upton和树莓派基金会。

    本书中的任何错误都由作者独自承担。

    展开全文
  • 在前一篇文章:MPU6050如何与树莓派进行连接 ...前期代码验证要通过Python从I2C总线上读取相应数据,首先需要在树莓派上安装 smbus 模块,安装代码如下:sudo apt-get install python-smbus现在我们可以通过以下代码...

    在前一篇文章:MPU6050如何与树莓派进行连接 中,我们讨论了如何将加速计和陀螺传感器连接到树莓派,在这篇文章中,我们继续探讨通过一些简单的Python代码来读取传感器MPU6050输出的数据。

    前期代码验证

    要通过Python从I2C总线上读取相应数据,首先需要在树莓派上安装 smbus 模块,安装代码如下:

    sudo apt-get install python-smbus

    现在我们可以通过以下代码来进行测试了,这只是一些简单的测试代码,目的是测试传感器是否正常工作:

    #!/usr/bin/python

    import smbus

    import math

    # Power management registers

    power_mgmt_1 = 0x6b

    power_mgmt_2 = 0x6c

    def read_byte(adr):

    return bus.read_byte_data(address, adr)

    def read_word(adr):

    high = bus.read_byte_data(address, adr)

    low = bus.read_byte_data(address, adr+1)

    val = (high << 8) + low return val def read_word_2c(adr): val = read_word(adr) if (val >= 0x8000):

    return -((65535 - val) + 1)

    else:

    return val

    def dist(a,b):

    return math.sqrt((a*a)+(b*b))

    def get_y_rotation(x,y,z):

    radians = math.atan2(x, dist(y,z))

    return -math.degrees(radians)

    def get_x_rotation(x,y,z):

    radians = math.atan2(y, dist(x,z))

    return math.degrees(radians)

    bus = smbus.SMBus(0) # or bus = smbus.SMBus(1) for Revision 2 boards

    address = 0x68 # This is the address value read via the i2cdetect command

    # Now wake the 6050 up as it starts in sleep mode

    bus.write_byte_data(address, power_mgmt_1, 0)

    print "gyro data"

    print "---------"

    gyro_xout = read_word_2c(0x43)

    gyro_yout = read_word_2c(0x45)

    gyro_zout = read_word_2c(0x47)

    print "gyro_xout: ", gyro_xout, " scaled: ", (gyro_xout / 131)

    print "gyro_yout: ", gyro_yout, " scaled: ", (gyro_yout / 131)

    print "gyro_zout: ", gyro_zout, " scaled: ", (gyro_zout / 131)

    print

    print "accelerometer data"

    print "------------------"

    accel_xout = read_word_2c(0x3b)

    accel_yout = read_word_2c(0x3d)

    accel_zout = read_word_2c(0x3f)

    accel_xout_scaled = accel_xout / 16384.0

    accel_yout_scaled = accel_yout / 16384.0

    accel_zout_scaled = accel_zout / 16384.0

    print "accel_xout: ", accel_xout, " scaled: ", accel_xout_scaled

    print "accel_yout: ", accel_yout, " scaled: ", accel_yout_scaled

    print "accel_zout: ", accel_zout, " scaled: ", accel_zout_scaled

    print "x rotation: " , get_x_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)

    print "y rotation: " , get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)

    运行代码后,我们将看到类似下表的输出结果:

    gyro data

    ---------

    gyro_xout: -92 scaled: -1

    gyro_yout: 294 scaled: 2

    gyro_zout: -104 scaled: -1

    accelerometer data

    ------------------

    accel_xout: -3772 scaled: -0.230224609375

    accel_yout: -52 scaled: -0.003173828125

    accel_zout: 15408 scaled: 0.9404296875

    x rotation: -13.7558411667

    y rotation: -0.187818934829

    解析加速度计的数据

    让我们更详细地了解一下测试代码,

    accel_xout = read_word_2c(0x3b)

    accel_yout = read_word_2c(0x3d)

    accel_zout = read_word_2c(0x3f)

    这三行代码用于读取X,Y,Z的加速度计数值,每个参数调用的是存放在传感器寄存器中的数据。MPU6050传感器有许多寄存器,它们具有不同的功能,详见MPU6050的datasheet。用于加速数据的寄存器是0x3b、0x3d、0x3f,这些寄存器以16bit二进制补码的格式保存原始数据。

    下面的代码从一个给定的寄存器中读取一个单字(16bits)并将其转换为二进制补码:

    def read_word_2c(adr):

    val = read_word(adr)

    if (val >= 0x8000):

    return -((65535 - val) + 1)

    else:

    return val

    一旦我们获取了原始数据,我们就需要对它进行转换,然后把它转换成类似于旋转角度的数据。从MPU6050的datasheet数据表中我们可以看到,我们需要应用到原始加速度计值的默认转换值是16384,

    所以我们用这个值除以原始数据值。

    accel_xout_scaled = accel_xout / 16384.0

    accel_yout_scaled = accel_yout / 16384.0

    accel_zout_scaled = accel_zout / 16384.0

    现在我们得到了每个三维空间中重力对传感器施加的值,通过这个值我们可以计算出X轴和Y轴的旋转值。

    def dist(a,b):

    return math.sqrt((a*a)+(b*b))

    def get_x_rotation(x,y,z):

    radians = math.atan(x / dist(y,z))

    return math.degrees(radians)

    def get_y_rotation(x,y,z):

    radians = math.atan(y / dist(x,z))

    return math.degrees(radians)

    这里我们计算出了X轴和Y轴的旋转角度,输出如下:

    x rotation: -13.755841166

    y rotation: -0.187818934829

    这里可以看到,传感器的X轴旋转了-13.756度,Y轴旋转了-0.188度。

    解析陀螺仪的数据

    通过类似的方法,我们可以从MPU6050传感器的陀螺仪上读取数据。此功能通过以下代码来完成:

    gyro_xout = read_word_2c(0x43)

    gyro_yout = read_word_2c(0x45)

    gyro_zout = read_word_2c(0x47)

    print "gyro_xout: ", gyro_xout, " scaled: ", (gyro_xout / 131)

    print "gyro_yout: ", gyro_yout, " scaled: ", (gyro_yout / 131)

    print "gyro_zout: ", gyro_zout, " scaled: ", (gyro_zout / 131)

    首先读取寄存器0x43、0x45&0x47的值,同样的我们可以从MPU6050的datasheet中看到,这些寄存器保存着原始的陀螺仪的数据。为了转化获取的原始数据,这里需要除以131,可以得到每秒的旋转度数。

    输出如下:

    gyro_xout: -92 scaled: -1

    gyro_yout: 294 scaled: 2

    gyro_zout: -104 scaled: -1

    结语

    上述代码相对基础,你可以根据实际需要添加错误处理或配置不同的灵敏度。为了帮助我们更好地学习,还可以编写了一些简单的OpenGL代码来进行三维空间的图形化展示。

    展开全文
  • 你可以像使用常规台式计算机一样在树莓派上创建一个非常酷的工程。例如,你可以用树莓派搭建你自己的家用云存储服务器。树莓派用什么语言编程树莓派用python来进行编程。树莓派项目的一个核心思想是Python编程语言的...

    树莓派是一个非常廉价的、只有手掌大小的完全可编程的计算机。虽然树莓派的体积小,但是它的潜力无限。你可以像使用常规台式计算机一样在树莓派上创建一个非常酷的工程。例如,你可以用树莓派搭建你自己的家用云存储服务器。

    2749557-1P1151F05Gc.jpg

    树莓派用什么语言编程

    树莓派用python来进行编程。树莓派项目的一个核心思想是Python编程语言的使用。Python允许树莓派的拥有者将项目扩展到令人难以置信的规模。

    Python是一个解释型的面向对象的、跨平台的编程语言。良好的可靠性、清晰的语法和易用性,使它成为最流行的编程语言之一。Python是一个优雅的、功能强大的语言。

    树莓派为Python编程提供了一个便宜到令人难以置信的开发平台。Python被认为是一种"教学”语言,是因为它很容易学习,但绝不表示Python羸弱。

    有了树莓派和Python,唯一限制你的就是想象力了。你可以用Python编写游戏并将其运行在树莓派控制的游戏机上。你可以编写程序来控制连接到树莓派上的机器人。或者你可以像Dave Akerman一样将你的树莓派发送到39000千米的地球上空拍摄令人难以置信的照片

    python语言的优点如下:

    1、简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。

    2、易学:Python极其容易上手,因为Python有极其简单的说明文档[8] 。

    3、速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。[6]

    4、免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。

    5、高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

    6、可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。

    7、解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。

    运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。

    在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。

    8、面向对象:Python既支持面向过程的编程也支持面向对象的编程。在"面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在"面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

    9、可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。

    10、可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。

    丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的"功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

    11、规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。

    2749557-1P1151F1334K.jpg

    树莓派python编程详解

    当你创建一个Python程序时,首先必须从编译器的环境中退出来,并且打开一个文本编辑器,如emacs或者树莓派的Leafpad。在创建完程序后,将其”.py”的扩展名保存。之后,你便可以通过输入以下命令运行该程序:

    2749557-1P1151F146204.jpg

    在众多的编程语言中,Python的语法也十分与众不同。Python使用空格或者缩进来分开不同的代码块。C语言等其他语言用花括号区分不同的代码块,如if语句;Python使用冒号和缩进来定义一个代码块。

    C语言中的代码格式如下所示:

    2749557-1P1151F15D28.jpg

    你可能会注意关于Python编程的两个细节。第一,在if语句中括号的作用不是很明显。在Python中,括号不是必需的,但在大多数情况下,使用括号是一种好的编程习惯的表现,因为加了括号会提高代码的可读性。你也会发现,大多数其他的编程语言在每行代码的末尾都会以分号结束,而Python则不是这样。这可能会花些功夫去适应,但却可以避免因为在某处分号放错位置或者忘记添加分号而引起编译失败的问题。在Python中,每行代码的末尾就是该条语句的末尾—就这么简单。

    你已经见过一条语句的形式了,如:

    2749557-1P1151F2251V.jpg

    同之前提到的一样,在Python中不需要提前声明x是一个整型变量,y是一个字符型变量—Python可以自己区别。这些语句称作赋值语句(assignment),它们将等号右边的值赋给等号左边的变量。不同的编程语言中有各种各样的命名规则,但我能给你的最好建议是:选择其中一个规则并坚持下去。如果你喜欢Pascal语言的规则(ThisIsAVariable),那就用这个规则。如果你更偏向于驼峰规则(thisIsAVariable),就使用这个规则。但一定要一致,以后你会感谢你的坚持的。在任何情况下,无论变量是数值、字符、列表,或其他别的什么,赋值的工作仅仅是:将一个值赋给一个变量。这是编程函数中最简单的一个。

    1、if测试

    接下来要介绍的编程函数是if语句,及其相关的elif和else函数。如你所预期的一样,if执行了一个测试,然后选择一项基于测试的结果。最基本的if语句如下所示:

    2749557-1P1151F240307.jpg

    "1’和布尔变量中的"true”效果一样,因此上述语句总会输出"true”。

    当你在Python终端或者IDLE中输入if语句并以冒号结束时,下一个提示符永远都是省略号(…),这意味着Python正等待一个缩进块。如果你已经进行了缩进操作,按下Enter键结束等待。如果你在一个文本编辑器内编写程序,确保在需要缩进时进行了缩进操作。

    从此处开始,我将会按文本编辑器的格式书写代码,并将输出的结果按照运行脚本之后的格式书写。

    这是一个使用elif和else的较复杂的程序,如下:

    2749557-1P1151F2515Q.jpg

    很明显,这段代码最终会输出"Spam is a wonderful thing!”。当程序执行时,计算机首先判断第一个if,如果被判断的语句是正确的,则会立即执行随后缩进块内的代码。如果不正确,则略过缩进块寻找elif,并判断其语句的正确性。同样,如果正确或者没有elif语句,计算机会执行后面缩进块内的程序,如果不正确,则会跳过缩进块寻找下一个elif或者else语句。

    在此有三点需要注意:第一,如果一条if语句内的内容是错误的,则在之后的缩进块内的内容都不会执行,计算机会直接跳转到下一个未缩进的代码处。

    第二,同其他语言一样,Python使用双等号来判断是否相等。单等号用来进行赋值操作,双等号用来判断。我之所以提起这个是因为每个程序员(我确定指的是每一个程序员)某些时候都会在if语句中使用单等号进行判断操作,因此他们的程序会得到很多奇怪的结果。你也会犯同样的错误,但我希望提前为你打个预防针。

    第三,Python忽略空行、空格(当然,除了在交互式情景及缩进块内的状况)和注释。这点很重要,因为你可以随意标注你的代码,以便提高它们对于其他程序员的可读性,即便是以后你自己读你的代码也是一样。

    在Python中,注释通常以"#"开始,程序会忽略#后的一切内容。

    代码的可读性是一个很重要的因素,希望你能定期回忆我这句话。你是希望试着调试先前编写的代码还是按照以下方式编程:

    2749557-1P1151F304537.jpg

    虽然没什么乐趣,但你可以很清楚地看懂第二种书写方式的内容,在读完类似的上百行没有空格、空行或者注释的代码后,你的眼睛会感谢你相信我。让我们看看使用空格后倒数第二行发生的变化:

    2749557-1P1151F31W52.jpg

    你可以随意使用空格。

    关于if部分,我最后想说的的内容是关于布尔操作符。在一个判断正误的测试中,X and Y正确意味着X和Y都正确。X or Y正确则意味着X或者Y正确,not X正确意味着X是错的。Python中使用关键词进行布尔运算,而不像C或者C++中使用&&、||、!操作符。好好学习这些操作符,它们会变得十分顺手的。

    2、循环

    通常,程序从头至尾每一行执行一次。然而,一些特定的语句可能会使程序执行的顺序从一点跳到另一点,这些控制流语句(control-flow statement)包括if(then)语句和循环。

    最简单的循环语句可能是执行很多次的一段代码,例如:

    2749557-1P1151F332963.jpg

    也可使用for循环遍历字符串,或者是一个列表:

    2749557-1P1151F350W8.jpg

    尽管Python中for循环的语法和C或Java中的有些不同,不过一旦你适应了它们,使用这种语法就得心应手了。

    第二种循环语句是while语句。这种语句判断一个状态,只要状态正确就会继续执行缩进框内的程序,例如:

    2749557-1P1151F404263.jpg

    可能与你想象中的有些不同,这段代码绝对不会输出"10”,因为x输出之后才会进行加1操作。在第10次循环过程中,编译器输出"9”之后x增加到10。而此时while条件不再为真,因此缩进框内的代码也不会被执行。

    如果你正等待一个特定事件的发生,如按键按下或者用户按下"Q”退出的操作,while语句就十分有用。让我们看看接下来的例子:

    2749557-1P1151F422605.jpg

    这段代码中有两点值得注意:第一,在Python 2.x版本中,raw_input命令用来得到用户的一个输入,而在Python 3.x中,该命令则改为简单的input了;第二,记得使用break命令,这条命令会跳出当前循环。所以在这种情况下,while中循环的部分会永远循环,但当检测var == "q’返回值为真时,程序会退出当前循环并结束程序。

    3、函数

    函数可以让程序员编写的代码重复使用。它能大大提高工作效率。通常,如果你发现代码中某些功能需要执行很多次,这个功能很有可能需要改写为函数。

    假设你编写了一个简单的程序用来计算矩形的面积和周长。用户输入矩形的高和宽,之后程序进行相应的计算。实现这个功能最简单的方法是编写一个带参数的函数,其参数分别为矩形的高和宽。之后函数将矩形的面积和周长返回给主程序。为了实现这个函数,我们用def赋值语句进行编写。def赋值语句是我们定义一个函数的方法,其语法为def函数名(参数1,参数2):

    2749557-1P1151F4363W.jpg

    这个小程序需要你提供一些参数并返回计算的结果。可能这不是最好的例子(你可以用更少的代码计算出结果),但却很好地阐述了代码复用的思想。通过这个函数,你就明白:在程序的任何位置,只要你需要计算面积或者周长,调用AreaPerimeter函数并赋给参数"height”和"width”值即可。

    在此需要注意一点:raw_input函数会返回一个字符串,即便你输入的是数字,返回的也是字符串类型的值。这也就解释了为什么在AreaPerimeter函数中height和width变量在计算前必须要进行int转换。

    如果对其他语言比较熟悉的话,你会发现Python的函数与其他语言的函数在方法、功能和步骤方面都有一些不同。例如,在Python中,所有的函数都是按引用进行调用(call-by-reference)。不需要太过专业的术语,简单而言,这意味着当你给函数传递一个参数时,你只是将一个指针传递给一个变量,而不是传递数值。这种方式使得Python的内存管理更加方便。例如,当你在函数中一遍又一遍地传递列表参数时,不需要复制整个列表的内容。具体而言,当一个函数将一个列表作为参数时,你传递的只是列表首元素在内存中的位置,之后函数基于首元素的位置再查找剩余项。

    函数另一个有意思的方面是:它们都是可执行的语句。这意味着一个函数实际上可以在if语句中声明和调用。虽然并不是很常见,但是这样定义和调用是合法的(有时也十分有用)。def语句可以嵌套在循环当中,嵌套在其他的def语句中,甚至嵌套在列表和字典里。

    我们会在进行具体项目时回顾函数部分;现在,只需要知道它们的存在,并知道它们对你自己编写的每个程序都很实用即可。

    4、对象和面向对象编程

    在本章中,最后一件重要的事情是其与生俱来的执行面向对象代码的能力。面向对象编程(object-oriented programming,OOP)是一个较为高级的话题,可能不在本书讨论的范围之内。但我认为这是一个十分重要的话题,不可轻描淡写,一带而过。

    OOP是一个程序数据被分为对象和函数(或方法)组合的范例。一个对象就是一个数据结构,通常是一组数据类型的结合,包括整型、字符型或者其他的数据类型。对象通常是类的一部分,与类中的方法相关联,并通过方法操作。

    也许解释这部分最简单的方法就是使用shape示例。在这个例子中,一个shape(形状)是一个对象的类。类中有值,例如name(名称)和numberOfSides(面数)。这个类也有相关的函数,如findArea(计算面积)或者findPerimeter(计算周长)。

    shape类有很多子类,子类描述的内容更为具体。一个square(正方形)是一个shape的对象,它的shapeType(形状属性)值等于square,numberOfSides值等于4。它的findArea函数接受numberOfSides值,并将该值的平方作为返回值。同时,一个triangle(三角形)对象也有不同的name、shapeType和numberOfSides值和不同的findArea方法。

    这个例子不仅简单介绍了对象的概念,也阐述了继承的概念—OOP的一个组成部分。triangle对象从它的父类shape类继承了name、numberOfSides和findArea部分(虽然这几个部分都具有不同的值或者实现方法)。如果一个对象继承于shape类,它也会继承那些部分。即便它不需要用到那些部分,它还是会包含这些部分。它可能会增加一些其他的部分(例如circle(圆形)对象可能会有radius(半径)值),但它也会包含其父类的那些部分。

    如果你在编程中用到这些类,相对于C++或者Java而言,Python更容易理解。无论属性是一个对象或是一个方法,你都可以按照接下来的语法结构进行命名:object.attribute(对象。属性)。如果你有一个叫作holyGrail的circle对象,其半径值用holyGrail.radius来表示。一个名为unexplodedScotman的正方形,其计算面积的函数用unexplodedScotsman.findArea来定义。

    如之前所述,OOP的内容超出了本书涉及的范围。但像函数这些概念却十分有用,尤其是在很长很复杂的程序中。当你在学习Python的过程中,请自由地进行探索吧。你会发现Python也是一门功能丰富的语言,它甚至允许你执行其他高级程序任务。

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • 前言Python是现如今在人工智能领域较为热门的编程语言,因其简洁的语言风格、丰富的类库支持以及具有活跃的交流社区,受到广大开发者的喜爱。...那我们该如何在利用python在树莓派进行人脸识别呢?这就需...
  • 目录第一部分 树莓派编程环境第1章 配置树莓派 31.1 获取树莓派 31.1.1 了解树莓派的历史 31.1.2 为什么要学习用Python在树莓派上进行编程 41.2 获取树莓派 51.3 哪些树莓派外围设备是必须的 61.3.1 ...
  • 第一部分 树莓派编程环境第1章 配置树莓派 31.1 获取树莓派 31.1.1 了解树莓派的历史 31.1.2 为什么要学习用Python在树莓派上进行编程 41.2 获取树莓派 51.3 哪些树莓派外围设备是必须的 61.3...
  • 你可以像使用常规台式计算机一样在树莓派上创建一个非常酷的工程。例如,你可以用树莓派搭建你自己的家用云存储服务器。树莓派用什么语言编程?树莓派用python来进行编程。树莓派项目的一个核心思想是Python编程语言...
  • 第1部分 树莓派编程环境第1章 配置树莓派 31.1 获取树莓派 31.1.1 了解树莓派的历史 31.1.2 为什么要学习用Python在树莓派上进行编程 41.2 获取树莓派 51.3 哪些树莓派外围设备是必须的 61.3.1 micro...
  • 原标题:用python在树莓派上编程,你可以将项目扩展到令人难以置信的规模树莓派是一个非常廉价的、只有手掌大小的完全可编程的计算机。虽然树莓派的体积小,但是它的潜力无限。你可以像使用常规台式计算机一样...
  • 你可以像使用常规台式计算机一样在树莓派上创建一个非常酷的工程。例如,你可以用树莓派搭建你自己的家用云存储服务器。 树莓派用python来进行编程。树莓派项目的一个核心思想是Python编程语言的使用。Python允许...
  • 树莓派上搭建自己的 python 开发环境

    千次阅读 2019-08-02 22:43:22
    一般情况下,在烧录完镜像以后就可以直接在树莓派上通过 thony idle 去进行 python 的开发了. 但是用惯了 pycharm 和习惯了 vim 编程的我怎么可以直接用文本编辑器写代码呢? 效率完全没有了啊! 安装完镜像环境后,...
  • 2.7 总结 本章简单介绍了Linux的一些基本知识。虽然这不能使你成为一名专家,但它清晰地展示了这个功能强大的操作系统的用途。...一旦熟悉了树莓派,你可能会一台或多台其他的计算机也安装Linux系统。...
  • 这是最近学习树莓派python编程,然后做一些记录,其中的原理和代码以及注释都会比较详细,希望对大家有所帮助。 1.实验目的 1.了解树莓派的基本构成; 2.掌握Raspbian操作系统的基本使用方法; 3.掌握Python语言...
  • 搭建树莓派python开发环境

    万次阅读 2016-01-11 20:03:45
    安装完镜像环境后,就可以在树莓派上开发了,为了开发opencv for python,我在树莓派上搭建了vim的python开发环境,除了配置.vimrc以外还要安利一款VIM python 自动补全插件:pydiction。这是在纯shell环境下进行...
  • 但内置的控制软件主要面向交互操作,对于长时间摄影(如延时摄影/视频合成/HDR/Focus Stack/多幅拼接等等高级技术)的一些操作不太方便,可以使用树莓派做一个gPhoto2是一个免费软件,提供了类Unix系统通过终端...
  • 本实验用到的树莓派3B+开发板有40个GPIO接口,使用python的第三方库RPi.GPIO进行对各个引脚的控制。我使用的是GPIO引脚的厂家(BCM)编号进行引脚的控制。因此,对与LED模块和电源模块连接的树莓派的GP
  • 同时无论哪种平台,都可以用 Python 进行系统编程。机器学习可以用一些 Python 库来实现,比如人工智能常用的TensorFlow。也可以用像 NLTK 这样的 Python进行自然语言处理(NLP)。本文讨论基本的 Python...
  • 一般情况下,在烧录完镜像以后就可以直接在树莓派上通过 thony idle 去进行 python 的开发了.但是用惯了 pycharm 和习惯了 vim 编程的我怎么可以直接用文本编辑器写代码呢?效率完全没有了啊!安装完镜像环境后,就可以...
  • 树莓派3B+开发板有40个GPIO接口,使用python的第三方库RPi.GPIO进行对各个引脚的控制。我使用的是GPIO引脚的厂家(BCM)编号进行引脚的控制。因此,对与LED模块和电源模块连接的树莓派的GPIO口,通过RPi
  • Python 编程速成(推荐)

    2020-12-31 17:10:42
    同时无论哪种平台,都可以用 Python 进行系统编程。 机器学习可以用一些 Python 库来实现,比如人工智能常用的TensorFlow。也可以用像 NLTK 这样的 Python进行自然语言处理(NLP)。 本文讨论基本的 Python ...
  • 这篇文章主要介绍了Python 编程速成,本文给大家介绍的非常详细,具有一定的参考借鉴价值,...同时无论哪种平台,都可以用 Python 进行系统编程。机器学习可以用一些 Python 库来实现,比如人工智能常用的Tensor...
  • 这篇文章主要介绍了Python 编程速成,本文给大家介绍的非常详细,具有一定的参考借鉴价值,...同时无论哪种平台,都可以用 Python 进行系统编程。机器学习可以用一些 Python 库来实现,比如人工智能常用的Tensor...
  • 同时无论哪种平台,都可以用 Python 进行系统编程。机器学习可以用一些 Python 库来实现,比如人工智能常用的TensorFlow。也可以用像 NLTK 这样的 Python进行自然语言处理(NLP)。本文讨论基本的 Python...
  • 本文就总结一下之前做的一个项目吧,在树莓派中利用摄像头进行图像识别,将数码管中的数字识别出来,然后远程发送到服务器。先来看看系统实物图: 1、软件方面,使用Python作为编程语言,简单做了个下位机界面....
  • 实验目标: 1.首先通过opencv编程写一个可以调用摄像头并且能将摄像头捕捉到的内容进行保存。 2.将视频文件发送到我们的树莓派...ps:一定要确保树莓派上Python能够导入cv2这个模块,也就是你交互式的环境下输...
  • 事实上,在ubuntu上和在树莓派上整体的过程甚至一些命令都是一样的,但是在树莓派上安装opencv实在是费事费力太多了,不过看了我这篇博客,你的安装过程还是能避开不少坑。另外我看了我同学的博客,树莓派安装opencv...
  • 同时无论哪种平台,都可以用 Python 进行系统编程。机器学习可以用一些 Python 库来实现,比如人工智能常用的TensorFlow。也可以用像 NLTK 这样的 Python进行自然语言处理(NLP)。本文讨论基本的 Python...
  • 树莓派连接Arduino

    2019-03-09 00:33:33
    首先在树莓派上下载Arduino sudo apt-get install arduino -y 之后导航到Downloads文件夹,下载两个包 先下载一个包,可以用Python进行Arduino编程 之后第二个firmware则包含可以让Arduino从树莓派接收程序的...
  • Python极客项目编程

    2018-01-02 11:16:18
    , 本书包含了一组富有想象力的编程项目,它们将引导你用Python 来制作图像和音乐、模拟现实世界的现象,并与, Arduino 和树莓派这样的硬件进行交互。你将学习使用常见的Python 工具和库,如numpy、matplotlib 和...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

在树莓派上进行python编程

python 订阅