스마트 홈 구축 1 스마트 스위치

반응형

사람들이 시리로 불을 키고 끄길래

너무 간지나 보여서 만들고 싶었다.

그래서 전역하기 전에 여러가지 만들어 볼라고

전역하기 전에 폰으로 집에 ESP-32보드르 사두었다.

이건 심심해서 아이패드로 그린거다

 암튼간에

원래는 AC/DC도 같이 스위치 박스 안에 붇어버릴 계획이었다.

 

근데 그림에서 말한데로

처음에 직류전원 장치(AC/DC)를 납땜을 하자

(물론 전원 다 내리고 작업했다-죽기는싫으니까)

전원을 올리니 플리커링(깜빡임이 생겼다.

구조적으로 LED등이 완전히 전원이 공급이 차단되는것이 아니라 

직류전원장치로 미세하게 전류가 흐리기때문에 문제가 생긴다.

직류 전원 장치는 원리상 연결이 있을 수 밖에 없다.

미세 전류가 흐리기 때문에 등에 콘덴서로 미세 전류를 잡아 주면 사용은 가능하지만 

사실 잔광 콘덴서 달아도  거의 불가능하다.(아래에 다시 정리했다.)

https://dazabamuker.tistory.com/25

 

esp32 스마트 스위치 다시 살펴보기

이 스위치가 잘 작동되기는 하는데 이론적으로 조금의 문제가 있기도 하고 스위치에서 선을 빼내어서 아래 플러그를 통해 전력을 공급하는 모습이 너무 꼴불견이다. 그래서 복학하기 전에 해결

dazabamuker.tistory.com

우리 집은............ 천장이 너무 높다....

아이폰으로 측정하면

적어도 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