diff --git a/Code/Python_Code/26.1.1_WebIO/WebIO.py b/Code/Python_Code/26.1.1_WebIO/WebIO.py new file mode 100644 index 0000000..034dcd6 --- /dev/null +++ b/Code/Python_Code/26.1.1_WebIO/WebIO.py @@ -0,0 +1,69 @@ +import RPi.GPIO as GPIO +import os +from http.server import BaseHTTPRequestHandler, HTTPServer + +host_name = '192.168.1.112' # Change this to your Raspberry Pi IP address +host_port = 8000 + +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 = ''' + + +

Welcome to my Raspberry Pi

+

Current GPU temperature is {}

+
+ Turn LED : + + +
+ + + ''' + 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.BCM) + GPIO.setwarnings(False) + GPIO.setup(17,GPIO.OUT) # You can also choose to use other GPIO + if post_data == 'On': + GPIO.output(17, GPIO.HIGH) + else: + GPIO.output(17, GPIO.LOW) + print("LED is {}".format(post_data)) + self._redirect('/') # Redirect back to the root url + +if __name__ == '__main__': + 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() + diff --git a/Tutorial.pdf b/Tutorial.pdf index e65c105..d8bbb78 100644 Binary files a/Tutorial.pdf and b/Tutorial.pdf differ