trainControl.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import time
  2. import serial
  3. import serial.tools.list_ports
  4. from flask import Flask, request
  5. import requests
  6. from threading import Thread
  7. app = Flask(__name__)
  8. # 火车控制变量
  9. ser = None
  10. #串口打开
  11. def openSer():
  12. ser = serial.Serial("COM5", 9600, timeout=0.5)
  13. # 字节大小
  14. ser.bytesize = 8
  15. # 无校验
  16. ser.parity = serial.PARITY_NONE
  17. # 停止位
  18. ser.stopbits = 1
  19. print("已连接端口:" + str(ser.name) + "\n")
  20. return ser
  21. # 读取串口消息
  22. def recv(serial):
  23. while True:
  24. data = serial.read_all()
  25. if data == '':
  26. continue
  27. else:
  28. break
  29. sleep(0.02)
  30. return data
  31. step = 0
  32. # 左右转向的指令
  33. TO_L = b'\xc0\xc1\xed\xa5'
  34. TO_R = b'\xc0\xc2\xed\xa5'
  35. def start(ser):
  36. print("火车上报监听开启")
  37. while True:
  38. data = recv(ser)
  39. print("火车上报位置信息为 : ", data)
  40. if data == b'\xc0\x1c\xed\xc0\xb1\xed' or data == b'\xc0\xb1\xed':
  41. print("火车在左上报")
  42. res = requests.get("http://127.0.0.1:8082/api/train/updateTrainLocal?local=l")
  43. print(res.text)
  44. if data == b'\xc0,\xed\xc0\xb2\xed' or data == b'\xc0\xb2\xed':
  45. print("火车在右上报")
  46. res = requests.get("http://127.0.0.1:8082/api/train/updateTrainLocal?local=r")
  47. print(res.text)
  48. if data == b'\xc0\xb1\xedZ\xa5':
  49. res = requests.get("http://127.0.0.1:8082/api/train/updateTrainLocal?local=l")
  50. print(res.text)
  51. print("火车复位上报")
  52. time.sleep(0.1)
  53. #执行运动
  54. @app.route('/train/<action>')
  55. def moving(action):
  56. print(action)
  57. global ser
  58. if action == "2l":
  59. # ser = openSer()
  60. ser.write(TO_L)
  61. if action == "2r":
  62. # ser = openSer()
  63. ser.write(TO_R)
  64. return "success"
  65. @app.route('/start')
  66. def startListing():
  67. global ser
  68. ser = openSer()
  69. t = Thread(target=start, args=(ser,))
  70. t.start()
  71. return "success"
  72. if __name__ == '__main__':
  73. app.run(host='0.0.0.0', port=9000, debug=True)