ESP8266, 구글 어시스턴트, Sinric Pro로 컴퓨터 전원 켜기
프로젝트/스마트 홈

ESP8266, 구글 어시스턴트, Sinric Pro로 컴퓨터 전원 켜기

반응형

최근 집 밖에서 집 컴퓨터를 켜야 되는 상황이 종종 발생하여 ESP8266과 구글 어시스턴트로 컴퓨터 본체를 켜는 장치를 만들어 보기로 했다.

 

시판 중인 스위치봇

물론 위와 같이 물리적으로 원격으로 스위치를 눌러주는 스위치 봇은 쉽게 구할 수 있지만 컴퓨터에 달기에는 좀 거추장스러워 보여 본체 내부에 숨길 수 있는 형태로 제작해보자 했다.

고려한 사항은 다음과 같다.

 

  1. 와이파이로 연결되어 구글 어시스턴트 연동이 가능할 것
  2. 컴퓨터 본체의 전원버튼은 그대로 사용이 가능할 것
  3. 배터리를 내장하여 컴퓨터 전원이 장시간 꺼져있어도 사용 가능하며 컴퓨터가 켜진 상태에서는 배터리가 충전될 것

우선 보드는 ESP8266기반의 보드를 사용했다. 필자는 주로 NodeMCU, Wemos D1 mini 같은 잘 알려진 보드를 사용했는데 문제는 배터리를 장착하기 위해서는 배터리 충방전 회로를 같이 구성해야 한다는 점이 좀 불편했다.

필자랑 비슷한 생각을 한 사람이 있었는지 알리익스프레스에 적당한 보드를 발견했다.

 

구매처 링크

 

6530.0₩ 37% OFF|Wemos D1 미니 WiFi 모듈 ESP WROOM 02 마더 보드, ESP8266 통합, NodeMCU 용 18650 배터리 슬롯 포

Smarter Shopping, Better Living! Aliexpress.com

ko.aliexpress.com

 

위 그림처럼 보드 하단에 18650 배터리를 장착할 수 있으며 마이크로 5핀 단자로 충전 및 코드 업로드가 가능한 보드이다. NodeMCU, Wemos D1 mini 보다는 약간더 비싸지만 충방전 회로가 내장된 것을 감안하면 정말 마음에 든다.

 

컴퓨터 스위치를 눌러주기 위해 릴레이 모듈도 준비했다. 대충 아래와 비슷하게 생긴 릴레이 모듈이면 모두 가능하다.

사실 컴퓨터 스위치를 누르는데 릴레이까진 필요 없을것 같고 트랜지스터 하나면 충분할 것 같다. 트랜지스터를 사용한 전자식 스위치는 추우에 개선 버전을 만들면 고려해 봐야겠다.

 

이제 회로는 아래와 같이 구성해 주었다.

 

원래라면 컴퓨터 전원 스위치 선이 메인보드 메인 패널의 power button에 연결되어있을 것이다. 이 부분의 연결을 해제하고 위와 같이 연결을 구성하면 된다. 배터리 충전을 위해 메인보드의 남는 usb 연결 단자로부터 5V 전원을 연결했다.

 

코드는 아래와 같다.

#include <Arduino.h>
#include <ESP8266WiFi.h>

#include "SinricPro.h"
#include "SinricProSwitch.h"

#define WIFI_SSID         "*****"    
#define WIFI_PASS         "*****"
#define APP_KEY           "*****"
#define APP_SECRET        "*****"
#define SWITCH_ID         "*****"
#define BAUD_RATE         9600

#define BUTTON_PIN D5
#define LED_PIN   D6

bool myPowerState = false;
unsigned long lastBtnPress = 0;

unsigned long previousMillis = 0;
unsigned long interval = 30000;

bool onPowerState(const String &deviceId, bool &state) {
  Serial.printf("Device %s turned %s (via SinricPro) \r\n", deviceId.c_str(), state?"on":"off");
  myPowerState = state;
  digitalWrite(LED_PIN, LOW);
  delay(300);
  digitalWrite(LED_PIN, HIGH);
  return true;
}

void setupWiFi() {
  Serial.printf("\r\n[Wifi]: Connecting");
  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.printf(".");
    delay(250);
  }
  Serial.printf("connected!\r\n[WiFi]: IP-Address is %s\r\n", WiFi.localIP().toString().c_str());
  WiFi.setAutoReconnect(true);
  WiFi.persistent(true);
}

