WIFI ESP8266(ESP-01) + DHT11 을 이용해 온습도 측정하기 (DHT22 소스 추가)

관리자 자료실|2021. 5. 3. 14:34
반응형

ESP-01 과 DHT11 을 이용해 온도와 습도를 측정하고 데이터를 특정 서버로 전송하기 위한 방법 입니다.

제 PC 환경인 Ubuntu 18.04 에서 진행하였습니다.

 

[준비물]

USB serial adapter * 1개 (추후 납땜 필요, 아래 설명)

ESP-01 * 1개

DHT11 * 1개

 

 

1. 설치

 

# wget https://downloads.arduino.cc/arduino-1.8.12-linux64.tar.xz

# tar xvf arduino-1.8.12-linux64.tar.xz

# cd arduino-1.8.12

# ./install.sh

 

 

2. 실행

 

# arduino

 

* 한글이 깨져 보이는 경우 아래와 같이 영문으로 변경 가능합니다.
첫번째 메뉴 (File) > 아래에서 두번째 '환경설정' (Ctrl + Comma) > 두번째 항목인 'Editor language:' 를 'English(English)' 로 선택 후 아두이노를 재시작 하면 됩니다.

 

3. 환경 설정

 

File > Preferences 메뉴에서
Additional Boards Manager URLs: 에 아래 주소를 입력하고 [OK] 버튼을 누릅니다.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

 

Tools > Board > Board Manager 메뉴에서 'ESP8266' 를 검색하고 설치합니다.

Tools > Board 에서 'Generic ESP8266 Module' 을 찾아 선택합니다.


Tools > Manage Libraries 를 실행하면 Library Manager 창이 뜹니다.
DHT sensor library 를 찾아 검색하면 Adafruit Unified Sensor 도 같이 설치하겠냐고 물어봅니다.
[Install all] 버튼을 눌러 모두 설치합니다.

 

 

4. 납땜

 

USB 시리얼 아답터 뒷면에 (DHT11 연결 부위) GND 와 IO0 (GPIO0) 부분을 전선으로 이어줍니다. (납땜 필요)
이렇게 해야 USB serial adapter 를 통해 펌웨어 쓰기가 가능해집니다.
* 동영상 참고

https://www.youtube.com/watch?v=QRnPRKbtEGU

 

준비 되었으면 ESP-01 을 연결 한 후 PC의 USB 포트에 꼽습니다.

 

5. 소스 다운로드 및 컴파일

 

펌웨어는 아래 URL 에서 가져옵니다. (asksensors.com 으로 데이터 전송)

https://github.com/asksensors/AskSensors-ESP8266-DHT/blob/master/dht11_https_get.ino

 

위 예제 파일 내용을 약간 수정하였습니다.

arduino_esp01_dht11.ino
0.00MB

 

소스 내에 ESP-01 이 접속할 wifi 접속 정보를 (ssid, password) 입력합니다.

변수 https_host, https_port, writeInterval, url 변수 등 수정할 곳을 수정합니다.

 

Tools > Board > Generic ESP8266 Module 를 선택합니다.

Tools > Ports 에서 /dev/ttyUSB0 을 선택합니다. (USB serial adapter 를 꼽으면 확인 가능)

업로드 버튼을 누릅니다. 상단 큰 아이콘 중에 하나 (두번째에 있음)

아두이노 하단부에 컴파일 로그중 아래 메세지가 뜨면 업로드 완료된 것입니다. 분리해도 됩니다.
Leaving...
Hard resetting via RTS pin...

* 펌웨어 업로드를 할 모듈이 여러개일 경우 USB 를 꼽은채로 여러번 되지 않으므로
한개 업로드 후 USB 를 뺐다 꼽고, 업로드 하고.. 반복하면 됩니다.

 

 

* 참고1

온습도 데이터 수집할때 만들었던 DB 테이블입니다.

 

mysql> create table records (id int(10) auto_increment primary key, rack int (5), temperature DECIMAL(5,2), humidity DECIMAL(5,2), time DATETIME);

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int          | NO   | PRI | NULL    | auto_increment |
| rack        | int          | YES  |     | NULL    |                |
| temperature | decimal(5,2) | YES  |     | NULL    |                |
| humidity    | decimal(5,2) | YES  |     | NULL    |                |
| time        | datetime     | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

 

 

* 참고2

웹서버 라이브러리 및 소스

https://randomnerdtutorials.com/esp8266-dht11dht22-temperature-and-humidity-web-server-with-arduino-ide/

 

 

* 참고3

ESP8266 장치의 Mac Address 를 가져오고 싶을 경우 아래 소스코드를 참고 합니다. (출처 소스에서 Mac Address 마지막 : 문자 제거 코드 보완)

#include <ESP8266WiFi.h>
 
uint8_t MAC_array[6];
char MAC_char[18];
 
void setup() {
    Serial.begin(115200);
    Serial.println();
 
    WiFi.macAddress(MAC_array);
    for (int i = 0; i < sizeof(MAC_array); ++i){
      sprintf(MAC_char,"%s%02x:",MAC_char,MAC_array[i]);
    }
    int j = 0;
    while (MAC_char[j]) {
        j++;
    }
    MAC_char[j - 1] = '\0';

    Serial.println(MAC_char);
}
 
void loop() {
    // 여기에서 MAC_char 를 가져다 사용하면 됩니다.
    // 위 내용을 복사할 경우 arduino 에서 오류가 납니다.
    // 복사할때 공백이 제대로 복사되지 않아서인데, 직접 타이핑 하시거나 공백만 지우고 새로 입력하면 됩니다.
}

[출처] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ssshin22&logNo=220883794542 

 

 

* 참고4

DHT22 소스 입니다.

arduino_esp01_dht22.ino
0.00MB

바로 위 첨부된 소스에 softAP 를 숨기는 코드를 넣었는데, 여러개의 온습도를 사용할 경우에는 혹시 모를 문제에 대비하기 위해 softAP 명칭을 다르게 줍니다. 아래 내용을 참고하세요.

 

const int pos = 170;
const char* charpos = pos+"0";

(생략)

WiFi.softAP(charpos, "ThisIsHiddenAp", 1, 1);

 

반응형

댓글()