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

Alexa 기반 스마트 홈 모니터링

구성품 및 소모품

Arduino UNO
× 1
Espressif ESP8266 ESP-01
× 1
DHT11 온도 및 습도 센서(4핀)
× 1
ControlEverything.com I2C용 4채널 릴레이 컨트롤러
× 1
IR 장애물 센서
× 1
카메라
× 1
점퍼 와이어(일반)
× 1

앱 및 온라인 서비스

Arduino IDE
Amazon Alexa Alexa 기술 키트
Amazon Alexa echosim.io
ThingSpeak API
백엔드리스
푸싱박스

이 프로젝트 정보

소개:

현대 사회에서 사람들은 집보다 직장에서 더 많은 시간을 보냅니다. 따라서 사람들이 직장에 있는 동안 집의 상태를 알 수 있는 홈 모니터링 시스템이 필요합니다. 근무 시간에 "누군가"에게 집에 대해 물어볼 수 있다면 더욱 좋습니다. 이것은 사용자에게 집에 대한 필요한 정보를 제공할 수 있는 도우미로 Amazon Alexa를 사용하여 수행할 수 있습니다.

Work Place 뿐만 아니라 사용자는 인터넷과 Amazon Alexa 기기만 있으면 전 세계 어느 곳에서나 집 상태를 알 수 있습니다.

이 프로젝트에서 구현되는 기능은 다음과 같습니다.

1) 선풍기, 조명 등 가정용 기기 제어

2) 장치의 상태를 알려줍니다.

3) 집의 날씨(온도, 습도)를 알려줍니다.

4) 필요한 경우 집 내부의 스냅샷을 Gmail을 통해 사용자에게 보냅니다.

5) -

의 경우 알림을 보냅니다.

* 침입자(사진도 전송)

* 불

* 게스트(사진도 보냅니다)

프로젝트에 관련된 단계:

1단계:Arduino 및 ESP8266 프로그래밍

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

Arduino IDE를 열고 추가 보드 관리자 URL 유형에서 파일-> 기본 설정->으로 이동합니다. - http://arduino.esp8266.com/stable/package_esp8266com_index.json

도구 -> 보드 -> 보드 관리자 -->로 이동하여 마지막으로 찾은 esp8266 패키지를 설치합니다.

arduino 프로그래밍하기 arduino에서 컴퓨터에 USB 케이블을 연결하고 도구-> 보드에서 Arduino/Genuino UNO를 선택하기만 하면 됩니다. 또한 도구에서 올바른 COM 포트를 선택했는지 확인하십시오(COM 포트 번호는 장치 관리자에서 찾을 수 있음). 필요한 프로그램을 작성하고 컴파일한 후 오류가 없으면 업로드를 클릭하십시오.

ESP8266을 프로그래밍하려면 그림과 같이 연결하십시오

arduino에서 컴퓨터에 USB를 연결합니다. 도구-> 보드-> 일반 ESP8266을 선택하고 올바른 COM 포트도 선택하십시오. 필요한 프로그램을 작성하고, 컴파일하고, 오류가 없으면 업로드를 클릭하십시오. Arduino RST를 GND에 연결했는지 확인하십시오(arduino는 ESP8266에 대해 프로그래머처럼 작동합니다).

이 프로젝트에서는 먼저 ESP8266을 프로그래밍한 다음 회로 연결을 제거합니다. 그런 다음 "회로 연결"이라는 그림과 같이 회로가 다시 연결됩니다. 그리고 arduino는 프로그래밍됨

2단계:thingspeak.com 구성

thingspeak.com에서 계정을 만드세요.

장치 제어 정보를 저장하고 arduino/alexa로 라우팅하기 위해 thingspeak의 채널을 사용합니다. 또한 채널에 온도 및 습도 값을 저장합니다. 정보의 저장 위치와 같습니다.

채널--> 내 채널로 이동하여 새 채널을 만듭니다. 채널에 이름과 설명을 입력하세요.

우리 프로젝트에서는 8개의 채널이 필요합니다(더 적은 채널을 사용하여 작업을 수행할 수 있지만 프로그래밍하는 동안 약간 복잡합니다). 또한 thingspeak는 채널을 업데이트하는 동안 시간 제약이 있습니다. 특정 채널의 연속 업데이트 사이에는 10-15초의 간격이 있어야 합니다.

