当前位置: 首页 > news >正文

PART 6 树莓派小车+QT (TCP控制)

1. 树莓派作为服务器的程序

(1)服务器tcp_server_socket程序

可以实现小车前进、后退、左转、右转、加减速(可能不行)

carMoveControl.py

import  RPi.GPIO as GPIO
import time
import tty,sys,select,termios
import socket
import string
import threading
import carMoverun_car  = '1'  #鎸夐敭鍓?back_car = '2'  #鎸夐敭鍚?left_car = '3'  #鎸夐敭宸?right_car = '4' #鎸夐敭鍙?stop_car = '0'  #鎸夐敭鍋?#灏忚溅鐘舵€佸€煎畾涔?enSTOP = 0
enRUN =1
enBACK = 2
enLEFT = 3
enRIGHT = 4
enTLEFT =5
enTRIGHT = 6#灏忚溅鍜岃埖鏈虹姸鎬佸彉閲?g_CarState = 0
g_ServoState = 0
#灏忚溅閫熷害鍙橀噺recvbuf = ""try:#閫氳繃socket鍒涘缓鐩戝惉濂楁帴瀛楀苟璁剧疆涓洪潪闃诲妯″紡tcp_server_socket= socket.socket(socket.AF_INET,socket.SOCK_STREAM)#濉厖缁戝畾鏈嶅姟鍣ㄧ殑ip鍦板潃鍜岀鍙e彿#娉ㄦ剰锛氳繖閲屼竴瀹氳鏍规嵁鑷繁鐨勬爲鑾撴淳鐨刬p鍦板潃鏉ュ~porttcp_server_socket.bind(("", 6002))tcp_server_socket.listen(128)  #tcp_server_socket.setblocking(0)  #鐩戝惉瀹㈡埛绔殑杩炴帴while True:  print ("waiting for connection....")     tcp_client_socket,tcp_client_addr = tcp_server_socket.accept()print ("Start recv!")if tcp_server_socket:connectflag = 1print ("new user :%s " % str(tcp_client_addr))#璁剧疆杩炴帴濂楁帴瀛椾负闈為樆濉炵殑妯″紡骞跺皢杩炴帴鐨勫鎺ュ瓧鏀惧叆鍒扮洃鍚垪琛ㄤ腑#TCP鎺ュ彈鏁版嵁while True:recvbuf = tcp_client_socket.recv(128)print(recvbuf)global speedspeed = 30#TCP鎺ュ彈鏁版嵁if recvbuf == b"$0,0,0,0,0,0,1,0,0,0#": # speed upspeed += 5print ("Car Speed is : %d", speed)if speed > 100:speed = 100 #灏忚溅鍔犻€?            elif recvbuf == b"$0,0,0,0,0,0,2,0,0,0#": # speed downspeed -= 5if speed < 10:  #灏忚溅鍑忛€?                    speed= 10  print ("Car Speed is : %d", speed)elif recvbuf == b"$1,0,0,0,0,0,0,0,0,0#":carMove.goForward()elif recvbuf == b"$2,0,0,0,0,0,0,0,0,0#":carMove.goBackward()elif recvbuf == b"$3,0,0,0,0,0,0,0,0,0#":carMove.turnLeft()elif recvbuf == b"$4,0,0,0,0,0,0,0,0,0#":carMove.turnRight()            elif recvbuf == b"$0,0,0,0,0,0,0,0,0,0#":                    carMove.motorStop()  else:breaktcp_client_socket.close()print ("Start recv over!")tcp_client_socket.close()
except KeyboardInterrupt:passGPIO.cleanup()

调用的小车程序 carMove.py