void setupSinricPro() {
  SinricProSwitch& mySwitch = SinricPro[SWITCH_ID];
  mySwitch.onPowerState(onPowerState);

  SinricPro.onConnected([](){ Serial.printf("Connected to SinricPro\r\n"); }); 
  SinricPro.onDisconnected([](){ Serial.printf("Disconnected from SinricPro\r\n"); });
  SinricPro.begin(APP_KEY, APP_SECRET);
}

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT_OPEN_DRAIN);
  digitalWrite(LED_PIN, HIGH);

  Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n");
  setupWiFi();
  setupSinricPro();
}

void loop() {
  unsigned long actualMillis = millis();
  if (digitalRead(BUTTON_PIN) == LOW && actualMillis - lastBtnPress > 1000){
    digitalWrite(LED_PIN, LOW);
    delay(300);
    digitalWrite(LED_PIN, HIGH);
  } 

  SinricPro.handle();
  unsigned long currentMillis = millis();
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
    Serial.print(millis());
    Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    WiFi.begin(WIFI_SSID, WIFI_PASS);
    Serial.println(WiFi.localIP());
    Serial.println(WiFi.RSSI());
    previousMillis = currentMillis;
  }
}

 

코드는 별거 없다. 외부 컴퓨터 전원버튼 (기존의 전원 스위치) 혹은 구글 어시스턴트 명령이 입력되면 릴레이을 0.3초간 작동시켜 컴퓨터 스위치를 누른다.

 

ESP8266을 구글 어시스턴트와 연동하기 위해서는 Sinric Pro라는 서비스가 필요하다. 이를 위해서는 Sinric Pro에 장치를 등록하고 KEY와 토큰등을 발급받는 절차가 필요하다.

 

우선 아래 링크로 Sinric Pro에 접속하고 로그인을 한다.

https://sinric.pro/

반응형
 

Sinric Pro - Connect Amazon Alexa, Google Home with esp8266, esp32, raspberry pi

Drag and drop capabilities that describe the features of your IoT device and build your very own device type and generate the code automatically.

sinric.pro

 

아래 절차를 따라 디바이스를 등록해 준다. 별로 어렵지 않다.

디바이스 등록을 완료하면 위와 같이 디바이스 ID, KEY. SECRET 등의 코드를 받을 수 있다. 저 값들을 위 코드의 빈 부분 ("*****")에 채워 넣자. (와이파이의 SSID와 비밀번호도 물론 집어넣어야 한다.)

 

코드 작성이 완료되면 보드를 컴퓨터와 연결하고 코드를 업로드하면 된다. 아두이노 스케치로 업로드 가능하지만 필자는 PlatformIO를 사용했다.

 

주의할 점은 보드 종류는 ESP-WROOM-02로 설정해야 하며 Sinric Pro 라이브러리가 필요하다. 아래 깃허브 링크를 참고하자.

https://github.com/sinricpro/esp8266-esp32-sdk?utm_source=platformio&utm_medium=piohome 

 

GitHub - sinricpro/esp8266-esp32-sdk: Library for https://sinric.pro - simple way to connect your device to Alexa, Google Home,

Library for https://sinric.pro - simple way to connect your device to Alexa, Google Home, SmartThings and cloud - GitHub - sinricpro/esp8266-esp32-sdk: Library for https://sinric.pro - simple way t...

github.com

 

구글 어시스턴트 사용을 위해 아래와 같이 Sinric Pro를 구글 홈에 등록해 준다.

 

Google 호환 가능을 누르고
Sinric Pro를 검색해서 추가해주면 된다.
그러면 이렇게 컴퓨터 본체 (본인이 정한 이름대로) 스위치가 구글 홈에 보일 것이다.

 

 

필자는 아래와 같이 3D 프린터로 케이스를 만들고 컴퓨터에 연결해 주었다. 

 

작동 영상은 아래를 참고하자

 

일단은 잘 작동하기는 하는데 Sinric Pro가 무료버전은 3대만 연결이 가능하기도 해서 Tuya 디바이스로 제작해볼 생각이다.

반응형
    # 테스트용