아두이노 피지컬컴퓨팅 교구로 활용할 수 있는 실 생할용품 메이킹 프로젝트(워터맨IOT) 일곱번째.

 

ThingSpeak :  수치해석용 소프트웨어인 MATHLAB이라는 제품으로 유명한 MathWorks사에서 제공하는 사물인터넷(IOT) 플랫폼이다. Thingspeak 서비스를 이용하면 각종 데이터를 인터넷 클라우드 기능으로 수집,저장해 놓고 MATHLAB 툴을 이용하여 각종 분석을 할 수 있으며,  데이터를 Chart형태로 시각화 하거나 API기능을 이용하여 여러가지  웹서비스를 개발할 수도 있다.

즉, ThingSpeak서버에 자신만의 채널을 개설해 놓고 각종 센서에서 계속 발생되는 데이터를 인터넷을 통해 자동으로 ThingSpaeak서버에 전송,축적함으로써 필요할 때 데이터가 변화되는 모양을 그래프형태로 참조하기 위한 용도로 많이 사용하는 IOT 클라우드 서비스이다.

최근 ThingSpaek 서비스는 유료화 되었지만, 하루 8200개 이하의 데이터 저장은 무료이므로 개인용 또는 학습용도의 웬만한 기능은 문제없이 무료로 사용할 수 있다.    

 

ThingSpeak가입 : https://thingspeak.com에 접속하여 신규회원으로 가입한다.

 

 

회원가입정보를 입력하면 입력한 Email주소로 확인메일이 오게 되는데 이를 확인하면 ThingSpeak서비스에 로그인할 수 있게 된다. 

 

 

 

 

 

ThingSpeak채널개설

 

데이터수집의 용도별로 채널이라는 것을 개설하고 하나의 채널에 8개까지의 필드를 구분하여 데이터를 수집할 수 있다.  ThingSpeak메뉴의 Channels -> My Channelss -> New Channel을 선택하여 새 채널을 생성하고 내용을 설정한다    

 

 

 

채널의 Name과 Description은 각자 원하는 대로 입력한다.

 

채널에는 4개의 필드를 추가하여 온도,습도,조도,토양수분 용도로 각각 적당한 명칭을 지정한다. 이 명칭은 추후 챠트를 조회할 때 챠트의 명칭으로 표시된다.

 

프로그램에서는 filed명의 순서로 데이터를 지정하므로 field1=온도,field2=습도, field3=조도, field4=토양수분 의 순서가 되도록 차례대로 영칭을 부여한다.

 

 

 

 

 

채널이 등록 완료된 후 채널의 데이터들을 사용하려면 Channel ID와 API Key를 지정해 주어야 한다. 즉, Channel Settings 메뉴의 Channel ID와 API Key 메뉴의 Write API Key와 Read API Key를 별도로 메모해 두어야 한다. 

 

 

 

 

 

  1. CT 2019.01.04 17:04 신고

    이 블로그 완전 제 스타일이네요

  2. 2020.04.14 10:38

    비밀댓글입니다

아두이노 피지컬컴퓨팅 교구로 활용할 수 있는 실 생할용품 메이킹 프로젝트(워터맨IOT) 여섯번째.

 

1) STA(Station)모드 :  ESP8266이 스마트폰이나 일반기기 처럼 WIFI Client로 작동하는 모드이다.  따라서 다른 WIFI공유기를 통하여 인터넷 접속을 할 수 있는 상태이다.  본 프로젝트에서는 기본적으로 이 STA모드로 인터넷 클라우드 서비스에 접속하고 통신한다.

 

 

 

 

2) AP(Acess Point) 모드 : ESP8266 자신이 AP 즉, 공유기 역할을 하는 모드이다.  따라서 스마트폰 등 다른 기기에서 ESP8266을 공유기로 인식하여 접속할 수 있고 서로 통신할 수 있다. 하지만 ESP8266 자체는 인터넷에 연경되어 있지 않기 떄문에 이를 통해 외부 인터넷에 접속할 수는 없는 상태이다. 외부기기에서 ESP8266에 접속하여 설정값을 지정해 주는 설정기능 등을 구현할 때 사용한다.  

 

 

 

 

 STA(Station) 모드 테스트

 

 

3~4  line:  인터넷에 연결하기 위해 접속하고자 하는 공유기의 명칭과 password를 지정
5     line:  인터넷으로 접속하고자 하는 서버 주소
9     line:  WIFI모드를 STA 모드로 지정
10    line:  WIFI 초기화
12    line:  AP(공유기)에 접속하기
13~19 line:  AP접속상태가 정상이 될때 까지 재시도 ( 10회 재시도)
20~24 line:  AP접속 성공여부 확인
25   line:  인터넷상의 서버 접속하기 (서버URL, 포트번호 80:웹서비스 )
27~30 line:  접속된 서버에 http 데이터 전송 (웹브라우저에서  서버로 전송하는 데이터 형식)
32~33 line:  서버에서 응답되는 데이터를 받아 시리얼 모니터로 표시해 보면 다음과 같음


HTTP/1.1 302 Moved Temporarily
Server: NWS
Date: Sun, 16 Sep 2018 06:06:53 GMT
Content-Type: text/html
Connection: close
Location: https://www.naver.com/err/notfound.html
Vary: Accept-Encoding,User-Agent

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center> NWS </center>
</body>
</html>

 

위와 같이 html형식 데이터가 포함된 응답이 되돌아 오는데 웹브라우저에서는 이를  보기좋게 화면에 표시하는 것임.

 

 

 

 