import  RPi.GPIO as GPIO
import time
import tty,sys,select,termiosrun_car  = '1'  #鎸夐敭鍓?back_car = '2'  #鎸夐敭鍚?left_car = '3'  #鎸夐敭宸?right_car = '4' #鎸夐敭鍙?stop_car = '0'  #鎸夐敭鍋? speed = 20#璁剧疆GPIO鍙d负BCM缂栫爜鏂瑰紡
GPIO.setmode(GPIO.BCM)#蹇界暐璀﹀憡淇℃伅
GPIO.setwarnings(False)# AIN涓哄乏鍓嶈疆
P1_PWMA, P1_AIN1, P1_AIN2 = 26, 13,19
# AIN涓哄乏鍚庤疆
P1_PWMA1, P1_AIN11, P1_AIN22 = 17, 22, 27# BIN涓哄彸鍓嶈疆
P2_PWMB, P2_BIN1, P2_BIN2 = 25, 24, 23
# BIN涓哄彸鍚庤疆
P2_PWMB1, P2_BIN11, P2_BIN22 = 16, 21, 20#宸︿晶杞瓙P1 = [P1_PWMA, P1_AIN1, P1_AIN2,P1_PWMA1, P1_AIN11, P1_AIN22]#鍙充晶杞瓙
P2 = [P2_PWMB, P2_BIN1, P2_BIN2,P2_PWMB1, P2_BIN11, P2_BIN22]#PWM浣跨敤10000Hz鐨勯鐜囨晥鏋滆緝濂斤紝杈撳叆鐨勮皟閫熷尯闂翠负0锝?00,浣嗚皟閫熶负5宸﹀彸鏃朵篃鏄彲浠ョЩ鍔↙_Up_Motor= GPIO.PWM(P1_PWMA,10000)GPIO.setup(P1,GPIO.OUT)
GPIO.setup(P2,GPIO.OUT)
L_Up_Motor = GPIO.PWM(P1_PWMA,10000)
L_Up_Motor.start(0)
L_Down_Motor = GPIO.PWM(P1_PWMA1,10000)
L_Down_Motor.start(0)
R_Up_Motor= GPIO.PWM(P2_PWMB,10000)R_Up_Motor.start(0) R_Down_Motor = GPIO.PWM(P2_PWMB1,10000)
R_Down_Motor.start(0)# A 0 1 姝?   A1 1 0 姝?      B 0  1 姝?  B1  1  0姝? 
#宸﹁浆 A 0 0 鍙? A1 0 1 鍙?        B 0  1    B1   0    0    zuozhuan:zuocez fanzhuan, youce zhengzhuan
Diretion = [[0,0, 0,0, 0,0, 0,0],[0,1, 1,0, 0,1, 1,0],[1,0, 0,1, 1,0, 0,1],[1,0, 0,1, 0,1, 1,0],  [0,1, 1,0, 1,0, 0,1]  ]
#瀹氫箟鏂瑰悜  def DIRETION(diretion):GPIO.output(P1_AIN1,diretion[0]) #AIN1GPIO.output(P1_AIN2,diretion[1]) #AIN2   P1_AIN2涓哄乏鍓嶈疆GPIO.output(P1_AIN11,diretion[2]) #AIN2   P1_AIN2涓哄乏鍚庤疆GPIO.output(P1_AIN22,diretion[3]) #AIN1GPIO.output(P2_BIN1,diretion[4]) #BIN2  BIN涓哄彸鍓嶈疆 GPIO.output(P2_BIN2,diretion[5]) #BIN1GPIO.output(P2_BIN11,diretion[6]) #BIN1     GPIO.output(P2_BIN22,diretion[7]) #BIN2  BIN涓哄彸鍚庤疆 def reset():GPIO.output(13, GPIO.LOW)GPIO.output(19, GPIO.LOW)GPIO.output(22, GPIO.LOW)GPIO.output(27, GPIO.LOW)GPIO.output(24, GPIO.LOW)GPIO.output(23, GPIO.LOW)GPIO.output(21, GPIO.LOW)GPIO.output(20, GPIO.LOW)#     A = {'s': 0, 'w':1, 'b':2, 'l':3,'r':4}def goForward( ):DIRETION(Diretion[1])L_Up_Motor.ChangeDutyCycle(speed)L_Down_Motor.ChangeDutyCycle(speed)R_Up_Motor.ChangeDutyCycle(speed)R_Down_Motor.ChangeDutyCycle(speed)def goBackward( ):DIRETION(Diretion[2])L_Up_Motor.ChangeDutyCycle(speed)L_Down_Motor.ChangeDutyCycle(speed)R_Up_Motor.ChangeDutyCycle(speed)R_Down_Motor.ChangeDutyCycle(speed)def turnLeft( ):DIRETION(Diretion[3])L_Up_Motor.ChangeDutyCycle(speed)L_Down_Motor.ChangeDutyCycle(speed)R_Up_Motor.ChangeDutyCycle(speed)R_Down_Motor.ChangeDutyCycle(speed)def turnRight( ):DIRETION(Diretion[4])L_Up_Motor.ChangeDutyCycle(speed)L_Down_Motor.ChangeDutyCycle(speed)R_Up_Motor.ChangeDutyCycle(speed)R_Down_Motor.ChangeDutyCycle(speed)def motorStop( ):DIRETION(Diretion[0])L_Up_Motor.ChangeDutyCycle(0)L_Down_Motor.ChangeDutyCycle(0)R_Up_Motor.ChangeDutyCycle(0)R_Down_Motor.ChangeDutyCycle(0)''' 
try:goForward()time.sleep(2)goBackward()time.sleep(2)turnLeft()time.sleep(2)turnRight()time.sleep(2)time.sleep(1)reset()GPIO.cleanup()except KeyboardInterrupt:pass
'''


文章转载自:

http://PK36fg0C.skdrp.cn
http://UghkaIwq.skdrp.cn
http://ZDrLBKSt.skdrp.cn
http://H5p3xhGH.skdrp.cn
http://LobIfWoJ.skdrp.cn
http://Tqe7A6J1.skdrp.cn
http://4Jn9G1iv.skdrp.cn
http://Kf1EuK7P.skdrp.cn
http://z9d0TDVc.skdrp.cn
http://cUnrQ4bt.skdrp.cn
http://kiJXPQHH.skdrp.cn
http://E6dPNP05.skdrp.cn
http://hQ4s9H9L.skdrp.cn
http://ZHctK6NU.skdrp.cn
http://nbdNiQW6.skdrp.cn
http://c5hcWCUl.skdrp.cn
http://7KOg6CKJ.skdrp.cn
http://QqCroF9k.skdrp.cn
http://sBthvbMa.skdrp.cn
http://6Tela2W1.skdrp.cn
http://1SK2vE6z.skdrp.cn
http://KnC5HCC0.skdrp.cn
http://ej97Qyv2.skdrp.cn
http://Ts3PI8Ay.skdrp.cn
http://FXvyJWZW.skdrp.cn
http://XVyUPSag.skdrp.cn
http://2vshUq16.skdrp.cn
http://ZqgV9bHx.skdrp.cn
http://8BjJgWMr.skdrp.cn
http://Qpg3Vzib.skdrp.cn
http://www.dtcms.com/a/226514.html

相关文章:

  • 开发的几种格式,TCP的十个重要机制
  • Figma 与 Cursor 深度集成的完整解决方案
  • 从【0-1的HTML】第1篇:HTML简介
  • SQL 执行顺序详解
  • PostgreSQL pgrowlocks 扩展
  • LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 上
  • SQL: 窗口滑动(Sliding Window)
  • C++前缀和介绍
  • MyBatisPlus--条件构造器及自定义SQL详解
  • Linux(信号)
  • PostgreSQL的扩展 insert_username
  • 数据库系统概论(十四)详细讲解SQL中空值的处理
  • 连接天际,守护通信—5G航天时代的电流守卫与浪涌盾牌
  • Caliper压力测试
  • vue · 路由传参query和params
  • Codeforces Round 1028 (Div. 2)(A-D)
  • 深入理解 Linux 文件系统与日志文件分析
  • C++ list代码练习、set基础概念、set对象创建、set大小操作
  • 从 AMQP 到 RabbitMQ:核心组件设计与工作原理(二)
  • 阿里云国际站,如何通过代理商邀请的链接注册账号
  • leetcode93.复原IP地址:回溯算法中段控制与前导零处理的深度解析
  • leetcode hot100 二叉树(二)
  • 【黑马程序员uniapp】项目配置、请求函数封装
  • 如何使用DAXStudio将PowerBI与Excel连接
  • 天机学堂-分页查询
  • 从线性方程组角度理解公式 s=n−r(3E−A)
  • 【头歌实验】Keras机器翻译实战
  • C++.双指针算法(1.1目录修正)
  • nssctf第二题[SWPUCTF 2021 新生赛]简简单单的逻辑
  • Redis-6.2.9 cluster集群部署和扩容缩容