Raspberry Pi(中文名为“树莓派”,简写为RPi,或者RasPi/RPi)是为学生计算机编程教育而设计,只有xyk大小的卡片式电脑,其系统基于Linux。[1] 自问世以来,受众多计算机发烧友和创客的追捧,曾经一“派”难求。别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全”。对于树莓派来说,可以通过ssh和电脑进行互联,所以一般的应用来说,不需要socket通信,只要打开ssh在树莓派上运行写好的Python或者C程序即可。但是,有的project需要多个sensor,如果仅仅通过打开多个ssh来运行不同程序,这样sensor搜集的数据就不直观,因此就需要在PC上建立一个Server来和树莓派通信,从而可以把所有sensor以及其他devices需要的信号都集中显示在一个PC端的程序上。如果会网页编程的话,在树莓派上建立一个WEB服务器应该也很好实现这个功能。如果不会网页编程,那只好使用socket通信了。最简单的开始,也就是通过socket控制LED的亮与熄。
下面是Server端的程序:# TCP-Serverimport socket
# 1 创建 socket 对象
s = socketsocket(socketAF_INET, socketSOCK_STREAM)
# 2 将 socket 绑定到指定地址 (本机地址)address = ('1921681102', 8889)
sbind(address)
# 3 接收连接请求# listen(backlog), The backlog argument specifies the maximum number of queued connections and should be at least 0;
# the maximum value is system-dependent (usually 5), the minimum value is forced to 0
slisten(5)
print 'Waiting for connection'
# 4 等待客户请求一个连接# 调用 accept 方法时,socket 会进入 "waiting" 状态。
# accept方法返回一个含有两个元素的元组 (connection, address)。
# 第一个元素 connection 是新的 socket 对象,服务器必须通过它与客户通信;
# 第二个元素 address 是客户的 Internet 地址。
new_s, addr = saccept()
print 'Got connect from', addr
# 5 处理:服务器和客户端通过 send 和 recv 方法通信
command = ' '
print ('Please enter 1 to turn on the led, 2 to turn off the led,3 to disconnect the communication:')
while True:
command = raw_input()
new_ssend(command)
data = new_srecv(512)
print data if data == 'Communication is disconnected':
break
# 6 传输结束,关闭连接
new_sclose()
sclose()
接下来是Client端程序:
# TCP-Clientimport RPiGPIO as GPIO
import time
import socket
address = ('1921681102', 8889)
s = socketsocket(socketAF_INET, socketSOCK_STREAM)
sconnect(address)
GPIOsetmode(GPIOBCM)
GPIOsetwarnings(False)
GPIOsetup(27, GPIOOUT)
GPIOsetup(17, GPIOOUT)
GPIOoutput(17, False)
GPIOoutput(27, False)
while True:
command = srecv(512)
if command == '1':
GPIOoutput(27, True)
GPIOoutput(17, False)
ssend('Command 1 received by client')
print "Command is ", command
elif command == '2':
GPIOoutput(27, False)
GPIOoutput(17, True)
ssend('Command 2 received by client')
print "Command is ", command
elif command == '3':
ssend('Communication is disconnected')
print "Command is ", command
break
else:
ssend('Please enter 1, 2 or 3')
print "Command is ", commandsclose()
我们只需要在PC上运行Server的程序,在Raspberry Pi上运行Client的程序便可以控制LED的亮与熄了,很简单。树莓派+sd卡+手机电源:树莓派网上买的;sd卡相机里面拆出来的;电源是原来一个手机的,接口通用
5v继电器:控制有三线的(电源、地、信号)
TendaW311MI小型无线路由
接线若干
方法/步骤
树莓派接线图:sd卡、手机电源线、网线、hdmi转dvi接线连接显示器、键盘
如何用树莓派Raspberry Pi做一个简单的控制系统
安装树莓派的linux系统:系统到官网下,用工具写到sd卡里面(比较简单网上很多教程)
树莓派通过有线上网:开始时没显示器,买了一条HDMI的转DVI接口的线,调试了一下,可以上网后,就不用接显示器了,在家用有线连接路由器,用secureCRT连接局域网ip,就可以登入树莓派,ping一下外网,基本就通了
树莓派无线网卡上网:把无线网卡插入usb接口,TendaW311MI免驱动即可识别,修改/etc/network/interfaces信息,把路由器的wpa-ssid和wpa-psk加上,重启一下系统,基本上无线就能上网了
继电器:所谓继电器,就是一种控制开关,用小电压、小电流设备控制大电压、大电流的东西。控制端的电源、GND地、信号分别接树莓派的GPIO的2、6、7接口(控制端最好三线,本来买了一个两线输入的听说可以用,最后还是不敢接。。。),另一端接外接设备,接常开和公共端
编程:下载安装了python的GPIO库,然后给出如下控制代码:
文件runpy
#!/usr/bin/python
#coding: utf8
import sys
import RPiGPIO as GPIO
PORT=7
GPIOsetwarnings(False)
GPIOsetmode(GPIOBOARD)
GPIOsetup(PORT,GPIOOUT)
if sysargv[1]=="open":
GPIOsetup(PORT,GPIOLOW)
elif sysargv[1]=="close":
GPIOsetup(PORT,GPIOHIGH)
好了,上面搞定之后,随便找个东西接一下,然后secureCRT登入树莓派,
sudo /runpy open //打开控制设备
sudo /runpy close //关闭控制设备
如何用树莓派Raspberry Pi做一个简单的控制系统
8
使用webpy在树莓派上面搭一个简单的web服务器,把上面的runpy脚本改改,就可以通过手机访问控制开关,实现家庭内的远程控制了。你用file类型的input上传这个后,就将上传到你服务器的临时目录了,并且将文件相关的信息存在了_FILE这个参数里,
<php
if($dosubmit){
$f = $_FILES['file'];//获得文件的相关信息,file是input的name
if( $f['size']>1024600 ){
exit('大小超过系统限制(600KB)');
}
}
>
你用表单的get提交普通的参数你可以通过$_GET获得,同样的post提交的通过$_POST得到。当然里面的文件的信息你就要通过$_FILES来得到了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)