记录技术 分享生活

一个不知道该写什么的人

记录技术 分享生活

使用的树莓派2B

通过PRI.GPIO来实现Python控制树莓派的GPIO。

安装

官方文档中给出了三种按章方式。分别是

easy_install或者pip来安装:

1
2
sudo apt-get install python-setuptools
sudo easy_install -U RPIO

从Github上克隆然后安装

1
2
3
git clone https://github.com/metachris/RPIO.git
cd RPIO
sudo python setup.py install

从Github或者别处下载安装

1
2
3
curl -L https://github.com/metachris/RPIO/archive/master.tar.gz | tar -xz
cd RPIO-master
sudo python setup.py install

使用

树莓派引脚图
树莓派2B引脚图

这是用wiringPi生成的引脚图,用wiringPi控制GPIO会在以后写。

树莓派的GPIO大致可以分为INPUT和OUTPUT两种状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import RPIO

# 设置为输入位无上拉
RPIO.setup(7, RPIO.IN)

# 设置为输出位有上拉. 可以设置为
# PUD_UP(上拉), PUD_DOWN(下拉) or PUD_OFF (default)
RPIO.setup(7, RPIO.IN, pull_up_down=RPIO.PUD_UP)

# 读取GPIO7的输入状态
input_value = RPIO.input(7)

# 设置GPIO为输出位
RPIO.setup(8, RPIO.OUT)

# 设置GPIO8为高电位
RPIO.output(8, True)

# 设置为输出位并给予一个初始值
RPIO.setup(8, RPIO.OUT, initial=RPIO.LOW)

# 改变为BOARD编号模式
RPIO.setmode(RPIO.BOARD)

# 在通道17上设置软件上拉
RPIO.set_pullupdn(17, RPIO.PUD_UP) # new in RPIO

# 获得通道8的设置(IN、OUT、ALTo)
RPIO.gpio_function(8)

# 复位所有由该程序设置过的通道,
# 并清除 GPIO 中断接口
RPIO.cleanup()

照着上一篇文章写的那样做,并不能成功。因为RPIO的最后一个release版本是2013年的,并不支持我的树莓派2B。

如果想在树莓派2B上运行,需要做这些工作

1
2
sudo apt-get install rpi.gpio
sudo pip freeze

如果有一行RPi.GPIO==0.511就说明安装成功了。

然后我们在新建led.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import RPi.GPIO as GPIO
import time

LED = 4

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)

print("结束程序,请按CTRL+C")
try:
while 1:
GPIO.output(LED, False)
#延时1s
time.sleep(1)
GPIO.output(LED, True)
time.sleep(1)
except KeyboardInterrupt: # 如果程序被CTRL+C结束
GPIO.cleanup()

前几天搞不懂GPIO.setmode函数中的参数GPIO.BCM和GPIO.BOARD指的是什么。
后来知道BOARD指的是主板引脚编号,而BCM指的是BCM芯片的引脚编号,在本文的配图中有。

在日常使用Xshell进行远程登录的时候,我们想通过Xshell在Windows和Linux之间便捷的进行文件传输,这时候我们可以使用 rzsz 命令。

在树莓派上安装rzsz命令。

1
sudo apt-get install lrzsz

下载某个文件或文件夹

1
sz filename

rz直接把文件拖到Xshell上就可以了.

szrz的帮助文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
rz version 0.12.21rc
Usage: rz [options] [filename.if.xmodem]
Receive files with ZMODEM/YMODEM/XMODEM protocol
(X) = option applies to XMODEM only
(Y) = option applies to YMODEM only
(Z) = option applies to ZMODEM only
-+, --append append to existing files
-a, --ascii ASCII transfer (change CR/LF to LF)
-b, --binary binary transfer
-B, --bufsize N buffer N bytes (N==auto: buffer whole file)
-c, --with-crc Use 16 bit CRC (X)
-C, --allow-remote-commands allow execution of remote commands (Z)
-D, --null write all received data to /dev/null
--delay-startup N sleep N seconds before doing anything
-e, --escape Escape control characters (Z)
-E, --rename rename any files already existing
--errors N generate CRC error every N bytes (debugging)
-h, --help Help, print this usage message
-m, --min-bps N stop transmission if BPS below N
-M, --min-bps-time N for at least N seconds (default: 120)
-O, --disable-timeouts disable timeout code, wait forever for data
--o-sync open output file(s) in synchronous write mode
-p, --protect protect existing files
-q, --quiet quiet, no progress reports
-r, --resume try to resume interrupted file transfer (Z)
-R, --restricted restricted, more secure mode
-s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds
-S, --timesync request remote time (twice: set local time)
--syslog[=off] turn syslog on or off, if possible
-t, --timeout N set timeout to N tenths of a second
--tcp-server open socket, wait for connection (Z)
--tcp-client ADDR:PORT open socket, connect to ... (Z)
-u, --keep-uppercase keep upper case filenames
-U, --unrestrict disable restricted mode (if allowed to)
-v, --verbose be verbose, provide debugging information
-w, --windowsize N Window is N bytes (Z)
-X --xmodem use XMODEM protocol
-y, --overwrite Yes, clobber existing file if any
--ymodem use YMODEM protocol
-Z, --zmodem use ZMODEM protocol

