산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

알렉사로 구동되는 스마트 홈 모니터링 시스템

부품 및 소모품

부품 수량
아두이노 우노 (Arduino UNO) 1
ESP8266 ESP-01 (Espressif) 1
DHT11 온습도 센서 (4핀) 1
ControlEverything.com 4채널 I2C 릴레이 컨트롤러 1
IR 장애물 센서 1
카메라 1
점퍼 와이어 1

앱 및 온라인 서비스

프로젝트 소개

소개

현대인들은 집보다 직장에서 더 많은 시간을 보냅니다. 따라서 직장에 있으면서 집 상태를 알 수 있는 홈 모니터링 시스템이 필요합니다. 업무 시간에 "누군가"에게 집에 대해 물어볼 수 있다면 더 좋을 것입니다. 이는 아마존 알렉사를 비서로 활용해 사용자가 필요한 집 정보를 제공받도록 함으로써 가능합니다.

직장뿐만 아니라 인터넷 연결과 알렉사 기기만 있으면 세계 어디서든 집 상태를 알 수 있습니다.

이 프로젝트에 구현된 기능:

  1. 가전제품(선풍기, 조명) 제어
  2. 기기 상태 확인
  3. 집 안 날씨(온도, 습도) 확인
  4. 요청 시 집 내부 스냅샷을 지메일로 전송
  5. 다음 상황 알림 전송:
    • 침입자 (사진 포함)
    • 화재
    • 방문자 (사진 포함)

1단계: 아두이노와 ESP8266 프로그래밍

공식 웹사이트에서 아두이노 IDE 다운로드: https://www.arduino.cc/en/Main/Software

아두이노 IDE 열기 → 파일 → 환경설정 → 추가 보드 매니저 URL에 입력: https://arduino.esp8266.com/stable/package_esp8266com_index.json

도구 → 보드 → 보드 매니저 → 가장 아래에 있는 esp8266 패키지 설치.

아두이노 프로그래밍: 아두이노를 USB로 컴퓨터에 연결하고 도구 → 보드에서 Arduino/Genuino UNO 선택. 올바른 COM 포트 선택(장치 관리자에서 확인 가능). 프로그램 작성, 컴파일, 오류 없으면 업로드.

ESP8266 프로그래밍: 아래 다이어그램처럼 연결하세요.

알렉사로 구동되는 스마트 홈 모니터링 시스템
알렉사로 구동되는 스마트 홈 모니터링 시스템

아두이노 USB를 컴퓨터에 연결. 도구 → 보드 → Generic ESP8266 선택, 올바른 COM 포트 선택. 프로그램 작성, 컴파일, 오류 없으면 업로드. 아두이노 RST를 GND에 연결해야 함(아두이노가 ESP8266 프로그래머 역할).

이 프로젝트에서는 먼저 ESP8266을 프로그래밍한 후 회로 연결을 해제합니다. 그런 다음 "회로 연결" 그림과 같이 다시 연결한 후 아두이노를 프로그래밍합니다.

2단계: ThingSpeak.com 구성

ThingSpeak.com 계정 생성.

ThingSpeak의 채널을 사용해 기기 제어 정보를 저장하고 아두이노/알렉사로 라우팅합니다. 온습도 값도 채널에 저장합니다. 일종의 정보 저장소입니다.

채널 → 내 채널 → 새 채널 생성. 채널에 이름과 설명 부여.

이 프로젝트에는 8개 채널이 필요합니다(더 적은 채널로도 가능하지만 프로그래밍이 복잡해짐). ThingSpeak는 채널 업데이트 시 시간 제약이 있어 특정 채널 연속 업데이트 간 10-15초 간격이 필요합니다.

여덟 채널의 값과 의미:

  1. 기기 제어 (0-조명 켬, 1-조명 끔, 2-선풍기 켬, 3-선풍기 끔)
  2. 조명 상태 (0-끔, 1-켜짐)
  3. 선풍기 상태 (0-끔, 1-켜짐)
  4. 습도 (습도 값)
  5. 온도 (온도 값)
  6. 침입자 알림 (1-침입 경보)
  7. 화재 알림 (1-화재 경보)
  8. 방문자 알림 (1-방문자 경보)

