如何通过Socket通信控制LED

对于树莓派来说,可以通过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 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# 2. 将 socket 绑定到指定地址 (本机地址)address = ('192.168.1.102', 8889)
s.bind(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.
s.listen(5)
print 'Waiting for connection...'
# 4. 等待客户请求一个连接# 调用 accept 方法时,socket 会进入 "waiting" 状态。
# accept方法返回一个含有两个元素的元组 (connection, address)。
# 第一个元素 connection 是新的 socket 对象,服务器必须通过它与客户通信;
# 第二个元素 address 是客户的 Internet 地址。
new_s, addr = s.accept()
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_s.send(command)
    data = new_s.recv(512)
    print data    if data == 'Communication is disconnected': 
       break         
# 6. 传输结束,关闭连接
new_s.close()
s.close()
接下来是Client端程序:
# TCP-Clientimport RPi.GPIO as GPIO
import time
import socket

address = ('192.168.1.102', 8889)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(address)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, False)
GPIO.output(27, False)
while True:
    command = s.recv(512)
    if command == '1':
        GPIO.output(27, True)
        GPIO.output(17, False)
        s.send('Command 1 received by client')
        print "Command is ", command
    elif command == '2':
        GPIO.output(27, False)
        GPIO.output(17, True)
        s.send('Command 2 received by client')
         print "Command is ", command
    elif command == '3':
        s.send('Communication is disconnected')
        print "Command is ", command
        break
    else:
        s.send('Please enter 1, 2 or 3')
        print "Command is ", commands.close()
我们只需要在PC上运行Server的程序,在Raspberry Pi上运行Client的程序便可以控制LED的亮与熄了,很简单。

一见钟情 发表于11-18 08:16 浏览65246次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

一见钟情
一见钟情(大校)
金币:1529个|学分:3659个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号