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() |