예전 포스팅에서 IoT 클라우드 서비스인 Thingspeak.com 에 대해서 알아 보았습니다. 이번에는 실제 아두이노의 데이터를 Thingspeak 에 올리는 방법을 알아보겠습니다. 이렇게 하므로써 센서의 데이터를 모바일이나 원격지의 PC에서도 모니터링이 가능해지게 됩니다. 온도센서는 LM35 를 이용하였고 인터넷 통신을 위해서 와이파이 모듈인 ESP8266 ESP-01 모듈을 이용하였습니다. ESP8266 모듈은 아래의 사전 참고글을 참고하여 AT 커맨드 베이스의 펌웨어가 올라가 있어야 합니다.
사전 참고 글
[아두이노] 와이파이 모듈 ESP8266 펌웨어 업데이트 (아두이노 이용)
[아두이노] ESP8266 와이파이 모듈 펌웨어 업데이트 (USB To TTL 모듈 이용)
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 사용법] 을 참조하세요.
연결
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(10, 11); // 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, 4, 1, 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 클라우드의 장점이 세계 어디서든 인터넷만 연결되어 있으면 원거리의 센서 데이터를 볼 수 있다는 점이 있겠습니다. 그것도 추가적인 비용 없이 간편하게 말이죠. 참으로 매력적인 서비스인 것 같습니다.
관련글 모음
[아두이노] - IoT 센서 데이터를 전용 클라우드에 올려보고 활용해보기 - IoT 클라우드 Thingspeak.com
[아두이노] - ESP8266 와이파이 모듈 펌웨어 업데이트 (USB To TTL 모듈 이용)
[아두이노] - [아두이노] 이더넷모듈(ENC28J60)의 사용 - 설정,웹서버,트위터,웹클라이언트
[아두이노] - [아두이노] 와이파이 모듈(ESP8266)을 이용해 인터넷으로 LED제어
'ESP8266' 카테고리의 다른 글
ThingSpeak를 모니터링 하는 알람/경보 기능 스마트폰 앱 소개 (0) | 2016.06.04 |
---|---|
[아두이노] DHT22 (AM2302) 온습도 센서 측정값 ThingSpeak 연동, ESP8266 이용 (10) | 2016.06.02 |
IoT 센서 데이터를 전용 클라우드에 올려보고 활용해보기 - IoT 클라우드 Thingspeak.com (10) | 2016.05.29 |
ESP8266 와이파이 모듈 펌웨어 업데이트 (USB To TTL 모듈 이용) (0) | 2016.05.24 |
[아두이노] 와이파이 모듈(ESP8266)을 이용해 인터넷으로 LED제어 (21) | 2016.03.15 |