前段时间使用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>
效果:
Raspberry Pi LED Control
LED Status: Off
DHT11 Temperature: 29.0°C
DHT11 Humidity: 50.0%
如果需要远程控制,可以注册一个小米球,很好用