diff --git a/API_CODE.txt b/API_CODE.txt index 167c248..cec5a3b 100644 --- a/API_CODE.txt +++ b/API_CODE.txt @@ -1,12 +1,15 @@ -var sheet_id = "18b0cK1bZ27pCE6wUmvwdKHQoy0Aew5FgavjsIUzFrzc"; +var sheet_id = "1A-14YH0NJmXcG3szfHYvutpcM_ZPvAm1xeFqUAeleik"; var sheet_name0 = "air_sensor"; var sheet_name1 = "light_sensor"; var sheet_name2 = "dirt_sensor"; +var sheet_name3 = "iot_start"; + var ss = SpreadsheetApp.openById(sheet_id); var sheet0 = ss.getSheetByName(sheet_name0); var sheet1 = ss.getSheetByName(sheet_name1); var sheet2 = ss.getSheetByName(sheet_name2); +var sheet3 = ss.getSheetByName(sheet_name3); function doGet(e) { var parameters = e.parameter; @@ -41,5 +44,14 @@ function doGet(e) { sheet2.appendRow([uuid, dirt_date, dirt_time, dirt_status_id, sensor_status_id]); // add data to dirt_sensor } + if("iot_status_id" in parameters){ + var uuid = Utilities.getUuid(); + var iot_date = Utilities.formatDate(new Date(), "GMT+7", "dd/MM/yyyy"); + var iot_time = Utilities.formatDate(new Date(), "GMT+7", "HH:mm:ss"); + var iot_status_id = Number(parameters.iot_status_id); + + sheet3.appendRow([uuid, iot_date, iot_time, iot_status_id]); // add data to iot_start + } + return ContentService.createTextOutput("Data added successfully"); } \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fdbfc16 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 Teeprakorn Kumvong + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/MINIFARM_ESP32.ino b/MINIFARM_ESP32.ino index f03483b..38d27d1 100644 --- a/MINIFARM_ESP32.ino +++ b/MINIFARM_ESP32.ino @@ -1,7 +1,7 @@ -#define WFID "AiyuT" -#define PASSWORD "19652508" +#define WFID "AISHomelink" +#define PASSWORD "861053495" #define LINE_TOKEN "cDXyz51IQ6M8rdOr8SJmTbdqNZRNimj1jdTlKBRV5tA" -String url = "https://script.google.com/macros/s/AKfycbwApU7xXiWK96RPd9GugsHOtBebiS4MJZwtodTbqlVzRPAwsJcJG57-hNBqG1C37YfI/exec"; +String url = "https://script.google.com/macros/s/AKfycbyjBzDddqieJfoM4A7hLP8awZRTx3qLtNFlglBpE8qavzKnEfdg633E6Fd2XxHfqBOyyw/exec"; #define BLYNK_TEMPLATE_ID "TMPL6dehztIRR" #define BLYNK_TEMPLATE_NAME "LED" @@ -60,7 +60,7 @@ void setup(){ dht.begin(); BlynkEdgent.begin(); timer.setInterval(1000L, blynk_post); - LINE.notify("<<<---MINI-FARM-IOT-START--->>>"); + Run_Start(); } void loop(){ @@ -93,7 +93,7 @@ void getSheet(){ dirt_status = IfDirt(); //DHT Sensor Add Sheet. - if(air_set%60 == 0){ + if(air_set%1800 == 0){ float h = dht.readHumidity(); float t = dht.readTemperature(); String urls = setSheet("air_humidity", "air_temp", h, t); @@ -205,7 +205,12 @@ void getSheet(){ } } } +} +void Run_Start(){ + LINE.notify("<<<---MINI-FARM-IOT-START--->>>"); + String urls = setSheet("iot_status_id",1); + goSheet(urls); } void blynk_post(){ @@ -455,8 +460,8 @@ void dirtSensor(){ void send_Line(){ float h = dht.readHumidity(); float t = dht.readTemperature(); - float dirt_value = analogRead(DIRTPIN); - float light_value = analogRead(LIGHTPIN); + float dirt_value = CalPercent(analogRead(DIRTPIN), defualt_value); + float light_value = CalPercent(analogRead(LIGHTPIN), defualt_value); light_status = IfLight(); dirt_status = IfDirt(); @@ -494,12 +499,19 @@ void send_Line(){ LINE.notify(">>>>>>>>>>>>>>>>>>>"); Serial.print("Done.Send to Line.\n"); + + String urls = setSheet("iot_status_id",2); + goSheet(urls); } float CalPercent(float i, float value) { return (i * 100) / value; } +String setSheet(String p1, int v1){ + return (url + "?" + p1 + "=" + v1); +} + String setSheet(String p1, String p2, int v1, int v2){ return (url + "?" + p1 + "=" + v1 + "&" + p2 + "=" + v2); } @@ -518,16 +530,16 @@ void goSheet(String i){ } int IfLight(){ - float light_value = analogRead(LIGHTPIN); + float light_value = CalPercent(analogRead(LIGHTPIN), defualt_value); int i; - if(light_value>4095){//ERROR VALUE + if(light_value>100){//ERROR VALUE i = 0; - }else if(light_value>4094){//NO LIGHT VALUE + }else if(light_value>60){//NO LIGHT VALUE i = 4; - }else if(light_value>1500){//LOW LIGHT VALUE + }else if(light_value>40){//LOW LIGHT VALUE i = 3; - }else if(light_value>1000){//MEDIUM LIGHT VALUE + }else if(light_value>20){//MEDIUM LIGHT VALUE i = 2; }else if(light_value>0){//HIGH LIGHT VALUE i = 1; @@ -538,20 +550,20 @@ int IfLight(){ } int IfDirt(){ - float dirt_value = analogRead(DIRTPIN); + float dirt_value = CalPercent(analogRead(DIRTPIN), defualt_value); int i; - if(dirt_value>=4095){//DIRT ERROR + if(dirt_value>=100){//DIRT ERROR i = 0; - }else if(dirt_value>3500){//DIRT VERY DRY + }else if(dirt_value>70){//DIRT VERY DRY i = 5; - }else if(dirt_value>3000){//DIRT NORMAL DRY + }else if(dirt_value>50){//DIRT NORMAL DRY i = 6; - }else if(dirt_value>2000){//DIRT NORMAL MOIST + }else if(dirt_value>40){//DIRT NORMAL MOIST i = 4; - }else if(dirt_value>1500){//DIRT VERY MOIST + }else if(dirt_value>30){//DIRT VERY MOIST i = 3; - }else if(dirt_value>500){//DIRL NORMAL WET + }else if(dirt_value>15){//DIRL NORMAL WET i = 2; }else if(dirt_value>0){//DIRL VERY WET i = 1; diff --git a/README.md b/README.md index 2abc5e5..9cbb89a 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,91 @@ -# Mini_Farm_Project -ESP32-IOT-MINI-FARM -MY PROJECT FOR MY HOME AND SEND TEACHER!! -# INPUT --DHT22 AM2302 Module: 1 --Soil Moisture Sensor Module: 1 --Photoresistor LDR Light Sensor Module: 1 - -# OUTPUT --Mini DC Water Pump (DC 3V-5V): 1 --Led Light For Plants Growth: 1 - -# RELAY --Relay Module Active LOW 5V 2 Channel: 2 - -# BOARD --ESP32 NodeMCU ESP-WROOM-32: 1 +# ๐ŸŒฟ Mini Farm Project (C++ / ESP32) + +A DIY smart mini farm using **ESP32**, designed for home gardening and submitted as a university assignment in **Year 2, Semester 1**. The system automates plant watering and lighting based on real-time sensor data and supports IoT integration with **Blynk**, **Google Sheets**, and **LINE Notify**. + + +This project was developed as part of a university assignment in **Year 2, Semester 1**. + +--- + +## ๐Ÿ“ฆ Project Summary + +This project monitors various environmental parameters such as temperature, humidity, soil moisture, and light intensity. It controls actuators like a water pump and plant LED light through a relay module and allows remote control and monitoring via a smartphone app. + +--- + +## ๐Ÿš€ Features + +- ๐ŸŒก๏ธ Real-time air temperature & humidity monitoring +- ๐ŸŒฑ Soil moisture level detection and automatic watering +- ๐Ÿ’ก Light-dependent plant LED activation +- โฒ๏ธ Scheduled pump/light control via Blynk App +- ๐Ÿ“ฒ Remote monitoring and control using **Blynk** +- ๐Ÿ“Š Sensor data logging to **Google Sheets** +- ๐Ÿ”” LINE Notify integration for alerts +- ๐ŸŒ Based on **ESP32 NodeMCU**, programmable via Arduino IDE +- ๐Ÿ“ฑ Mobile app interface via Blynk + +--- + +## ๐Ÿงช Inputs (Sensors) + +| Sensor Module | Description | +|---------------------------|-------------------------------------| +| ๐ŸŒก๏ธ DHT22 (AM2302) | Measures air temperature and humidity | +| ๐ŸŒฑ Soil Moisture Sensor | Detects soil wetness levels | +| ๐Ÿ’ก Photoresistor (LDR) | Detects ambient light intensity | + +--- + +## โš™๏ธ Outputs (Actuators) + +| Actuator | Function | +|---------------------------|-------------------------------------| +| ๐Ÿ’ง Mini DC Water Pump | Irrigates the plant when soil is dry | +| ๐ŸŒž LED Light for Plants | Provides light when ambient light is low | + +--- + +## ๐Ÿ”Œ Relay Control + +- **Relay Module (2 Channel, 5V, Active LOW)** to switch: + - ๐Ÿ’ง Water Pump + - ๐ŸŒž Plant LED Light + +--- + +## ๐Ÿ”‹ Microcontroller Board + +- **ESP32 NodeMCU (ESP-WROOM-32)** + Used to read sensor data, control relays, and communicate with IoT services. + +--- + +## ๐Ÿ“ฒ IoT Integration + +| Platform | Purpose | +|----------------|------------------------------------------| +| ๐Ÿ“ฑ Blynk App | Remote monitoring and control interface | +| ๐Ÿ“Š Google Sheets | Logging sensor data in real-time | +| ๐Ÿ”” LINE Notify | Sends real-time notifications/alerts | + +--- + +## ๐ŸŽ“ Academic Context + +This project was developed as part of a home automation assignment in university. It combines embedded systems, real-world sensor/actuator control, and cloud-based IoT integration using modern tools. + +--- + +## ๐Ÿ“ธ Screenshots & Diagrams + +| Main Screen | Timersetting Screen | LINE Notification | +|-------------|---------------------|-------------------| +| ![](BLYNK_IMAGE_01.jpg) | ![](BLYNK_IMAGE_02.jpg) | ![](LINE_IMAGE.jpg) | + +| Real Image 1 | Real Image 2 | Real Image 3 | Real Image 4 | Real Image 5 | +|--------------|--------------|--------------|--------------|--------------| +| ![](real_image_1.jpg) | ![](real_image_2.jpg) | ![](real_image_3.jpg) | ![](real_image_4.jpg) | ![](real_image_5.jpg) | + +--- + diff --git a/real_image_1.jpg b/real_image_1.jpg new file mode 100644 index 0000000..d27b3fe Binary files /dev/null and b/real_image_1.jpg differ diff --git a/real_image_2.jpg b/real_image_2.jpg new file mode 100644 index 0000000..3bcdb77 Binary files /dev/null and b/real_image_2.jpg differ diff --git a/real_image_3.jpg b/real_image_3.jpg new file mode 100644 index 0000000..f29898f Binary files /dev/null and b/real_image_3.jpg differ diff --git a/real_image_4.jpg b/real_image_4.jpg new file mode 100644 index 0000000..088ab03 Binary files /dev/null and b/real_image_4.jpg differ diff --git a/real_image_5.jpg b/real_image_5.jpg new file mode 100644 index 0000000..2381c00 Binary files /dev/null and b/real_image_5.jpg differ