Blynk와 아두이노로 온습도 표시하기
아두이노

Blynk와 아두이노로 온습도 표시하기

반응형

지금까지 Blynk를 사용하면 Wemos D1과 같은 esp8266 계열의 보드를 반드시 사용했었다. 이러한 보드들은 자체적으로 WiFi칩이 내장되어있어 편리하지만 아두이노에 비해 사용가능한 디지털과 아날로그 핀의 개수가 현저히 적다는 것이 문제이다. 그래서 이번에는 아두이노를 그대로 사용하고 esp 01 모듈을 WiFi 쉴드처럼 이용하여 Blynk통신을 해볼 생각이다.



esp 01의 핀 배치는 위와 같다. 이 모듈을 아두이노에서 사용하기 위해서는 팜웨어를 업데이트 해야하는데 아래 글을 참고했다.


http://deneb21.tistory.com/343


팜웨어가 업데이트 되었다면 DHT22 온습도 모듈과 esp 01, 아두이노를 아래와 같이 연결한다.



아두이노

esp 01 

DHT22 

 3.3V

 8 

 

 5V

 

 디지털 핀 2

 5 

 

 디지털 핀 3

4

 

  디지털 핀 8 

 

 out

 GND

 1


자세한 연결법은 위의 표를 참고하자


필요한 라이브러리들은 아래와 같다.

Blynk.zip

BlynkESP8266_Lib.zip

Time.zip

DHT.zip


이제 아두이노에 아래 코드를 업로드 하자


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
#define BLYNK_PRINT Serial
#define DHTTYPE DHT22
#define DHTPIN 8
 
// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600
 
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <SoftwareSerial.h>
#include "DHT.h"
 
SoftwareSerial EspSerial(23); // RX, TX
 
char auth[] = "*****";
char ssid[] = "*****";
char pass[] = "*****";
 
float h;
float t;
 
ESP8266 wifi(&EspSerial);
 
DHT dht(DHTPIN, DHTTYPE);
 
void setup()
{
  Serial.begin(9600);
 
  delay(10);
 
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
 
  Blynk.begin(auth, wifi, ssid, pass);
  dht.begin();
}
 
BLYNK_READ(V1)
{
  Blynk.virtualWrite(V1, h);
}
 
BLYNK_READ(V0)
{
  Blynk.virtualWrite(V0, t);
}
 
void loop()
{
  Blynk.run();
  h = dht.readHumidity();
  t = dht.readTemperature();
 
  Serial.print(h);
  Serial.print(" ");
  Serial.println(t);
}
 
cs


****부분에 본인의 Blynk 토큰, 와이파이 이름, 비밀번호를 입력하면 된다.

이제 Blynk 앱에서 아래와 같이 2개의 Gauge 위젯을 설치하고 각각 Pin은 V0, V1으로 설정하고 Reading Rate는 1 sec로 설정한다. (이때 Blynk의 보드 종류는 Arduino UNO, 연결 방법은 WiFi로 설정한다.)



위와 같이 나오면 성공이다. 다만 위의 방법은 Blynk에서 아두이노에 매 1초마다 데이터를 요구하는 방식인데 만약 아두이노 측에서 Blynk로 일방적으로 데이터를 보내고 싶다면 코드를 아래와 같이 수정하면 된다.


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
#define BLYNK_PRINT Serial
#define DHTTYPE DHT22
#define DHTPIN 8
// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600
 
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <SoftwareSerial.h>
#include "DHT.h"
 
BlynkTimer timer;
SoftwareSerial EspSerial(23); // RX, TX
 
char auth[] = "*****";
char ssid[] = "*****";
char pass[] = "*****";
 
float h;
float t;
 
ESP8266 wifi(&EspSerial);
DHT dht(DHTPIN, DHTTYPE);
 
void setup()
{
  Serial.begin(9600);
  delay(10);
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
  Blynk.begin(auth, wifi, ssid, pass);
  timer.setInterval(1000L, myTimerEvent1);
  timer.setInterval(1000L, myTimerEvent2);
  dht.begin();
}
 
void myTimerEvent1()
{
  Blynk.virtualWrite(V1, h);
}
 
void myTimerEvent2()
{
  Blynk.virtualWrite(V0, t);
}
 
void loop()
{
  Blynk.run();
  timer.run();
  h = dht.readHumidity();
  t = dht.readTemperature();
  Serial.print(h);
  Serial.print(" ");
  Serial.println(t);
}
cs

이때의 Reading Rate는 Push로 설정하면 된다.


반응형
    # 테스트용