상세 컨텐츠

본문 제목

esp8266 thingspeak

아두이노/와이파이 Wemos D1 보드

by nownow 2022. 1. 14. 22:43

본문

Wemos D1 보드를 사용하는 이유가 되는 장치입니다.

아두이노 우노 보드에 esp8266을 장착시킨듯한 보드이기 때문에

간단하게 센서로 측정한 결과를 와이파이 통신을 통해 저장할 수 있습니다.

 

sds011 센서로 측정한 미세먼지 p2.5와 p10 정보를 Thingspeak라는 서비스를 통해 저장합니다.

위 사이트는 IoT 전용 클라우드이며 학생 사용은 무료입니다.

https://thingspeak.com/

 

IoT Analytics - ThingSpeak Internet of Things

Weather Station This project shows how to build an Arduino-based weather station that sends data to ThingSpeak. Once the data is collected, MATLAB is used to view trends of the data, plot histograms of the data, calculate dew point from the raw temperature

thingspeak.com

해당 링크로 들어간 뒤 가입해줍니다.

로그인했다면 Channels 버튼을 눌러줍니다

※주의

해당 국가를 기준으로 시간을 정하기 때문에 지역을 현재 머물고 있는 국가로 잘 설정해줍니다.

 

고등학생 시절 했던 프로젝트가 보입니다. New Channel을 눌러줍니다.

위와같이 적어둔 뒤 하단의 Save Channel 버튼을 눌러줍니다.

Description 텍스트박스 우측의 아이콘은 개인적으로 사용하는 문법 교정 프로그램이기에 무시하셔도 됩니다.

sds011 센서는 p2.5 초미세먼지와 p10 미세먼지를 모두 측정할 수 있는 센서이기에 필드를 두개 생성해줍니다.

위와같이 나오면 됩니다. API Keys를 눌러줍니다.

api키는 남에게 공개되지 않도록 주의합시다.

 

여기까지 확인해두고 보드에 센서를 연결해서 값을 불러오는 것 먼저 확인하도록 합니다.

우선 sds011 센서를 사용하기 위한 라이브러리를 다운로드 합니다.

https://github.com/ricki-z/SDS011

 

GitHub - ricki-z/SDS011: Arduino library for SDS011 dust sensor

Arduino library for SDS011 dust sensor. Contribute to ricki-z/SDS011 development by creating an account on GitHub.

github.com

위 깃허브 링크에서 다운로드 한 후 라이브러리 .zip라이브러리 추가 기능을 사용합니다.

 

다운로드한 라이브러리 zip파일을 선택해주면 됩니다.

그러면 예제 목록에 SDS011 sensor Library가 포함된 것을 볼 수 있는데

SDS011_example을 열어줍니다.

예제 코드에서 핀 부분을 바꾸어주었습니다.

Wemos D1 보드를 사용할 때 유의할 점이 있는데

Uno 보드를 사용할 때와 다르게 디지털 핀을 앞면에 써있는 대로 연결해선 안됩니다.

보드의 뒷면을 보면 GPIO 뒤에 숫자가 써있는데 그 핀을 참고해서 사용해야합니다.

위의 예시는 5,4번 핀으로 설정해두고 GPIO5와 GPIO4에 해당하는 핀에 TX,RX 순서로 연결했습니다.

예제 코드에 주석부분에 RX,TX 순서로 써있는데 TX,RX 순서로 연결했을때 정상 작동 했습니다.

sds011 센서 뒷면에 써있는 내용을 참고해 5V GND 연결후 TXD는 GPIO5번, RXD는 GPIO4번에 연결합니다.

위와같이 연결해줍니다.

전원공급이 되면 센서가 약간 진동하면서 소리를 내고 뒷면 붉은 LED가 깜빡거립니다.

 

이제 보드에 프로그램을 업로드 해준뒤 시리얼 모니터를 열어줍니다.

정상적으로 연결하고 업로드 했으면 위와같이 p10과 p2.5수치가 나옵니다.

옷이나 휴지로 센서 앞에서 먼지를 일으켜 값이 변화하는지 확인합니다.

센서가 정상 작동하는것을 확인했으면

보드를 인터넷에 연결하고 Thingspeak의 api에 연결해 업로드 하는 일만 남았습니다.

#include <SDS011.h>
#include <ESP8266WiFi.h> 
 
String api =  "Write api key 칸에 있는 키를 입력해주세요" ; 
const  char * ssid =  "와이파이 이름" ; 
const  char * password =  "와이파이 비밀번호" ; 
const  char * server =  "api.thingspeak.com" ;
WiFiClient client;
 
float p10, p25;
int error;
SDS011 my_sds;
 
void setup() {
    my_sds.begin(5, 4); 
    Serial.begin(115200);
	delay(1000);
 	Serial.print(ssid);
  	Serial.println("에 접속중"); 
	WiFi.begin(ssid,password);
 	while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
 	}
  
  	Serial.println("");
  	Serial.println("연결되었습니다.");
 }
void loop() {
    error = my_sds.read(&p25, &p10);
  if(client.connect(server,80)){
    String postStr = api;
    postStr +="&field1=";
    postStr +=String(p25);
    postStr +="&field2=";
    postStr +=String(p10);
    postStr +="\r\n\r\n";
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+api+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("\n\n");
    client.print(postStr);
    }
  if(!error)
  {
    Serial.println("P2.5: " + String (p25));
    Serial.println("P10: " + String (p10));
  }
    delay(100);
}

 

해당 코드를 업로드 한뒤 Thingspeak 차트를 살펴봅니다.

센서를 연결하기 전 0으로 인식되다가 정상적으로 측정을 하고 앞에서 휴지를 흔들었을때

최고점을 찍고 정상화 되어가는 모습을 확인합니다.

loop문 하단에 시리얼 출력 코드도 넣어 주었기에

시리얼 모니터에도 동일한 값이 출력되는 것을 확인할 수 있습니다.

이제 Wemos D1 보드를 사용해 센서값을 읽고 그 값을 인터넷 상에 업로드 하여 확인할 수 있게 되었습니다.

이에 연동하여 환기 시스템을 제작하는 등의 응용을 시도해보기 바랍니다.

관련글 더보기