树莓派智能监控小车(QT+树莓派)------客户端(PC)和服务器(树莓派)

来源:互联网 发布:知乎 核安全所 编辑:程序博客网 时间:2024/06/11 11:08

客户端是用QT写的,利用QT(C++)中的QTcpSocket实现TCP传输的客户端一方;服务端是用python写的TCP传输的服务器。


QT部分:

UI主页面界面用到了QWebview(显示视频,同一局域网内只需打开http://树莓派ID:8080/?action=stream)、PushButton(控制小车移动和灯的开关),setting界面用到了Label、QPushButton、LineEdit(用于获取输入的地址和端口号)。这些界面的设计和信号与槽的连接在百度里有很多的例子可供学习,QT学习起来也相对简单。以下是

我写的界面,很糟见谅....



接下来主要讲TCP部分,想必socket编程大家都遇到过很多了,在QT中更是简单

步骤1:首先添加 头文件 

include <QTcpSocket>

步骤2:定义一个QTcoSocket对象  

QTcpSocket  tcpsocket;

步骤3:连接服务器

 this->tcpsocket.connectToHost(“服务器地址”,“端口号”);

this->tcpsocket.waitForConnected(1000); //据说此行代码必须有,否则无法进行连接

步骤4:发送数据, if(this->tcpsocket.state()==QAbstractSocket::ConnectedState) //对应某个Button,比如上图的W键

{

this->tcpsocket.write("你要发的信息,比如前进后退等");

this->tcpsocket.waitForBytesWritten(300);//据说此行代码必须有,否则无法发送

}

else

...

步骤5:结束操作,断开连接

if(this->tcpsocket.state()==QAbstractSocket::ConnectedState)

{

this->tcpsocket.disconnectFromHost();

this->tcpsocket.waitForDisconnected(1000); 

}


树莓派部分:

树莓派端上的服务器端是用python写的,python也是较为简单的,不过还是与C++,JAVA等的语法有点不同,以下代码不全都是按python的语法规则写的,示例而已

步骤1:导入socket库  

import socket

步骤2:定义socket类型

raspiServer = socket.socket(scoket.AF_INET,socket.SOCK_STREAM) #定义socket类型,网络通信

raspiServer .bind((客户端地址,端口号))#客户端地址可以空即只绑定端口号

步骤3:开始TCP监听

while 1:

raspiServer.listen(1)#监听

while 1:

conn,addr=raspiServer.accept()

print 'connect by' addr

while 1:

try:

data=conn.recv(1024)#接收数据

print data #显示在屏幕中,以便测试是否能够通信

#然后处理数据,判断然后驱动小车移动

except socket.error,arg:

(errno,err_msg)=arg

print errno

if  errno == 32:

break;

步骤4:关闭连接

conn.close()



两边的代码敲完后,将PC和树莓派放在局域网中(同一WIFI下即可),尝试是否可以通信。


有需要QT源码的可联系我。python的代码比较简单网上很多就不放出来了(毕竟 我也是网上学的....)

原创粉丝点击