AP(Access Point)모드 테스트

 

 

7~13  line:  웹서버의 역할을 정의하는 모듈. 데이터를 입력하기 위한 화면을 출력한다.
8~11 line: 출력될 화면을 HTML형식으로 작성해서 strHTML에 저장
12  line: 웹서버로서 데이터를 전송한다 ( 코드, 형식,전송할 데이터 )
15~24 line:  웹서버의 역할을 정의하는 모듈. 입력된 데이터를 처리한다.
16 line: 웹서버에서 데이터를 잘 전송받았다는 메시지를 응답한다. 
17 line: 입력데이터 중에서 name이 ID인 항목의 데이터를 받아 inputID라는 이름으로 저장
18 line: 입력데이터 중에서 name이 PW인 항목의 데이터를 받아 inputPW라는 이름으로 저장
19~23 line:  String을 변환하여 시리얼 모니터에 출력
28  line:  WIFI mode를 AP모드로 지정
30 line: 기동될 AP의 SSID(명칭)과 password를 지정. 스마트폰으로 WIFI검색해 보면 이 SSID 명칭이 접속대상 공유기LIST에 표시된다. 따라서 주변의 다른 AP들의 명칭과 중복되지 않는 고유한 이름으로 지정해 주어야 한다.
31 line: AP 자신의 IP Address를 읽어낸다. ESP8266의 경우 192.168.4.1 이라는 주소가 기본적으로 할당되므로 스마트폰에서 AP에 접속한 후 웹브라우저로 http://192.168.4.1 로 접속하면 본 AP에 웹서버기능으로 접속할 수 있게 된다.
34 Line: 웹서버로서의 기능을 정의한다. 아무 지정없이 접속하면 procAProot라는 함수를 호출하여 수행하라는 의미이다.(  7~13 line 기능) 
35 Line: 웹서버로서의 기능을 정의한다. /setting으로 접속하면 procAPsetting이라는 함수를 호출하여 수행하라는 의미이다.( 15~24 line 기능) 
36 line: 웹서버 기능 Start
41 line: 접속된 Client 단말로부터 입력된 데이터를 처리한다.

 

 

 

아두이노 피지컬컴퓨팅 교구로 활용할 수 있는 실 생할용품 메이킹 프로젝트(워터맨IOT) 다섯번째.

 

 온습도 센서

 

 

 

 

 

 

 1) 필요라이브러리 : DHT 라이브러리
   - IDE 스케치 메뉴 -> 라이브러리 포함하기 -> 라이브러리관리하기 화면에서"DHT" 를검색하여 설치
   - ”Adafruit_Sensor.h: No such file or directory” 에러가 발생하면 다음 사이트에서 zip파일을 다운로드 받아 [스케치] -> [라이브러리포함하기]->[.zip라이브러리추가]메뉴에서 설치
       https://github.com/adafruit/Adafruit_Sensor

 2) DHT.h 해더파일 include

 3) 센서가 연결된 핀번호( Digital 6번핀) 와 센서타입을 지정

 4) 센서 초기화    

 5) 센서값이 필요할 때 eadTemperature() 함수로 온도를, readHumidity() 함수로 습도값을 integer로 읽어 낼 수 있다.

 

 

 

 

조도 센서

 

 

 

 

 

 

 

 1) 필요라이브러리 : BH1750
   - https://github.com/claws/BH1750  사이트에서 zip파일을 다운로드 받아 [스케치] -> [라이브러리포함하기]->[.zip라이브러리추가]메뉴에서 설치
  
 2) BH1750.h 해더파일 include

 3) 본 센서는 I2C방식으로 데이터를 전송하므로 별도로 핀번호를 지정할 필요는 없다.( D1 Mini에는 D1,D2핀이 이미 할당 되어 있음 )

 4) 센서 초기화    

 5) 센서값이 필요할 때 readLightLevel()함수로 조도값을 읽는다. BH1750조도센서에서는 조도값을 LUX단위로 변환해서 보내주기 때문에 별도 변환작업 없이 LUX값으로 사용할 수 있다.

 

 

 

토양수분센서

 

 

 

 

 

 1) 필요라이브러리 : 없음
    - 토양수분센서는 두 전극사이의 저항값을 측정하는 방식이므로 별도 라이브러리 불필요

 2) 전극사이의 저항값을 측정하기 위해서는 전압을 가해 주어야 하는데, 이 전압을 항상 가해 전류가 계속 흐르면 구리로된 전극이 부식될 수 있고 불필요하게 전력이 낭비된다. 따라서 토양수분을 측정할 때에만 D5 핀에 전압을 가해준다. (line10)
  
 3) A0 핀을 통해 저항값을 측정하는데 이 값은 0 ~ 1023 사이의 값이다.

 4) 이 0~1023 사이의 저항값을 100에서 0의 수분량값으로 mapping한다.

 

 

 

 

 센서통합테스트

 

 

 

 

 

18~35 line:  전체 센서값들을 읽는 기능들을 모아 별도 함수로 설정
21~26 line:  온습도 센서값이 비정상으로 읽히는 현상이 있기 때문에 정상적인 값이 읽힐 때까지 반복.
49~62 line:  3초 간격으로 내장LED 를 깜박이고 워터펌프의 전원을 공급하여 가동시킨다.

 

따라서 본 프로그램으로 워터맨IOT 모듈에 장착된 온습도센서,조도센서,토양수분센서와 워터펌프 전원장치가 제대로 작동되는지 확인할 수 있다. 

 

 


+ Recent posts