<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>스마트팜 by 빽구두</title>
      <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey</link>
      <description></description>
      <language>en-us</language>
      <pubDate>2025-06-11 23:10:10 UTC</pubDate>
      <lastBuildDate>2025-07-23 00:11:37 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>3반30초간</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3487181009</link>
         <description><![CDATA[<pre><code class="language-cpp">#define BLYNK_PRINT Serial

// 블링크 연동 정보 기재
#define BLYNK_TEMPLATE_ID "TMPL6zNX06Foh"
#define BLYNK_TEMPLATE_NAME "0611"
#define BLYNK_AUTH_TOKEN "F5IQGALOEYCPEIpQ98_e5xoK1KtJnEAo"

#include &lt;WiFi.h&gt;
#include &lt;WiFiClient.h&gt;
#include &lt;BlynkSimpleEsp32.h&gt;

char&nbsp;ssid[]&nbsp;=&nbsp;"YEiPhone";
char&nbsp;pass[]&nbsp;=&nbsp;"12345678";

BlynkTimer timer;   // 블링크 타이머 함수 사용

// LED 작동
#define relayPin_L 18
bool led_state;         

BLYNK_WRITE(V0) {
  led_state = param.asInt();
}

unsigned long lastLedTriggerTime = 0;
bool ledRunning = false;

void ledControl() {
  unsigned long currentMillis = millis();

  if (led_state) {
    if (!ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 30000)) {
      digitalWrite(relayPin_L, HIGH);
      ledRunning = true;
      lastLedTriggerTime = currentMillis;
    }

    if (ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 10000)) {
      digitalWrite(relayPin_L, LOW);
      ledRunning = false;
    }
  } else {
    digitalWrite(relayPin_L, LOW);
    ledRunning = false;
    lastLedTriggerTime = millis();
  }
}

// FAN 작동
#define relayPin_F 19
bool fan_state;          

BLYNK_WRITE(V4) {
  fan_state = param.asInt();
}

unsigned long lastFanTriggerTime = 0;
bool fanRunning = false;

void fanControl() {
  unsigned long currentMillis = millis();

  if (fan_state) {
    if (!fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 30000)) {
      digitalWrite(relayPin_F, HIGH);
      fanRunning = true;
      lastFanTriggerTime = currentMillis;
    }

    if (fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 10000)) {
      digitalWrite(relayPin_F, LOW);
      fanRunning = false;
    }
  } else {
    digitalWrite(relayPin_F, LOW);
    fanRunning = false;
    lastFanTriggerTime = millis();
  }
}

// 온습도 센서, 토양수분, LCD
#include &lt;DHT.h&gt;
#define DHTPin 25
#define DHTTYPE DHT11
DHT dht(DHTPin, DHTTYPE);

#define soilPin 34
#define relayPin_P 23

#include &lt;Wire.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 확인 필요 (0x27 or 0x3F)

void sensorEvent() {
  int tempValue = dht.readTemperature();
  int humValue = dht.readHumidity();
  Blynk.virtualWrite(V1, tempValue);
  Blynk.virtualWrite(V2, humValue);

  int soilValue = analogRead(soilPin);
  int soilValue_p = map(soilValue, 950, 2600, 100, 0);
  Serial.print("S : ");
  Serial.print(soilValue);
  Serial.print(" , S_P : ");
  Serial.println(soilValue_p);
  Blynk.virtualWrite(V3, soilValue_p);

  if (soilValue_p &lt; 25) {
    digitalWrite(relayPin_P, HIGH);
  } else {
    digitalWrite(relayPin_P, LOW);
  }

  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("T : ");
  lcd.print(tempValue);
  lcd.print("C");
  lcd.setCursor(8, 0);
  lcd.print("H : ");
  lcd.print(humValue);
  lcd.print("%");
  lcd.setCursor(2, 1);
  lcd.print("Soil_M : ");
  lcd.print(soilValue_p);
  lcd.setCursor(14, 1);
  lcd.print("%");
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  pinMode(relayPin_L, OUTPUT);
  pinMode(relayPin_F, OUTPUT);
  pinMode(relayPin_P, OUTPUT);

  timer.setInterval(300L, ledControl);       // 0.3초마다 상태 체크
  timer.setInterval(300L, fanControl);
  timer.setInterval(1000L, sensorEvent);     // 1초마다 센서 읽기
}

