Ik heb op internet een programma gevonden waar je via een webpagina op 2 knoppen kunt drukken om dan een actie te doen met python.
Om het programma wat netter te maken wil ik dit in een subprogramma plaatsen en via een hoofdprogramma de data verwerken als er op een knop gedrukt wordt.
Ik heb al vanalles geprobeerd om de data naar het hoofdprogramma te krijgen met bv globale variabelen en heb ook al iets met threading gemaakt om het een beetje beter te snappen, maar kom er nog niet uit.
Dit is het programma.
Om het programma wat netter te maken wil ik dit in een subprogramma plaatsen en via een hoofdprogramma de data verwerken als er op een knop gedrukt wordt.
Ik heb al vanalles geprobeerd om de data naar het hoofdprogramma te krijgen met bv globale variabelen en heb ook al iets met threading gemaakt om het een beetje beter te snappen, maar kom er nog niet uit.
Dit is het programma.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
| #import RPi.GPIO as GPIO
import os
from http.server import BaseHTTPRequestHandler, HTTPServer
host_name = '192.168.2.19' # Change this to your Raspberry Pi IP address
host_port = 8001
class MyServer(BaseHTTPRequestHandler):
""" A special implementation of BaseHTTPRequestHander for reading data from
and control GPIO of a Raspberry Pi
"""
def do_HEAD(self):
""" do_HEAD() can be tested use curl command
'curl -I http://server-ip-address:port'
"""
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def _redirect(self, path):
self.send_response(303)
self.send_header('Content-type', 'text/html')
self.send_header('Location', path)
self.end_headers()
def do_GET(self):
""" do_GET() can be tested using curl command
'curl http://server-ip-address:port'
"""
html = '''
<html>
<body style="width:960px; margin: 20px auto;">
<h1>Welcome to my Raspberry Pi</h1>
<p>Current GPU temperature is {}</p>
<form action="/" method="POST">
Turn LED :
<input type="submit" name="submit" value="On">
<input type="submit" name="submit" value="Off">
</form>
</body>
</html>
'''
temp = os.popen("/opt/vc/bin/vcgencmd measure_temp").read()
self.do_HEAD()
self.wfile.write(html.format(temp[5:]).encode("utf-8"))
def do_POST(self):
""" do_POST() can be tested using curl command
'curl -d "submit=On" http://server-ip-address:port'
"""
content_length = int(self.headers['Content-Length']) # Get the size of data
post_data = self.rfile.read(content_length).decode("utf-8") # Get the data
post_data = post_data.split("=")[1] # Only keep the value
# GPIO setup
#GPIO.setmode(GPIO.BOARD)
#GPIO.setwarnings(False)
#GPIO.setup(5,GPIO.OUT)
if post_data == 'On':
#GPIO.output(5, GPIO.HIGH)
print("on")
else:
#GPIO.output(5, GPIO.LOW)
print("off")
print("LED is {}".format(post_data))
self._redirect('/') # Redirect back to the root url
def init():
http_server = HTTPServer((host_name, host_port), MyServer)
print("Server Starts - %s:%s" % (host_name, host_port))
def repeat_server():
http_server = HTTPServer((host_name, host_port), MyServer)
print("Server Starts - %s:%s" % (host_name, host_port))
try:
http_server.serve_forever()
except KeyboardInterrupt:
http_server.server_close()
if __name__ == '__main__':
#def start_webserver():
http_server = HTTPServer((host_name, host_port), MyServer)
print("Server Starts - %s:%s" % (host_name, host_port))
try:
http_server.serve_forever()
except KeyboardInterrupt:
http_server.server_close() |