ตัวอย่าง Python รัน Web Server BaseHTTP/0.3 Python/2.7.9

By | 06/01/2018
Spread the love

รายละเอียดคือใช้ raspberry pi รับ logic input 0/1 จาก arduino แล้วให้รายงานออกผ่านทาง web http เพื่อไม่ให้เปลือง resource และเรียบง่าย จึงไม่ติดตั้ง apache หรือ nginx แต่ใช้ BaseHTTPServer pyhton มารันแทน จากนั้น device ตัวอื่นก็สามารถรับข้อมูลผ่านทาง web http ได้แล้ว

[cc lang=”python”]
root@raspberrypi:/var/www/html# cat app.py
#!/usr/bin/env python

#Ref: https://gist.github.com/bradmontgomery/2219997

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import SocketServer
import time
import RPi.GPIO as GPIO

#sec = [“s1″,”s2″,”s3″,”s4″,”s5″,”s6″,”s7″,”s8″,”s9″,”s10″,”s11″,”s12″,”s13″,”s14″,”s15″,”s16″,”s17”]
pins = [“18″,”23″,”4″,”17″,”27″,”22″,”10″,”9″,”11″,”0″,”5″,”6″,”13″,”19″,”26″,”14″,”15”]
GPIO.setmode(GPIO.BCM)

for i in range(len(pins)):
GPIO.setup(int(pins[i]),GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

#for j in range(len(pins)):
# if GPIO.input(int(pins[j])) == True:
# pin = pins[j]

class S(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header(‘Content-type’, ‘text/html’)
self.send_header(‘Access-Control-Allow-Origin’, ‘*’)
self.send_header(‘Access-Control-Expose-Headers’, ‘access-control-allow-origin’)
self.end_headers()

def do_GET(self):
self._set_headers()
#pin = “empty”
ck = 0
if self.path == “/bcm” :
for j in range(len(pins)):
if GPIO.input(int(pins[j])) == True:
#pin = pins[j]
self.wfile.write(pins[j])
self.wfile.write(” “)
ck = 1
if ck == 0 :
self.wfile.write(“empty”)
#self.wfile.write(pin)
else:
d = open(“index.html”,”r”)
data = d.read()
self.wfile.write(data)
d.close()

def do_HEAD(self):
self._set_headers()

def do_POST(self):
# Doesn’t do anything with posted data
self._set_headers()
self.wfile.write(“

POST!

“)

def run(server_class=HTTPServer, handler_class=S, port=8080):
server_address = (”, port)
httpd = server_class(server_address, handler_class)
print ‘Starting httpd…’
httpd.serve_forever()

if __name__ == “__main__”:
from sys import argv

if len(argv) == 2:
run(port=int(argv[1]))
else:
run()
[/cc]

ใส่ความเห็น