我是靠谱客的博主 魁梧汽车,最近开发中收集的这篇文章主要介绍树莓派python网络通信_PC端与树莓派3之间通过wifi通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

TCP通信

TCP协议可以应用在机器人远程控制中。有python包可以实现基于Socket方式的tcp通信。TCP通信协议通过建立连接和应答来保证通信质量,它将通信设备分为Server和Client,两者的操作方式也有些区别。

Server基本流程为:创建Socket -> 绑定IP和端口 -> 在绑定的IP和端口上监听连接请求 -> 接受Client发出的连接请求 -> 收发收据 -> 关闭连接。

2. python实现TCP通信

树莓派3上作为服务器端Server,一直等待客户端的连接并且等待客户端给它发指令;而PC端作为客户端Client不断的去尝试连接服务器,连上之后负责给server发指令。

从网上找的python代码,先是树莓派端的server.py:

#coding:utf-8

#import necessary package

import socket

import time

import sys

import RPi.GPIO as GPIO

#define host ip: Rpi's IP

HOST_IP = "192.168.1.5"

HOST_PORT = 8888

print("Starting socket: TCP...")

#1.create socket object:socket=socket.socket(family,type)

socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print("TCP server listen @%s:%d!" %(HOST_IP, HOST_PORT) )

host_addr = (HOST_IP, HOST_PORT)

#2.bind socket to addr:socket.bind(address)

socket_tcp.bind(host_addr)

#3.listen connection request:socket.listen(backlog)

socket_tcp.listen(1)

#4.waite for client:connection,address=socket.accept()

socket_con, (client_ip, client_port) = socket_tcp.accept()

print("Connection accepted from%s." %client_ip)

socket_con.send("Welcome to RPi TCP server!")

#5.handle

GPIO.setmode(GPIO.BCM)##信号引脚模式定义,BCM模式

GPIO.setwarnings(False)

########电机驱动接口定义#################

ENA = 13#//L298使能A

ENB = 20#//L298使能B

IN1 = 19#//电机接口1

IN2 = 16#//电机接口2

IN3 = 21#//电机接口3

IN4 = 26#//电机接口4

#########电机初始化为LOW##########

GPIO.setup(ENA,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(IN1,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(IN2,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(ENB,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(IN3,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(IN4,GPIO.OUT,initial=GPIO.LOW)

####PWM初始化,并设置频率为200HZ####

GPIO.setup(ENA,GPIO.OUT,initial=GPIO.LOW)#初始匿

p1 = GPIO.PWM(ENA,200) #200HZ

p1.start(40)

####定义电机正转函数

def gogo():

print 'motor gogo'

#GPIO.output(ENA,True)

GPIO.output(IN1,True)

GPIO.output(IN2,False)

GPIO.output(ENB,True)

GPIO.output(IN3,True)

GPIO.output(IN4,False)

###定义电机反转函数

def back():

print 'motor_back'

GPIO.output(ENA,True)

GPIO.output(IN1,False)

GPIO.output(IN2,True)

GPIO.output(ENB,True)

GPIO.output(IN3,False)

GPIO.output(IN4,True)

###定义电机停止函数

def stop():

print 'motor_stop'

#GPIO.output(ENA,False)

p1.stop

GPIO.output(ENB,False)

GPIO.output(IN1,False)

GPIO.output(IN2,False)

GPIO.output(IN3,False)

GPIO.output(IN4,False)

print("Receiving package...")

###主循环

while True:

try:

data=socket_con.recv(512)

if len(data)>0:

print("Received:%s"%data)

if data=='stop':

stop();

elif data=='gogo':

gogo();

socket_con.send(data)

time.sleep(1)

continue

except Exception:

socket_tcp.close()

sys.exit(1)

检测客户端发来的字符,gogo驱动电机转动,stop电机停转。

客户端client.py运行在ubuntu环境,提示输入gogo或者stop字符。代码如下:

import socket

import time

import sys

#RPi's IP

SERVER_IP = "192.168.1.5"

SERVER_PORT = 8888

print("Starting socket: TCP...")

server_addr = (SERVER_IP, SERVER_PORT)

socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

while True:

try:

print("Connecting to server @%s:%d..." %(SERVER_IP, SERVER_PORT))

socket_tcp.connect(server_addr)

break

except Exception:

print("Can't connect to server,try it latter!")

time.sleep(1)

continue

print("Please input gogo or stop to turn on/off the motor!")

while True:

try:

data = socket_tcp.recv(512)

if len(data)>0:

print("Received:%s" % data)

command=raw_input()

socket_tcp.send(command)

time.sleep(1)

continue

except Exception:

socket_tcp.close()

socket_tcp=None

sys.exit(1)

3. 实验

用winscp上传server.py文件后,用ssh连接树莓派,运行服务器端;这时候树莓派开始监听客户端的信息;服务器端运行信息

在ubuntu的终端运行client.py,按照提示输入gogo字符,对应的电机会转动起来。客户端运行信息

实验装置:

PC端通过tcp协议控制电机转动https://www.zhihu.com/video/927992543763902464

4. todo

在PC端的ubuntu系统上调用百度语音识别模块,将语音转换成控制字符,通过tcp协议控制电机转动。

最后

以上就是魁梧汽车为你收集整理的树莓派python网络通信_PC端与树莓派3之间通过wifi通信的全部内容,希望文章能够帮你解决树莓派python网络通信_PC端与树莓派3之间通过wifi通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部