반응형

예전 포스팅에서 IoT 클라우드 서비스인 Thingspeak.com 에 대해서 알아 보았습니다.  이번에는 실제 아두이노의 데이터를 Thingspeak 에 올리는 방법을 알아보겠습니다. 이렇게 하므로써 센서의 데이터를 모바일이나 원격지의 PC에서도 모니터링이 가능해지게 됩니다. 온도센서는 LM35 를 이용하였고 인터넷 통신을 위해서 와이파이 모듈인 ESP8266 ESP-01 모듈을 이용하였습니다. ESP8266 모듈은 아래의 사전 참고글을 참고하여 AT 커맨드 베이스의 펌웨어가 올라가 있어야 합니다.



LM35 센서 입니다. 온도를 측정하는 센서 입니다. 핀은 위와 같으며 OUTPUT 은 아두이노 아날로그 단자와 연결 됩니다.


인터넷 통신을 위한 ESP8266 모듈 입니다. 핀의 배열은 위와 같습니다. 3.3V 로 작동 합니다. 


ESP8266 펌웨어 업데이트가 되었으면 ESP8266 모듈을 와이파이에 연결해 주어야 합니다. 한 번 세팅한 연결값은 전원이 꺼져도 유지되므로 한 번만 설정해 주면 됩니다. 아래를 참고하여 설정해 줍니다.


ESP8266 와이파이 연결


아두이노와 ESP8266(ESP-01)의 연결은 위와 같이 합니다. 펌웨어 업데이트 시의 연결과 다른 점은 GPIO0 단자의 연결을 없앤 것입니다.


일단 시리얼 모니터를 열고 9600 보드레이트로 설정합니다.


1. 펌웨어 정상작동 확인

시리얼 모니터에 'AT' 를 입력합니다. 

'OK' 가 나오면 펌웨어가 정상적으로 설치된 것입니다.


2. ESP8266 모드 세팅

'AT+CWMODE=1' 을 입력해서 ESP8266 을 Station (Client) 로 세팅 합니다.


3. 연결할 와이파이 찾기

'AT+CWLAP' 명령을 입력해서 연결 가능한 와이파이를 찾습니다. 자신이 연결하고자 하는 와이파이가 목록에 나오는지 확인 합니다.


4. 와이파이 연결

AT+CWJAP="연결할 와이파이 이름","패스워드" 를 입력해서 와이파이에 연결 합니다.


5. 와이파이 연결 확인

'AT+CIFSR' 명령을 이용해서 ESP8266에 할당된 IP 가 정상적으로 나오면 연결이 잘 된 것입니다.


모든 준비가 끝났으니 아두이노 우노, LM35, ESP8266을 연결 합니다. 물론 Thingspeak.com 에도 가입이 되어 있어야 하며 온도 데이터 업로드를 위한 field 하나 짜리 채널도 만들어져 있어야 합니다. Thingspeak 에 대한 내용은 [Thingspeak 사용법] 을 참조하세요.


연결

esp8266_lm35_thingspeak.fzz


LM35

아두이노 우노

5V

5V

OUTPUT

A0

GND

GND


ESP8266

아두이노 우노

TXD

D10

CH_PD

3.3V

VCC

3.3V

GND

GND

RXD

D11


위와 같이 연결했습니다. 3.3V 및 LM35 연결을 위해서 브레드보드 등을 이용해야 합니다.


실제 연결 모습 입니다. 전원으로 스마트폰 충전용 5V 보조 배터리를 이용했습니다.



소스

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <SoftwareSerial.h>
#include <stdlib.h>
 
// 업로드 알림 LED 설정 (아두이노 우노 On Board LED)
int ledPin = 13;
// LM35 핀설정
int lm35Pin = 0;
 
// 자신의 thingspeak 채널의 API key 입력
String apiKey = "thingspeak Write API Key";
 
SoftwareSerial ser(1011); // RX/TX 설정, serial 객체생성
 
void setup() {
  //알림 LED 아웃풋 설정
  pinMode(ledPin, OUTPUT);
  //시리얼통신속도 9600보드레이트 설정    
  Serial.begin(9600); 
  //소프트웨어 시리얼 시작
  ser.begin(9600);
  //ESP8266 Reset
  ser.println("AT+RST");
}
 
void loop() {
  // blink LED on board
  digitalWrite(ledPin, HIGH);   
  delay(200);               
  digitalWrite(ledPin, LOW);
 
  // LM35 값 읽음
  int val = 0;
  for(int i = 0; i < 10; i++) {
      val += analogRead(lm35Pin);   
      delay(500);
  }
 
  // LM35 값을 섭씨온도로 변환
  float temp = val*50.0f/1023.0f;
 
  // String 변환
  char buf[16];
  String strTemp = dtostrf(temp, 41, buf);
  
  Serial.println(strTemp);
  
  // TCP 연결
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"// api.thingspeak.com 접속 IP
  cmd += "\",80";           // api.thingspeak.com 접속 포트, 80
  ser.println(cmd);
   
  if(ser.find("Error")){
    Serial.println("AT+CIPSTART error");
    return;
  }
  
  // GET 방식으로 보내기 위한 String, Data 설정
  String getStr = "GET /update?api_key=";
  getStr += apiKey;
  getStr +="&field1=";
  getStr += String(strTemp);
  getStr += "\r\n\r\n";
 
  // Send Data
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  ser.println(cmd);
 
  if(ser.find(">")){
    ser.print(getStr);
  }
  else{
    ser.println("AT+CIPCLOSE");
    // alert user
    Serial.println("AT+CIPCLOSE");
  }
    
  // Thingspeak 최소 업로드 간격 15초를 맞추기 위한 delay
  delay(16000);  
}
cs


위와 같이 TCP/IP 통신을 통해서 api.thingspeak.com 서버로 온도 데이터를 보내 준다. 만약 온도 데이터 이외에 추가로 데이터를 보내길 원한다면 채널에 field 를 추가하고 위의 getStr 만드는 소스인 62행과 63행 사이에 field2 의 값을 추가해서 전송하면 됩니다.


위와 같이 설정해서 어젯밤부터 방안의 온도 데이터를 모으고 있습니다. Thingspeak.com 에 접속해서 해당 채널의 Private View 를 보면 됩니다.


지금까지 계속 데이터를 모아서 1762 개의 데이터가 쌓였습니다. 현재 온도는 25.5도 정도네요. 


지금까지의 데이터를 다운로드 받아 보았습니다. 채널의 Data Import/Export 메뉴에 들어가서 Export 버튼을 클릭하면 됩니다. CSV 파일로 다운로드 되며 엑셀에서 바로 열어서 볼 수 있습니다.


1762개의 데이터를 분석해보니 지금까지 평균온도는 23.7도, 최저기온은 20.8도, 최고기온은 26.9도 네요. 아주 적당한 온도라고 할 수 있겠습니다. ^^


또한 Thingspeak 에는 MATLAB 과의 데이터 연동을 웹상에서 지원해서 MATLAB 을 다룰줄 안다면 바로 데이터를 불러와서 분석이나 통계 등의 작업을 할 수 있습니다.


이상 아두이노와 ESP8266 모듈을 이용해서 센서의 데이터를 Thingspeak 에 올리는 방법에 대해서 알아보았습니다. 이런 IoT 클라우드의 장점이 세계 어디서든 인터넷만 연결되어 있으면 원거리의 센서 데이터를 볼 수 있다는 점이 있겠습니다. 그것도 추가적인 비용 없이 간편하게 말이죠. 참으로 매력적인 서비스인 것 같습니다.



반응형

+ Recent posts