From aadc0af3cecba6275a5be8105a4e85aac61e1e46 Mon Sep 17 00:00:00 2001 From: zyp <1721777650@qq.com> Date: Thu, 31 Oct 2024 14:46:51 +0800 Subject: [PATCH 1/3] update log --- log.txt | 7 +------ rizhi.txt | 2 -- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/log.txt b/log.txt index 5fb4871..8b13789 100644 --- a/log.txt +++ b/log.txt @@ -1,6 +1 @@ -guard df123qwerty 2023-04-24-10-13-55 -guard df123qwerty 2023-04-24-10-14-31 -guard df123qwerty 2023-04-24-10-16-50 -guard df123qwerty 2023-04-24-10-17-04 -guard df123qwerty 2023-04-24-10-17-05 -guard df123qwerty 2023-04-24-10-17-07 + diff --git a/rizhi.txt b/rizhi.txt index 0e47acb..704a76c 100644 --- a/rizhi.txt +++ b/rizhi.txt @@ -1,5 +1,3 @@ -qinziyao 2023-04-24-10-13-53 -admin 2023-04-24-10-19-08 zyp 2024-10-15-17-08-52 zyp 2024-10-15-17-21-31 zyp 2024-10-15-17-25-47 From 0aac17f2cb67f18218dff9ed3c04c24ac81c73a6 Mon Sep 17 00:00:00 2001 From: zyp <1721777650@qq.com> Date: Thu, 31 Oct 2024 20:17:35 +0800 Subject: [PATCH 2/3] test access --- data.db | Bin 61440 -> 69632 bytes log.txt | 8 ++++++- node_modules/.package-lock.json | 11 ++++++++- package-lock.json | 15 ++++++++++++ package.json | 1 + routes/index.js | 39 ++++++++++++++++++++++++++++---- users/admin/decode.py | 6 ++--- users/admin/log.txt | 17 +------------- users/admin/rizhi.txt | 38 +------------------------------ 9 files changed, 72 insertions(+), 63 deletions(-) diff --git a/data.db b/data.db index 3b0db783fef6e5c452b84976ee3cdfe6a07089fc..148ff0d3f43ee3537f3773e62a72505fe991c744 100644 GIT binary patch delta 360 zcmZp8z}&EaWrDO|D+2?AAP~bq^h6zFo>m4u?+Ls-QVas@pC@L^vT($*f8IDTon0wI zfn8iskg?IaBrz!`H8~?WL(nj8W-fH zp9Zu$9cZ^DzXCrS-v^-0m-r@sSm!y}e7&B4FdHksG{3k}PJX&xNkxg#K!vAVBpF=4B#05eu{NMS%Z!Yzp7$9NJ!2gW@ z4F3lHX+T3$`F;7#`4#xt_&xxQy~H>9!#dB&*6VeIMA=yRrG>?fa`MylN-9ds%uFYj PuWw>9G1&ZjJ*xu%AsRh< diff --git a/log.txt b/log.txt index 8b13789..c7ec2dd 100644 --- a/log.txt +++ b/log.txt @@ -1 +1,7 @@ - +admin - 2024-10-31T08:18:22.560Z +zyp - 2024-10-31T08:18:32.459Z +admin - 2024-10-31T08:28:40.653Z +zyp - 2024-10-31T08:28:46.935Z +chenjk - 2024-10-31T09:41:40.969Z +chenjk - 2024-10-31T09:41:52.294Z +chenjk - 2024-10-31T09:42:24.196Z diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 89990a1..233607c 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1,7 +1,7 @@ { "name": "ui", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "node_modules/@mapbox/node-pre-gyp": { @@ -1553,6 +1553,15 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", diff --git a/package-lock.json b/package-lock.json index d248c1a..435f534 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "express": "~4.16.1", "express-session": "^1.17.0", "http-errors": "~1.6.3", + "moment": "^2.30.1", "morgan": "~1.9.1", "multer": "^1.4.4", "nodemailer": "^6.7.3", @@ -1574,6 +1575,15 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -3897,6 +3907,11 @@ "minimist": "^1.2.5" } }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", diff --git a/package.json b/package.json index 368d989..7abb205 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "express": "~4.16.1", "express-session": "^1.17.0", "http-errors": "~1.6.3", + "moment": "^2.30.1", "morgan": "~1.9.1", "multer": "^1.4.4", "nodemailer": "^6.7.3", diff --git a/routes/index.js b/routes/index.js index 4506ab2..44ca3ee 100644 --- a/routes/index.js +++ b/routes/index.js @@ -13,6 +13,9 @@ var jsonParser = bodyParser.json(); var urlencodedParser = bodyParser.urlencoded({ extended: false }) + + +const moment = require('moment'); // 使用 moment.js 来方便地处理时间格式 //桌面latest版 function execute(cmd){ execSync(cmd,{cwd:'C:\\Users\\17217\\Desktop\\english\\python'},function(error, stdout, stderr){ @@ -158,6 +161,28 @@ router.get('/download', function (req, res, next) { }); router.post('/login', urlencodedParser, function (req, res, next) { var name = req.body.name; + // 获取当前时间并格式化 + const now = new Date(); + const loginTime = now.toISOString(); // 使用 ISO 格式的时间字符串 + + // 在 name 获取后,添加文件操作代码 + //const fs = require('fs'); + const path = 'C:/Users/17217/Desktop/teamwk123/log.txt'; // 文件路径 + + // 将 name 和 loginTime 写入文件,追加模式 + fs.appendFile(path, `${name} - ${loginTime}\n`, function (err) { + if (err) { + console.error('写入文件时发生错误:', err); + // 你可以选择返回错误响应或者继续执行 + return; + } + console.log('用户名和登录时间已写入文件:', name, loginTime); + }); + + + + + var pwd = req.body.pwd; var sqlite3 = require('sqlite3').verbose() var sql = "SELECT * FROM users where username='" + name + "' and password='" + pwd+"'" @@ -168,7 +193,11 @@ router.post('/login', urlencodedParser, function (req, res, next) { req.session.error = "用户名或密码错误,请重新输入!"; res.redirect('login'); } else { - username = name + username = name; // 使用 const 来定义变量 + + + + // var exec = require('child_process').exec; // exec(`python C:/Users/17217/Desktop/english/users/admin/log.py `+username) // db.run("delete from "+name,function(){ //每次先将表信息清空再重新读取文件夹里面的文件信息 @@ -315,7 +344,7 @@ router.post('/upload', multer({dest:'./users/'}).any(),function(req, res){ }) // execute("python D:/99/ui_ref/users/admin/a.py") var exec = require('child_process').exec; - exec(`python C:/Users/17217/Desktop/english/users/admin/decode.py`) + exec(`python C:/Users/17217/Desktop/teamwk123/users/admin/decode.py`) res.send('上传成功,点击←返回上一页'); } }) @@ -329,7 +358,7 @@ router.post('/execution',function(req, res){ router.post("/getit", function (data, res) { - fs.readFile("C:\\Users\\17217\\Desktop\\english\\result.txt", 'utf-8', (err, data) => { + fs.readFile("C:\\Users\\17217\\Desktop\\teamwk123\\result.txt", 'utf-8', (err, data) => { if (err) { console.error(err); return; @@ -341,7 +370,7 @@ router.post("/getit", function (data, res) { }) router.post("/histroy", function (data, res) { - fs.readFile("C:\\Users\\17217\\Desktop\\english\\log.txt", 'utf-8', (err, data) => { + fs.readFile("C:\\Users\\17217\\Desktop\\teamwk123\\log.txt", 'utf-8', (err, data) => { if (err) { console.error(err); return; @@ -353,7 +382,7 @@ router.post("/histroy", function (data, res) { }) router.post("/log", function (data, res) { - fs.readFile("C:\\Users\\17217\\Desktop\\english\\rizhi.txt", 'utf-8', (err, data) => { + fs.readFile("C:\\Users\\17217\\Desktop\\teamwk123\\rizhi.txt", 'utf-8', (err, data) => { if (err) { console.error(err); return; diff --git a/users/admin/decode.py b/users/admin/decode.py index e4b5144..9f8be2f 100644 --- a/users/admin/decode.py +++ b/users/admin/decode.py @@ -10,17 +10,17 @@ def get_public_key_from_file(filepath): key_file.read(), ) return public_key -public_key = get_public_key_from_file('D:/99/ui_ref/users/admin/public.pem') +public_key = get_public_key_from_file('C:/Users/17217/Desktop/english/users/admin/public.pem') # 将明文进行RSA加密 from time import strftime import requests -a = requests.post("http://127.0.0.1:5000/qr", files={"qr_pic": open("D:/99/ui_ref/users/admin/qrcode.png", "rb")}) +a = requests.post("http://127.0.0.1:5000/qr", files={"qr_pic": open("C:/Users/17217/Desktop/english/users/admin/qrcode.png", "rb")}) print(a.text) b = r = requests.post("http://127.0.0.1:5000/match", data={"pattern": "df123qwerty"}) print(b.text) -file = open('D:/99/ui_ref/users/admin/result.txt','w') +file = open('C:/Users/17217/Desktop/english/result.txt','w') plaintext0 = a.text plaintext = plaintext0.encode('utf-8') ciphertext = public_key.encrypt( diff --git a/users/admin/log.txt b/users/admin/log.txt index 9960ac7..8b13789 100644 --- a/users/admin/log.txt +++ b/users/admin/log.txt @@ -1,16 +1 @@ -guard df123qwerty 2023-04-18-09-45-13 -guard df123qwerty 2023-04-18-09-46-50 -guard df123qwerty 2023-04-18-09-46-52 -guard df123qwerty 2023-04-18-10-16-00 -guard df123qwerty 2023-04-18-10-20-29 -guard Null 2023-04-18-10-28-11 -guard df123qwerty 2023-04-18-15-01-55 -guard df123qwerty 2023-04-18-18-21-13 -guard df123qwerty 2023-04-18-21-56-05 -guard df123qwerty 2023-04-18-22-00-38 -guard df123qwerty 2023-04-19-08-47-19 -guard df123qwerty 2023-04-19-09-03-15 -guard df123qwerty 2023-04-19-09-48-46 -guard df123qwerty 2023-04-19-10-07-22 -guard df123qwerty 2023-04-19-10-54-03 -guard df123qwerty 2023-04-19-10-54-22 + diff --git a/users/admin/rizhi.txt b/users/admin/rizhi.txt index d869c72..8b13789 100644 --- a/users/admin/rizhi.txt +++ b/users/admin/rizhi.txt @@ -1,37 +1 @@ -qinziyao 2023-04-18-21-36-05 -admin 2023-04-18-21-36-27 -xuchen 2023-04-18-21-42-33 -admin 2023-04-18-21-42-47 -admin 2023-04-18-21-58-14 -guard 2023-04-18-21-58-38 -qinziyao 2023-04-18-22-31-50 -qinziyao 2023-04-18-22-54-14 -fighter1 2023-04-19-08-25-10 -fighter1 2023-04-19-08-38-37 -admin 2023-04-19-08-42-53 -guard 2023-04-19-08-46-52 -admin 2023-04-19-08-48-23 -fighter2 2023-04-19-09-02-35 -admin 2023-04-19-09-02-57 -fighter2 2023-04-19-09-04-44 -admin 2023-04-19-09-05-31 -fighter2 2023-04-19-09-05-47 -fighter1 2023-04-19-09-05-52 -qinziyao 2023-04-19-09-42-50 -guard 2023-04-19-10-04-46 -qinziyao 2023-04-19-10-06-53 -admin 2023-04-19-10-08-09 -fighter1 2023-04-19-10-11-27 -flying_pigeon 2023-04-19-10-18-42 -guard 2023-04-19-10-53-14 -qinziyao 2023-04-21-23-36-47 -admin 2023-04-21-23-57-01 -tester 2023-04-23-08-21-17 -tester 2023-04-23-08-26-06 -qinziyao 2023-04-23-11-28-31 -admin 2023-04-23-15-33-25 -admin 2023-04-23-17-12-05 -qinziyao 2023-04-23-20-24-04 -admin 2023-04-23-20-25-27 -halo 2023-04-23-20-42-59 -admin 2023-04-23-20-48-24 + From 08cf1dea0d7a2b642cc346b84bb8a490d93d7e62 Mon Sep 17 00:00:00 2001 From: zyp <1721777650@qq.com> Date: Wed, 13 Nov 2024 08:56:06 +0800 Subject: [PATCH 3/3] middle term text --- carsrun/__pycache__/car.cpython-311.pyc | Bin 10147 -> 6592 bytes carsrun/appCam.py | 2 +- carsrun/apptest.py | 65 ++++--- carsrun/captured_photo.jpg | Bin 0 -> 62900 bytes carsrun/index-t1.html | 218 ++++++++++++++++++++++++ carsrun/templates/appCam1.py | 171 +++++++++++++++++++ carsrun/templates/index-t1.html | 218 ++++++++++++++++++++++++ 7 files changed, 648 insertions(+), 26 deletions(-) create mode 100644 carsrun/captured_photo.jpg create mode 100644 carsrun/index-t1.html create mode 100644 carsrun/templates/appCam1.py create mode 100644 carsrun/templates/index-t1.html diff --git a/carsrun/__pycache__/car.cpython-311.pyc b/carsrun/__pycache__/car.cpython-311.pyc index 196df9554ac3cf023e516c4c4cc43622e1a45f0f..3141b7336f3601409123f964fe612346d4373745 100644 GIT binary patch literal 6592 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 literal 10147 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 + + + + + + + Live Video Based on Flask + + + + +
实时视频流
+ +

小车控制界面

+ + 小车控制 + + + +
+ + +
+
+ + +
+
+ + +
+ + + +
+ +
+ +
+ + +
+ + + + + + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carsrun/templates/appCam1.py b/carsrun/templates/appCam1.py new file mode 100644 index 0000000..28e2255 --- /dev/null +++ b/carsrun/templates/appCam1.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# appCam.py +# based on tutorial ==> https://blog.miguelgrinberg.com/post/video-streaming-with-flask +# PiCam Local Web Server with Flask +# MJRoBot.org 19Jan18 + +from flask import Flask, render_template, Response, redirect, url_for, send_file, jsonify, request + +# Raspberry Pi camera module (requires picamera package) +#from camera_pi import Camera +from picamera2 import Picamera2 +import os +import time +from gevent import pywsgi +from car import CAR +#from PiCamera_H264_Server import stream +import threading +import cv2 +app = Flask(__name__, static_url_path='') +# 照片保存路径 +PHOTO_PATH = "photo.jpg" + +def gen_frames(): # generate frame by frame from camera + picam2 = Picamera2() + picam2.configure(picam2.create_video_configuration(main={"format": 'XRGB8888', "size": (640, 480)})) + picam2.start() + while True: + # Capture frame-by-frame + frame = picam2.capture_array() # read the camera frame + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + ret, buffer = cv2.imencode('.jpg', frame) + frame = buffer.tobytes() + yield (b'--frame\r\n' + b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') # concat frame one by one and show result + + +@app.route('/') +def index(): + return render_template('index-t.html') + +@app.route('/video_feed') +def video_feed(): + #Video streaming route. Put this in the src attribute of an img tag + return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame') +#--------------------------------------------------------------------------------- +@app.route('/take_photo') +def take_photo(): + picam2 = Picamera2() + picam2.configure(picam2.create_video_configuration(main={"format": 'XRGB8888', "size": (640, 480)})) + picam2.start() + frame = picam2.capture_array() # Capture a single frame + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + cv2.imwrite(PHOTO_PATH, frame) # Save the frame as a JPEG file + + return send_file(PHOTO_PATH, as_attachment=True) # Send the file to download +#--------------------------------------------------------------------------------------- + +# def gen(camera): +# """Video streaming generator function.""" +# while True: +# frame = camera.get_frame() +# yield (b'--frame\r\n' +# b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') + +# @app.route('/capture') +# def capture(): +# pic = open("qrcode.png", "wb") +# frame = Camera().get_frame() +# pic.write(frame) +# return Response(b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n', +# mimetype='multipart/x-mixed-replace; boundary=frame') +# #return send_file("qrcode.png", mimetype='image/png') +# #return redirect(url_for('index')) + +# @app.route('/video_feed') +# def video_feed(): +# """Video streaming route. Put this in the src attribute of an img tag.""" +# return Response(gen(Camera()), +# mimetype='multipart/x-mixed-replace; boundary=frame') +car = CAR() +@app.route('/control/') +def control_index(): + word = """指令:\n + /stop(/Q): 小车停止运动\n + /forward(/W): 小车开始运动\n + /back(/S): 小车向后运动\n + /left(/A): 小车向左运动\n + /right(/D): 小车向右运动\n""" + print(word) + return word + +# def execute_forward_function(): +# url = "http://192.168.185.242:80/send_command" # 示例URL,实际使用时需要替换为正确的服务器地址 +# data = {"command": 'base -c {"T":1,"L":0.5,"R":0.5}'} # 请求体数据 + +# # 发送请求并打印返回结果 +# try: +# response = request.post(url, data=data) +# print(response.text) # 打印服务器返回的内容 +# except request.exceptions.RequestException as e: +# print(f"请求发生错误: {e}") +# print("执行前进功能") +# # 返回一些结果 +# return "前进功能已执行" + +# @app.route('/control/forward', methods=['GET']) +# def control_forward(): +# try: +# # 获取前端发送的数据 +# data = request.args + +# # 调试输出接收到的数据 +# print("接收到的数据:", data) + +# # 执行你的函数 +# result = execute_forward_function() # 确保这个函数是可以被调用的,如果有必要打印它的返回值 + +# # 返回JSON响应, result 需要确保是可json化的对象 +# return jsonify({ +# "resultCode": 200, +# "message": "请求成功", +# "data": result +# }) +# except Exception as e: +# print(f"发生错误: {e}") # 打印异常 +# return jsonify({"resultCode": 500, "message": "内部服务器错误"}), 500 # 返回500错误 + + + +@app.route('/control/') +def fun(info): + if hasattr(car, info): + getattr(car, info)() + return 'Run: '+info+'\n' + else: + return 'Error: '+info+' not be defined\n' + +# 新增路由处理文本传输功能 +@app.route('/send_text', methods=['POST']) +def send_text(): + try: + # 获取前端发送的数据 + data = request.form + ip = data.get('ip') + port = int(data.get('port')) + text = data.get('text') + + # 构建URL + url = "http://{}:{}/send_text".format(ip, port) + + # 发送请求 + response = requests.post(url, data={'text': text}) + + # 返回响应 + return jsonify({ + "resultCode": 200, + "message": "请求成功", + "data": response.text + }) + except Exception as e: + print(f"error: {e}") + return jsonify({"resultCode": 500, "message": "内部服务器错误"}), 500 + +if __name__ == '__main__': + app.run(host='0.0.0.0', port =80, debug=True, threaded=True) + # t = threading.Thread(target=stream) + # t.start() + # server = pywsgi.WSGIServer(('0.0.0.0', 80), app) + # server.serve_forever() diff --git a/carsrun/templates/index-t1.html b/carsrun/templates/index-t1.html new file mode 100644 index 0000000..901f62b --- /dev/null +++ b/carsrun/templates/index-t1.html @@ -0,0 +1,218 @@ + + + + + + + + Live Video Based on Flask + + + + +
实时视频流
+ +

小车控制界面

+ + 小车控制 + + + +
+ + +
+
+ + +
+
+ + +
+ + + +
+ +
+ +
+ + +
+ + + + + + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file