채널 클릭 시 채널 ID와 쓰기 API 키를 API 키 탭에서 볼 수 있습니다. 채널 ID는 채널 정보/값을 읽는 데 필요, 쓰기 키는 채널에 값 저장 시 필요.

채널 업데이트 HTTP 요청:

https://api.thingspeak.com/update?api_key=<쓰기키>&field1=<값>

채널에서 값 읽기 HTTP 요청:

https://api.thingspeak.com/channels/<채널ID>/field/field1/last.html

3단계: 프로그램

프로그램은 세 부분으로 나뉩니다:

A) 아두이노 프로그램: 매우 단순합니다. ESP8266에서 시리얼로 데이터를 받아 값에 따라 기기를 제어합니다. 자세한 내용은 프로그램 주석 참조.

B) ESP8266 프로그램: 세 가지 작업 수행

  1. HTTP 요청으로 온습도 업데이트:
client.print(String("GET ") + "/update?key=<쓰기키>&field1=" + humidity + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); // 습도 업데이트
client.print(String("GET ") + "/update?key=<쓰기키>&field1=" + temperature + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); // 온도 업데이트

<쓰기키>는 ThingSpeak 채널의 해당 쓰기 키로 대체. host는 api.thingspeak.com.

DHT 라이브러리 다운로드: https://github.com/adafruit/DHT-sensor-library

  1. ThingSpeak 해당 채널에서 읽어 값에 따라 기기 제어:
