基于ESP8266的智能家庭自动化系统
智能家庭自动化系统
系统组成
1. ESP8266: 作为微控制器,负责数据采集和网络通信。
2. DHT11/DHT22: 用于采集温湿度数据。
3. 光照传感器: 用于检测环境光照强度。
4. 继电器模块: 用于控制外部设备(如灯光、风扇等)。
5. Wi-Fi: ESP8266 内置 Wi-Fi 模块,用于连接互联网。
6. 云平台: 使用阿里云 IoT 平台或其他类似服务,用于数据存储和远程访问。
7. Web应用/移动应用: 提供用户界面查看实时数据和历史记录,并可远程控制设备。
硬件连接
- ESP8266 (NodeMCU) 的 GPIO2 (D4) 连接到 DHT11/DHT22 的数据线。
- DHT11/DHT22 的 VCC 连接到 ESP8266 的 3.3V。
- DHT11/DHT22 的 GND 连接到 ESP8266 的 GND。
- 光照传感器的信号线连接到 ESP8266 的 A0 (模拟输入口)。
- 继电器模块连接到 ESP8266 的 GPIO12 (D6) 和 GPIO13 (D7)。
软件开发
1. 固件开发: 使用 Arduino IDE 编写程序。
2. 云平台配置: 在阿里云 IoT 平台上注册设备,并获取必要的密钥和ID。
3. Web应用/移动应用开发: 可选使用 Node.js、React 或其他技术栈构建用户界面。
示例代码
这个示例代码会使ESP8266读取温湿度和光照数据,并根据这些数据自动控制继电器开关
(假设两个继电器分别控制灯光和风扇)。
#include <ESP8266WiFi.h> #include <DHT.h> #include <Wire.h> #include <Adafruit_BMP085.h> const char* ssid = "yourSSID"; const char* password = "yourPassword"; // WiFi station setup void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // Main program loop void loop() { // Your main logic here } // Setup function void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); // Initialize the built-in LED as an output digitalWrite(LED_BUILTIN, LOW); // Turn off the built-in LED setup_wifi(); // Initialize DHT11 sensor const int dhtPin = D4; DHT dht(dhtPin, DHT11); // Initialize BMP180 sensor Adafruit_BMP085 bmp; // Initialize relay pins const int relayLightPin = D6; const int relayFanPin = D7; pinMode(relayLightPin, OUTPUT); pinMode(relayFanPin, OUTPUT); // Read data from sensors and control relays readSensorsAndControlRelays(&dht, &bmp, relayLightPin, relayFanPin); } // Function to read sensors and control relays void readSensorsAndControlRelays(DHT *dht, Adafruit_BMP085 *bmp, int relayLightPin, int relayFanPin) { float temperature = dht->readTemperature(); float humidity = dht->readHumidity(); int lightLevel = analogRead(A0); // Print readings Serial.print("Temperature: "); Serial.print(temperature); Serial.print(" C, Humidity: "); Serial.print(humidity); Serial.print(" %, Light Level: "); Serial.println(lightLevel); // Control lights if (lightLevel < 100) { // Adjust threshold as needed digitalWrite(relayLightPin, HIGH); // Turn on lights } else { digitalWrite(relayLightPin, LOW); // Turn off lights } // Control fan if (temperature > 30) { // Adjust threshold as needed digitalWrite(relayFanPin, HIGH); // Turn on fan } else { digitalWrite(relayFanPin, LOW); // Turn off fan } // Delay for 1 minute before reading again delay(60000); }
解释
- WiFi连接: 使用 `setup_wifi` 函数设置 ESP8266 连接到指定的 WiFi 网络。
- 传感器读取: 利用 DHT11 传感器读取温湿度数据,并利用一个假设光敏电阻读取光照强度。
- 继电器控制: 根据光照强度和温度自动控制继电器,进而控制灯光和风扇的开关。
- 定时循环: 通过 `delay` 函数每分钟循环读取数据并做出相应的动作。