码迷,mamicode.com
首页 > 其他好文 > 详细

树莓派01

时间:2018-04-18 23:46:43      阅读:420      评论:0      收藏:0      [点我收藏+]

标签:else   会同   分享   fbo   tag   false   one   class   noobs   

raspbrerry pi

简介:官方系统就是Raspbian 

1.下载与安装

NOOBS:new outofbox software 新版开箱即用软件。有网络版和非网络版,非网络版里面包含了镜像文件,就是右边的那个,所有文件很大1个多G。而网络版里面只是一个下载工具,安装时需要联网下载镜像。

raspbian:这个就是我们的系统镜像文件。分为有图形界面和无图形界面

技术分享图片

NOOBS使用

NOOBS下载下来是一个zip,解压后有好多文件

技术分享图片

把这个目录下所有copy到sd卡,注意拷到根目录

然后开启树莓派,选择镜像安装即可,选英文的最好

Rapbian

就是镜像文件,img文件,使用Win32DiskImage,点击写入即可。

 

2.加入中文输入法

输入法:如果装英文的系统,它默认使用键盘是UK,咱们的键盘都是美式的,记得切换键盘。否则想要打“#”这些符号,可打不出来。。。

2.1

sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin

这是给树莓派安装中文输入法Fcitx及Google拼音输入法

sudo是一个提升权限的命令,可以让非root用户暂时拥有root命令,即可以在你的系统里面安装,删除文件

apt是一个包管理工具

2.2

安装好还不能用,你要在开始菜单中找到prefeence,在preference那里找到Fcitx Configuration,点开,然后点击左下角的”+”号,找到你刚安装的google pinyin.

把你的键盘添加进去,注意,把那个选择本机语言去掉。

2.3

crtl+空格 切换输入法

 

3.停止一个python脚本

当你使用GPIO时,总会遇到这样的问题。因为代码中间出错了,而你有没有捕获,这就尴尬了,你的代码一直运行。

所有注意在你所有的代码运行的外面加上

KeyboardInterrupt

这样,你就可以通过ctrl+c取消运行

3.1

 ps -ef 显示进程,然后找到py文件对应的进程的pid

3.2

写一个简单的GPIO脚本执行一下就可以了。

 

4.GPIO

4.1安装

一般会自带。。如果没自带就要pip安装了

因为自带了python2和python3,所有命令行里面执行的时候:

python2就是使用python2    pip2

python3就是使用python3     pip3同理

4.2识图

技术分享图片

每一个针脚都有Pin#和NAME字段。Pin代表的是该针脚的编号,其中01和02针脚对应第一张图中GPIO最右边竖排的两个针脚。而NAME代表的是该针脚的BCM名称,当然NAME也可以直接看得出针脚的默认功能。比如 3.3v和5v代表着该针脚会输出3.3v和5v的电压,Ground代表着该针脚是接地的,GPIO0*则是一些待用户开发的针脚。每个针脚都可以使用程序进行控制操作。


4.3快速入门

import RPi.GPIO as GPIO必须这样写,大小写严格

针脚编号

 

GPIO.setmode(GPIO.BOARD)

或者

1
GPIO.setmode(GPIO.BCM)

在RPi.GPIO中,同时支持树莓派上的两种GPIO引脚编号。第一种编号是BOARD编号,这和树莓派电路板上的物理引脚编号相对应。使用这种编号的好处是,你的硬件将是一直可以使用的,不用担心树莓派的版本问题。因此,在电路板升级后,你不需要重写连接器或代码。

第二种编号是BCM规则,是更底层的工作方式,它和Broadcom的片上系统中信道编号相对应。在使用一个引脚时,你需要查找信道号和物理引脚编号之间的对应规则。对于不同的树莓派版本,编写的脚本文件也可能是无法通用的。

 

下面代码将返回被设置的编号规则

mode = GPIO.getmode()

警告(实际上没有什么用)

如果RPi.GRIO检测到一个引脚已经被设置成了非默认值,那么你将看到一个警告信息。你可以通过下列代码禁用警告:

GPIO.setwarnings(False)


引脚设置

在使用一个引脚前,你需要设置这些引脚作为输入还是输出。配置一个引脚的代码如下:

# 将引脚设置为输入模式
GPIO.setup(channel, GPIO.IN)

# 将引脚设置为输出模式
GPIO.setup(channel, GPIO.OUT)

# 为输出的引脚设置默认值
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)


释放(最后必须)

