BASIC4MCU | 질문게시판 | 시간에 따라서 제어는 가능할거같은데 이제 이게 문제에요 한번만 더 봐주신다면 감사하겠습니다
페이지 정보
작성자 졸작어렵다 작성일2021-06-10 00:47 조회2,031회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=15936
본문
/**
* Created by K. Suwatchai (Mobizt)
*
* Email: k_suwatchai@hotmail.com
*
* Github: https://github.com/mobizt
*
* Copyright (c) 2020 mobizt
*
*/
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <FirebaseESP8266.h>
#include <DHT.h>
// Mendefinisikan pin dan tipe sensor DHT
#define DHTPIN D1
#define DHTTYPE DHT11
DHT dht (DHTPIN, DHTTYPE);
// Mendefinisikan pin dan tipe sensor DHT
#define FIREBASE_HOST "" // the project name address from firebase id
#define FIREBASE_AUTH "" // the secret key generated from firebase
#define WIFI_SSID "" // input your home or public wifi name
#define WIFI_PASSWORD ""
const char *ssid = "";
const char *password = "";
int previousMin = 0;
WiFiUDP udp;
NTPClient timeClient(udp, "kr.pool.ntp.org", 32400, 3600000);
//Define FirebaseESP8266 data object
FirebaseData fbdo;
FirebaseData fandata;
FirebaseData autodata;
FirebaseData temhud;
FirebaseData sethumidity;
FirebaseData settemperature;
FirebaseData setsoilmoisture;
FirebaseData temperature1;
FirebaseJson json;
int fan = D5;
void printResult(FirebaseData &data);
void setup()
{
pinMode(fan, OUTPUT);
dht.begin();
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
//Set the size of WiFi rx/tx buffers in the case where we want to work with large data.
fbdo.setBSSLBufferSize(1024, 1024);
//Set the size of HTTP response buffers in the case where we want to work with large data.
fbdo.setResponseSize(1024);
//Set database read timeout to 1 minute (max 15 minutes)
Firebase.setReadTimeout(fbdo, 1000 * 60);
//tiny, small, medium, large and unlimited.
//Size and its write timeout e.g. tiny (1s), small (10s), medium (30s) and large (60s).
Firebase.setwriteSizeLimit(fbdo, "tiny");
//optional, set the decimal places for float and double data to be stored in database
Firebase.setFloatDigits(2);
Firebase.setDoubleDigits(6);
/*
This option allows get and delete functions (PUT and DELETE HTTP requests) works for device connected behind the
Firewall that allows only GET and POST requests.
Firebase.enableClassicRequest(fbdo, true);
*/
String path = "/zookeeper";
timeClient.begin();
//
}
void loop()
{
float t = dht.readTemperature();
float h = dht.readHumidity();
// Memeriksa apakah sensor berhasil mambaca suhu dan kelembaban
if (isnan(t) || isnan(h)) {
Serial.println("DHT11 센서를 읽지 못했습니다");
return;
}
Serial.print("온도:");
Serial.println(t);
Serial.print("습도:");
Serial.println(h);
if (Firebase.setFloat(temhud, "/zookeeper/screen1/temperature1", t)){
Serial.println();
} else{
Serial.println("온도를 못 보냈습니다");
Serial.println("이유: " + temhud.errorReason());
}
if (Firebase.setFloat(temhud, "/zookeeper/screen1/humidity1", h)){
Serial.println();
} else{
Serial.println("습도를 못 보냈습니다");
Serial.println("이유: " + temhud.errorReason());
}
timeClient.update();
int currentMin = timeClient.getMinutes();
int currentTime = timeClient.getHours() * 100 + currentMin;
if (Firebase.getString(autodata,"zookeeper/screen1/auto/auto")){
if (autodata.stringData() == "1"){
Firebase.getString(settemperature,"zookeeper/screen1/auto/set temperature");
Firebase.getString(temperature1,"zookeeper/screen1/temperature1");
if (currentTime > 2407) {
if(temperature1.stringData() > settemperature.stringData()){
Serial.println("fan:on");
digitalWrite(fan, HIGH);
Serial.println("auto:on");
}
}
}
}
if (Firebase.getString(fandata,"zookeeper/screen1/fan")){
if (fandata.stringData() == "1") {
Serial.println("fan:on");
digitalWrite(fan, HIGH);
}
else if (fandata.stringData() == "0"){
Serial.print("fan:off ");
digitalWrite(fan, LOW);
}
}
delay(2000);
}
저기 if (current time 부분 중심으로 보시면
파이어베이스에 저장된 오토라는값이 앱인벤터상에서 1로 바꿔주게되면 if 문으로 이제 오토가 1일시에 현재시간이 2407 보다 더 크면
( 원래 dht11이 측정한온도를 아두이노에서 그냥 t > settemperature.stringdata() 처럼 비교하려 했으나 컴파일 에러가 뜹니다 float t 어쩌고 하면서 뜨는데
float인 t 는 비교가안되는건가 싶습니다 그래서 온습도를 파이어베이스에 저장된값을 다시 불러와서 이제 밑에 처럼 비교를 합니다)
파이어베이스 저장된 온습도값을 다시 가져와서
앱인벤터에서 보낸 설정 온도(settemperature)와 비교를해서 설정온도보다 측정한 온도가 크면 fan을 on 시키는 코드입니다 근데 돌리면 컴파일 에러는 안뜨지만 업로드시이 시리얼모니터에서 문자와 숫자 예를들어333ffff같은게 주루룩 뜨고 stack라는 글자가 밑에보이는것을 반복 와이파이가 다시잡혀요 무엇이 잘못된건가요?
댓글 1
조회수 2,031master님의 댓글
master 작성일
무슨 프로그램에서 코드를 복사했는지 모르겠지만
저를 고생시킬려고 작정하고 이렇게 길게 작성한 것이 아니라면 코드를 정리해서 올리셔야 하지 않을까요?