树莓派wifi小车制作(6)wifi小车大功告成
关于代码
emmm,这里只包含了控制代码 获取摄像头的数据可以通过之前的网络摄像头搭建完成,那个还是挺全面的,我就不在这里明抄了
关于价格
其实我也不知道C币有什么用,因为作为白嫖党我一般遇到要花钱的基本就直接走人 但是理论上来说,按照我对我自己的了解,如果把我的树莓派系列的从头读到尾的人,应该不需要从这里花钱要代码?
关于这个系列
目录 0. 1. 2. 3. 4. 5.
当然,你如果说有的代码只控制了两个舵机,但是你要我提供三个舵机的控制代码之类的问题……我……只能说你去研究下单个舵机云台是怎么控制的去吧 我总不能来个人就提供份三个舵机,四个舵机……N个舵机吧? 是吧?
代码
电脑端
只需要运行socket_client.py的文件 嘛,几个需要import的的环境自己安装 电脑端需要修改的就是树莓派的ip地址了,要是找不到ip地址……那我也没办法了 电脑端两个文件,一个开线程获取手柄输入的文件,一个发送信息的文件
from socket import *
import time
import test_shoubing_noclass
#下面的ip地址要改!!!!!!!!!!!!!!!!!!!!!!!
HOST = 192.168.0.106 # or localhost
#上面的ip地址要改!!!!!!!!!!!!!!!!!!!!!!!
PORT = 21567
BUFSIZ =1024
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
a=test_shoubing_noclass.get_shoubing_info()
send_str=""
ID=str(1001)
send_str+=ID
for i in a :
send_str+="#"+str(int(i))
send_str+="##"
tcpCliSock.send(send_str.encode())
time.sleep(0.01)
树莓派端
只需要运行socket_server.py文件 理论上看我的文章的人应该都会运行python吧?不会真的有人连运行python都不会就想搞树莓派吧? 不会吧?不会吧?
from socket import *
from time import ctime
import car_control
import time
import MotorHAT.control as duoji
def socket_car_control(arr):
l_speed=arr[1]
r_speed=arr[2]
duoji_parr=arr[3]
duoji_hor=arr[4]
if l_speed>=99:
l_speed=99
if l_speed<=-99:
l_speed=-99
if r_speed>=99:
r_speed=99
if r_speed<=-99:
r_speed=-99
print(arr)
car_control.L_motor_control(l_speed)
car_control.R_motor_control(r_speed)
duoji.camera_move_parral(duoji_parr)
duoji.camera_move_horizontal(duoji_hor)
time.sleep(0.01)
HOST =
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print(waiting for connection...)
tcpCliSock, addr = tcpSerSock.accept()
print(...connnecting from:, addr)
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
split_data_0=data.decode(utf-8).split("##")
#print(ss==== ,split_data_0)
split_data=split_data_0[0]
split_data=split_data.split("#")
int_split_data=[]
for i in split_data:
if i!=:
int_split_data.append(int(i))
#print(int_split_data)
if int_split_data[0]==1001:
#print(int_split_data)
socket_car_control(int_split_data)
tcpCliSock.close()
car_control.car_stop(10)
死循环读取电脑端传来的tcp报文,通过简单的处理(分隔)后获取对应的控制信息,然后调用对应的控制模块
代码运作的整体思路
控制方法: 首先是输入,我有一个理论上用来打游戏但我是个键鼠党的手柄,通过python的pygame(是这个名字吧?我懒得翻代码了)获取手柄输入 然后通过socket通信,连接上树莓派与电脑 然后通过一定的通信规则,将输入的手柄控制信息传送到树莓派上 然后树莓派通过调用自身的控制代码(预先调试过可行),然后进行控制