그 가치와 의미가 있는 8개의 채널이 아래에 나와 있습니다.

채널명(값1 의미, 가치2 의미 등):

1) 장치 제어 (0 -lightON, 1-lightOff, 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=<값>

<쓰기 키>는 해당 채널의 쓰기 키로 대체되며 값은 (장치 제어 또는 온도/습도 값의 경우 0/1)

일 수 있습니다.

채널에서 값 읽기에 대한 http 요청:

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

는 읽고자 하는 채널의 특정 채널 id로 대체됩니다.

3단계:프로그램

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

A) Arduino용 프로그램 :arduino용 프로그램은 매우 간단합니다. ESP8266에서 데이터를 직렬로 수신하고 수신된 데이터를 기반으로 장치를 제어합니다. 프로그램에 대한 자세한 내용은 프로그램 자체의 설명에서 찾을 수 있습니다.

B) ESP8266용 프로그램 : ESP8266을 위한 프로그램에는 3가지가 포함됩니다.

1) http 요청을 사용하여 온도 및 습도 업데이트

client.print(String("GET ") + "/update?key=<쓰기 키>&field1="+humidity+" HTTP/1.1\r\n" + "호스트:" + 호스트 + " \r\n" + "연결:닫기\r\n\r\n"); //습도 업데이트 client.print(String("GET ") + "/update?key=<쓰기 키>&field1="+temperature+" HTTP/1.1\r\n" + "호스트:" + 호스트 + "\r \n" + "연결:닫기\r\n\r\n"); // 온도 업데이트 

<쓰기 키>는 각각 습도 및 온도에 대한 thingspeak 채널에서 발견되는 해당 쓰기 키로 대체됩니다. 호스트는 api.thingspeak.com입니다.

https://github.com/adafruit/DHT-sensor-library

에서 dht 라이브러리 다운로드

2) thingspeak의 해당 채널에서 읽고 얻은 값을 기반으로 장치를 제어합니다.

client.print(String("GET") + "/channels/<채널 ID>/field/field1/last.html HTTP/1.1\r\n" + "호스트:" + 호스트 + " \r\n" + "연결:닫기\r\n\r\n"); 

여기서 는 thingspeak에서 찾은 해당 채널 ID로 대체됩니다.

3) 푸싱박스를 통한 고온시 경고발송

String host1="api.pushingbox.com";client.print(String("GET ") + "/pushingbox?devid=<귀하의 개발 ID> HTTP/1.1\r\n" + "호스트 :" + host1 + "\r\n" + "연결:닫기\r\n\r\n"); 

여기서 는 pushbox의 기기 ID로 대체됩니다.

4단계:linkit smart 7688 듀오 및 웹캠 구성

n 이 프로젝트의 웹캠과 linkit smart 7688 duo는 필요한 사진을 캡처하여 사용자에게 보내는 데 사용됩니다. 또한 arduino 카메라 모듈을 사용하여 arduino와 인터페이스하거나 모든 IP 카메라를 사용할 수 있습니다.

linkit smart 7688의 wifi 버튼을 20초 동안 누르고 있으면 보드가 재설정됩니다. 그런 다음 Wi-Fi 설정이 재설정되면 무선 네트워크 연결에서 액세스 포인트 이름을 볼 수 있습니다. 이제 컴퓨터를 해당 네트워크에 연결하십시오.

연결한 후 브라우저를 열고 주소 표시줄에 192.168.100.1을 입력합니다. 포털을 볼 수 있습니다.

포털에 로그인하려면 비밀번호를 설정하세요.

로그인 후 네트워크 탭으로 이동하여 스테이션 모드(인터넷에 액세스하려면 필요함(linkit smart 7688 duo))를 선택하고 Wi-Fi 네트워크에 연결하고 구성 및 다시 시작을 누릅니다.

보드가 다시 시작된 후 로컬 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입니다.

스냅샷을 찍으려면 :?action=snapshot

명령을 입력하십시오.

