사람들이 시리로 불을 키고 끄길래
너무 간지나 보여서 만들고 싶었다.
그래서 전역하기 전에 여러가지 만들어 볼라고
전역하기 전에 폰으로 집에 ESP-32보드르 사두었다.
암튼간에
원래는 AC/DC도 같이 스위치 박스 안에 붇어버릴 계획이었다.
근데 그림에서 말한데로
처음에 직류전원 장치(AC/DC)를 납땜을 하자
(물론 전원 다 내리고 작업했다-죽기는싫으니까)
전원을 올리니 플리커링(깜빡임이 생겼다.
구조적으로 LED등이 완전히 전원이 공급이 차단되는것이 아니라
직류전원장치로 미세하게 전류가 흐리기때문에 문제가 생긴다.
직류 전원 장치는 원리상 연결이 있을 수 밖에 없다.
미세 전류가 흐리기 때문에 등에 콘덴서로 미세 전류를 잡아 주면 사용은 가능하지만
사실 잔광 콘덴서 달아도 거의 불가능하다.(아래에 다시 정리했다.)
https://dazabamuker.tistory.com/25
우리 집은............ 천장이 너무 높다....
아이폰으로 측정하면
적어도 3m가 넘으니.....
콘덴서 작업이 지금은 불가능이다.......
그래서 방법을 바꾸기로했다
새로 어뎁터에서 전력을 끌어 쓰기로 했다,
다행히 바로 밑에 플러그가 있어 가능은 하지만....... 쩝
이상하기는 하다.
예전에 라즈베리 파이에 설치한 HomeAssistant.io의 mqtt프로트콜을 이용했다.
1번째는 아두이노 코드
2번째는 홈어시스턴트 configuration.yaml이다.
홈 어시스턴트 사용법은 구글링하자 ㅋ
#include <WiFi.h>
#include <PubSubClient.h>
const char *ssid = "olleh_WiFi_BA83";
const char *password = "0000002583";
const char* ID = "테스트"; // Name of our device, must be unique
const char* TOPIC = "room/light/ahn";
const char* INTOPIC = "room/light/Switch";
const char* mqttUser = "dragon";
const char* mqttPassword = "qazwsxedcrfvtgbyhnujm";
const char* broker = "172.30.1.48";
WiFiClient wclient;
PubSubClient client(wclient);
char messages[50];
int state = 0;
int state1 = 0;
int state2 = 0;
int SW_state = 0;
int light = 4;
// Connect to WiFi network
void setup_wifi() {
Serial.print("\nConnecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Received messages: ");
Serial.print(INTOPIC);
for(int i=0; i<length; i++){
Serial.println((char) payload[i]);
}
Serial.println();
if ((char)payload[0] == '1') {
state = HIGH;
state1 = LOW;
client.publish(TOPIC, "1");
} else if((char)payload[0] == '0') {
state = LOW;
state1 = HIGH;
client.publish(TOPIC, "0");
}
digitalWrite(4, state);
Serial.print(state);
}
// Reconnect to client
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(ID, mqttUser, mqttPassword)) {
Serial.println("connected");
Serial.print("Publishing to: ");
Serial.println(TOPIC);
Serial.println('\n');
client.subscribe(INTOPIC);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("\n try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(light, OUTPUT);
pinMode(5, INPUT);
delay(100);
setup_wifi(); // Connect to network
client.setServer(broker, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()){
reconnect();
}
client.loop();
if (digitalRead(5) != SW_state) {
state2 = state;
state = state1;
state1 = state2;
digitalWrite(4, state);
snprintf(messages, 75, "%ld", state);
client.publish(TOPIC, messages);
}
SW_state = digitalRead(5);
}
#matt
mqtt:
broker: core-mosquitto
username: dragon
password: qazwsxedcrfvtgbyhnujm
#Switch
switch:
- platform: mqtt
name: "무야호"
command_topic: "room/light/Switch"
state_topic: "room/light/ahn"
payload_on: "1"
payload_off: "0"
state_on: "1"
state_off: "0"
retain: true
여기 저기서 짜집기 하기도하고 안돼서 수정도 여러번 했지만
지금은 정상 작동한다.
스위치가 내가 소프트웨어로 끈다고 해서 끔으로 물리적으로 움직이는 것은 아니라서
스위치의 상태가 변화할 때를 감지하여 불 상태가 바뀌도록했다.
아주 나이스하게 작동한다.
내 로망이었던 시리도 잘 작동한다.
ㅋㅋㅋㅋㅋㅋ
'스마트 홈 > esp32' 카테고리의 다른 글
ESP32-DHT11 집 온도와 습도 측정! (0) | 2021.07.03 |
---|---|
ESP32-CAM 외장 안테나 달깅! (0) | 2021.06.27 |
esp32-cam 도착! (0) | 2021.06.26 |
비닐하우스 개폐기 esp32~!(1) (0) | 2021.06.21 |
구피 자동으로 밥주기 (0) | 2021.05.29 |