client.print(String("GET ") + "/channels/<채널ID>/field/field1/last.html HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

<채널ID>는 ThingSpeak에서 찾은 해당 채널 ID로 대체.

  1. 고온 시 PushingBox로 알림 전송:
String host1="api.pushingbox.com";
client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");

는 PushingBox의 본인 기기 ID로 대체.

4단계: LinkIt Smart 7688 Duo와 웹캠 구성

이 프로젝트에서는 웹캠과 LinkIt Smart 7688 Duo로 필요한 사진을 찍어 사용자에게 전송합니다. 아두이노 카메라 모듈을 아두이노와 인터페이스하거나 IP 카메라를 써도 됩니다.

LinkIt Smart 7688의 와이파이 버튼을 20초간 눌러 보드 리셋. 와이파이 설정 리셋 후 무선 네트워크 연결에서 액세스 포인트 이름이 보임. 컴퓨터를 해당 네트워크에 연결.

브라우저에서 192.168.100.1 접속. 포털이 열림. 로그인 비밀번호 설정.

알렉사로 구동되는 스마트 홈 모니터링 시스템

로그인 후 네트워크 탭에서 Station 모드 선택(인터넷 접속 필요). 와이파이 네트워크에 연결하고 구성 후 재시작.

알렉사로 구동되는 스마트 홈 모니터링 시스템

재시작 후 로컬 IP 할당됨. IP 도구나 라우터 포털로 확인. 제 경우 192.168.1.4.

브라우저 주소창에 로컬 IP 입력. 컴퓨터가 LinkIt Smart와 같은 네트워크에 있는지 확인. 다시 로그인 필요.

웹캠 스트리밍을 위해 MJPG 스트리머 활성화 필요(mjpg-streamer는 JPEG 프레임을 입력 플러그인에서 복사해 여러 출력 플러그인으로 전달하는 명령줄 애플리케이션). 포털 우상단 OpenWrt 위치 클릭. 다시 로그인.

알렉사로 구동되는 스마트 홈 모니터링 시스템

서비스 탭에서 MJPG 스트리머 활성화 체크, 포트 번호 할당. 저는 4440 사용. 저장 후 적용.

알렉사로 구동되는 스마트 홈 모니터링 시스템

설정 후 웹캠을 OTG 케이블로 LinkIt Smart 7688 Duo USB 호스트에 연결.

스트림 보기: 브라우저에서 <로컬 IP>:<포트> 접속. 제 경우 192.168.1.4:4400

알렉사로 구동되는 스마트 홈 모니터링 시스템

스냅샷 찍기: <로컬 IP>:<포트>?action=snapshot

알렉사로 구동되는 스마트 홈 모니터링 시스템

이 이미지는 로컬에서만 접근 가능하지만 PushingBox 서비스가 접근할 수 있게 해야 함. 이를 위해 포트 포워딩 필요. 라우터 포털에서 설정. 과정은 라우터마다 다름. 구글에 특정 라우터 포트 포워딩 방법 검색. 보통 NAT 서비스 아래에 있음.

포트 포워딩 후 외부 IP로 이 포트(4440) 접근 가능. 외부 IP는 구글에 "whats my ip" 검색으로 확인.

이 주소(예: https://<외부 IP>:<포트>?action=snapshot)를 PushingBox(다음 단계 설명)에 입력해 PushingBox가 이미지에 접근해 필요할 때 메일에 첨부해 전송하게 함.

LinkIt Smart 7688 Duo의 SD 카드 슬롯에 이미지 저장도 가능.

자세한 정보: https://docs.labs.mediatek.com/resource/linkit-smart-7688/en/get-started/get-started-with-the-linkit-smart-7688-duo-development-board/

5단계: PushingBox 구성

PushingBox는 프로젝트의 다양한 알림을 지메일로 전송하는 데 사용.

구글 계정으로 PushingBox 로그인: https://www.pushingbox.com/

내 서비스 → 서비스 추가. 지메일, 트위터, 안드로이드 푸시 알림 등 다양한 서비스 선택 가능.

지메일 선택(사진 첨부 필요). 적절한 지메일 구성 이름과 알림 받을 사용자 지메일 입력.

내 시나리오 → 새 시나리오 생성. 시나리오 이름 부여(예: ALERT), 앞서 만든 서비스 추가.

알렉사로 구동되는 스마트 홈 모니터링 시스템

메일 제목과 본문 작성, 웹캠 스크린샷 찍는 URL 입력해 사진 첨부. 알림 종류별로 다른 시나리오 생성.

PushingBox 시나리오 실행 API: https://api.pushingbox.com/pushingbox?devid=<기기ID>

6단계: Backendless로 알렉사 스킬 생성

Backendless는 알렉사 스킬을 생성하는 데 사용. 단순 드래그 앤 드롭 프로그래밍으로 알렉사 스킬(또는 모든 프로그램)을 만들어 Backendless API로 접근 가능.

  1. Backendless 계정 생성: https://backendless.com/
  2. 로그인 후 앱 생성, 이름 지정.
  3. 왼쪽 아이콘 막대에서 비즈니스 로직 아이콘 클릭. API 서비스 화면 표시.
  4. "+" 아이콘 클릭해 새 서비스 생성. "새 서비스" 팝업에서 CODELESS 선택. 서비스 이름 "AlexaService" 입력. 저장.
알렉사로 구동되는 스마트 홈 모니터링 시스템
  1. Backendless가 API 서비스 생성 후 서비스 메서드 생성 유도. 알렉사 요청 처리할 메서드. 메서드 이름 "handleRequest" 입력. REST 작업으로 POST 선택, 인수 이름 "req", 타입 "Any Object"로 선언.
알렉사로 구동되는 스마트 홈 모니터링 시스템
  1. Backendless가 메서드의 코드리스 로직 플레이스홀더 생성. EDIT 버튼 클릭해 코드리스 로직 디자이너로 전환.

생성된 함수 플레이스홀더 블록에서 "doSomething" 영역을 클릭해 "sendAlexaResponse"로 변경. 이 함수는 인수로 전달된 내용을 알렉사가 말하게 함. 저장 버튼 클릭.

알렉사로 구동되는 스마트 홈 모니터링 시스템

보라색 블록 오른쪽 기어 아이콘 클릭. 입력 블록 드래그해 인수 두 개 추가. 인수 이름을 "whatToSay"와 "waitForResponse"로 지정. 인수 추가 시 컨텍스트 블록 영역에 인수 값을 나타내는 블록이 자동 채워짐.

알렉사로 구동되는 스마트 홈 모니터링 시스템

함수 로직을 아래 이미지처럼 수정. "객체 생성" 블록의 기어 아이콘으로 객체 속성 이름 변경. 저장 버튼 클릭해 작업 저장.

알렉사로 구동되는 스마트 홈 모니터링 시스템

커스텀 함수 완성 후 AlexaService 서비스의 handleRequest 메서드로 돌아가기. 왼쪽 툴바의 커스텀 함수 카테고리에서 sendAlexaResponse 블록 드래그해 서비스 메서드의 리턴 커넥터에 연결.

알렉사로 구동되는 스마트 홈 모니터링 시스템

위 단계는 다음 웹사이트에서도 확인 가능:

브라우저 섹션의 Functions 아래 "새 노드 추가" 클릭. 생성된 함수 플레이스홀더에서 "doSomething"을 "getIntentName"으로 변경.

알렉사로 구동되는 스마트 홈 모니터링 시스템

블록을 아래 이미지처럼 수정:

알렉사로 구동되는 스마트 홈 모니터링 시스템
알렉사로 구동되는 스마트 홈 모니터링 시스템

이렇게 샘플 발화에 기반한 인텐트 이름 획득. API 서비스 → <앱 이름> → 브라우저 섹션의 handle request로 돌아가기. 시스템 섹션에서 변수와 로직 생성. 다음 변수들 생성:

알렉사로 구동되는 스마트 홈 모니터링 시스템

인텐트 이름을 요청 변수에 저장. 그런 다음 인텐트들과 비교. 예: 요청이 "introduction"이면 응답 변수를 "안녕! 나는 조명 제어 등을 할 수 있어..."로 설정. 마지막에 알렉사가 이 응답을 읽음.

블록을 아래와 같이 수정:

알렉사로 구동되는 스마트 홈 모니터링 시스템

요청이 LightsOn 인텐트면 ThingSpeak 채널을 '0'으로 업데이트(HTTP GET 요청)하고 동시에 기기 상태 업데이트(켜짐/꺼짐에 따라 1/0). LightsOff, FanOn, FanOff도 동일.

알렉사로 구동되는 스마트 홈 모니터링 시스템

날씨 요청 시 온도/습도 채널에서 읽어 응답 변수에 저장. 채널은 값만 주므로 텍스트 추가해 의미 있는 응답 만듦:

알렉사로 구동되는 스마트 홈 모니터링 시스템

거실 스냅샷 요청 시 PushingBox 시나리오 실행:

알렉사로 구동되는 스마트 홈 모니터링 시스템

기기 상태 요청 시 ThingSpeak 상태 채널에서 정보 읽기:

알렉사로 구동되는 스마트 홈 모니터링 시스템

알림/경보 요청 시 경보 채널(화재, 침입자, 방문자)에서 읽기:

알렉사로 구동되는 스마트 홈 모니터링 시스템

알림 필드에서 얻은 값에 따라 해당 경보 메시지를 respond0 변수에 저장. 알림 없으면 메시지 저장 안 함.

알렉사로 구동되는 스마트 홈 모니터링 시스템

알림 읽어주면 알림 채널에 '0' 업데이트해 알렉사가 같은 알림을 다시 읽지 않게 함. 마지막에 요청에 따라 respond0/respond 변수 읽어줌.

알렉사로 구동되는 스마트 홈 모니터링 시스템

중요: Backendless에서 필수 모델 생성 후 코드리스 화면 우상단의 "모델 배포" 클릭해 모델 배포.

7단계: 아마존 개발자 콘솔에서 알렉사 스킬 구성

아마존 개발자 콘솔 접속, 아마존 계정으로 로그인: https://developer.amazon.com/

개발자 콘솔 → 알렉사 탭 → 알렉사 스킬 키트 시작.

알렉사로 구동되는 스마트 홈 모니터링 시스템

사용자 지정 스킬 타입 생성, 스킬 이름과 호출 이름 부여.

해당 인텐트와 샘플 발화는 아래 코드에 있음.

{
  "languageModel": {
    "intents": [
      {"name": "AMAZON.CancelIntent", "samples": []},
      {"name": "AMAZON.HelpIntent", "samples": []},
      {"name": "AMAZON.StopIntent", "samples": []},
      {"name": "Camera", "samples": ["please send a snapshot of my living room", "please send a snapshot of my home", "please send a photo of my living room", "please send a photo of my home"], "slots": []},
      {"name": "FanOff", "samples": ["turn off Fan", "switch off Fan", "turn off the Fan", "switch off the Fan"], "slots": []},
      {"name": "FanOn", "samples": ["turn on Fan", "switch on Fan", "turn on the Fan", "switch on the Fan"], "slots": []},
      {"name": "Introduction", "samples": ["what you can do", "what can you do", "what can you do for me"], "slots": []},
      {"name": "LightsOff", "samples": ["turn off lights", "switch off lights", "turn off the lights", "switch off the lights"], "slots": []},
      {"name": "LightsOn", "samples": ["turn on lights", "switch on lights", "turn on the lights", "switch on the lights"], "slots": []},
      {"name": "Notification", "samples": ["what are my notifications", "is there any notifications", "is there any updates", "read out my notifications"], "slots": []},
      {"name": "Status", "samples": ["what is my device status", "what is the status of my devices"], "slots": []},
      {"name": "Weather", "samples": ["what is the weather condition of my home", "what is the weather of my home", "what is the weather", "what is the temperature of my home", "what is the temperature"], "slots": []}
    ],
    "invocationName": "my home"
  }
}

구성 탭에서 서비스 엔드포인트 유형으로 HTTPS 선택, 기본 URL에 Backendless의 API URL 입력.

알렉사로 구동되는 스마트 홈 모니터링 시스템
알렉사로 구동되는 스마트 홈 모니터링 시스템

기본 엔드포인트 SSL 인증서에서 2번째 옵션 선택. 테스트 시뮬레이터로 스킬 테스트 가능.

테스트 완료 후 필요한 배포 정보로 스킬 게시.

8단계: 최종 설정 및 마무리!

아래와 같이 회로 연결:

알렉사로 구동되는 스마트 홈 모니터링 시스템
알렉사로 구동되는 스마트 홈 모니터링 시스템

때때로 ESP8266이 전류 부족으로 오작동할 수 있습니다. 회로도에 언급되지 않았지만, ESP8266을 별도 3.3V 전원으로 공급하는 것을 권장합니다. 파워뱅크 사용 시 3.3V 전압 레귤레이터로 5V를 3.3V로 낮춰 사용하세요.

ESP8266과 아두이노에 프로그램 업로드. 전구 연결 예시를 보였으며, 선풍기나 다른 기기도 같은 방식으로 확장 가능.

아마존 에코나 echosim.io로 스킬 테스트.

반드시 호출 이름(제 경우 "my home")으로 스킬을 활성화해야 합니다. 호출 이름 없이 사용하면 작동하지 않을 수 있습니다(영상에서 몇 번 보여드림).

튜토리얼이 도움이 되셨길 바랍니다!

감사합니다!

코드

Smart_bell_ESP8266.ino

/* Smart Bell & Home Security */
#include 
#include 
int intruder=0, guest=2; // 핀 0: 침입자 알림, 핀 2: 방문자 알림
const char* ssid = "SSID"; const char* password = "password";
const char* host = "api.thingspeak.com";
void setup() {
  Serial.begin(115200); delay(10);
  Serial.println(); Serial.print("Connecting to "); Serial.println(ssid);
  WiFi.mode(WIFI_STA); 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());
}
int value = 0; int x,y=0,z,k=0;
void loop() {
  delay(1000); ++value;
  Serial.print("connecting to "); Serial.println(host);
  WiFiClient client; const int httpPort = 80;
  if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; }
  // 침입자 알림
  x = digitalRead(intruder);
  if(x==0) { y=0; }
  if(x==1 && y==0) {
    Serial.println("Sending Alert Pls Wait....."); delay(1000);
    String host1="api.pushingbox.com";
    client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");
    client.print(String("GET ") + "/update?api_key=&field1=1 HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    delay(1000); y=1;
  }
  // 방문자 알림
  long t1; z = digitalRead(guest);
  if(z==0 && (millis() >= t1+300000)) { k=0; } // 5분 대기해 중복 알림 방지
  if(z==1 && k==0) { // x==1 오타로 보임, z==1이 맞을 듯
    t1 = millis();
    Serial.println("Sending Alert Pls Wait....."); delay(1000);
    String host1="api.pushingbox.com";
    client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");
    client.print(String("GET ") + "/update?api_key=&field1=1 HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    delay(1000); k=1;
  }
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) { Serial.println(">>> Client Timeout !"); client.stop(); return; }
  }
}