short options use the same arguments as the long ones

解决方法

因为在学校的实验室网络不是很稳定,所以树莓派一直不能直接用网线连接网络。而且wpa_supplication真的很不稳定,莫名其妙的罢工好几次,每次只能重新写镜像。
种种原因选择了直连电脑的方法来联网,而我的电脑连接的是信号很弱的无线网,无奈条件太艰苦。

需要额外准备的东西就是一根直通线啦。好啦,接下来就是设置的时间了。

首先打开网络与共享中心->更改适配器设置->右击无线网络连接->属性->共享。
如图:
无线网络属性共享
根据别人写的教程,做到这步就可以实现远程登录树莓派和树莓派访问外网了。但是我只能实现远程登录树莓派,访问外网实现不了。经过试验,是没有配置DNS服务器的原因,在本地连接的IPV4属性中添加DNS服务器就可以了。这里我使用的是OpenDNS。
IPV4属性

原理

windows实现直连访问的技术叫做ICS,百科上的解释如下:

ICS即Internet连接共享(InternetConnectionSharing)的英文简称,是Windows系统针对家庭网络或小型的Intranet网络提供的一种Internet连接共享服务。它实际上相当于一种网络地址转换器,所谓网络地址转换器就是当数据包向前传递的过程中,可以转换数据包中的IP地址和TCP/UDP端口等地址信息。有了网络地址转换器,家庭网络或小型的办公网络中的电脑就可以使用私有地址,并且通过网络地址转换器将私有地址转换成ISP分配的单一的公用IP地址从而实现对Internet的连接。ICS方式也称之为Internet转换连接。

这里是在微软的官方帮助文档中对ICS的介绍,使用它也可以连接路由器使用。

推荐阿里和中科大的的树莓派镜像

1
2
deb http://mirrors.aliyun.com/raspbian/raspbian/   wheezy main contrib non-free rpi
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ wheezy main contrib non-free rpi

主要是因为学校的天翼客户端不能用路由器,这样的话我的树莓派就没法用了。
所以买个路由器刷openWRT,然后破解客户端,在openWRT上编写破解程序用路由器分享wifi。毕竟动态域名也是要一个外网ip的。
哈哈~
这是想象之中的,但愿我能坚持下来吧。
Thx~
然而在极路由和小米路由器mini之间我选择了小米路由mini。
毕竟第一次折腾openWRT,不是很敢自己刷。可以直接在他们定制的openWRT系统上折腾。

问题说明

我很喜欢Yilia这个漂亮的主题,但是当我自己用的时候发现在subnav区生成的链接并不是我想要的。比如我的github地址是github.com/XXXXX,但是实际生成的是XXXXX.github.io/github.com/XXXXX。微博地址也是这样,邮箱地址也是。

心路历程

我一点一点试验嘛,今天一晚上翻来覆去改了有30多次。

1
2
3
4
subnav:
github: "https://github.com/XXXXX"
weibo: "http://weibo.com/XXXXX"
#mail: "[email protected]"

这时可以了,我以为是因为链接对齐了呢,可是我把mail那里的#去掉后,发现邮箱那一栏生成的地址还是没变啊。我又陷入了沉思~

问题解决

解决的原因是我把git生成的diff看了一遍,发现微博那一栏在没加http://时,生成的html代码是这样的/weibo.com/XXXXX,加了http://后生成的html代码就变成了http://weibo.com/XXXXX了。看到这里,大家一定会明白了。
把subnav改成这样子就可以了。

1
2
3
4
subnav:
github: "https://github.com/XXXXX"
weibo: "http://weibo.com/XXXXX"
mail: "mailto:[email protected]"

后记

把时间花费在打磨工具上有点很吃亏啊,还是等有钱买个vps好了。
晚安~

0%