树莓派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通信,连接上树莓派与电脑 然后通过一定的通信规则,将输入的手柄控制信息传送到树莓派上 然后树莓派通过调用自身的控制代码(预先调试过可行),然后进行控制