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

杂七杂八的废话

经验分享 程序员 微信小程序 职场和发展