본문 바로가기
아두이노(Arduino)/사물인터넷(ESP8266)

[ESP8266.010] Adafruit.IO로 우리집 원격 제어하기

by 긱펀 2022. 3. 19.
반응형

[ESP8266.010] Adafruit.IO로 우리집 원격 제어하기


📑 개념잡기

 

Adafruit IO로 우리집 원격 제어하기

⬛ ESP8266과 Adafruit IO 웹 플랫폼을 이용하여 우리집의 LED와 센서를 제어하기

  • ESP8266 보드는 우리 집 안에 있고, 이 보드에 LED와 센서를 연결합니다.
  • ESP8266 보드를 우리 집 WiFi 공유기에 무선접속시킵니다.
  • 우리 집 밖에서 스마트폰으로 adafruit의 IoT플랫폼 사이트에 접속하여 우리 집 안에 있는 ESP8266보드와 LED, 센서를 무선 원격 제어를 하는 실습을 해봅니다.

 

💻 실습하기

 

🚩 아두이노 회로 연결하기

* 부품 구매처

https://www.devicemart.co.kr/goods/view?no=1312096 

 

아두이노 우노 IoT 보드 WeMos D1 R1 [SZH-EK080]

WeMos D1 R1 보드는 와이파이(ESP-8266EX)가 내장된 Arduino Uno 호환 보드입니다.

www.devicemart.co.kr

https://www.devicemart.co.kr/goods/view?no=1279493 

 

아두이노 우노 Easy Module Shield V1 [ARD040110]

Fully compatible with Arduino UNO R3 interfaces Providing basic experimental module Arduino beginners A board integrates various modules function

www.devicemart.co.kr

 

 

 

🚩 Adafruit IO Arduino 라이브러리 설치하기

 

  • 아두이노 IDE에서 아래 그림과 같이 adafruit io arduino 라이브러리를 설치해 줍니다.

Adafruit IO Arduino 라이브러리 설치

 

 

 

 

🚩 아두이노 코드 살짝 확인하기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "AdafruitIO_WiFi.h"  // adafruit io WiFi 통신용 라이브러리
 
#define IO_USERNAME "goodman"   // adafruit io 유저네임
#define IO_KEY "b62bddf20adsfvciaer854353a300dcc" // Active Key
#define WIFI_SSID "KT_GiGA_5481"  // 우리 집 WiFi 이름
#define WIFI_PASS "abcd1234"    // 우리 집 WiFi 비밀번호
 
#define IO_LOOP_DELAY 5000    // 5000 = 5초
#define LED   D13             // LED 핀 번호
 
unsigned long lastUpdate = 0;   // 시간 저장용 변수
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);  // adafruit io 객체
AdafruitIO_Feed *LED_Feed = io.feed("LED_Feed");        // LED feed 설정
AdafruitIO_Feed *Sensor_Feed = io.feed("Sensor_Feed");  // Sensor feed 설정
 
void setup() {
  pinMode(LED, OUTPUT); // LED 출력모드
  Serial.begin(115200); // 시리얼 통신 시작
  Serial.print("Connecting to Adafruit IO");
  io.connect(); // io.adafruit.com 에 연결하기
 
  //adafruit io 사이트로부터 메세지가 전달되면 handleMessage함수 실행되게
  LED_Feed->onMessage(handleMessage);
 
  while(io.status() < AIO_CONNECTED) { // adafriot io 연결하기
    Serial.print(".");
    delay(500);
  }
 
  Serial.println();
  Serial.println(io.statusText()); // adafruit io 연결상태 확인
  LED_Feed->get();    // LED feed 데이터 값 받아오는 기능 작동시키기
 
}
 
void loop() {
  io.run(); // io.adafruit.com에 연결과 입력 데이터 처리하기
 
  if (millis() > (lastUpdate + IO_LOOP_DELAY)) {  // 5초에 한번씩 if문 실행됨
    int sensor_value = map(analogRead(A0),0,1023,0,100);  // 센서값 측정 및 저장
    Serial.print("sending -> ");
    Serial.println(sensor_value);     
    Sensor_Feed->save(sensor_value);  // 센서값을 adafruit io의 Sensor feed로 전송
    lastUpdate = millis();  // 시간 업데이트
  }
}
 
// LED_Feed 메세지가 들어올때 마다 실행되는 함수
void handleMessage(AdafruitIO_Data *data) { 
  Serial.print("received <- ");
  Serial.println(data->value());  // adafruit io로 부터 받은 data값 출력
  int led_status = data->toInt(); // 문자형 data를 정수로 바꾸기
  digitalWrite(LED, led_status);  // LED 상태값에 적용(1/0)
}
cs

 

 

 

🚩 adafruit io 사이트 설정하기

 

(1) io.adafruit.com 에 접속해서 회원가입하고 로그인 하기

io.adafruit.com 로그인

 

(2) adafruit 사이트 상단 메뉴 중 "My Key"로 들어가 Username과 Active Key를 복사하여 아래 그림과 같이 아두이노 코드에 붙여넣어줍니다.(아두이노 코드는 위쪽에 있습니다.-"아두이노 코드 살짝 확인하기")

Username은 계정정보 확인을 위한 것이고 Active Key는 비밀번호 같은 역할을 합니다.

 

