Prototype Practice - sunbang123/Graduation_Project GitHub Wiki
ํ์ด์์คํดํธ์์ ์๋ํ์ฌ์ฉ!!!
์ ์ฅ๊ณต๊ฐํ์ธ
๐ง ํ๋กํ ํ์ ๊ตฌํ
- Raspberry Pi ์ค์ต ๊ตฌํ
- Node-RED ํ๋ก์ฐ ๊ตฌํ
- Home Assistant ์ฐ๋
- PIR(Passice Infrared) ์ธ์ฒด ๊ฐ์ง ์ ์ธ์ ์ผ์.
- ์ ์ธ์ ์ ๊ฐ์งํ์ฌ ์์ง์์ ๊ฐ์งํจ. ์๋์ง ์ ์ฝ ์กฐ๋ช (ex) ์ผ๋ฐ ๊ฑด๋ฌผ์ ๋ณต๋ ์กฐ๋ช
from gpiozero import MotionSensor, LED
pir=MotionSensor(18) # PIR ์ฐ๊ฒฐ ํ INPUT์ผ๋ก ์ง์ : GPIO 18
led=LED(15) # LED ์ฐ๊ฒฐ ํ OUTPUT์ผ๋ก ์ง์ : GPIO 15
# ๋ฌดํ๋ฐ๋ณต
while True:
if pir.value == 1: # ์ผ์์ ์ธ์๋์์ ๋ LED ON
led.on()
print("motion detect")
else: # ์ผ์์ ์ธ์๋์ง ์์์ ๋ LED OFF
led.off()
print("no motion")
- ์์ง์์ด ๊ฐ์ง๋๋ฉด LED๊ฐ ๋์ํ๊ณ ์ค์ ํ ์ผ์ ์๊ฐ ๋ค์ ๊บผ์ง. ๋์ ์๊ฐ์ ์ฝ๋ ๋๋ ๋ชจ๋ ์ ํญ๊ธฐ๋ฅผ ํตํด ์ค์
- ๊ตฌ์กฐ๋ ๊ทธ๋ฆผ๊ณผ ๋๊ฐ์ ๋ชจ์ ์ผ์๋ฅผ ์ฌ์ฉํจ.
KakaoTalk_20241008_195100877.mp4
๐ฑ ESP32 ๋ฐ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5๋ฅผ ์ด์ฉํ ํ ์ ์๋ถ ์ผ์ ์ค์ต ๊ฐ์ด๋ (AWS IoT & Node-RED)
ESP32์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5๋ฅผ ํ์ฉํ์ฌ AWS IoT Core์ Node-RED๋ฅผ ์ฌ์ฉํ๋ ์ค๋งํธ ํ๋ถ ์์คํ ์ ๋ง๋ค์ด๋ด ์๋ค!
ํญ๋ชฉ | ์๋ |
---|---|
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5 | 1 |
ESP32 ๊ฐ๋ฐ ๋ณด๋ | 1 |
์๋ ๋ก๊ทธ ํ ์ ์๋ถ ์ผ์ | 1 |
์ ํผ ์์ด์ด | ๋ค์ |
๋ธ๋ ๋๋ณด๋ | 1 |
๋ง์ดํฌ๋ก SD ์นด๋ (16GB ์ด์) | 1 |
USB ์ผ์ด๋ธ (ESP32์ฉ) | 1 |
์ ํญ (10kฮฉ) | 1 |
- ํ ์ ์๋ถ ์ผ์๋ฅผ ESP32์ ์๋ ๋ก๊ทธ ํ(์: GPIO 36)์ ์ฐ๊ฒฐ
- ์ผ์์ VCC๋ฅผ ESP32์ 3.3V์ ์ฐ๊ฒฐ
- ์ผ์์ GND๋ฅผ ESP32์ GND์ ์ฐ๊ฒฐ
- ์ผ์์ ์๋ ๋ก๊ทธ ์ถ๋ ฅ์ 10kฮฉ ์ ํญ์ ํตํด ESP32์ GPIO 36 (ADC)์ ์ฐ๊ฒฐ
- 10kฮฉ ์ ํญ์ ๋ค๋ฅธ ์ชฝ ๋์ GND์ ์ฐ๊ฒฐ (ํ๋ค์ด ์ ํญ์ผ๋ก ์ฌ์ฉ)
- ESP32๋ฅผ USB ์ผ์ด๋ธ์ ํตํด ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5์ ์ฐ๊ฒฐ
3.3V
|
|
์ผ์(VCC)
|
|
์ผ์(์๋ ๋ก๊ทธ ์ถ๋ ฅ)
|
|-----> GPIO 36 (ADC)
|
10kฮฉ
|
GND
์ด ํ๋ก ๊ตฌ์ฑ์์ 10kฮฉ ์ ํญ์ ํ๋ค์ด ์ ํญ์ผ๋ก ์์ฉํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์ค์ํฉ๋๋ค:
- ๋ ธ์ด์ฆ ๊ฐ์: ์ผ์๊ฐ ์ฐ๊ฒฐ๋์ง ์์๊ฑฐ๋ ์ค์๋ํ ๋ ํ๋กํ ์ํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ์ ๋ฅ ์ ํ: ์ผ์์ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ๋ฅผ ๋ณดํธํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ ํธ ์์ ํ: ๋ ์์ ์ ์ด๊ณ ์ผ๊ด๋ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ESP32์ ํ ์ ์๋ถ ์ผ์:
- GPIO 36 (ADC): ESP32์ ์๋ ๋ก๊ทธ ์ ๋ ฅ ํ์ ์ผ์์ ์๋ ๋ก๊ทธ ์ถ๋ ฅ์ ์ฐ๊ฒฐํฉ๋๋ค.
- 3.3V: ESP32์ 3.3V ์ถ๋ ฅ์ ์ผ์์ VCC์ ์ฐ๊ฒฐํฉ๋๋ค.
- GND: ESP32์ GND๋ฅผ ์ผ์์ GND์ ์ฐ๊ฒฐํฉ๋๋ค.
- ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด OS (64๋นํธ) ์ค์น
- Node-RED ์ค์น:
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
- Node-RED ์๋ ์์ ์ค์ :
sudo systemctl enable nodered.service
- Arduino IDE ์ค์น ๋ฐ ESP32 ๋ณด๋ ๋งค๋์ ์ถ๊ฐ
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น:
-
MQTT
by Joel Gaehwiler -
ArduinoJson
by Benoit Blanchon
-
- ESP32 ๋ณด๋์ฉ Arduino ์ฝ๋ ์์ฑ ๋ฐ ์ ๋ก๋
- AWS ๊ณ์ ์์ฑ (์์ง ์๋ ๊ฒฝ์ฐ)
- AWS IoT Core์์ ์ "์ฌ๋ฌผ" ์์ฑ
- ์ธ์ฆ์ ๋ฐ ํค ๋ค์ด๋ก๋
- ์ ์ฑ ์์ฑ ๋ฐ ์ฐ๊ฒฐ
#include <WiFiClientSecure.h>
#include <MQTTClient.h>
#include <ArduinoJson.h>
#include "WiFi.h"
#include "secrets.h"
const int soilMoisturePin = 36; // GPIO 36 (ADC0)
WiFiClientSecure net = WiFiClientSecure();
MQTTClient client = MQTTClient(256);
void connectAWS()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
// Configure WiFiClientSecure to use the AWS IoT device credentials
net.setCACert(AWS_CERT_CA);
net.setCertificate(AWS_CERT_CRT);
net.setPrivateKey(AWS_CERT_PRIVATE);
// Connect to the MQTT broker on the AWS endpoint we defined earlier
client.begin(AWS_IOT_ENDPOINT, 8883, net);
// Create a message handler
client.onMessage(messageHandler);
Serial.print("Connecting to AWS IOT");
while (!client.connect(THINGNAME)) {
Serial.print(".");
delay(100);
}
if(!client.connected()){
Serial.println("AWS IoT Timeout!");
return;
}
Serial.println("AWS IoT Connected!");
}
void publishMessage()
{
int moistureValue = analogRead(soilMoisturePin);
int moisturePercent = map(moistureValue, 4095, 0, 0, 100);
StaticJsonDocument<200> doc;
doc["moisture"] = moisturePercent;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer);
client.publish("garden/moisture", jsonBuffer);
}
void setup() {
Serial.begin(115200);
connectAWS();
}
void loop() {
publishMessage();
client.loop();
delay(1000);
}
void messageHandler(String &topic, String &payload) {
Serial.println("incoming: " + topic + " - " + payload);
}
- Node-RED ๋์๋ณด๋์ ์ ์ (๊ธฐ๋ณธ ์ฃผ์:
http://๋ผ์ฆ๋ฒ ๋ฆฌํ์ดIP:1880
) - ๋ค์๊ณผ ๊ฐ์ ํ๋ก์ฐ๋ฅผ ์์ฑ:
[mqtt in] --> [json] --> [function] --> [dashboard]
-
mqtt in
๋ ธ๋: AWS IoT Core์ MQTT ๋ธ๋ก์ปค์ ์ฐ๊ฒฐ -
json
๋ ธ๋: ์์ ๋ JSON ๋ฉ์์ง๋ฅผ ํ์ฑ -
function
๋ ธ๋: ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ์๋ฆผ ๋ก์ง ๊ตฌํ -
dashboard
๋ ธ๋: ๋ฐ์ดํฐ ์๊ฐํ
function ๋ ธ๋ ์ฝ๋ ์์:
const moisture = msg.payload.moisture;
msg.payload = moisture;
if (moisture < 30) {
node.warn("ํ ์์ด ๊ฑด์กฐํฉ๋๋ค. ๋ฌผ์ ์ฃผ์ธ์!");
}
return msg;
- ์๋ถ ํจ๋ ์ธก์ : ESP32์์ ์ผ์ ๋ฐ์ดํฐ ์ฝ๊ธฐ
- ๋ฐ์ดํฐ ์ ์ก: ESP32์์ AWS IoT Core๋ก MQTT๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ก
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ์๊ฐํ: Node-RED์์ ๋ฐ์ดํฐ ์์ , ์ฒ๋ฆฌ, ๋์๋ณด๋ ํ์
- ์๋ฆผ: ์๊ณ๊ฐ ๊ธฐ๋ฐ ์๋ฆผ (Node-RED์์ ์ฒ๋ฆฌ)
- AWS Lambda๋ฅผ ์ฌ์ฉํ ์๋ฒ๋ฆฌ์ค ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- Amazon DynamoDB๋ฅผ ํ์ฉํ ์ฅ๊ธฐ ๋ฐ์ดํฐ ์ ์ฅ
- AWS SNS๋ฅผ ์ด์ฉํ ๋ชจ๋ฐ์ผ ํธ์ ์๋ฆผ ๊ตฌํ
- ์ ๊ธฐ ์ฐ๊ฒฐ ์ ์์ ์ ์ ์
- AWS ํ๋ฆฌ ํฐ์ด ์ฌ์ฉ๋ ์ ํ ํ์ธ
- ESP32 ๋ฐ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5 ๋ฐ์ด ๊ด๋ฆฌ
graph TD
A[ํ ์ ์๋ถ ์ผ์] -->|์๋ ๋ก๊ทธ ์ ํธ| B[ESP32]
B -->|MQTT| C[AWS IoT Core]
C -->|MQTT| D[Node-RED]
D -->|๋ฐ์ดํฐ ์ฒ๋ฆฌ| E[Node-RED ๋์๋ณด๋]
D -->|์กฐ๊ฑด๋ถ ์๋ฆผ| F[์ฌ์ฉ์ ์๋ฆผ]
์ด ๊ตฌ์กฐ๋ ์ผ์ ๋ฐ์ดํฐ ์์ง๋ถํฐ ์๊ฐํ ๋ฐ ์๋ฆผ๊น์ง์ ์ ์ฒด ํ๋ฆ์ ๋ณด์ฌ์ค๋๋ค.
3.3V
|
|---> ์ผ์๋ค(VCC)
|
์ผ์๋ค(๋ฐ์ดํฐ ํ)
|
|-----> ํด๋น GPIO ํ
|
10kฮฉ (๊ฐ ์ผ์๋น)
|
GND -----> ์ผ์๋ค(GND)
|
|-----> MOSFETs(Source)
GPIO 25 -----> MOSFET1(Gate) --> ํก์
ํฌ
GPIO 26 -----> MOSFET2(Gate) --> ๋ฐฐ์ถ ํฌ
GPIO 27 -----> MOSFET3(Gate) --> LED ์กฐ๋ช
์ธ๋ถ ์ ์(+) ------------------> ํฌ๋ค(+), LED(+)
์ธ๋ถ ์ ์(-) ------------------> MOSFETs(Drain)
๋๋
๋ฆด๋ ์ด ๋ชจ๋๋ก("์ ์ด ์ ํธ ์ด๋ํฐ" ๋๋ "์ ๋ ฅ ์ ์ด ์ด๋ํฐ") ์ฐจ๋์ฉ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ ์ดํ๊ธฐ
-> ํด๋น ํ๋กํ ํ์
๐ฌ๏ธ ESP32์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด๋ฅผ ์ด์ฉํ ๋ฏธ์ธ๋จผ์ง ๊ฐ์ง ์๋ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ ์ด ์์คํ
ํญ๋ชฉ | ์๋ |
---|---|
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5 | 1 |
ESP32 ๊ฐ๋ฐ ๋ณด๋ | 1 |
์๋ ๋ก๊ทธ ๋ฏธ์ธ๋จผ์ง ์ผ์ (์: GP2Y1010AU0F) | 1 |
๋ฆด๋ ์ด ๋ชจ๋ (3.3V) | 1 |
์ํ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ | 1 |
์ ํผ ์์ด์ด | ๋ค์ |
๋ง์ดํฌ๋ก SD ์นด๋ (32GB ๊ถ์ฅ) | 1 |
USB ์ผ์ด๋ธ (ESP32์ฉ) | 1 |
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด ๋ฐ ESP32 ์ ์ ๊ณต๊ธ ์ฅ์น | ๊ฐ 1 |
-
ESP32์ ๋ฏธ์ธ๋จผ์ง ์ผ์ ์ฐ๊ฒฐ:
- VCC๋ฅผ ESP32์ 3.3V์ ์ฐ๊ฒฐ
- GND๋ฅผ ESP32์ GND์ ์ฐ๊ฒฐ
- ์๋ ๋ก๊ทธ ์ถ๋ ฅ์ ESP32์ GPIO 36 (ADC)์ ์ฐ๊ฒฐ
-
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ ๋ฆด๋ ์ด ๋ชจ๋ ์ฐ๊ฒฐ:
- VCC๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ 3.3V์ ์ฐ๊ฒฐ
- GND๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ GND์ ์ฐ๊ฒฐ
- ์ ํธ ํ์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ GPIO 18์ ์ฐ๊ฒฐ
-
๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ฐ๊ฒฐ:
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ ์ ์ผ์ด๋ธ์ ๋ฆด๋ ์ด์ NO(Normally Open)์ COM(Common) ๋จ์์ ์ฐ๊ฒฐ
-
ESP32์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด ์ฐ๊ฒฐ:
- ESP32์ TX๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ GPIO 14 (UART RX)์ ์ฐ๊ฒฐ
- ESP32์ RX๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ GPIO 15 (UART TX)์ ์ฐ๊ฒฐ
[ESP32 ๋ถ๋ถ]
3.3V
|
|---> ๋ฏธ์ธ๋จผ์ง ์ผ์(VCC)
|
๋ฏธ์ธ๋จผ์ง ์ผ์(์๋ ๋ก๊ทธ ์ถ๋ ฅ) -----> GPIO 36 (ADC)
|
GND -----> ๋ฏธ์ธ๋จผ์ง ์ผ์(GND)
[๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด ๋ถ๋ถ]
3.3V ------> ๋ฆด๋ ์ด ๋ชจ๋(VCC)
GPIO 18 ---> ๋ฆด๋ ์ด ๋ชจ๋(์ ํธ ํ)
GND -----> ๋ฆด๋ ์ด ๋ชจ๋(GND)
๋ฆด๋ ์ด(NO) ---> ๊ณต๊ธฐ์ฒญ์ ๊ธฐ(์ ์์ )
๋ฆด๋ ์ด(COM) ---> ์ ์ ์ฝ์ผํธ
[ESP32์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด ์ฐ๊ฒฐ]
ESP32 TX -----> ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด GPIO 14 (UART RX)
ESP32 RX <----- ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด GPIO 15 (UART TX)
-
ESP32
- ๊ธฐ๋ฅ: ๋ฏธ์ธ๋จผ์ง ์ผ์ ๋ฐ์ดํฐ ์ฝ๊ธฐ ๋ฐ ์ฒ๋ฆฌ
- ์ฐ๊ฒฐ: ์๋ ๋ก๊ทธ ๋ฏธ์ธ๋จผ์ง ์ผ์, UART ํต์ (๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์)
-
์๋ ๋ก๊ทธ ๋ฏธ์ธ๋จผ์ง ์ผ์
- ๊ธฐ๋ฅ: ๋ฏธ์ธ๋จผ์ง ๋๋ ์ธก์
- ESP32 ์ฐ๊ฒฐ: GPIO 36 (ADC)
-
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5
- ๊ธฐ๋ฅ: ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ ์ฅ, ์น ์ธํฐํ์ด์ค ์ ๊ณต, ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ ์ด
- ์ฐ๊ฒฐ: UART ํต์ (ESP32์), ๋ฆด๋ ์ด ๋ชจ๋
-
๋ฆด๋ ์ด ๋ชจ๋
- ๊ธฐ๋ฅ: ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ ์ ์ ์ด
- ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด ์ฐ๊ฒฐ: GPIO 18 (๋์งํธ ์ถ๋ ฅ)
-
์ํ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ
- ๊ธฐ์กด ์ ํ ์ฌ์ฉ, ๋ฆด๋ ์ด๋ฅผ ํตํด ์ ์ ์ ์ด
#include <HardwareSerial.h>
const int dustPin = 36;
const int ledPin = 22; // ์ผ์์ LED ์ ์ด์ฉ (ํ์ํ ๊ฒฝ์ฐ)
unsigned long lastTime = 0;
unsigned long sampleTime = 280;
unsigned long deltaTime = 40;
int dustVal = 0;
void setup() {
Serial.begin(115200); // ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์์ ํต์ ์ฉ
pinMode(ledPin, OUTPUT);
}
void loop() {
if ((millis() - lastTime) > sampleTime) {
digitalWrite(ledPin, LOW);
delayMicroseconds(sampleTime);
dustVal = analogRead(dustPin);
delayMicroseconds(deltaTime);
digitalWrite(ledPin, HIGH);
lastTime = millis();
// ์ผ์ ๊ฐ์ ๋ฏธ์ธ๋จผ์ง ๋๋๋ก ๋ณํ (์ผ์ ์ฌ์์ ๋ฐ๋ผ ์กฐ์ ํ์)
float voltage = dustVal * (3.3 / 4095.0);
float dustDensity = 0.17 * voltage - 0.1;
if (dustDensity < 0) {
dustDensity = 0;
}
// ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด๋ก ๋ฐ์ดํฐ ์ ์ก
Serial.println(dustDensity);
}
}
import serial
import time
import RPi.GPIO as GPIO
# GPIO ์ค์
GPIO.setmode(GPIO.BCM)
RELAY_PIN = 18
GPIO.setup(RELAY_PIN, GPIO.OUT)
# UART ์ค์
ser = serial.Serial('/dev/ttyAMA0', 115200)
# ๋ฏธ์ธ๋จผ์ง ๋๋ ์๊ณ๊ฐ (ฮผg/mยณ)
DUST_THRESHOLD = 35 # ์์ ๊ฐ, ์ค์ ์ฌ์ฉ ์ ์กฐ์ ํ์
def read_dust_density():
if ser.in_waiting > 0:
try:
return float(ser.readline().decode().strip())
except ValueError:
return None
return None
def control_air_purifier(density):
if density is not None:
if density > DUST_THRESHOLD:
GPIO.output(RELAY_PIN, GPIO.HIGH) # ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ผ๊ธฐ
print(f"๋ฏธ์ธ๋จผ์ง ๋๋ ๋์ ({density:.2f} ฮผg/mยณ). ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ผ์ง.")
else:
GPIO.output(RELAY_PIN, GPIO.LOW) # ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ๋๊ธฐ
print(f"๋ฏธ์ธ๋จผ์ง ๋๋ ์ ์ ({density:.2f} ฮผg/mยณ). ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ๊บผ์ง.")
try:
while True:
dust_density = read_dust_density()
if dust_density is not None:
control_air_purifier(dust_density)
time.sleep(1) # 1์ด๋ง๋ค ์ฒดํฌ
except KeyboardInterrupt:
GPIO.cleanup()
ser.close()
print("ํ๋ก๊ทธ๋จ ์ข
๋ฃ")
graph TD
A[์๋ ๋ก๊ทธ ๋ฏธ์ธ๋จผ์ง ์ผ์] -->|์๋ ๋ก๊ทธ ์ ํธ| B[ESP32]
B -->|UART| C[๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 5]
C -->|GPIO ์ ์ด| D[๋ฆด๋ ์ด ๋ชจ๋]
D -->|์ ์ ์ ์ด| E[์ํ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ]
C -->|๋ฐ์ดํฐ ์ ์ฅ/๋ถ์| F[๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค]
C -->|์๊ฒฉ ๋ชจ๋ํฐ๋ง| G[์น ์ธํฐํ์ด์ค]
์ด ํ๋ก์ ํธ๋ ESP32๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ๋ก๊ทธ ๋ฏธ์ธ๋จผ์ง ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , ์ด๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด๋ก ์ ์กํฉ๋๋ค. ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด๋ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ฅผ ์ ์ดํ๊ณ , ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์น ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ค์๊ฐ ๋ฐ์ดํฐ ์๊ฐํ: Grafana๋ Matplotlib์ ์ฌ์ฉํ์ฌ ๋ฏธ์ธ๋จผ์ง ๋๋ ์ถ์ด๋ฅผ ๊ทธ๋ํ๋ก ํ์
- ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฐ ์์ธก: ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฏธ์ธ๋จผ์ง ๋๋ ์์ธก ๋ชจ๋ธ ๊ฐ๋ฐ
- ๋ค์ค ์ผ์ ์ง์: ์ฌ๋ฌ ๊ฐ์ ESP32์ ์ผ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๊ณต๊ฐ์ ๋ฏธ์ธ๋จผ์ง ๋ถํฌ ์ธก์
- ์ค๋งํธํ ํตํฉ: HomeAssistant ๋ฑ์ ํ๋ซํผ๊ณผ ์ฐ๋ํ์ฌ ์ข ํฉ์ ์ธ ์ค๋งํธํ ์์คํ ๊ตฌ์ถ
- ์ ๊ธฐ ์์ ์ ์์ ์ ์ ์ํ์ธ์. ํ์ํ๋ค๋ฉด ์ ๋ฌธ๊ฐ์ ๋์์ ๋ฐ์ผ์ธ์.
- ๋ฏธ์ธ๋จผ์ง ์ผ์์ ์ ํํ ์บ๋ฆฌ๋ธ๋ ์ด์ ์ด ํ์ํฉ๋๋ค. ์ผ์ ๋ฐ์ดํฐ์ํธ๋ฅผ ์ฐธ์กฐํ์ธ์.
- ESP32์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ ์ ์ ๊ด๋ฆฌ์ ์ฃผ์ํ์ธ์.
- ์ ๊ธฐ์ ์ผ๋ก ์์คํ ์ ์ ๊ฒํ๊ณ , ์ผ์๋ฅผ ์ฒญ์ํ์ฌ ์ ํ๋๋ฅผ ์ ์งํ์ธ์.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ ์ด ์ ์ ์กฐ์ฌ์ ๊ถ์ฅ์ฌํญ์ ์ค์ํ์ธ์.
ํ์ด์์คํดํธ ์ค์น
python3 -m venv homeassistant
cd homeassistant
source bin/activate
pip3 install homeassistant
ํ์ด์ฌ 3.12๋ก ์ ๊ทธ๋ ์ด๋์๊ตฌ
์ด๋ ๊ฒ ๊น๋๊ฑฐ ์๋. Imager ์ฌ์ฉํ์~