Home_monitor_arduino.ino

// Home Automation
#include 
#include 
#define Light 2  // 핀 2: 조명 제어
#define fan 3    // 핀 3: 선풍기 제어
char e; int p=0, q=0; // 이미 켜진/꺼진 기기 중복 제어 방지
SoftwareSerial home_monitor(10, 11); // RX, TX
char control_data;
void setup() {
  home_monitor.begin(115200); Serial.begin(9600); pinMode(13, OUTPUT);
}
void loop() {
  if (home_monitor.available()) {
    control_data = home_monitor.read(); e = control_data; Serial.print(control_data);
    // 기기 제어
    if(e=='0' && p==0) { digitalWrite(Light, LOW); p=1; } // 조명 켬
    if(e=='1' && p==1) { digitalWrite(Light, HIGH); p=0; } // 조명 끔
    if(e=='2' && q==0) { digitalWrite(fan, HIGH); q=1; } // 선풍기 켬
    if(e=='3' && q==1) { digitalWrite(fan, LOW); q=0; } // 선풍기 끔
  }
}

Home_Monitor_ESP8266.ino

/* ThingSpeak에 날씨 정보 업데이트 및 제어 정보 검색 */
#include 
#include 
#include "DHT.h"
#define DHTTYPE DHT11
#define dht_dpin 2
DHT dht(dht_dpin, DHTTYPE);
char c, e; float temp, h;
String humidity, temperature, line; int co=0;
const char* ssid = "SSID"; const char* password = "password";
const char* host = "api.thingspeak.com";
void setup() {
  dht.begin(); Serial.begin(115200); delay(10);
  Serial.println(); Serial.print("Connecting to "); Serial.println(ssid);
  WiFi.mode(WIFI_STA); 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());
}
void loop() {
  delay(1000);
  WiFiClient client; const int httpPort = 80;
  if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; }
  // 미니 기상 관측소
  h = dht.readHumidity(); temp = dht.readTemperature();
  if(temp < 50.0) { co=0; }
  if(temp >= 50.0 && co==0) {
    Serial.println("Sending Alert please wait......."); delay(1000);
    String host1="api.pushingbox.com";
    client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");
    delay(1000);
    client.print(String("GET ") + "/update?key=&field1=1 HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    co=1;
  }
  humidity = String(h); temperature = String(temp);
  client.print(String("GET ") + "/update?key=&field1=" + humidity + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  client.print(String("GET ") + "/update?key=&field1=" + temperature + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  // 아두이노로 제어 정보 시리얼 전송
  client.print(String("GET ") + "/channels//field/field1/last.html HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) { Serial.println(">>> Client Timeout !"); client.stop(); return; }
  }
  while(client.available()) { line = client.readStringUntil('\r'); }
  Serial.print(line); // 아두이노가 시리얼로 수신
}

회로도

알렉사로 구동되는 스마트 홈 모니터링 시스템
알렉사로 구동되는 스마트 홈 모니터링 시스템

제조공정

  1. 스마트 홈 기술이 일상을 바꾸는 방법
  2. RFID 기반 홈 보안: 저비용, 배터리 프리 모니터링 솔루션
  3. 로라(LoRa) 기반 스마트시티 대기질 모니터링 시스템 – 태양광 자립형 IoT 노드
  4. 스마트 홈 연동을 위한 다중 위치 온도 센서 시스템
  5. K30 CO2 센서: 실시간 실내 공기질 모니터링
  6. 스마트 3D 센서: 아마존 에코 음성 제어 램프 – Walabot & LattePanda
  7. 아두이노 나노 기반 스마트 홈 식물 자동 급수 시스템
  8. 알렉사 연동 아두이노 홈 컨트롤러: 음성으로 스마트홈 제어하기
  9. 학교용 스마트 체온 모니터링 시스템: 정확하고 실시간이며 안전한
  10. 아두이노 나노 날씨 스테이션: 센서 키트 & OLED 디스플레이