(3) 사물인터넷 제어를 하기위한 UI(화면의 버튼이나 그래프 같은 모습)들은 Dashboards라는 곳에서 만들게 됩니다. 그래서 미리 Dashboards를 설정해야 합니다. 아래 그림과 같이 상단 메뉴중에 Dashboards로 들어가서 나만의 Dashboards를 하나 만들어 줍니다.(Dashboards이름은 자유롭게 가능함)

 

 

 

(4) 나만의 대시보드를 클릭해서 들어가서, LED를 제어할 스위치나 센서값을 모니터링할 그래프 등을 선택할 수 있습니다. 아래 그림을 보면서 LED를 제어할 스위치 블럭 하나를 추가해 보세요.

스위치 블럭 선택

 

Feed 설정 & 아두이노 코드에 Feed 입력하기

 

블럭 설정

 

 

(5) 이번에는 센서값을 모니터링 할 수 있는 블럭을 추가해 보세요.(아래 그림 보면서 따라하기)

게이지 블럭 선택
Feed 설정 & 아두이노 코드에 Feed 입력하기

 

블럭 설정

 

 

 

 

 

 

 

🚩 아두이노 코드 업로드 하기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "AdafruitIO_WiFi.h"  // adafruit io WiFi 통신용 라이브러리
 
#define IO_USERNAME "goodman"   // adafruit io 유저네임
#define IO_KEY "b62bddf20adsfvciaer854353a300dcc" // Active Key
#define WIFI_SSID "KT_GiGA_5481"  // 우리 집 WiFi 이름
#define WIFI_PASS "abcd1234"    // 우리 집 WiFi 비밀번호
 
#define IO_LOOP_DELAY 5000    // 5000 = 5초
#define LED   D13             // LED 핀 번호
 
unsigned long lastUpdate = 0;   // 시간 저장용 변수
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);  // adafruit io 객체
AdafruitIO_Feed *LED_Feed = io.feed("LED_Feed");        // LED feed 설정
AdafruitIO_Feed *Sensor_Feed = io.feed("Sensor_Feed");  // Sensor feed 설정
 
void setup() {
  pinMode(LED, OUTPUT); // LED 출력모드
  Serial.begin(115200); // 시리얼 통신 시작
  Serial.print("Connecting to Adafruit IO");
  io.connect(); // io.adafruit.com 에 연결하기
 
  //adafruit io 사이트로부터 메세지가 전달되면 handleMessage함수 실행되게
  LED_Feed->onMessage(handleMessage);
 
  while(io.status() < AIO_CONNECTED) { // adafriot io 연결하기
    Serial.print(".");
    delay(500);
  }
 
  Serial.println();
  Serial.println(io.statusText()); // adafruit io 연결상태 확인
  LED_Feed->get();    // LED feed 데이터 값 받아오는 기능 작동시키기
 
}
 
void loop() {
  io.run(); // io.adafruit.com에 연결과 입력 데이터 처리하기
 
  if (millis() > (lastUpdate + IO_LOOP_DELAY)) {  // 5초에 한번씩 if문 실행됨
    int sensor_value = map(analogRead(A0),0,1023,0,100);  // 센서값 측정 및 저장
    Serial.print("sending -> ");
    Serial.println(sensor_value);     
    Sensor_Feed->save(sensor_value);  // 센서값을 adafruit io의 Sensor feed로 전송
    lastUpdate = millis();  // 시간 업데이트
  }
}
 
// LED_Feed 메세지가 들어올때 마다 실행되는 함수
void handleMessage(AdafruitIO_Data *data) { 
  Serial.print("received <- ");
  Serial.println(data->value());  // adafruit io로 부터 받은 data값 출력
  int led_status = data->toInt(); // 문자형 data를 정수로 바꾸기
  digitalWrite(LED, led_status);  // LED 상태값에 적용(1/0)
}
cs

 

 

 

🚩 아두이노 코드 업로드 후, 시리얼 모니터에서 접속 확인하기

아두이노 코드 업로드 완료 후 아래 그림과 같이, 시리얼 모니터에서 "Adafruit IO connected"메세지가 뜨면 ESP8266보드가 WiFi 통신을 통해서 io.adafruit.com의 dashboards에 연결된 것 입니다. 

 

 

🚩 LED와 센서 동작 시키기

아래 그림과 같이, 스위치를 마우스로 클릭하여 ON, OFF 해보면 ESP8266 보드의 LED가 작동될 것입니다.

그리고 ESP8266 보드의 A0핀에 연결된 가변저항 센서를 손으로 돌리면 adafruit dashboards의 게이지 값이 변화될 것입니다.

 

 

🚩 스마트폰으로 접속해서 제어하기

스마트폰에서 웹 브라우저(크롬,사파리 같은거)를 열어서, 컴퓨터에서 접속하듯이 io.adafruit.com에 접속하고 로그인을 합니다. 그리고 dashboards로 들어가, 아래 그림과 같이 스마트폰에서 ESP8266 보드의 LED와 센서를 제어할 수 있습니다. 이 실습은 ESP8266보드가 우리 집 안에 존재한다고 가정하고,  우리 집 밖에서도 스마트폰을 이용해 우리 집 안의 ESP8266 보드를 제어할 수 있는 것 입니다. 

 

스마트폰으로 adafruit IO 제어하기

 

728x90
반응형

댓글