본 자료는 http://iotmakers.kt.com/openp/index.html#/blog/blogDetail/10/KOR 의 내용을 바탕으로 작성되었습니다.
아두이노 MKR1010 보드를 사용하기 위해서는 Arduino SAMD Boards를 보드 매니저를 통해 설치해야 합니다.
디지털입출력 5번핀에 연결된 LED를 1초마다 깜박이게 하는 코드
#define PIN_LED 5
void setup() {
pinMode(PIN_LED, OUTPUT);
}
void loop() {
digitalWrite(PIN_LED,HIGH);
delay(1000);
digitalWrite(PIN_LED,LOW);
delay(1000);
}
LED가 1초마다 깜박이는 지를 확인해 본다.
센서 자체의 측정 범위는 매우 높지는 않지만 일반적인 상황 (집안의 온도를 측정하는 등)에서 사용하기는 적합한 제품입니다.
[주의] DHT-11의 VCC, Data, GND 핀의 위치가 다소 차이가 있을 수 있음
라이브러리 설치 방법
검색 창에서 위의 두가지 라이브러리를 검색하여 설치
[주의] DHTTest.ino 예제에서 #define DHTTYPE DHT11의 주석을 풀고, #define DHTTYPE DHT22 부분을 주석처리 해야 함.
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
(수정된) 예제 코드
#include "DHT.h"
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}
MKR WIFI 1010에서 WiFi를 사용하기 위해서는 WIFININA 라이브러리가 추가되어야 한다.
[파일]-[예제]-[WIFININA]에 있는 다양한 WIFI 테스트 예제를 실행하여 와이파이 통신이 잘 되는 지를 확인해 본다.
LED 제어 배선
DHT-11 온습도 센서
실습을 위한 준비를 마쳤다면 IoTMakers에 접속해서 디바이스를 등록해보자. 처음 가입하면 다음과 같이 디바이스 등록 화면을 볼 수 있다.
디바이스 명을 입력하고 프로토콜 유형을 선택한다.
디바이스 연결 상태: OFF 확인
디바이스 상세 정보를 미리 확인해 둔다.
다운로드 받은 zip 파일을 풀면, IoTMakers 폴더가 있다. 이를 사용자의 아두이노 라이브러리 폴더 하위로 옮긴다.
MS Windows
My Documents\Arduino\libraries\IoTMakers
Mac OS X
~/Documents/Arduino/libraries/IoTMakers
Ununtu
~/Documents/Arduino/libraries/IoTMakers
IoTMakersDemoMKR1010을 다운로드하여 Arduino IDE에서 실행한다.
소스코드에서 다음을 찾아 사용 환경에 맞도록 수정후, 빌드/업로드 한다.
아두이노 IDE의 시리얼 모니터를 열고, 접속이 제대로 이루어지는 지 확인해 본다.
IoTMakers에서 앞서 등록한 디바이스에 LED on/off를 위한 제어태그를 등록한다.
led=on 제어 전송 해보기
// ... 생략
#define PIN_LED 5
// ... 생략
void mycb_strdata_handler(char *tagid, char *strval)
{
// !!! USER CODE HERE
//Serial.print(tagid);Serial.print(F("="));Serial.println(strval);
if ( strcmp(tagid, "LED")==0 && strcmp(strval, "ON")==0 )
digitalWrite(PIN_LED, HIGH);
else if ( strcmp(tagid, "LED")==0 && strcmp(strval, "OFF")==0 )
digitalWrite(PIN_LED, LOW);
}
\\… 생략 …
void loop()
{
static unsigned long tick = millis();
// 3초 주기로 센서 정보 송신
if ( ( millis() - tick) > 3000 )
{
digitalWrite(PIN_LED, HIGH);
send_temperature();
tick = millis();
}
// IoTMakers 서버 수신처리 및 keepalive 송신
g_im.loop();
}
int send_temperature()
{
float temperature = dht.readTemperature();
Serial.print(F("Temperature (c): ")); Serial.println(temperature);
if ( g_im.send_numdata("temperature", (double)temperature) < 0 ) {
Serial.println(F("fail"));
return -1;
}
return 0;
}
\\… 생략 …
Event 등록 절차
이벤트 발생조건 추가/생성
‘온도가 31도보다 높으면’이라는 이벤트 조건을 만들기 위해 논리식 입력기를 사용하여 다음과 같은 논리식을 만들어보자.
디바이스명.temperature > 31
이벤트가 발생하고 난 후에 디바이스를 제어하기 위해서, 제어를 캔버스에 drag&drop 한 후, 이벤트 정의와 연결합니다.
제어박스의 수정버튼을 누른 후에 다음과 같이 제어처리 대상을 추가 후에 확인버튼을 클릭