Je dois réaliser un robot pour un projet d'école d'ingénieur. Ainsi, celui ci disposerait de 2 cartes, une carte arduino pour contrôler les différents moteurs et une Raspberry pour la caméra frontale.
Ma question vient alors de comment est ce que je peut centraliser les informations hors des cartes.
En effet, actuellement j'ai ma Raspberry qui diffuse un flux video sur une page HTML a l'aide d'un code python et un programme Unity qui peut théoriquement contrôler les moteurs a distance.
J'aimerais donc savoir si mon programme Unity pouvait récupérer mon flux vidéo émit par ce code :
import io
import picamera
import logging
import socketserver
from threading import Condition
from http import server
PAGE="""\
<html>
<head>
<SCRIPT LANGUAGE="JavaScript" SRC="keyboard.js"></SCRIPT>
<title>Raspberry Pi - Surveillance Camera</title>
</head>
<body>
<center><h1>Camera du robot</h1></center>
<center><img src="stream.mjpg" width="640" height="480"></center>
<script language="javascript"> document.onkeydown = applyKey; </script>
</body>
</html>
"""
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = io.BytesIO()
self.condition = Condition()
def write(self, buf):
if buf.startswith(b'\xff\xd8'):
# New frame, copy the existing buffer's content and notify all
# clients it's available
self.buffer.truncate()
with self.condition:
self.frame = self.buffer.getvalue()
self.condition.notify_all()
self.buffer.seek(0)
return self.buffer.write(buf)
class StreamingHandler(server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.send_response(301)
self.send_header('Location', '/index.html')
self.end_headers()
elif self.path == '/index.html':
content = PAGE.encode('utf-8')
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.send_header('Content-Length', len(content))
self.end_headers()
self.wfile.write(content)
elif self.path == '/stream.mjpg':
self.send_response(200)
self.send_header('Age', 0)
self.send_header('Cache-Control', 'no-cache, private')
self.send_header('Pragma', 'no-cache')
self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
self.end_headers()
try:
while True:
with output.condition:
output.condition.wait()
frame = output.frame
self.wfile.write(b'--FRAME\r\n')
self.send_header('Content-Type', 'image/jpeg')
self.send_header('Content-Length', len(frame))
self.end_headers()
self.wfile.write(frame)
self.wfile.write(b'\r\n')
except Exception as e:
logging.warning(
'Removed streaming client %s: %s',
self.client_address, str(e))
else:
self.send_error(404)
self.end_headers()
class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
allow_reuse_address = True
daemon_threads = True
with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
output = StreamingOutput()
#Uncomment the next line to change your Pi's Camera rotation (in degrees)
#camera.rotation = 90
camera.start_recording(output, format='mjpeg')
try:
address = ('', 8000)
server = StreamingServer(address, StreamingHandler)
server.serve_forever()
finally:
camera.stop_recording()
Sinon est-il possible de partir de ce code pour faire une page html qui réagit aux appuis sur le clavier ?
PS : oui en effet j'ai déjà essayé quelque chose dans cette direction avec le keyboard.js
Je vous remercie sincérement
- Edité par Mechaick 1 avril 2019 à 8:30:32
Arduino, Raspberry Robot
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.