一般来说,程序到达最后都需要释放资源,这个好习惯可以避免偶然损坏树莓派。释放脚本中的使用的引脚:注意,GPIO.cleanup()只会释放掉脚本中使用的GPIO引脚,并会清除设置的引脚编号规则。

GPIO.cleanup()

输出

要想点亮一个LED灯,或者驱动某个设备,都需要给电流和电压他们,这个步骤也很简单,设置引脚的输出状态就可以了,代码如下:

GPIO.output(channel, state)

状态可以设置为0 / GPIO.LOW / False / 1 / GPIO.HIGH / True。如果编码规则为,GPIO.BOARD,那么channel就是对应引脚的数字。

如果想一次性设置多个引脚,可使用下面的代码:

chan_list = [11,12]
GPIO.output(chan_list, GPIO.LOW)
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW))   

你还可以使用Input()函数读取一个输出引脚的状态并将其作为输出值,例如:

GPIO.output(12, not GPIO.input(12))

读取

我们也常常需要读取引脚的输入状态,获取引脚输入状态如下代码:

GPIO.input(channel)

低电平返回0 / GPIO.LOW / False,高电平返回1 / GPIO.HIGH / True。

如果输入引脚处于悬空状态,引脚的值将是漂动的。换句话说,读取到的值是未知的,因为它并没有被连接到任何的信号上,直到按下一个按钮或开关。由于干扰的影响,输入的值可能会反复的变化。
使用如下代码可以解决问题:

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
  # or
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

需要注意的是,上面的读取代码只是获取当前一瞬间的引脚输入信号。

如果需要实时监控引脚的状态变化,可以有两种办法。最简单原始的方式是每隔一段时间检查输入的信号值,这种方式被称为轮询。如果你的程序读取的时机错误,则很可能会丢失输入信号。轮询是在循环中执行的,这种方式比较占用处理器资源。另一种响应GPIO输入的方式是使用中断(边缘检测),这里的边缘是指信号从高到低的变换(下降沿)或从低到高的变换(上升沿)。

轮询方式

while GPIO.input(channel) == GPIO.LOW:
    time.sleep(0.01)  # wait 10 ms to give CPU chance to do other things

边缘检测

边缘是指信号状态的改变,从低到高(上升沿)或从高到低(下降沿)。通常情况下,我们更关心于输入状态的该边而不是输入信号的值。这种状态的该边被称为事件。
先介绍两个函数:

  • wait_for_edge() 函数。
    wait_for_edge()被用于阻止程序的继续执行,直到检测到一个边沿。也就是说,上文中等待按钮按下的实例可以改写为:
channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)
if channel is None:
    print(‘Timeout occurred‘)
else:
    print(‘Edge detected on channel‘, channel)
  • add_event_detect() 函数
    该函数对一个引脚进行监听,一旦引脚输入状态发生了改变,调用event_detected()函数会返回true,如下代码:
GPIO.add_event_detect(channel, GPIO.RISING)  # add rising edge detection on a channel
do_something()
// 下面的代码放在一个线程循环执行。
if GPIO.event_detected(channel):
    print(‘Button pressed‘)

上面的代码需要自己新建一个线程去循环检测event_detected()的值,还算是比较麻烦的。

不过可采用另一种办法轻松检测状态,这种方式是直接传入一个回调函数:

def my_callback(channel):
    print(‘This is a edge event callback function!‘)
    print(‘Edge detected on channel %s‘%channel)
    print(‘This is run in a different thread to your main program‘)

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

如果你想设置多个回调函数,可以这样:

def my_callback_one(channel):
    print(‘Callback one‘)

def my_callback_two(channel):
    print(‘Callback two‘)

GPIO.add_event_detect(channel, GPIO.RISING)
GPIO.add_event_callback(channel, my_callback_one)
GPIO.add_event_callback(channel, my_callback_two)

注意:回调触发时,并不会同时执行回调函数,而是根据设置的顺序调用它们。

Raspberry Pi 修订版本和 RPi.GPIO 版本

检测 Raspberry Pi 主板的修订版本:

1
GPIO.RPI_REVISION

检测 RPi.GPIO 的版本:

1
GPIO.VERSION


 

5.linux命令

 

6.GPIO详解

https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/

Python下GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback) 这个函数的用法 用来做定时用

 

 

 

 

 

高电位与低点位:相对就可以通电

 

树莓派01

标签:else   会同   分享   fbo   tag   false   one   class   noobs   

原文地址:https://www.cnblogs.com/BlueFire-py/p/8878050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!