ws2.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # Begin configuration
  2. TITLE = "Air conditioner"
  3. GPIO_NUM = 15
  4. STA_SSID = "[redacted]"
  5. STA_PSK = "[redacted]"
  6. # End configuration
  7. import network
  8. import machine
  9. import usocket
  10. #ap_if = network.WLAN(network.AP_IF)
  11. #if ap_if.active(): ap_if.active(False)
  12. #sta_if = network.WLAN(network.STA_IF)
  13. #if not ap_if.active(): sta_if.active(True)
  14. #if not sta_if.isconnected(): sta_if.connect(STA_SSID, STA_PSK)
  15. pin = machine.Pin(GPIO_NUM, machine.Pin.OUT)
  16. pin.value(0)
  17. def ok(socket, query):
  18. socket.write("HTTP/1.1 OK\r\n\r\n")
  19. socket.write("<!DOCTYPE html><title>"+TITLE+"</title><body>")
  20. socket.write(TITLE+" status: ")
  21. if pin.value():
  22. socket.write("<span style='color:green'>ON</span>")
  23. else:
  24. socket.write("<span style='color:red'>OFF</span>")
  25. socket.write("<br>")
  26. if pin.value():
  27. socket.write("<form method='POST' action='/off?"+query.decode()+"'>"+
  28. "<input type='submit' value='turn OFF'>"+
  29. "</form>")
  30. else:
  31. socket.write("<form method='POST' action='/on?"+query.decode()+"'>"+
  32. "<input type='submit' value='turn ON'>"+
  33. "</form>")
  34. def err(socket, code, message):
  35. socket.write("HTTP/1.1 "+code+" "+message+"\r\n\r\n")
  36. socket.write("<h1>"+message+"</h1>")
  37. def handle(socket):
  38. (method, url, version) = socket.readline().split(b" ")
  39. if b"?" in url:
  40. (path, query) = url.split(b"?", 2)
  41. else:
  42. (path, query) = (url, b"")
  43. while True:
  44. header = socket.readline()
  45. if header == b"":
  46. return
  47. if header == b"\r\n":
  48. break
  49. if version != b"HTTP/1.0\r\n" and version != b"HTTP/1.1\r\n":
  50. err(socket, "505", "Version Not Supported")
  51. elif method == b"GET":
  52. if path == b"/":
  53. ok(socket, query)
  54. else:
  55. err(socket, "404", "Not Found")
  56. elif method == b"POST":
  57. if path == b"/on":
  58. pin.high()
  59. ok(socket, query)
  60. elif path == b"/off":
  61. pin.low()
  62. ok(socket, query)
  63. else:
  64. err(socket, "404", "Not Found")
  65. else:
  66. err(socket, "501", "Not Implemented")
  67. print ('xxxxxx')
  68. server = usocket.socket()
  69. server.settimeout(2)
  70. server.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1)
  71. server.bind(('0.0.0.0', 80))
  72. server.listen(1)
  73. while True:
  74. print ('here')
  75. try:
  76. (socket, sockaddr) = server.accept()
  77. if socket != None:
  78. handle(socket)
  79. except OSError:
  80. print ("timeout")
  81. continue
  82. except:
  83. print ("error")
  84. socket.write("HTTP/1.1 500 Internal Server Error\r\n\r\n")
  85. socket.write("<h1>Internal Server Error</h1>")
  86. socket.close()