이제 이 이미지는 로컬에서 사용할 수 있지만 푸시 박스 서비스에서 사용할 수 있도록 해야 합니다. 이를 달성하려면 포트 전달을 수행해야 합니다. 포트 포워딩은 라우터 포털에서 수행할 수 있습니다. 라우터마다 프로세스 ID가 다릅니다. 특정 라우터에 대한 포트 포워딩 방법을 알아보려면 Google을 참조하십시오. 일반적으로 NAT 서비스에서 사용 가능합니다.

포트 포워드 사용 후에는 외부 IP에서 이 포트(예:4440)에 액세스할 수 있습니다. 구글에서 "Whats my ip"를 입력하면 외부 IP를 알 수 있습니다.

이 주소(예:http://:?action=snapshot)를 pushbox에 넣어야 합니다(다음 단계에서 설명). 그러면 pushbox가 이 이미지에 액세스하여 메일에 첨부할 수 있고 필요할 때마다 보내주십시오.

Linkit smart 7688 duo에는 정보를 저장하기 위한 sd 카드 슬롯도 함께 제공되므로 sd 카드에 이미지를 저장할 수도 있습니다.

이에 대한 자세한 정보는 https://docs.labs.mediatek.com/resource/linkit-smart-7688/en/get-started/get-started-with-the-linkit-smart-7688-duo에서 확인할 수 있습니다. -개발 보드/

5단계:PushingBox 구성

pushbox는 프로젝트의 다양한 알림에 대한 알림을 Gmail로 보내는 데 사용됩니다.

Google 계정을 사용하여 pushbox에 로그인:https://www.pushingbox.com/

내 서비스--> 서비스 추가로 이동합니다. Gmail, 트위터, Android용 푸시 알림 등 선택할 수 있는 서비스가 많이 있습니다...

Gmail을 선택하고(사진을 첨부파일로 보내야 하므로) 적절한 Gmail 이름 구성과 알림을 보낼 사용자의 Gmail ID를 입력합니다.

내 시나리오로 이동하여 새 시나리오를 만듭니다. 시나리오에 이름을 지정합니다(예:ALERT). 이전에 생성된 서비스를 추가합니다.

메일의 적절한 제목과 본문을 작성하고 url을 입력하면 사진첨부용 웹캠 스크린샷을 찍을 수 있습니다. 다양한 알림에 대해 다양한 시나리오를 만드세요.

푸싱박스 시나리오 실행을 위한 api :http://api.pushingbox.com/pushingbox?devid=

6단계:백엔드를 사용하여 Alexa 기술 만들기

backendless는 Alexa 기술을 만드는 데 사용됩니다. 간단한 드래그 앤 드롭 프로그래밍입니다. 백엔드 없는 API로 액세스할 수 있는 Alexa 기술(또는 모든 프로그램)을 만드는 데 사용됩니다.

백엔드에서 계정 생성:https://backendless.com/

<울>
  • 백엔드리스 계정으로 계정에 로그인합니다. 앱 만들기를 클릭하고 앱에 이름을 지정/
  • <울>
  • 왼쪽 아이콘 바에 있는 Business Logic 아이콘을 클릭합니다. API 서비스 화면이 표시됩니다.
  • <울>
  • 새 서비스를 생성하려면 "+" 아이콘을 클릭하십시오. "새 서비스" 팝업에서 CODELESS를 선택해야 합니다. 서비스 이름에 "AlexaService"를 입력합니다. 저장 버튼 클릭:
  • <울>
  • Backendless는 API 서비스를 생성하고 서비스에 대한 메서드를 생성하라는 메시지를 표시합니다. 이것은 Alexa의 요청을 처리하는 방법입니다. 메소드 이름으로 "handleRequest"를 입력합니다. REST 작업에 대해 POST를 선택했는지 확인하고 "req"라는 이름으로 인수를 선언하고 아래와 같이 "Any Object"를 입력합니다.
  • Backendless는 메서드의 코드 없는 논리에 대한 자리 표시자를 만듭니다. EDIT 버튼을 클릭하여 Codeless Logic Designer로 전환을 시작합니다.

    생성된 함수 자리 표시자 블록에서 "doSomething"이라고 표시된 영역을 클릭하고 "sendAlexaResponse"로 변경합니다. 이 함수는 alexa가 인수로 전달할 수 있는 것을 말하게 하는 데 사용됩니다. SAVE 버튼을 클릭하면 기능이 저장됩니다:

    "Function"이라는 단어 바로 옆에 있는 보라색 블록에 있는 톱니바퀴 아이콘을 클릭합니다. 아래 이미지와 같이 입력 블록을 드래그하여 두 개의 인수를 추가합니다. 인수의 이름을 "whatToSay" 및 "waitForResponse"로 지정합니다. 인수를 추가하면 컨텍스트 블록 영역이 인수 값을 나타내는 블록으로 자동으로 채워집니다.

    아래 이미지와 같이 함수의 로직을 수정합니다. "Create Objects" 블록의 경우 기어 아이콘을 사용하여 개체 속성의 이름을 변경합니다. 저장 버튼을 클릭하여 작업을 저장하는 것을 잊지 마십시오.

    이제 사용자 지정 함수가 빌드되었으므로 AlexaService 서비스의 handleRequest 메서드로 다시 전환합니다. 왼쪽 도구 모음에서 Custom Functions 카테고리를 클릭하고 sendAlexaResponse 블록을 끌어 서비스 메서드의 반환 커넥터에 연결합니다.

    위의 단계는 다음 웹사이트에서도 확인할 수 있습니다.

    https://backendless.com/developing-an-alexa-skill-without-writing-any-code-part2-slots/

    BROWSER 섹션의 Functions 아래에 있는 "Add New" 노드를 클릭합니다. 생성된 function placeholder 블록에서 "doSomething"이라고 표시된 영역을 클릭하고 "getIntentName"으로 변경합니다.

    함수가 다음과 같이 보이도록 블록을 수정합니다.

    이것은 샘플 발화를 기반으로 인텐트 이름을 얻습니다. 브라우저 섹션에서 API 서비스-><앱 이름>-->요청 처리로 돌아갑니다. 변수와 로직은 시스템 섹션에서 생성됩니다. 다음 변수를 만듭니다.

    다음으로 요청 변수에 대한 인텐트 이름을 저장합니다. 그런 다음 의도와 비교합니다. 예를 들어 요청이 "소개"인 경우 응답 변수는 "안녕하세요! 제어할 수 있습니다......."로 설정되고 이 응답은 마침내 Alexa가 큰 소리로 읽습니다.

    아래와 같이 블록을 수정합니다.

    요청이 LightsOn 의도인 경우 http get 요청을 사용하여 thingspeak 채널을 '0'으로 업데이트하고 동시에 장치 상태(On/Off에 따라 1/0)를 업데이트합니다. LightOff, FanOn 및 FanOff에서도 동일한 작업이 반복됩니다.

    날씨의 경우 온도 및 습도 채널에서 읽고 결과를 응답 변수에 저장합니다. 채널은 값만 제공하므로 응답을 의미 있게 만들기 위해 텍스트를 추가합니다.

    거실의 스냅샷을 위해 우리는 pushbox 시나리오를 실행합니다:

    장치 상태의 경우 thingspeak의 상태 채널에서 정보를 읽습니다.

    알림 채널(화재, 침입자 및 게스트)에서 읽은 알림 및 알림:

    알림 필드에서 얻은 값을 기반으로 해당 경고 메시지는 respond0 변수에 저장됩니다. 알림이 없으면 알림 메시지가 저장되지 않습니다.

    알림을 읽으면 알렉사가 동일한 알림을 다시 읽지 않도록 알림 채널에서 '0'이 업데이트됩니다. 그런 다음 마침내 요청에 따라 respond0/respond 변수를 소리내어 읽습니다.

    추신 :backendless에서 필요한 모델을 생성한 후, 코드리스 화면 우측 상단의 모델 배포를 클릭하여 모델을 배포합니다.

    7단계:Amazon 개발자 콘솔에서 Alexa 기술 구성:

    amazon 개발자 콘솔로 이동하여 amazon 계정을 사용하여 로그인합니다. https://developer.amazon.com/

    개발자 콘솔로 이동하여 ALEXA 탭을 클릭합니다. Alexa Skills Kit 시작하기를 클릭하세요.

    사용자 지정 기술 유형을 만들고 기술에 이름과 호출 이름을 지정합니다.

    각각의 의도와 샘플 발화는 아래 코드에 나와 있습니다.

    { "언어 모델":{ "의도":[ { "이름":"AMAZON.CancelIntent", "샘플":[] }, { "이름":"AMAZON.HelpIntent", "샘플" :[] }, { "name":"AMAZON.StopIntent", "samples":[] }, { "name":"Camera", "samples":[ "제 거실 사진을 보내주세요", " 우리 집 사진을 보내주세요", "거실 사진을 보내주세요", "우리 집 사진을 보내주세요" ], "slots":[] }, { "name":"FanOff", "samples ":[ "팬 끄기", "팬 끄기", "팬 끄기", "팬 끄기" ], "슬롯":[] }, { "이름":"FanOn", "샘플" :[ "팬 켜기", "팬 켜기", "팬 켜기", "팬 켜기" ], "슬롯":[] }, { "이름":"소개", "샘플":[ "할 수 있는 일", "할 수 있는 일", "나를 위해 무엇을 할 수 있는지" ], "슬롯":[] }, { "이름":"LightsOff", "샘플":[ "끄기 조명", "조명 끄기", "조명 끄기", "조명 끄기" ], "슬롯":[] }, { "이름":"LightsOn", "샘플":[ "조명 켜기" ", "조명 켜다", "조명 켜다", "라이트 켜기" ], "슬롯":[] }, { "이름":"알림", "샘플":[ "내 알림은 무엇입니까", "알림이 있습니까", "업데이트가 있습니까" , "내 알림 읽기" ], "slots":[] }, { "name":"Status", "samples":[ "what is my device status", "what is the status of my devices" ], "slots":[] }, { "name":"날씨", "samples":[ "우리 집 날씨는 어때요", "우리 집 날씨는 어때요", "날씨는 어때요", "우리 집 온도가 얼마야", "온도가 얼마야" ], "슬롯":[] } ], "invocationName":"우리 집" }} 

    구성 탭에서 서비스 끝점 유형으로 HTTPS를 선택합니다. 기본 URL을 백엔드의 API URL로 채웁니다.

    SSL 인증서의 기본 끝점에 대한 인증서에서 두 번째 옵션을 선택합니다. 테스트 시뮬레이터를 사용하여 스킬을 테스트할 수도 있습니다.

    테스트가 완료된 후 필요한 게시 정보와 함께 기술을 게시할 수 있습니다.

    8단계:최종 설정 및 완료!

    아래와 같이 회로를 연결합니다.

    가끔 ESP8266 오작동 때문에 부족함 현재. 그래서 그래도 아님 언급됨 안에 회로, 그것 이다 별도의 3.3v에서 ESP8266에 전원을 공급하는 것이 좋습니다. 출처. 만약 당신 있다 사용 은행 3.3v 전압 조정기를 사용하여 전압을 5v에서 3.3v로 낮추십시오.

    ESP8266 및 arduino에 프로그램을 업로드합니다. 나는 전구에 연결하는 것을 보여줬고, 같은 것을 팬이나 모든 장치로 확장할 수 있습니다.

    마지막으로 amazon echo 또는 echosim.io를 사용하여 기술을 테스트하십시오.

    당신 반드시 활성화 스킬 사용 호출 이름 ( 으로 이다 나의 케이스 - "나의 집'). 가끔 그것 하지 않을 것 만약 그것 이다 중고 없음 호출 이름 으로 있다 표시됨 커플 안에 나의 동영상.

    튜토리얼을 즐겼기를 바랍니다!

    감사합니다!

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Smart_bell_ESP8266.ino
  • Home_monitor_arduino.ino
  • 홈_모니터_ESP8266.ino
  • Smart_bell_ESP8266.ino아두이노
    침입자와 손님에 대한 경고를 받기 위한 ESP8266용 코드
    /* * 이 스케치는 스마트 벨 및 홈 보안의 구현입니다. * */#include #include//----- -------------------------------------// 변수//-------- ----------------------------------int 침입자=0,손님=2; // 0번 핀을 침입자 경보로, 2번 핀을 게스트로 alertconst char* ssid ="SSID"; //WIFIconst의 SSID char* password ="password"; // 와이파이 비밀번호 //------------------------------------------ -const char* 호스트 ="api.thingspeak.com"; 무효 setup() { Serial.begin(115200); 지연(10); // WiFi 네트워크에 연결하여 시작합니다. Serial.println(); 직렬.println(); Serial.print("연결 중 "); Serial.println(ssid); /* ESP8266을 명시적으로 WiFi 클라이언트로 설정합니다. 그렇지 않으면 기본적으로 클라이언트와 액세스 포인트 모두의 역할을 하려고 하므로 WiFi 네트워크의 다른 WiFi 장치에 네트워크 문제를 일으킬 수 있습니다. */ WiFi.mode(WIFI_STA); WiFi.begin(ssid, 비밀번호); 동안 (WiFi.status() !=WL_CONNECTED) { 지연(500); Serial.print("."); } 직렬.println(""); Serial.println("와이파이 연결됨"); Serial.println("IP 주소:"); Serial.println(WiFi.localIP());}int 값 =0;int x,y=0,z,k=0;void 루프() {지연(1000); ++값; Serial.print("연결 중"); Serial.println(호스트); // WiFiClient 클래스를 사용하여 TCP 연결 생성 WiFiClient 클라이언트; const int httpPort =80; if (!client.connect(host, httpPort)) { Serial.println("연결 실패"); 반품; } Serial.print("요청 URL:"); //================================================================================================================// 침입자 경고 //================================================================================================================x=digitalRead(침입자);//Serial.println(x); if(x==0) { y=0; } if(x==1&&y==0) { Serial.println("Sending Alert Pls Wait....."); 지연(1000); 문자열 host1="api.pushingbox.com"; client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "호스트:" + host1 + "\r\n" + "연결:닫기\r\ n\r\n"); // 푸시 박스 API 실행 client.print(String("GET ") + "/update?api_key=&field1=1 HTTP/1.1\r\n" + "Host:" + host + "\r\n " + "연결:닫기\r\n\r\n"); //침입자 알림 지연 업데이트(1000); y=1; } //================================================================================================================// 침입자 경고 종료//================================================================================================================//===============================================================================================================// 손님 알림 //================================================================================================================긴 t1; z=디지털읽기(게스트); if(z==0 &&(millis()>=t1+300000)) // 다중 초인종으로 인한 다중 경보 전송을 피하기 위해 5분 동안 기다립니다. press { k=0; } if(x==1&&k==0) { t1=밀리(); // 현재 타임스탬프를 t1에 저장 Serial.println("Sending Alert Pls Wait....."); 지연(1000); //경고 및 스위치 디바운싱 전송 지연 String host1="api.pushingbox.com"; client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "호스트:" + host1 + "\r\n" + "연결:닫기\r\ n\r\n"); // 푸시 박스 api 실행 client.print(String("GET ") + "/update?api_key=&field1=1 HTTP/1.1\r\n" + "Host:" + host + "\r\n " + "연결:닫기\r\n\r\n"); //게스트 알림 지연 업데이트(1000); k=1; } //===============================================================================================================// 손님 알림 종료//================================================================================================================서명되지 않은 긴 시간 초과 =millis(); while (client.available() ==0) { if (millis() - 시간 초과> 5000) { Serial.println(">>> 클라이언트 시간 초과 !"); client.stop(); 반품; } } //Serial.println("연결 종료");}
    Home_monitor_arduino.inoArduino
    기기를 제어하는 ​​Arduino용 코드
    //가정 자동화 구현의 이 스케치 #include // 직렬 라이브러리 가져오기#include//--------- --------------------------------// 핀 정의//------------ --------------------------#define Light 2 // 조명을 제어하는 ​​핀 2#define 팬 3 // 제어하는 ​​핀 3 팬//------------------------------------------// 변수// ------------------------------------------char e;int p=0, q=0; //이 변수는 이미 ON/OFF된 장치의 ON/OFF 전환을 방지합니다. devicesSoftwareSerial home_monitor(10, 11); // 수신, TXchar control_data; // Bluetoothvoid setup()을 통해 전송된 데이터 { // 여기에 설정 코드를 입력하여 한 번 실행:home_monitor.begin(115200); Serial.begin(9600); pinMode(13,OUTPUT);}void loop() { // 여기에 기본 코드를 넣어 반복적으로 실행합니다. if (home_monitor.available()){ control_data=home_monitor.read(); // ESP8266에서 제어 정보를 직렬로 가져옵니다. e=control_data; Serial.print(control_data); //================================================================================================================// 장치 제어 //==============================================================================================================// 채널 값에 따라 필요한 연산 수행 //------------- ------------------------------------------------ // 빛 //----------------------------------------------- -------------- if(e=='0'&&p==0) //Light ON { digitalWrite(Light,LOW); p=1; } if(e=='1'&&p==1) //Light off { digitalWrite(Light,HIGH); p=0; } //------------------------------------------------------------- // Heater //------------------------------------------------------------- if(e=='2'&&q==0) { digitalWrite(fan,HIGH); q=1; } if(e=='3'&&q==1) { digitalWrite(fan,LOW); q=0; } }}
    Home_Monitor_ESP8266.inoArduino
    Code For ESP8266 to update humidity and temperature in thingspeak and also retrieve control information from thingspeak
    /* * This sketch updates wheather information in thingspeak.com and also retrieve control information from thingspeak.com * It send the control information to arduino serially */#include #include#include "DHT.h" // including the library of DHT11 temperature and humidity sensor#define DHTTYPE DHT11 // DHT 11#define dht_dpin 2 // define GPIO2 as data input DHT dht(dht_dpin, DHTTYPE); //------------------------------------------// variables//------------------------------------------//dht DHT;char c,e; // stores the bytes coming from the serverfloat temp,h; //stores float value of temp and humididtyString humidity,temperature,line; //stores string value of temp and humididtyint co=0; //control the sending of Alertconst char* ssid ="SSID"; //your SSID of WIFIconst char* password ="password"; // password of Wifi//--------------------------------------------const char* host ="api.thingspeak.com";void setup() { dht.begin(); Serial.begin(115200); 지연(10); // We start by connecting to a WiFi network Serial.println(); 직렬.println(); Serial.print("Connecting to "); Serial.println(ssid); /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default, would try to act as both a client and an access-point and could cause network-issues with your other WiFi-devices on your WiFi-network. */ WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); 동안 (WiFi.status() !=WL_CONNECTED) { 지연(500); Serial.print("."); } Serial.println(""); Serial.println("와이파이 연결됨"); Serial.println("IP address:"); Serial.println(WiFi.localIP());}int value =0;void loop() { delay(1000); ++value; Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort =80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); 반품; } Serial.print("Requesting URL:"); //============================================================================================================// Mini Weather Station //============================================================================================================h =dht.readHumidity(); //reads humidity and temperature temp =dht.readTemperature(); if(temp<50.0) { co=0; } if(temp>
    =50.0&&co==0) // send alert if temperature is above 50 degrees and co is used to avoid multiple alert sending { Serial.println("Sending Alert please wait......."); 지연(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"); //pushingbox api to send alert 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"); //updating thingspeak fire alert channel co=1; } humidity=String(h); temperature=String(temp); Serial.println(h); Serial.println(임시); client.print(String("GET ") + "/update?key=&field1="+humidity+" HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); //update humidity in thingspeak channel client.print(String("GET ") + "/update?key=&field1="+temperature+" HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); ////update temperature in thingspeak channel //============================================================================================================// End of Weather Station//============================================================================================================//============================================================================================================// Sending Control info to arduino Serially//============================================================================================================// This will send the request to the server client.print(String("GET ") + "/channels//field/field1/last.html HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); // get information about device control unsigned long timeout =millis(); while (client.available() ==0) { if (millis() - timeout> 5000) { Serial.println(">>> Client Timeout !"); client.stop(); 반품; } } // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line =client.readStringUntil('\r'); } Serial.print(line); // received by arduino serially //Serial.println("closing connection");}

    회로도


    제조공정

    1. 가정 자동화 애플리케이션
    2. 가정 보안 모니터링에 RFID 태그 사용
    3. LoRa 기반 스마트 시티 대기질 모니터링
    4. 다중 온도 센서
    5. K30 센서로 CO2 모니터링
    6. Alexa, 이 램프 켜기:Amazon Echo용 스마트 3D 센서
    7. 가정용 식물 관수 시스템
    8. Alexa에 의해 활성화된 Arduino 홈 컨트롤러
    9. 학교를 위한 SMART 온도 모니터링
    10. 현지 기상 관측소