前段时间使用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>
效果:
如果需要远程控制,可以注册一个小米球,很好用