HIGROW 사 ESP32 센싱 보드 사용법에 대해서 알아보자. 이미 제작사는 망한 듯 하나 하드웨어만 제작해서 판매 되고 있는 상황이다. ESP-WROOM-32 보드의 기본적인 사용법을 알고 있다면 사용에 드다지 문제가 없을 것이다. 보드 종류는 현재 확인해 본 바에 의하면 DOIT ESP32 DEVKIT V1 으로 설정하면 된다. 빌드 과정에서 주의해야 할 점은 USB 케이블 연결 ON/OFF 스위치가 반드시 ON 되어 있어야 한다. 마이크로 USB를 ㅇㄴ결하는 순간에 윈도우즈의 사운드를 들어 보면 인식 여부를 확인할 수 있다. 아울러 업로딩 시 반드시 BOOT 버튼을 누르고 있어야 한다. 한편 시리얼 모니터링 과정에서 모니터에 아무 것도 출력되지 않지만 EA 버튼을 눌러야 만 WiFi 검색이 이루어지고 출력이 이루어진다. 업로딩 완료 후에는 보드 후면에 설치된 18650 리튬배터리에 의해 보드 작동이 이루어지는데 화분에 설치 후 반드시 EA 버튼을 눌러 주어야 한다. 무선 송출의 결과는 주로 사물인터넷인 ThingSpeak 채널에서 관찰하도록 한다.
인터넷이나 Github 에 올려둔 예제 코드들이 있는데 제대로 작동되는 사례가 없어 필자가 직접 손 본 ThinSpeak 코드를 예제로 올려두니 참조하기 바란다. 현재 ESP32 보드의 슬립모드를 활용할 수 있어야 리튬배터리 지속 시간이 수일로 늘어 날 수 있는데 이는 앞으로 숙제로 남겨둔다. WiFi 사용에 따른 전류 소모가 커 첨부된 코드를 사용할 경우 하루 정도 지속이 가능하다. 샘플링 시간이 5분 즉 300초에 한번 정도이므로 슬립모드 코딩이 가능하다면 일주일 이상 장시간 모니터링이 가능해 질 것이다.
헤더 영역의 코드를 살펴보자. ThingSpeak.h, WiFi.h 및 DHT11.h 3가지 라이브러리를 불러오자. ThingSpeak.h 라이브러리 설치에 관해서는 일전에 게시한 아래의 블로그 내용을 참조하자. esp32와 센서가 결합된 형태이긴 하지만 근본적으로 내용에 별반 차이가 없다.
아두이노 WeMos ESP32 클라이언트로 ThingSpeak에 수분 및 온습도 측정값 전송
http://blog.daum.net/ejleep1/1079
esp32 보드를 사용한 ThingSpeak 데이터 전송에서는 API 키 값 외에도 Channel ID 가 필요하다.
esp32센서 보드에서는 dht11 은 22번 핀에 아날로그 전압을 읽어야 하는 Capacitive sensor 는 32번 핀을 사용한다. 아두이노 우노에서는 A0, A1,... 과 같이 지정하지만 esp32에서는 pinout 다이아그램의 GPIO 번호를 그대로 핀 번호로 사용함에 유의하자.
hg 와 lw는 esp32 보드의 ADC에서 읽은 값이다. 아두이노 우노의 0~1023 보다 해상도가 높아 0~4095 사이 범위 값을 읽어 낼 수 있다.
WeMOS D1 R1 사용 시에는 map 명령을 사용하여 0~100 사이 퍼센트로 환산하였으나 esp32에서는 해상도가 달라 map 명령 사용이 불가능하다. 따라서 공기 중의 센서 값과 물속에 담궜을 때의 센서 값을 측정해 100% 범위로 직접 계산하여 환산할 필요가 있다. 측정해 보면 정확하게3350과 1600 이 나오는 것은 아니고 1% 가량의 오차가 있음에 유의하자.
수분, 온도 및 습도를 측정하여 ThinsSpeak에 보내는 명령 코드는 다음과 같이 동일함을 알 수 있다.
//Thingspeak_esp32_dieffenbachia
#include "ThingSpeak.h"
#include <WiFi.h>
#include <DHT11.h>
char ssid[] = "droidan1234"; // your network SSID (name)
char pass[] = "dddddddddd"; // your network password
//char ssid[] = "YSC-2.4GHz";
//char pass[] = "";
WiFiClient client;
unsigned long myChannelNumber = 185411;
const char * myWriteAPIKey = "J5WGWY8OMQEH6BKR";
int number = 0;
int sensor = 32;
int pin = 22; //Signal 이 연결된 아두이노weMos의 핀번호
int hg = 3350;
int lw = 1600;
unsigned long sampling_time =300000;
DHT11 dht11(pin);
void setup() {
Serial.begin(115200); //Initialize serial
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client); // Initialize ThingSpeak
pinMode(Motorpin, OUTPUT);
pinMode(pin, INPUT);
}
void loop() {
int err,xsoil;
float temp, humi,soil;
// Connect or reconnect to WiFi
if(WiFi.status() != WL_CONNECTED){
Serial.print("Attempting to connect to SSID: ");
while(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid,pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
if((err=dht11.read(humi, temp))==0) {
xsoil = analogRead(sensor);
if( xsoil < 1600 ) xsoil = 1600;
if( xsoil > 3350 ) xsoil = 3350;
soil = 100.0*(xsoil-lw)/(hg - lw);
Serial.print(soil, 0);
Serial.print(temp, 0);
//Serial.print(" humidity:");
Serial.print(humi, 0);
Serial.println();
}
else {
Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
// Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
// pieces of information in a channel. Here, we write to field 1.
// set the fields with the values
ThingSpeak.setField(1, soil);
ThingSpeak.setField(2, temp);
ThingSpeak.setField(3, humi);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(sampling_time); // Wait 20 seconds to update the channel again
}
'아두이노와 Processing' 카테고리의 다른 글
esp32 아두이노 OTA(Over The Air, arduinoOTA)에 의한 LED ON/OFF (0) | 2021.02.11 |
---|---|
esp32 L293D DC모터 제어 실험 (0) | 2021.02.02 |
esp32 보드에서 DHT22에 의한 온습도 측정 (0) | 2021.01.22 |
와이파이 Processing 코딩에 의해 weMos 보드 조도센서 저항값 변화 그래프 관찰 (0) | 2018.04.03 |
Processing(프로세싱) 와이파이에 의한 아두이노 weMos 전송 값 읽기 (0) | 2018.04.02 |