树莓派部署网站(内网穿透)点亮LED灯保姆级教程(四)

这次引入socket通信,即在PC上控制树莓派点灯和关灯,设置PC为客户端,树莓派为服务端,注意,PC与树莓派必须处于同一个局域网下。

通过socket通信点亮LED灯

首先我们看到PC上的客户端程序:

from socket import *

IP='树莓派的IP地址'
SERVER_PORT=50000
BUFLEN=1024

dataSocket=socket(AF_INET,SOCK_STREAM)
dataSocket.connect((IP,SERVER_PORT))




while True:
     toSend=input('')
     if toSend=='':
         break
     dataSocket.send(toSend.encode())
     recved=dataSocket.recv(BUFLEN)
     if not recved:
         break
     print(recved.decode())
dataSocket.close()

解析一下这个程序,设置好服务端的IP和端口,PC作为客户端向服务端发送信息,发送的信息为空字符时或者发送信息后未收到服务端的反馈信息,客户端将断开连接。客户端会将收到服务端的信息打印在控制台。

这段程序短小精简,主打一个方便理解学习。

我们再看到树莓派上的服务端程序:

from socket import *
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40,GPIO.OUT)

IP='树莓派的IP地址'
PORT=50000
BUFLEN=512
listenSocket=socket(AF_INET,SOCK_STREAM)
listenSocket.bind((IP,PORT))

listenSocket.listen(5)
print(f'服务器启动成功,在{PORT}端口等待客户端连接')

dataSocket,addr=listenSocket.accept()
print('接受一个客户端连接:',addr)

while True:
    recved=dataSocket.recv(BUFLEN)
    if not recved:
        break
    info=recved.decode()
    print(f'收到对方信息:{info}')
    dataSocket.send(f'服务端接收到了信息{info}'.encode())
    if info=='light':
        GPIO.output(40,GPIO.HIGH)
    
    elif info=='off':
        GPIO.output(40,GPIO.LOW)
        
dataSocket.close()
listenSocket.close()
# 释放GPIO引脚资源
GPIO.cleanup()

注意,客户端和服务端的程序中的IP和PORT一定要一致!这代表了,客户端和服务端将在哪个IP的哪个端口进行通信。

当服务端接收到客户端发送的light指令,会将LED灯点亮;收到客户端发送的off指令,会将LED灯关闭;当收到客户端发送的空字符,会关闭连接,然后释放GPIO引脚资源。

除了客户端发送的空字符,服务端都会将自己发送的指令打印在控制台。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大初哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值