Можно ли включать и выключать светодиод после каждой apache запроса - PullRequest
1 голос
/ 16 июня 2020

Я уже 2 недели пытаюсь включить светодиод после того, как кто-то откроет мой сайт. порядок должен быть таким:

  1. Запрос получен
  2. Светодиод включается и через 0,5 секунды снова выключается
  3. Ответ отправляется обратно

У меня есть Raspberry Pi для включения моего светодиода.

мой python код до сих пор:

import time
import RPi.GPIO as GPIO

pin = 4

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)

GPIO.output(pin, GPIO.HIGH)
time.sleep(0.1)
GPIO.output(pin, GPIO.LOW)

Иногда это работало, но теперь веб-сайт показывался. Я пробовал это с WSGI, но это немного сложно. Может быть, у кого-то возникла такая же идея, и это сработает для него, и он сможет мне помочь.

1 Ответ

0 голосов
/ 16 июня 2020

Для этого вам не нужен Apache или что-то сложное, вы можете просто добавить биты для включения и выключения светодиода в простой класс веб-сервера, который предоставляет Python.

Просто настройте IP-адрес и порт в верхней части этого кода, запустите его в Терминале и подключитесь к адресу, который он обслуживает:

#!/usr/bin/env python3

#import RPi.GPIO as GPIO
import os
from time import sleep
from http.server import BaseHTTPRequestHandler, HTTPServer

host_name = '192.168.0.8'
host_port = 63000
pin = 4

class MyServer(BaseHTTPRequestHandler):

    def do_HEAD(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_GET(self):
        html = '''
           <html>
           <body style="width:960px; margin: 20px auto;">
           <h1>Welcome to my Raspberry Pi</h1>
           </body>
           </html>
        '''

        # You may want to move these 3 setup lines to the very start of the program
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(pin, GPIO.OUT)

        GPIO.output(pin, GPIO.HIGH)
        sleep(0.1)
        GPIO.output(pin, GPIO.LOW)

        self.do_HEAD()
        self.wfile.write(html.encode("utf-8"))

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