void loop() {
  Blynk.run();
  timer.run();
}</code></pre>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-12 00:09:21 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3487181009</guid>
      </item>
      <item>
         <title>30분간격</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3487183399</link>
         <description><![CDATA[<p>#define BLYNK_PRINT Serial</p><p>// 블링크 연동 정보 기재</p><p>#define BLYNK_TEMPLATE_ID "TMPL6zNX06Foh"</p><p>#define BLYNK_TEMPLATE_NAME "0611"</p><p>#define BLYNK_AUTH_TOKEN "F5IQGALOEYCPEIpQ98_e5xoK1KtJnEAo"</p><p>#include &lt;WiFi.h&gt;</p><p>#include &lt;WiFiClient.h&gt;</p><p>#include &lt;BlynkSimpleEsp32.h&gt;</p><p>char ssid[] = "Jun01";</p><p>char pass[] = "12345678";</p><p>BlynkTimer timer;   // 블링크 타이머함수 사용</p><p>// LED 작동</p><p>#define relayPin_L 18</p><p>bool led_state;</p><p>BLYNK_WRITE(V0) {</p><p>  led_state = param.asInt();</p><p>}</p><p>unsigned long lastLedTriggerTime = 0;</p><p>bool ledRunning = false;</p><p>void ledControl() {</p><p>  unsigned long currentMillis = millis();</p><p>  if (led_state) {</p><p>    if (!ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 1800000)) {  // 30분마다</p><p>      digitalWrite(relayPin_L, HIGH);  // 1분간 켜기</p><p>      ledRunning = true;</p><p>      lastLedTriggerTime = currentMillis;</p><p>    }</p><p>    if (ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 60000)) {  // 1분 후 끄기</p><p>      digitalWrite(relayPin_L, LOW);</p><p>      ledRunning = false;</p><p>    }</p><p>  } else {</p><p>    digitalWrite(relayPin_L, LOW);</p><p>    ledRunning = false;</p><p>    lastLedTriggerTime = millis();  // 초기화</p><p>  }</p><p>}</p><p>// FAN 작동</p><p>#define relayPin_F 19</p><p>bool fan_state;</p><p>BLYNK_WRITE(V4) {</p><p>  fan_state = param.asInt();</p><p>}</p><p>unsigned long lastFanTriggerTime = 0;</p><p>bool fanRunning = false;</p><p>void fanControl() {</p><p>  unsigned long currentMillis = millis();</p><p>  if (fan_state) {</p><p>    if (!fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 1800000)) {  // 30분마다</p><p>      digitalWrite(relayPin_F, HIGH);  // 1분간 켜기</p><p>      fanRunning = true;</p><p>      lastFanTriggerTime = currentMillis;</p><p>    }</p><p>    if (fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 60000)) {  // 1분 후 끄기</p><p>      digitalWrite(relayPin_F, LOW);</p><p>      fanRunning = false;</p><p>    }</p><p>  } else {</p><p>    digitalWrite(relayPin_F, LOW);</p><p>    fanRunning = false;</p><p>    lastFanTriggerTime = millis();  // 초기화</p><p>  }</p><p>}</p><p>// 온습도 센서, 토양수분, LCD</p><p>#include &lt;DHT.h&gt;</p><p>#define DHTPin 25</p><p>#define DHTTYPE DHT11</p><p>DHT dht(DHTPin, DHTTYPE);</p><p>#define soilPin 34</p><p>#define relayPin_P 23</p><p>#include &lt;Wire.h&gt;</p><p>#include &lt;LiquidCrystal_I2C.h&gt;</p><p>LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 확인 필요 (0x27 또는 0x3F)</p><p>void sensorEvent() {</p><p>  int tempValue = dht.readTemperature();</p><p>  int humValue = dht.readHumidity();</p><p>  Blynk.virtualWrite(V1, tempValue);</p><p>  Blynk.virtualWrite(V2, humValue);</p><p>  int soilValue = analogRead(soilPin);</p><p>  int soilValue_p = map(soilValue, 950, 2600, 100, 0);</p><p>  Serial.print("S : ");</p><p>  Serial.print(soilValue);</p><p>  Serial.print(" , S_P : ");</p><p>  Serial.println(soilValue_p);</p><p>  Blynk.virtualWrite(V3, soilValue_p);</p><p>  if (soilValue_p &lt; 25) {</p><p>    digitalWrite(relayPin_P, HIGH);</p><p>  } else {</p><p>    digitalWrite(relayPin_P, LOW);</p><p>  }</p><p>  lcd.begin();</p><p>  lcd.backlight();</p><p>  lcd.setCursor(0, 0);</p><p>  lcd.print("T : ");</p><p>  lcd.print(tempValue);</p><p>  lcd.print("C");</p><p>  lcd.setCursor(8, 0);</p><p>  lcd.print("H : ");</p><p>  lcd.print(humValue);</p><p>  lcd.print("%");</p><p>  lcd.setCursor(2, 1);</p><p>  lcd.print("Soil_M : ");</p><p>  lcd.print(soilValue_p);</p><p>  lcd.setCursor(14, 1);</p><p>  lcd.print("%");</p><p>}</p><p>void setup() {</p><p>  Serial.begin(9600);</p><p>  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);</p><p>  pinMode(relayPin_L, OUTPUT);</p><p>  pinMode(relayPin_F, OUTPUT);</p><p>  pinMode(relayPin_P, OUTPUT);</p><p>  timer.setInterval(300L, ledControl);</p><p>  timer.setInterval(300L, fanControl);</p><p>  timer.setInterval(1000L, sensorEvent);</p><p>}</p><p>void loop() {</p><p>  <a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>  <a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();</p><p>}</p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-12 00:11:17 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3487183399</guid>
      </item>
      <item>
         <title>4반 기본형</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3490958192</link>
         <description><![CDATA[<p>#define&nbsp;BLYNK_PRINT&nbsp;Serial</p><p>&nbsp;</p><p>//&nbsp;블링크&nbsp;연동&nbsp;정보&nbsp;기재</p><p>&nbsp;</p><p>//#define&nbsp;BLYNK_TEMPLATE_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"TMPxxxxxx"</p><p>//#define&nbsp;BLYNK_TEMPLATE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Device"</p><p>//#define&nbsp;BLYNK_AUTH_TOKEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"YourAuthToken"</p><p>&nbsp;</p><p>#include&nbsp;&lt;WiFi.h&gt;</p><p>#include&nbsp;&lt;WiFiClient.h&gt;</p><p>#include&nbsp;&lt;BlynkSimpleEsp32.h&gt;</p><p>&nbsp;</p><p>char&nbsp;ssid[]&nbsp;=&nbsp;"sunchip64";</p><p>char&nbsp;pass[]&nbsp;=&nbsp;"1234qwer";</p><p>&nbsp;</p><p>BlynkTimer&nbsp;timer;&nbsp;&nbsp;&nbsp;//블링크&nbsp;타이머함수&nbsp;사용</p><p>&nbsp;</p><p>//&nbsp;LED&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_L&nbsp;18&nbsp;&nbsp;//LED&nbsp;릴레이핀</p><p>bool&nbsp;led_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//led_state&nbsp;선언&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V0){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V0&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;led_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;ledControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(led_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;fan&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_F&nbsp;19&nbsp;&nbsp;&nbsp;//GPIO&nbsp;19번&nbsp;핀에&nbsp;fan&nbsp;동작&nbsp;릴레이</p><p>bool&nbsp;fan_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;fan_state&nbsp;선언&nbsp;&nbsp;&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V4){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V4&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;fan_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;fanControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(fan_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;온습도&nbsp;센서,&nbsp;토양수분,&nbsp;LCD</p><p>&nbsp;</p><p>#include&nbsp;&lt;DHT.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;라이브러리</p><p>#define&nbsp;DHTPin&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//25번&nbsp;핀에&nbsp;연결&nbsp;</p><p>#define&nbsp;DHTTYPE&nbsp;DHT11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서타입&nbsp;&nbsp;</p><p>DHT&nbsp;dht(DHTPin,DHTTYPE);&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;함수&nbsp;선언</p><p>&nbsp;</p><p>#define&nbsp;soilPin&nbsp;34&nbsp;&nbsp;&nbsp;//&nbsp;34번&nbsp;핀에&nbsp;토양수분센서</p><p>#define&nbsp;relayPin_P&nbsp;23&nbsp;&nbsp;&nbsp;//&nbsp;23번&nbsp;핀에&nbsp;펌프&nbsp;동작&nbsp;릴레이</p><p>&nbsp;</p><p>#include&nbsp;&lt;Wire.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;i2C&nbsp;통신을&nbsp;위한&nbsp;라이브러리</p><p>#include&nbsp;&lt;LiquidCrystal_I2C.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LCD&nbsp;1602&nbsp;I2C용&nbsp;라이브러리</p><p>LiquidCrystal_I2C&nbsp;lcd(&nbsp;0x27,&nbsp;16,&nbsp;2);&nbsp;//&nbsp;화면이&nbsp;안나오면&nbsp;0x27&nbsp;-&gt;&nbsp;0x3F&nbsp;로&nbsp;변경</p><p>&nbsp;</p><p>void&nbsp;sensorEvent(){</p><p>&nbsp;&nbsp;int&nbsp;tempValue&nbsp;=&nbsp;dht.readTemperature();&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;측정값을&nbsp;tempValue에&nbsp;저장</p><p>&nbsp;&nbsp;int&nbsp;humValue&nbsp;=&nbsp;dht.readHumidity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;측정값을&nbsp;humValue에&nbsp;저장&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V1,&nbsp;tempValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;값을&nbsp;블링크의&nbsp;V1핀으로&nbsp;전송</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V2,&nbsp;humValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;값을&nbsp;블링크의&nbsp;V2번핀으로&nbsp;전송&nbsp;</p><p>&nbsp;&nbsp;</p><p>&nbsp;&nbsp;int&nbsp;soilValue&nbsp;=&nbsp;analogRead(soilPin);</p><p>&nbsp;&nbsp;int&nbsp;soilValue_p&nbsp;=&nbsp;map(soilValue,&nbsp;950,&nbsp;2600,&nbsp;100,&nbsp;0);&nbsp;&nbsp;//&nbsp;물티슈&nbsp;등을&nbsp;이용하여&nbsp;최대&nbsp;최소값&nbsp;측정&nbsp;후&nbsp;변경</p><p>&nbsp;&nbsp;Serial.print("S&nbsp;:&nbsp;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;map&nbsp;함수&nbsp;값을&nbsp;넣기&nbsp;위해&nbsp;측정값을&nbsp;시리얼&nbsp;모니터로&nbsp;값&nbsp;출력</p><p>&nbsp;&nbsp;Serial.print(soilValue);</p><p>&nbsp;&nbsp;Serial.print("&nbsp;,&nbsp;S_P&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;");&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Serial.println(soilValue_p);</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V3,&nbsp;soilValue_p);&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;백분율&nbsp;블링크&nbsp;V3번&nbsp;핀으로&nbsp;전송</p><p>&nbsp;&nbsp;if(soilValue_p&nbsp;&lt;&nbsp;40){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;%&nbsp;측정&nbsp;값에&nbsp;따른&nbsp;릴레이핀&nbsp;동작(수중모터&nbsp;동작)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,HIGH);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;40%&nbsp;를&nbsp;기준으로&nbsp;사용&nbsp;</p><p>&nbsp;&nbsp;}&nbsp;</p><p>&nbsp;&nbsp;else&nbsp;if(soilValue_p&nbsp;&gt;=&nbsp;40){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,LOW);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;</p><p>&nbsp;&nbsp;lcd.begin();           //&nbsp;리셋(자리수 수정 함수 안넣기;; -&gt; 간소화)</p><p>&nbsp;&nbsp;lcd.backlight();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;백라이트&nbsp;켜기</p><p>&nbsp;&nbsp;lcd.setCursor(0,&nbsp;0);&nbsp;&nbsp;//&nbsp;(X축&nbsp;넘길&nbsp;갯수,&nbsp;라인번호)&nbsp;첫&nbsp;번째&nbsp;칸,&nbsp;첫&nbsp;번째&nbsp;줄에&nbsp;표시</p><p>&nbsp;&nbsp;lcd.print("T&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(tempValue);</p><p>&nbsp;&nbsp;lcd.print("C");</p><p>&nbsp;&nbsp;lcd.setCursor(8,&nbsp;0);&nbsp;&nbsp;//&nbsp;(1칸&nbsp;띄고,&nbsp;첫번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("H&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(humValue);</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>&nbsp;&nbsp;lcd.setCursor(2,&nbsp;1);&nbsp;&nbsp;//&nbsp;(2칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("Soil_M&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(soilValue_p);</p><p>&nbsp;&nbsp;lcd.setCursor(14,&nbsp;1);&nbsp;&nbsp;//&nbsp;(14칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>}</p><p>&nbsp;</p><p>void&nbsp;setup()</p><p>{</p><p>&nbsp;&nbsp;Serial.begin(9600);</p><p>&nbsp;&nbsp;Blynk.begin(BLYNK_AUTH_TOKEN,&nbsp;ssid,&nbsp;pass);</p><p>&nbsp;&nbsp;pinMode(relayPin_L,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LED&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;ledControl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;LED&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_F,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Fan&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;fanControl);&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;fan&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_P,&nbsp;OUTPUT);&nbsp;</p><p>&nbsp;&nbsp;timer.setInterval(1000L,&nbsp;sensorEvent);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1초마다&nbsp;데이터&nbsp;확인,&nbsp;전송&nbsp;및&nbsp;동작&nbsp;&nbsp;</p><p>}</p><p>&nbsp;</p><p>void&nbsp;loop()</p><p>{</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//timer&nbsp;사용</p><p>}</p><p><br></p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-16 01:02:47 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3490958192</guid>
      </item>
      <item>
         <title>4반 30분간격</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3490958421</link>
         <description><![CDATA[<p>#define BLYNK_PRINT Serial</p><p>// 블링크 연동 정보 기재</p><p>#define BLYNK_TEMPLATE_ID "TMPL6zNX06Foh"</p><p>#define BLYNK_TEMPLATE_NAME "0611"</p><p>#define BLYNK_AUTH_TOKEN "F5IQGALOEYCPEIpQ98_e5xoK1KtJnEAo"</p><p><br/></p><p>#include &lt;WiFi.h&gt;</p><p>#include &lt;WiFiClient.h&gt;</p><p>#include &lt;BlynkSimpleEsp32.h&gt;</p><p><br/></p><p>char&nbsp;ssid[]&nbsp;=&nbsp;"sunchip64";</p><p>char&nbsp;pass[]&nbsp;=&nbsp;"1234qwer";</p><p><br/></p><p>BlynkTimer timer;   // 블링크 타이머함수 사용</p><p>// LED 작동</p><p>#define relayPin_L 18</p><p>bool led_state;</p><p>BLYNK_WRITE(V0) {</p><p>  led_state = param.asInt();</p><p>}</p><p>unsigned long lastLedTriggerTime = 0;</p><p>bool ledRunning = false;</p><p>void ledControl() {</p><p>  unsigned long currentMillis = millis();</p><p>  if (led_state) {</p><p>    if (!ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 1800000)) {  // 30분마다</p><p>      digitalWrite(relayPin_L, HIGH);  // 1분간 켜기</p><p>      ledRunning = true;</p><p>      lastLedTriggerTime = currentMillis;</p><p>    }</p><p>    if (ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 60000)) {  // 1분 후 끄기</p><p>      digitalWrite(relayPin_L, LOW);</p><p>      ledRunning = false;</p><p>    }</p><p>  } else {</p><p>    digitalWrite(relayPin_L, LOW);</p><p>    ledRunning = false;</p><p>    lastLedTriggerTime = millis();  // 초기화</p><p>  }</p><p>}</p><p>// FAN 작동</p><p>#define relayPin_F 19</p><p>bool fan_state;</p><p>BLYNK_WRITE(V4) {</p><p>  fan_state = param.asInt();</p><p>}</p><p>unsigned long lastFanTriggerTime = 0;</p><p>bool fanRunning = false;</p><p>void fanControl() {</p><p>  unsigned long currentMillis = millis();</p><p>  if (fan_state) {</p><p>    if (!fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 1800000)) {  // 30분마다</p><p>      digitalWrite(relayPin_F, HIGH);  // 1분간 켜기</p><p>      fanRunning = true;</p><p>      lastFanTriggerTime = currentMillis;</p><p>    }</p><p>    if (fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 60000)) {  // 1분 후 끄기</p><p>      digitalWrite(relayPin_F, LOW);</p><p>      fanRunning = false;</p><p>    }</p><p>  } else {</p><p>    digitalWrite(relayPin_F, LOW);</p><p>    fanRunning = false;</p><p>    lastFanTriggerTime = millis();  // 초기화</p><p>  }</p><p>}</p><p>// 온습도 센서, 토양수분, LCD</p><p>#include &lt;DHT.h&gt;</p><p>#define DHTPin 25</p><p>#define DHTTYPE DHT11</p><p>DHT dht(DHTPin, DHTTYPE);</p><p>#define soilPin 34</p><p>#define relayPin_P 23</p><p>#include &lt;Wire.h&gt;</p><p>#include &lt;LiquidCrystal_I2C.h&gt;</p><p>LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 확인 필요 (0x27 또는 0x3F)</p><p>void sensorEvent() {</p><p>  int tempValue = dht.readTemperature();</p><p>  int humValue = dht.readHumidity();</p><p>  Blynk.virtualWrite(V1, tempValue);</p><p>  Blynk.virtualWrite(V2, humValue);</p><p>  int soilValue = analogRead(soilPin);</p><p>  int soilValue_p = map(soilValue, 950, 2600, 100, 0);</p><p>  Serial.print("S : ");</p><p>  Serial.print(soilValue);</p><p>  Serial.print(" , S_P : ");</p><p>  Serial.println(soilValue_p);</p><p>  Blynk.virtualWrite(V3, soilValue_p);</p><p>  if (soilValue_p &lt; 25) {</p><p>    digitalWrite(relayPin_P, HIGH);</p><p>  } else {</p><p>    digitalWrite(relayPin_P, LOW);</p><p>  }</p><p>  lcd.begin();</p><p>  lcd.backlight();</p><p>  lcd.setCursor(0, 0);</p><p>  lcd.print("T : ");</p><p>  lcd.print(tempValue);</p><p>  lcd.print("C");</p><p>  lcd.setCursor(8, 0);</p><p>  lcd.print("H : ");</p><p>  lcd.print(humValue);</p><p>  lcd.print("%");</p><p>  lcd.setCursor(2, 1);</p><p>  lcd.print("Soil_M : ");</p><p>  lcd.print(soilValue_p);</p><p>  lcd.setCursor(14, 1);</p><p>  lcd.print("%");</p><p>}</p><p>void setup() {</p><p>  Serial.begin(9600);</p><p>  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);</p><p>  pinMode(relayPin_L, OUTPUT);</p><p>  pinMode(relayPin_F, OUTPUT);</p><p>  pinMode(relayPin_P, OUTPUT);</p><p>  timer.setInterval(300L, ledControl);</p><p>  timer.setInterval(300L, fanControl);</p><p>  timer.setInterval(1000L, sensorEvent);</p><p>}</p><p>void loop() {</p><p>  <a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>  <a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();</p><p>}</p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-16 01:02:59 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3490958421</guid>
      </item>
      <item>
         <title>4반 30초간</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3490958730</link>
         <description><![CDATA[<pre><code class="language-cpp">#define BLYNK_PRINT Serial

// 블링크 연동 정보 기재
#define BLYNK_TEMPLATE_ID "TMPL6zNX06Foh"
#define BLYNK_TEMPLATE_NAME "0611"
#define BLYNK_AUTH_TOKEN "F5IQGALOEYCPEIpQ98_e5xoK1KtJnEAo"

#include &lt;WiFi.h&gt;
#include &lt;WiFiClient.h&gt;
#include &lt;BlynkSimpleEsp32.h&gt;

char&nbsp;ssid[]&nbsp;=&nbsp;"sunchip64";
char&nbsp;pass[]&nbsp;=&nbsp;"1234qwer";

BlynkTimer timer;   // 블링크 타이머 함수 사용

// LED 작동
#define relayPin_L 18
bool led_state;         

BLYNK_WRITE(V0) {
  led_state = param.asInt();
}

unsigned long lastLedTriggerTime = 0;
bool ledRunning = false;

void ledControl() {
  unsigned long currentMillis = millis();

  if (led_state) {
    if (!ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 30000)) {
      digitalWrite(relayPin_L, HIGH);
      ledRunning = true;
      lastLedTriggerTime = currentMillis;
    }

    if (ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 10000)) {
      digitalWrite(relayPin_L, LOW);
      ledRunning = false;
    }
  } else {
    digitalWrite(relayPin_L, LOW);
    ledRunning = false;
    lastLedTriggerTime = millis();
  }
}

// FAN 작동
#define relayPin_F 19
bool fan_state;          

BLYNK_WRITE(V4) {
  fan_state = param.asInt();
}

unsigned long lastFanTriggerTime = 0;
bool fanRunning = false;

void fanControl() {
  unsigned long currentMillis = millis();

  if (fan_state) {
    if (!fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 30000)) {
      digitalWrite(relayPin_F, HIGH);
      fanRunning = true;
      lastFanTriggerTime = currentMillis;
    }

    if (fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 10000)) {
      digitalWrite(relayPin_F, LOW);
      fanRunning = false;
    }
  } else {
    digitalWrite(relayPin_F, LOW);
    fanRunning = false;
    lastFanTriggerTime = millis();
  }
}

// 온습도 센서, 토양수분, LCD
#include &lt;DHT.h&gt;
#define DHTPin 25
#define DHTTYPE DHT11
DHT dht(DHTPin, DHTTYPE);

#define soilPin 34
#define relayPin_P 23

#include &lt;Wire.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 확인 필요 (0x27 or 0x3F)

void sensorEvent() {
  int tempValue = dht.readTemperature();
  int humValue = dht.readHumidity();
  Blynk.virtualWrite(V1, tempValue);
  Blynk.virtualWrite(V2, humValue);

  int soilValue = analogRead(soilPin);
  int soilValue_p = map(soilValue, 950, 2600, 100, 0);
  Serial.print("S : ");
  Serial.print(soilValue);
  Serial.print(" , S_P : ");
  Serial.println(soilValue_p);
  Blynk.virtualWrite(V3, soilValue_p);

  if (soilValue_p &lt; 25) {
    digitalWrite(relayPin_P, HIGH);
  } else {
    digitalWrite(relayPin_P, LOW);
  }

  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("T : ");
  lcd.print(tempValue);
  lcd.print("C");
  lcd.setCursor(8, 0);
  lcd.print("H : ");
  lcd.print(humValue);
  lcd.print("%");
  lcd.setCursor(2, 1);
  lcd.print("Soil_M : ");
  lcd.print(soilValue_p);
  lcd.setCursor(14, 1);
  lcd.print("%");
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  pinMode(relayPin_L, OUTPUT);
  pinMode(relayPin_F, OUTPUT);
  pinMode(relayPin_P, OUTPUT);

  timer.setInterval(300L, ledControl);       // 0.3초마다 상태 체크
  timer.setInterval(300L, fanControl);
  timer.setInterval(1000L, sensorEvent);     // 1초마다 센서 읽기
}

void loop() {
  Blynk.run();
  timer.run();
}</code></pre>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-16 01:03:16 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3490958730</guid>
      </item>
      <item>
         <title>민서기본형</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493665224</link>
         <description><![CDATA[<p>#define&nbsp;BLYNK_PRINT&nbsp;Serial</p><p>&nbsp;</p><p>//&nbsp;블링크&nbsp;연동&nbsp;정보&nbsp;기재</p><p>&nbsp;</p><p>#define BLYNK_TEMPLATE_ID "TMPL6RSpDMToA"</p><p>#define BLYNK_TEMPLATE_NAME "공주"</p><p>#define BLYNK_AUTH_TOKEN "VqKIUvo9JhRN0T4CImYCzB60lKSPpWAc"</p><p>&nbsp;</p><p>#include&nbsp;&lt;WiFi.h&gt;</p><p>#include&nbsp;&lt;WiFiClient.h&gt;</p><p>#include&nbsp;&lt;BlynkSimpleEsp32.h&gt;</p><p>&nbsp;</p><p>char&nbsp;ssid[]&nbsp;=&nbsp;"Jun01";</p><p>char&nbsp;pass[]&nbsp;=&nbsp;"12345678";</p><p>&nbsp;</p><p>BlynkTimer&nbsp;timer;&nbsp;&nbsp;&nbsp;//블링크&nbsp;타이머함수&nbsp;사용</p><p>&nbsp;</p><p>//&nbsp;LED&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_L&nbsp;18&nbsp;&nbsp;//LED&nbsp;릴레이핀</p><p>bool&nbsp;led_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//led_state&nbsp;선언&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V0){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V0&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;led_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;ledControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(led_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;fan&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_F&nbsp;19&nbsp;&nbsp;&nbsp;//GPIO&nbsp;19번&nbsp;핀에&nbsp;fan&nbsp;동작&nbsp;릴레이</p><p>bool&nbsp;fan_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;fan_state&nbsp;선언&nbsp;&nbsp;&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V4){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V4&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;fan_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;fanControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(fan_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;온습도&nbsp;센서,&nbsp;토양수분,&nbsp;LCD</p><p>&nbsp;</p><p>#include&nbsp;&lt;DHT.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;라이브러리</p><p>#define&nbsp;DHTPin&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//25번&nbsp;핀에&nbsp;연결&nbsp;</p><p>#define&nbsp;DHTTYPE&nbsp;DHT11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서타입&nbsp;&nbsp;</p><p>DHT&nbsp;dht(DHTPin,DHTTYPE);&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;함수&nbsp;선언</p><p>&nbsp;</p><p>#define&nbsp;soilPin&nbsp;34&nbsp;&nbsp;&nbsp;//&nbsp;34번&nbsp;핀에&nbsp;토양수분센서</p><p>#define&nbsp;relayPin_P&nbsp;23&nbsp;&nbsp;&nbsp;//&nbsp;23번&nbsp;핀에&nbsp;펌프&nbsp;동작&nbsp;릴레이</p><p>&nbsp;</p><p>#include&nbsp;&lt;Wire.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;i2C&nbsp;통신을&nbsp;위한&nbsp;라이브러리</p><p>#include&nbsp;&lt;LiquidCrystal_I2C.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LCD&nbsp;1602&nbsp;I2C용&nbsp;라이브러리</p><p>LiquidCrystal_I2C&nbsp;lcd(&nbsp;0x27,&nbsp;16,&nbsp;2);&nbsp;//&nbsp;화면이&nbsp;안나오면&nbsp;0x27&nbsp;-&gt;&nbsp;0x3F&nbsp;로&nbsp;변경</p><p>&nbsp;</p><p>void&nbsp;sensorEvent(){</p><p>&nbsp;&nbsp;int&nbsp;tempValue&nbsp;=&nbsp;dht.readTemperature();&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;측정값을&nbsp;tempValue에&nbsp;저장</p><p>&nbsp;&nbsp;int&nbsp;humValue&nbsp;=&nbsp;dht.readHumidity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;측정값을&nbsp;humValue에&nbsp;저장&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V1,&nbsp;tempValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;값을&nbsp;블링크의&nbsp;V1핀으로&nbsp;전송</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V2,&nbsp;humValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;값을&nbsp;블링크의&nbsp;V2번핀으로&nbsp;전송&nbsp;</p><p>&nbsp;&nbsp;</p><p>&nbsp;&nbsp;int&nbsp;soilValue&nbsp;=&nbsp;analogRead(soilPin);</p><p>&nbsp;&nbsp;int&nbsp;soilValue_p&nbsp;=&nbsp;map(soilValue,&nbsp;950,&nbsp;2600,&nbsp;100,&nbsp;0);&nbsp;&nbsp;//&nbsp;물티슈&nbsp;등을&nbsp;이용하여&nbsp;최대&nbsp;최소값&nbsp;측정&nbsp;후&nbsp;변경</p><p>&nbsp;&nbsp;Serial.print("S&nbsp;:&nbsp;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;map&nbsp;함수&nbsp;값을&nbsp;넣기&nbsp;위해&nbsp;측정값을&nbsp;시리얼&nbsp;모니터로&nbsp;값&nbsp;출력</p><p>&nbsp;&nbsp;Serial.print(soilValue);</p><p>&nbsp;&nbsp;Serial.print("&nbsp;,&nbsp;S_P&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;");&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Serial.println(soilValue_p);</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V3,&nbsp;soilValue_p);&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;백분율&nbsp;블링크&nbsp;V3번&nbsp;핀으로&nbsp;전송</p><p>&nbsp;&nbsp;if(soilValue_p&nbsp;&lt;&nbsp;40){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;%&nbsp;측정&nbsp;값에&nbsp;따른&nbsp;릴레이핀&nbsp;동작(수중모터&nbsp;동작)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,HIGH);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;40%&nbsp;를&nbsp;기준으로&nbsp;사용&nbsp;</p><p>&nbsp;&nbsp;}&nbsp;</p><p>&nbsp;&nbsp;else&nbsp;if(soilValue_p&nbsp;&gt;=&nbsp;40){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,LOW);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;</p><p>&nbsp;&nbsp;lcd.begin();           //&nbsp;리셋(자리수 수정 함수 안넣기;; -&gt; 간소화)</p><p>&nbsp;&nbsp;lcd.backlight();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;백라이트&nbsp;켜기</p><p>&nbsp;&nbsp;lcd.setCursor(0,&nbsp;0);&nbsp;&nbsp;//&nbsp;(X축&nbsp;넘길&nbsp;갯수,&nbsp;라인번호)&nbsp;첫&nbsp;번째&nbsp;칸,&nbsp;첫&nbsp;번째&nbsp;줄에&nbsp;표시</p><p>&nbsp;&nbsp;lcd.print("T&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(tempValue);</p><p>&nbsp;&nbsp;lcd.print("C");</p><p>&nbsp;&nbsp;lcd.setCursor(8,&nbsp;0);&nbsp;&nbsp;//&nbsp;(1칸&nbsp;띄고,&nbsp;첫번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("H&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(humValue);</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>&nbsp;&nbsp;lcd.setCursor(2,&nbsp;1);&nbsp;&nbsp;//&nbsp;(2칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("Soil_M&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(soilValue_p);</p><p>&nbsp;&nbsp;lcd.setCursor(14,&nbsp;1);&nbsp;&nbsp;//&nbsp;(14칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>}</p><p>&nbsp;</p><p>void&nbsp;setup()</p><p>{</p><p>&nbsp;&nbsp;Serial.begin(9600);</p><p>&nbsp;&nbsp;Blynk.begin(BLYNK_AUTH_TOKEN,&nbsp;ssid,&nbsp;pass);</p><p>&nbsp;&nbsp;pinMode(relayPin_L,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LED&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;ledControl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;LED&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_F,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Fan&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;fanControl);&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;fan&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_P,&nbsp;OUTPUT);&nbsp;</p><p>&nbsp;&nbsp;timer.setInterval(1000L,&nbsp;sensorEvent);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1초마다&nbsp;데이터&nbsp;확인,&nbsp;전송&nbsp;및&nbsp;동작&nbsp;&nbsp;</p><p>}</p><p>&nbsp;</p><p>void&nbsp;loop()</p><p>{</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//timer&nbsp;사용</p><p>}</p><p><br/></p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-17 23:21:25 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493665224</guid>
      </item>
      <item>
         <title>3반 기본형</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493670397</link>
         <description><![CDATA[<p>#define&nbsp;BLYNK_PRINT&nbsp;Serial</p><p>&nbsp;</p><p>//&nbsp;블링크&nbsp;연동&nbsp;정보&nbsp;기재</p><p>&nbsp;</p><p>//#define&nbsp;BLYNK_TEMPLATE_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"TMPxxxxxx"</p><p>//#define&nbsp;BLYNK_TEMPLATE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Device"</p><p>//#define&nbsp;BLYNK_AUTH_TOKEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"YourAuthToken"</p><p>&nbsp;</p><p>#include&nbsp;&lt;WiFi.h&gt;</p><p>#include&nbsp;&lt;WiFiClient.h&gt;</p><p>#include&nbsp;&lt;BlynkSimpleEsp32.h&gt;</p><p>&nbsp;</p><p>char&nbsp;ssid[]&nbsp;=&nbsp;"YEiPhone";</p><p>char&nbsp;pass[]&nbsp;=&nbsp;"12345678";</p><p>&nbsp;</p><p>BlynkTimer&nbsp;timer;&nbsp;&nbsp;&nbsp;//블링크&nbsp;타이머함수&nbsp;사용</p><p>&nbsp;</p><p>//&nbsp;LED&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_L&nbsp;18&nbsp;&nbsp;//LED&nbsp;릴레이핀</p><p>bool&nbsp;led_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//led_state&nbsp;선언&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V0){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V0&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;led_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;ledControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(led_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;fan&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_F&nbsp;19&nbsp;&nbsp;&nbsp;//GPIO&nbsp;19번&nbsp;핀에&nbsp;fan&nbsp;동작&nbsp;릴레이</p><p>bool&nbsp;fan_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;fan_state&nbsp;선언&nbsp;&nbsp;&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V4){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V4&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;fan_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;fanControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(fan_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;온습도&nbsp;센서,&nbsp;토양수분,&nbsp;LCD</p><p>&nbsp;</p><p>#include&nbsp;&lt;DHT.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;라이브러리</p><p>#define&nbsp;DHTPin&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//25번&nbsp;핀에&nbsp;연결&nbsp;</p><p>#define&nbsp;DHTTYPE&nbsp;DHT11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서타입&nbsp;&nbsp;</p><p>DHT&nbsp;dht(DHTPin,DHTTYPE);&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;함수&nbsp;선언</p><p>&nbsp;</p><p>#define&nbsp;soilPin&nbsp;34&nbsp;&nbsp;&nbsp;//&nbsp;34번&nbsp;핀에&nbsp;토양수분센서</p><p>#define&nbsp;relayPin_P&nbsp;23&nbsp;&nbsp;&nbsp;//&nbsp;23번&nbsp;핀에&nbsp;펌프&nbsp;동작&nbsp;릴레이</p><p>&nbsp;</p><p>#include&nbsp;&lt;Wire.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;i2C&nbsp;통신을&nbsp;위한&nbsp;라이브러리</p><p>#include&nbsp;&lt;LiquidCrystal_I2C.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LCD&nbsp;1602&nbsp;I2C용&nbsp;라이브러리</p><p>LiquidCrystal_I2C&nbsp;lcd(&nbsp;0x27,&nbsp;16,&nbsp;2);&nbsp;//&nbsp;화면이&nbsp;안나오면&nbsp;0x27&nbsp;-&gt;&nbsp;0x3F&nbsp;로&nbsp;변경</p><p>&nbsp;</p><p>void&nbsp;sensorEvent(){</p><p>&nbsp;&nbsp;int&nbsp;tempValue&nbsp;=&nbsp;dht.readTemperature();&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;측정값을&nbsp;tempValue에&nbsp;저장</p><p>&nbsp;&nbsp;int&nbsp;humValue&nbsp;=&nbsp;dht.readHumidity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;측정값을&nbsp;humValue에&nbsp;저장&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V1,&nbsp;tempValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;값을&nbsp;블링크의&nbsp;V1핀으로&nbsp;전송</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V2,&nbsp;humValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;값을&nbsp;블링크의&nbsp;V2번핀으로&nbsp;전송&nbsp;</p><p>&nbsp;&nbsp;</p><p>&nbsp;&nbsp;int&nbsp;soilValue&nbsp;=&nbsp;analogRead(soilPin);</p><p>&nbsp;&nbsp;int&nbsp;soilValue_p&nbsp;=&nbsp;map(soilValue,&nbsp;950,&nbsp;2600,&nbsp;100,&nbsp;0);&nbsp;&nbsp;//&nbsp;물티슈&nbsp;등을&nbsp;이용하여&nbsp;최대&nbsp;최소값&nbsp;측정&nbsp;후&nbsp;변경</p><p>&nbsp;&nbsp;Serial.print("S&nbsp;:&nbsp;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;map&nbsp;함수&nbsp;값을&nbsp;넣기&nbsp;위해&nbsp;측정값을&nbsp;시리얼&nbsp;모니터로&nbsp;값&nbsp;출력</p><p>&nbsp;&nbsp;Serial.print(soilValue);</p><p>&nbsp;&nbsp;Serial.print("&nbsp;,&nbsp;S_P&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;");&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Serial.println(soilValue_p);</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V3,&nbsp;soilValue_p);&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;백분율&nbsp;블링크&nbsp;V3번&nbsp;핀으로&nbsp;전송</p><p>&nbsp;&nbsp;if(soilValue_p&nbsp;&lt;&nbsp;40){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;%&nbsp;측정&nbsp;값에&nbsp;따른&nbsp;릴레이핀&nbsp;동작(수중모터&nbsp;동작)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,HIGH);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;40%&nbsp;를&nbsp;기준으로&nbsp;사용&nbsp;</p><p>&nbsp;&nbsp;}&nbsp;</p><p>&nbsp;&nbsp;else&nbsp;if(soilValue_p&nbsp;&gt;=&nbsp;40){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,LOW);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;</p><p>&nbsp;&nbsp;lcd.begin();           //&nbsp;리셋(자리수 수정 함수 안넣기;; -&gt; 간소화)</p><p>&nbsp;&nbsp;lcd.backlight();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;백라이트&nbsp;켜기</p><p>&nbsp;&nbsp;lcd.setCursor(0,&nbsp;0);&nbsp;&nbsp;//&nbsp;(X축&nbsp;넘길&nbsp;갯수,&nbsp;라인번호)&nbsp;첫&nbsp;번째&nbsp;칸,&nbsp;첫&nbsp;번째&nbsp;줄에&nbsp;표시</p><p>&nbsp;&nbsp;lcd.print("T&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(tempValue);</p><p>&nbsp;&nbsp;lcd.print("C");</p><p>&nbsp;&nbsp;lcd.setCursor(8,&nbsp;0);&nbsp;&nbsp;//&nbsp;(1칸&nbsp;띄고,&nbsp;첫번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("H&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(humValue);</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>&nbsp;&nbsp;lcd.setCursor(2,&nbsp;1);&nbsp;&nbsp;//&nbsp;(2칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("Soil_M&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(soilValue_p);</p><p>&nbsp;&nbsp;lcd.setCursor(14,&nbsp;1);&nbsp;&nbsp;//&nbsp;(14칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>}</p><p>&nbsp;</p><p>void&nbsp;setup()</p><p>{</p><p>&nbsp;&nbsp;Serial.begin(9600);</p><p>&nbsp;&nbsp;Blynk.begin(BLYNK_AUTH_TOKEN,&nbsp;ssid,&nbsp;pass);</p><p>&nbsp;&nbsp;pinMode(relayPin_L,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LED&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;ledControl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;LED&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_F,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Fan&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;fanControl);&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;fan&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_P,&nbsp;OUTPUT);&nbsp;</p><p>&nbsp;&nbsp;timer.setInterval(1000L,&nbsp;sensorEvent);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1초마다&nbsp;데이터&nbsp;확인,&nbsp;전송&nbsp;및&nbsp;동작&nbsp;&nbsp;</p><p>}</p><p>&nbsp;</p><p>void&nbsp;loop()</p><p>{</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//timer&nbsp;사용</p><p>}</p><p><br/></p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-17 23:29:14 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493670397</guid>
      </item>
      <item>
         <title>기본형</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493697216</link>
         <description><![CDATA[<p>#define BLYNK_PRINT Serial</p><p> </p><p>// 블링크 연동 정보 기재</p><p> </p><p>//#define BLYNK_TEMPLATE_ID           "TMPxxxxxx"</p><p>//#define BLYNK_TEMPLATE_NAME         "Device"</p><p>//#define BLYNK_AUTH_TOKEN            "YourAuthToken"</p><p> </p><p>#include &lt;WiFi.h&gt;</p><p>#include &lt;WiFiClient.h&gt;</p><p>#include &lt;BlynkSimpleEsp32.h&gt;</p><p> </p><p>char ssid[] = "Jun01";</p><p>char pass[] = "12345678";</p><p> </p><p>BlynkTimer timer;   //블링크 타이머함수 사용</p><p> </p><p>// LED 작동</p><p> </p><p>#define relayPin_L 18  //LED 릴레이핀</p><p>bool led_state;         //led_state 선언 </p><p> </p><p>BLYNK_WRITE(V0){                   // 블링크 V0 핀 상태 int로 가져오기</p><p>  led_state = param.asInt();</p><p>}</p><p> </p><p>void ledControl(){                      // 1일 때 on, 0일 때 off</p><p>  if(led_state){</p><p>    digitalWrite(relayPin_L, HIGH);</p><p>  }</p><p>  else{</p><p>    digitalWrite(relayPin_L, LOW); </p><p>  }</p><p>}</p><p> </p><p>// fan 작동</p><p> </p><p>#define relayPin_F 19   //GPIO 19번 핀에 fan 동작 릴레이</p><p>bool fan_state;          // fan_state 선언   </p><p> </p><p>BLYNK_WRITE(V4){            // 블링크 V4 핀 상태 int로 가져오기</p><p>  fan_state = param.asInt();</p><p>}</p><p> </p><p>void fanControl(){                // 1일 때 on, 0일 때 off</p><p>  if(fan_state){</p><p>    digitalWrite(relayPin_F, HIGH);</p><p>  }</p><p>  else{</p><p>    digitalWrite(relayPin_F, LOW); </p><p>  }</p><p>}</p><p> </p><p>// 온습도 센서, 토양수분, LCD</p><p> </p><p>#include &lt;DHT.h&gt;                    // 온습도 센서 라이브러리</p><p>#define DHTPin 25           //25번 핀에 연결 </p><p>#define DHTTYPE DHT11      // 온습도 센서타입  </p><p>DHT dht(DHTPin,DHTTYPE);   // 온습도 센서 함수 선언</p><p> </p><p>#define soilPin 34   // 34번 핀에 토양수분센서</p><p>#define relayPin_P 23   // 23번 핀에 펌프 동작 릴레이</p><p> </p><p>#include &lt;Wire.h&gt;                   // i2C 통신을 위한 라이브러리</p><p>#include &lt;LiquidCrystal_I2C.h&gt;      // LCD 1602 I2C용 라이브러리</p><p>LiquidCrystal_I2C lcd( 0x27, 16, 2); // 화면이 안나오면 0x27 -&gt; 0x3F 로 변경</p><p> </p><p>void sensorEvent(){</p><p>  int tempValue = dht.readTemperature();   // 온도 측정값을 tempValue에 저장</p><p>  int humValue = dht.readHumidity();       // 습도 측정값을 humValue에 저장  </p><p>  Blynk.virtualWrite(V1, tempValue);       // 온도 값을 블링크의 V1핀으로 전송</p><p>  Blynk.virtualWrite(V2, humValue);        // 습도 값을 블링크의 V2번핀으로 전송 </p><p>  </p><p>  int soilValue = analogRead(soilPin);</p><p>  int soilValue_p = map(soilValue, 950, 2600, 100, 0);  // 물티슈 등을 이용하여 최대 최소값 측정 후 변경</p><p>  Serial.print("S : ");            // map 함수 값을 넣기 위해 측정값을 시리얼 모니터로 값 출력</p><p>  Serial.print(soilValue);</p><p>  Serial.print(" , S_P :    ");  </p><p>  Serial.println(soilValue_p);</p><p>  Blynk.virtualWrite(V3, soilValue_p);   // 토양수분 백분율 블링크 V3번 핀으로 전송</p><p>  if(soilValue_p &lt; 40){             // 토양수분 % 측정 값에 따른 릴레이핀 동작(수중모터 동작)</p><p>    digitalWrite(relayPin_P,HIGH);       // 40% 를 기준으로 사용 </p><p>  } </p><p>  else if(soilValue_p &gt;= 40){</p><p>    digitalWrite(relayPin_P,LOW);</p><p>  }</p><p> </p><p>  lcd.begin();           // 리셋(자리수 수정 함수 안넣기;; -&gt; 간소화)</p><p>  lcd.backlight();      // 백라이트 켜기</p><p>  lcd.setCursor(0, 0);  // (X축 넘길 갯수, 라인번호) 첫 번째 칸, 첫 번째 줄에 표시</p><p>  lcd.print("T : ");</p><p>  lcd.print(tempValue);</p><p>  lcd.print("C");</p><p>  lcd.setCursor(8, 0);  // (1칸 띄고, 첫번째 라인)</p><p>  lcd.print("H : ");</p><p>  lcd.print(humValue);</p><p>  lcd.print("%");</p><p>  lcd.setCursor(2, 1);  // (2칸 띄고, 2번째 라인)</p><p>  lcd.print("Soil_M : ");</p><p>  lcd.print(soilValue_p);</p><p>  lcd.setCursor(14, 1);  // (14칸 띄고, 2번째 라인)</p><p>  lcd.print("%");</p><p>}</p><p> </p><p>void setup()</p><p>{</p><p>  Serial.begin(9600);</p><p>  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);</p><p>  pinMode(relayPin_L, OUTPUT);        // LED 릴레이핀 output으로 설정</p><p>  timer.setInterval(300L, ledControl);     //함수 호출하여 0.3초마다 LED 동작 버튼 체크</p><p>  pinMode(relayPin_F, OUTPUT);        // Fan 릴레이핀 output으로 설정</p><p>  timer.setInterval(300L, fanControl);  //함수 호출하여 0.3초마다 fan 동작 버튼 체크</p><p>  pinMode(relayPin_P, OUTPUT); </p><p>  timer.setInterval(1000L, sensorEvent);    // 1초마다 데이터 확인, 전송 및 동작  </p><p>}</p><p> </p><p>void loop()</p><p>{</p><p>  <a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>  <a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();       //timer 사용</p><p>}</p><p><br></p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-18 00:00:05 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493697216</guid>
      </item>
      <item>
         <title>3반30분간격</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493698021</link>
         <description><![CDATA[<p>#define BLYNK_PRINT Serial</p><p>// 블링크 연동 정보 기재</p><p>#define BLYNK_TEMPLATE_ID "TMPL6zNX06Foh"</p><p>#define BLYNK_TEMPLATE_NAME "0611"</p><p>#define BLYNK_AUTH_TOKEN "F5IQGALOEYCPEIpQ98_e5xoK1KtJnEAo"</p><p>#include &lt;WiFi.h&gt;</p><p>#include &lt;WiFiClient.h&gt;</p><p>#include &lt;BlynkSimpleEsp32.h&gt;</p><p>char&nbsp;ssid[]&nbsp;=&nbsp;"YEiPhone";</p><p>char&nbsp;pass[]&nbsp;=&nbsp;"12345678";</p><p>BlynkTimer timer;   // 블링크 타이머함수 사용</p><p>// LED 작동</p><p>#define relayPin_L 18</p><p>bool led_state;</p><p>BLYNK_WRITE(V0) {</p><p>  led_state = param.asInt();</p><p>}</p><p>unsigned long lastLedTriggerTime = 0;</p><p>bool ledRunning = false;</p><p>void ledControl() {</p><p>  unsigned long currentMillis = millis();</p><p>  if (led_state) {</p><p>    if (!ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 1800000)) {  // 30분마다</p><p>      digitalWrite(relayPin_L, HIGH);  // 1분간 켜기</p><p>      ledRunning = true;</p><p>      lastLedTriggerTime = currentMillis;</p><p>    }</p><p>    if (ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 60000)) {  // 1분 후 끄기</p><p>      digitalWrite(relayPin_L, LOW);</p><p>      ledRunning = false;</p><p>    }</p><p>  } else {</p><p>    digitalWrite(relayPin_L, LOW);</p><p>    ledRunning = false;</p><p>    lastLedTriggerTime = millis();  // 초기화</p><p>  }</p><p>}</p><p>// FAN 작동</p><p>#define relayPin_F 19</p><p>bool fan_state;</p><p>BLYNK_WRITE(V4) {</p><p>  fan_state = param.asInt();</p><p>}</p><p>unsigned long lastFanTriggerTime = 0;</p><p>bool fanRunning = false;</p><p>void fanControl() {</p><p>  unsigned long currentMillis = millis();</p><p>  if (fan_state) {</p><p>    if (!fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 1800000)) {  // 30분마다</p><p>      digitalWrite(relayPin_F, HIGH);  // 1분간 켜기</p><p>      fanRunning = true;</p><p>      lastFanTriggerTime = currentMillis;</p><p>    }</p><p>    if (fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 60000)) {  // 1분 후 끄기</p><p>      digitalWrite(relayPin_F, LOW);</p><p>      fanRunning = false;</p><p>    }</p><p>  } else {</p><p>    digitalWrite(relayPin_F, LOW);</p><p>    fanRunning = false;</p><p>    lastFanTriggerTime = millis();  // 초기화</p><p>  }</p><p>}</p><p>// 온습도 센서, 토양수분, LCD</p><p>#include &lt;DHT.h&gt;</p><p>#define DHTPin 25</p><p>#define DHTTYPE DHT11</p><p>DHT dht(DHTPin, DHTTYPE);</p><p>#define soilPin 34</p><p>#define relayPin_P 23</p><p>#include &lt;Wire.h&gt;</p><p>#include &lt;LiquidCrystal_I2C.h&gt;</p><p>LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 확인 필요 (0x27 또는 0x3F)</p><p>void sensorEvent() {</p><p>  int tempValue = dht.readTemperature();</p><p>  int humValue = dht.readHumidity();</p><p>  Blynk.virtualWrite(V1, tempValue);</p><p>  Blynk.virtualWrite(V2, humValue);</p><p>  int soilValue = analogRead(soilPin);</p><p>  int soilValue_p = map(soilValue, 950, 2600, 100, 0);</p><p>  Serial.print("S : ");</p><p>  Serial.print(soilValue);</p><p>  Serial.print(" , S_P : ");</p><p>  Serial.println(soilValue_p);</p><p>  Blynk.virtualWrite(V3, soilValue_p);</p><p>  if (soilValue_p &lt; 25) {</p><p>    digitalWrite(relayPin_P, HIGH);</p><p>  } else {</p><p>    digitalWrite(relayPin_P, LOW);</p><p>  }</p><p>  lcd.begin();</p><p>  lcd.backlight();</p><p>  lcd.setCursor(0, 0);</p><p>  lcd.print("T : ");</p><p>  lcd.print(tempValue);</p><p>  lcd.print("C");</p><p>  lcd.setCursor(8, 0);</p><p>  lcd.print("H : ");</p><p>  lcd.print(humValue);</p><p>  lcd.print("%");</p><p>  lcd.setCursor(2, 1);</p><p>  lcd.print("Soil_M : ");</p><p>  lcd.print(soilValue_p);</p><p>  lcd.setCursor(14, 1);</p><p>  lcd.print("%");</p><p>}</p><p>void setup() {</p><p>  Serial.begin(9600);</p><p>  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);</p><p>  pinMode(relayPin_L, OUTPUT);</p><p>  pinMode(relayPin_F, OUTPUT);</p><p>  pinMode(relayPin_P, OUTPUT);</p><p>  timer.setInterval(300L, ledControl);</p><p>  timer.setInterval(300L, fanControl);</p><p>  timer.setInterval(1000L, sensorEvent);</p><p>}</p><p>void loop() {</p><p>  <a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>  <a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();</p><p>}</p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-18 00:00:50 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493698021</guid>
      </item>
      <item>
         <title>30초간</title>
         <author>bbaekgudo1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493698994</link>
         <description><![CDATA[<pre><code class="language-cpp">#define BLYNK_PRINT Serial

// 블링크 연동 정보 기재
#define BLYNK_TEMPLATE_ID "TMPL6zNX06Foh"
#define BLYNK_TEMPLATE_NAME "0611"
#define BLYNK_AUTH_TOKEN "F5IQGALOEYCPEIpQ98_e5xoK1KtJnEAo"

#include &lt;WiFi.h&gt;
#include &lt;WiFiClient.h&gt;
#include &lt;BlynkSimpleEsp32.h&gt;

char ssid[] = "Jun01";
char pass[] = "12345678";

BlynkTimer timer;   // 블링크 타이머 함수 사용

// LED 작동
#define relayPin_L 18
bool led_state;         

BLYNK_WRITE(V0) {
  led_state = param.asInt();
}

unsigned long lastLedTriggerTime = 0;
bool ledRunning = false;

void ledControl() {
  unsigned long currentMillis = millis();

  if (led_state) {
    if (!ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 30000)) {
      digitalWrite(relayPin_L, HIGH);
      ledRunning = true;
      lastLedTriggerTime = currentMillis;
    }

    if (ledRunning &amp;&amp; (currentMillis - lastLedTriggerTime &gt;= 10000)) {
      digitalWrite(relayPin_L, LOW);
      ledRunning = false;
    }
  } else {
    digitalWrite(relayPin_L, LOW);
    ledRunning = false;
    lastLedTriggerTime = millis();
  }
}

// FAN 작동
#define relayPin_F 19
bool fan_state;          

BLYNK_WRITE(V4) {
  fan_state = param.asInt();
}

unsigned long lastFanTriggerTime = 0;
bool fanRunning = false;

void fanControl() {
  unsigned long currentMillis = millis();

  if (fan_state) {
    if (!fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 30000)) {
      digitalWrite(relayPin_F, HIGH);
      fanRunning = true;
      lastFanTriggerTime = currentMillis;
    }

    if (fanRunning &amp;&amp; (currentMillis - lastFanTriggerTime &gt;= 10000)) {
      digitalWrite(relayPin_F, LOW);
      fanRunning = false;
    }
  } else {
    digitalWrite(relayPin_F, LOW);
    fanRunning = false;
    lastFanTriggerTime = millis();
  }
}

// 온습도 센서, 토양수분, LCD
#include &lt;DHT.h&gt;
#define DHTPin 25
#define DHTTYPE DHT11
DHT dht(DHTPin, DHTTYPE);

#define soilPin 34
#define relayPin_P 23

#include &lt;Wire.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 확인 필요 (0x27 or 0x3F)

void sensorEvent() {
  int tempValue = dht.readTemperature();
  int humValue = dht.readHumidity();
  Blynk.virtualWrite(V1, tempValue);
  Blynk.virtualWrite(V2, humValue);

  int soilValue = analogRead(soilPin);
  int soilValue_p = map(soilValue, 950, 2600, 100, 0);
  Serial.print("S : ");
  Serial.print(soilValue);
  Serial.print(" , S_P : ");
  Serial.println(soilValue_p);
  Blynk.virtualWrite(V3, soilValue_p);

  if (soilValue_p &lt; 25) {
    digitalWrite(relayPin_P, HIGH);
  } else {
    digitalWrite(relayPin_P, LOW);
  }

  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("T : ");
  lcd.print(tempValue);
  lcd.print("C");
  lcd.setCursor(8, 0);
  lcd.print("H : ");
  lcd.print(humValue);
  lcd.print("%");
  lcd.setCursor(2, 1);
  lcd.print("Soil_M : ");
  lcd.print(soilValue_p);
  lcd.setCursor(14, 1);
  lcd.print("%");
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  pinMode(relayPin_L, OUTPUT);
  pinMode(relayPin_F, OUTPUT);
  pinMode(relayPin_P, OUTPUT);

  timer.setInterval(300L, ledControl);       // 0.3초마다 상태 체크
  timer.setInterval(300L, fanControl);
  timer.setInterval(1000L, sensorEvent);     // 1초마다 센서 읽기
}

void loop() {
  Blynk.run();
  timer.run();
}</code></pre>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-18 00:01:40 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3493698994</guid>
      </item>
      <item>
         <title>3반 다시 시도</title>
         <author>kye4447</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3494041621</link>
         <description><![CDATA[<p>#define&nbsp;BLYNK_PRINT&nbsp;Serial</p><p>&nbsp;</p><p>//&nbsp;블링크&nbsp;연동&nbsp;정보&nbsp;기재</p><p>&nbsp;</p><p>//#define&nbsp;BLYNK_TEMPLATE_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"TMPxxxxxx"</p><p>//#define&nbsp;BLYNK_TEMPLATE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Device"</p><p>//#define&nbsp;BLYNK_AUTH_TOKEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"YourAuthToken"</p><p>&nbsp;</p><p>#include&nbsp;&lt;WiFi.h&gt;</p><p>#include&nbsp;&lt;WiFiClient.h&gt;</p><p>#include&nbsp;&lt;BlynkSimpleEsp32.h&gt;</p><p>&nbsp;</p><p>char&nbsp;ssid[]&nbsp;=&nbsp;"AndroidHotspot9058";</p><p>char&nbsp;pass[]&nbsp;=&nbsp;"78997899";</p><p>&nbsp;</p><p>BlynkTimer&nbsp;timer;&nbsp;&nbsp;&nbsp;//블링크&nbsp;타이머함수&nbsp;사용</p><p>&nbsp;</p><p>//&nbsp;LED&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_L&nbsp;18&nbsp;&nbsp;//LED&nbsp;릴레이핀</p><p>bool&nbsp;led_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//led_state&nbsp;선언&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V0){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V0&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;led_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;ledControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(led_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_L,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;fan&nbsp;작동</p><p>&nbsp;</p><p>#define&nbsp;relayPin_F&nbsp;19&nbsp;&nbsp;&nbsp;//GPIO&nbsp;19번&nbsp;핀에&nbsp;fan&nbsp;동작&nbsp;릴레이</p><p>bool&nbsp;fan_state;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;fan_state&nbsp;선언&nbsp;&nbsp;&nbsp;</p><p>&nbsp;</p><p>BLYNK_WRITE(V4){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;블링크&nbsp;V4&nbsp;핀&nbsp;상태&nbsp;int로&nbsp;가져오기</p><p>&nbsp;&nbsp;fan_state&nbsp;=&nbsp;param.asInt();</p><p>}</p><p>&nbsp;</p><p>void&nbsp;fanControl(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1일&nbsp;때&nbsp;on,&nbsp;0일&nbsp;때&nbsp;off</p><p>&nbsp;&nbsp;if(fan_state){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;HIGH);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;else{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_F,&nbsp;LOW);&nbsp;</p><p>&nbsp;&nbsp;}</p><p>}</p><p>&nbsp;</p><p>//&nbsp;온습도&nbsp;센서,&nbsp;토양수분,&nbsp;LCD</p><p>&nbsp;</p><p>#include&nbsp;&lt;DHT.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;라이브러리</p><p>#define&nbsp;DHTPin&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//25번&nbsp;핀에&nbsp;연결&nbsp;</p><p>#define&nbsp;DHTTYPE&nbsp;DHT11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서타입&nbsp;&nbsp;</p><p>DHT&nbsp;dht(DHTPin,DHTTYPE);&nbsp;&nbsp;&nbsp;//&nbsp;온습도&nbsp;센서&nbsp;함수&nbsp;선언</p><p>&nbsp;</p><p>#define&nbsp;soilPin&nbsp;34&nbsp;&nbsp;&nbsp;//&nbsp;34번&nbsp;핀에&nbsp;토양수분센서</p><p>#define&nbsp;relayPin_P&nbsp;23&nbsp;&nbsp;&nbsp;//&nbsp;23번&nbsp;핀에&nbsp;펌프&nbsp;동작&nbsp;릴레이</p><p>&nbsp;</p><p>#include&nbsp;&lt;Wire.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;i2C&nbsp;통신을&nbsp;위한&nbsp;라이브러리</p><p>#include&nbsp;&lt;LiquidCrystal_I2C.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LCD&nbsp;1602&nbsp;I2C용&nbsp;라이브러리</p><p>LiquidCrystal_I2C&nbsp;lcd(&nbsp;0x27,&nbsp;16,&nbsp;2);&nbsp;//&nbsp;화면이&nbsp;안나오면&nbsp;0x27&nbsp;-&gt;&nbsp;0x3F&nbsp;로&nbsp;변경</p><p>&nbsp;</p><p>void&nbsp;sensorEvent(){</p><p>&nbsp;&nbsp;int&nbsp;tempValue&nbsp;=&nbsp;dht.readTemperature();&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;측정값을&nbsp;tempValue에&nbsp;저장</p><p>&nbsp;&nbsp;int&nbsp;humValue&nbsp;=&nbsp;dht.readHumidity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;측정값을&nbsp;humValue에&nbsp;저장&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V1,&nbsp;tempValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;온도&nbsp;값을&nbsp;블링크의&nbsp;V1핀으로&nbsp;전송</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V2,&nbsp;humValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;습도&nbsp;값을&nbsp;블링크의&nbsp;V2번핀으로&nbsp;전송&nbsp;</p><p>&nbsp;&nbsp;</p><p>&nbsp;&nbsp;int&nbsp;soilValue&nbsp;=&nbsp;analogRead(soilPin);</p><p>&nbsp;&nbsp;int&nbsp;soilValue_p&nbsp;=&nbsp;map(soilValue,&nbsp;950,&nbsp;2600,&nbsp;100,&nbsp;0);&nbsp;&nbsp;//&nbsp;물티슈&nbsp;등을&nbsp;이용하여&nbsp;최대&nbsp;최소값&nbsp;측정&nbsp;후&nbsp;변경</p><p>&nbsp;&nbsp;Serial.print("S&nbsp;:&nbsp;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;map&nbsp;함수&nbsp;값을&nbsp;넣기&nbsp;위해&nbsp;측정값을&nbsp;시리얼&nbsp;모니터로&nbsp;값&nbsp;출력</p><p>&nbsp;&nbsp;Serial.print(soilValue);</p><p>&nbsp;&nbsp;Serial.print("&nbsp;,&nbsp;S_P&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;");&nbsp;&nbsp;</p><p>&nbsp;&nbsp;Serial.println(soilValue_p);</p><p>&nbsp;&nbsp;Blynk.virtualWrite(V3,&nbsp;soilValue_p);&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;백분율&nbsp;블링크&nbsp;V3번&nbsp;핀으로&nbsp;전송</p><p>&nbsp;&nbsp;if(soilValue_p&nbsp;&lt;&nbsp;40){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;토양수분&nbsp;%&nbsp;측정&nbsp;값에&nbsp;따른&nbsp;릴레이핀&nbsp;동작(수중모터&nbsp;동작)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,HIGH);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;40%&nbsp;를&nbsp;기준으로&nbsp;사용&nbsp;</p><p>&nbsp;&nbsp;}&nbsp;</p><p>&nbsp;&nbsp;else&nbsp;if(soilValue_p&nbsp;&gt;=&nbsp;40){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(relayPin_P,LOW);</p><p>&nbsp;&nbsp;}</p><p>&nbsp;</p><p>&nbsp;&nbsp;lcd.begin(); //&nbsp;리셋(자리수 수정 함수 안넣기;; -&gt; 간소화)</p><p>&nbsp;&nbsp;lcd.backlight();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;백라이트&nbsp;켜기</p><p>&nbsp;&nbsp;lcd.setCursor(0,&nbsp;0);&nbsp;&nbsp;//&nbsp;(X축&nbsp;넘길&nbsp;갯수,&nbsp;라인번호)&nbsp;첫&nbsp;번째&nbsp;칸,&nbsp;첫&nbsp;번째&nbsp;줄에&nbsp;표시</p><p>&nbsp;&nbsp;lcd.print("T&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(tempValue);</p><p>&nbsp;&nbsp;lcd.print("C");</p><p>&nbsp;&nbsp;lcd.setCursor(8,&nbsp;0);&nbsp;&nbsp;//&nbsp;(1칸&nbsp;띄고,&nbsp;첫번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("H&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(humValue);</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>&nbsp;&nbsp;lcd.setCursor(2,&nbsp;1);&nbsp;&nbsp;//&nbsp;(2칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("Soil_M&nbsp;:&nbsp;");</p><p>&nbsp;&nbsp;lcd.print(soilValue_p);</p><p>&nbsp;&nbsp;lcd.setCursor(14,&nbsp;1);&nbsp;&nbsp;//&nbsp;(14칸&nbsp;띄고,&nbsp;2번째&nbsp;라인)</p><p>&nbsp;&nbsp;lcd.print("%");</p><p>}</p><p>&nbsp;</p><p>void&nbsp;setup()</p><p>{</p><p>&nbsp;&nbsp;Serial.begin(9600);</p><p>&nbsp;&nbsp;Blynk.begin(BLYNK_AUTH_TOKEN,&nbsp;ssid,&nbsp;pass);</p><p>&nbsp;&nbsp;pinMode(relayPin_L,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LED&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;ledControl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;LED&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_F,&nbsp;OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Fan&nbsp;릴레이핀&nbsp;output으로&nbsp;설정</p><p>&nbsp;&nbsp;timer.setInterval(300L,&nbsp;fanControl);&nbsp;&nbsp;//함수&nbsp;호출하여&nbsp;0.3초마다&nbsp;fan&nbsp;동작&nbsp;버튼&nbsp;체크</p><p>&nbsp;&nbsp;pinMode(relayPin_P,&nbsp;OUTPUT);&nbsp;</p><p>&nbsp;&nbsp;timer.setInterval(1000L,&nbsp;sensorEvent);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1초마다&nbsp;데이터&nbsp;확인,&nbsp;전송&nbsp;및&nbsp;동작&nbsp;&nbsp;</p><p>}</p><p>&nbsp;</p><p>void&nbsp;loop()</p><p>{</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://Blynk.run">Blynk.run</a>();</p><p>&nbsp;&nbsp;<a rel="noopener noreferrer nofollow" href="http://timer.run">timer.run</a>();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//timer&nbsp;사용</p><p>}</p>]]></description>
         <enclosure url="" />
         <pubDate>2025-06-18 03:12:28 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3494041621</guid>
      </item>
      <item>
         <title>2반 30초간</title>
         <author>kjfdfl1_1</author>
         <link>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3526353656</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2025-07-23 00:11:36 UTC</pubDate>
         <guid>https://padlet.com/bbaekgudo1/c4xijnh89iy150ey/wish/3526353656</guid>
      </item>
   </channel>
</rss>
