前段時間使用esp8266搞了個智能家居,通過網頁控制,但是沒有辦法實現遠程控制,只能局域網控制,因爲我沒有平臺,使用機制雲等平臺還需要開發app
使用chatgpt生成的main.py程序
from flask import Flask, render_template, request import Adafruit_DHT import RPi.GPIO as GPIO app = Flask(__name__) # 設置LED引腳和DHT11傳感器引腳 LED_PIN = 18 DHT_PIN = 4 # 初始化GPIO引腳 GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) GPIO.output(LED_PIN, GPIO.HIGH) # 獲取DHT11溫溼度傳感器數據 def get_dht_data(): humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, DHT_PIN) return { 'temperature': temperature, 'humidity': humidity } # 網頁主頁 @app.route('/') def index(): led_status = GPIO.input(LED_PIN) dht_data = get_dht_data() return render_template('index.html', led_status=led_status, dht_data=dht_data) # 處理LED控制請求 @app.route('/led', methods=['POST']) def control_led(): action = request.form['action'] if action == 'on': GPIO.output(LED_PIN, GPIO.LOW) elif action == 'off': GPIO.output(LED_PIN, GPIO.HIGH) # return 'success' led_status = GPIO.input(LED_PIN) dht_data = get_dht_data() return render_template('index.html', led_status=led_status, dht_data=dht_data) if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
index.html程序,注意flask要求靜態模版放在templates下面
<!DOCTYPE html> <html> <head> <title>Raspberry Pi LED Control</title> <style> body { text-align: center; } </style> </head> <body> <h1>Raspberry Pi LED Control</h1> <h2>LED Status: {% if led_status %}On{% else %}Off{% endif %}</h2> <form method="POST" action="/led"> <button type="submit" name="action" value="on">Turn On</button> <button type="submit" name="action" value="off">Turn Off</button> </form> <h2>DHT11 Temperature: {{ dht_data.temperature }}°C</h2> <h2>DHT11 Humidity: {{ dht_data.humidity }}%</h2> </body> </html>
效果:
如果需要遠程控制,可以註冊一個小米球,很好用