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);