{"id":3868,"date":"2024-03-12T09:23:03","date_gmt":"2024-03-12T16:23:03","guid":{"rendered":"https:\/\/www.donluc.com\/?p=3868"},"modified":"2024-03-12T09:23:03","modified_gmt":"2024-03-12T16:23:03","slug":"project-29-dfrobot-soil-moisture-mk05","status":"publish","type":"post","link":"https:\/\/www.donluc.com\/?p=3868","title":{"rendered":"Project #29 &#8211; DFRobot &#8211; Soil Moisture &#8211; Mk05"},"content":{"rendered":"<div style=\"width: 720px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-3868-1\" width=\"720\" height=\"480\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01W.mp4?_=1\" \/><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01W.mp4\">https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01W.mp4<\/a><\/video><\/div>\n<p>&#8212;&#8212;<\/p>\n<p>#DonLucElectronics #DonLuc #DFRobot #SoilMoistureSensor #FireBeetle2ESP32E #ESP32 #IoT #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant<\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01a.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01a.png\" alt=\"Soil Moisture\" width=\"720\" height=\"569\" class=\"alignnone size-full wp-image-3870\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01a.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01a-300x237.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01b.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01b.png\" alt=\"Soil Moisture\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3871\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01b.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01b-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01c.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01c.png\" alt=\"Soil Moisture\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3872\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01c.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2024\/03\/DL2403Mk01c-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><strong>Soil Moisture<\/strong><\/p>\n<p>Soil moisture is the critical parameter in agriculture. If there is a shortage or overabundance of water, plants may die. At the same time, this data depends on many external factors, primarily weather conditions and climate changes. That is why it is so vital to understand the most effective methods for analyzing soil moisture content.<\/p>\n<p>This term refers to the entire quantity of water in the ground\u2019s pores or on its surface. The moisture content of soil depends on such factors as weather, type of land, and plants. The parameter is vital in monitoring soil moisture activities, predicting natural disasters, managing water supply, etc. This data may signal a future flood or water deficit ahead of other indicators.<\/p>\n<p><strong>Soil moisture affects:<\/strong><\/p>\n<ul>\n<li>Content of air, salinity, and amount of toxic substances.<\/li>\n<li>Ground structure and thickness.<\/li>\n<li>Temperature and heat capacity of the ground.<\/li>\n<\/ul>\n<p><strong>DL2403Mk01<\/strong><\/p>\n<p>1 x DFRobot FireBeetle 2 ESP32-E<br \/>\n1 x Gravity: Analog Soil Moisture Sensor<br \/>\n1 x Fermion: BLE Sensor Beacon<br \/>\n1 x CR2032 Coin Cell Battery<br \/>\n1 x 1 x Lithium Ion Battery &#8211; 1000mAh<br \/>\n1 x Rocker Switch &#8211; SPST<br \/>\n1 x Resistor 10K Ohm<br \/>\n1 x SparkFun Serial Basic Breakout &#8211; CH340G<br \/>\n1 x SparkFun Cerberus USB Cable<br \/>\n1 x USB 3.1 Cable A to C<\/p>\n<p><strong>DFRobot FireBeetle 2 ESP32-E<\/strong><\/p>\n<p>LED &#8211; 2<br \/>\nRSW &#8211; 17<br \/>\nVIN &#8211; +3.3V<br \/>\nGND &#8211; GND<\/p>\n<p>&#8212;&#8212;<\/p>\n<p><strong>DL2403Mk01p.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/****** Don Luc Electronics \u00a9 ******\r\nSoftware Version Information\r\nProject #29 - DFRobot - Soil Moisture - Mk05\r\n29-05\r\nDL2403Mk01p.ino\r\n1 x DFRobot FireBeetle 2 ESP32-E\r\n1 x Gravity: Analog Soil Moisture Sensor\r\n1 x Fermion: BLE Sensor Beacon\r\n1 x CR2032 Coin Cell Battery\r\n1 x 1 x Lithium Ion Battery - 1000mAh\r\n1 x Rocker Switch - SPST\r\n1 x Resistor 10K Ohm\r\n1 x SparkFun Serial Basic Breakout - CH340G\r\n1 x SparkFun Cerberus USB Cable\r\n1 x USB 3.1 Cable A to C\r\n*\/\r\n\r\n\/\/ Include the Library Code\r\n\/\/ Bluetooth LE keyboard\r\n#include &lt;BleKeyboard.h&gt;\r\n\/\/ Arduino\r\n#include &lt;Arduino.h&gt;\r\n\/\/ BLE Device\r\n#include &lt;BLEDevice.h&gt;\r\n\/\/ BLE Utils\r\n#include &lt;BLEUtils.h&gt;\r\n\/\/ BLEScan\r\n#include &lt;BLEScan.h&gt;\r\n\/\/ BLE Advertised Device\r\n#include &lt;BLEAdvertisedDevice.h&gt;\r\n\/\/ BLE Eddystone URL\r\n#include &lt;BLEEddystoneURL.h&gt;\r\n\/\/ BLE Eddystone TLM\r\n#include &lt;BLEEddystoneTLM.h&gt;\r\n\/\/ BLE Beacon\r\n#include &lt;BLEBeacon.h&gt;\r\n\r\n\/\/ ENDIAN_CHANGE\r\n#define ENDIAN_CHANGE_U16(x) ((((x)&amp;0xFF00) &gt;&gt; 8) + (((x)&amp;0xFF) &lt;&lt; 8))\r\n\r\n\/\/ Bluetooth LE Keyboard\r\nBleKeyboard bleKeyboard;\r\nString sKeyboard = &quot;&quot;;\r\n\/\/ Send Size\r\nbyte sendSize = 0;\r\n\r\n\/\/ Gravity: Analog Soil Moisture Sensor\r\nfloat Sensor_Data;\r\n\/\/ In seconds\r\nint scanTime = 5;\r\n\/\/ BLE Scan\r\nBLEScan *pBLEScan;\r\n\r\n\/\/ My Advertised Device Callbacks\r\nclass MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks\r\n{\r\n\r\n    \/\/ onResult\r\n    void onResult(BLEAdvertisedDevice advertisedDevice)\r\n    {\r\n      \/\/ Advertised Device\r\n      if (advertisedDevice.haveName())\r\n      {\r\n        \/\/ Name: Fermion: Sensor Beacon\r\n        if(String(advertisedDevice.getName().c_str()) == &quot;Soil Moisture&quot;){\r\n          \r\n          \/\/ strManufacturerData\r\n          std::string strManufacturerData = advertisedDevice.getManufacturerData();\r\n          uint8_t cManufacturerData[100];\r\n          strManufacturerData.copy((char *)cManufacturerData, strManufacturerData.length(), 0);\r\n          \r\n          \/\/ strManufacturerData.length\r\n          for (int i = 0; i &lt; strManufacturerData.length(); i++)\r\n          {\r\n\r\n             \/\/ cManufacturerData[i]\r\n             cManufacturerData[i];\r\n             \r\n          }\r\n\r\n          \/\/ Sensor_Data\r\n          Sensor_Data = int(cManufacturerData[2]&lt;&lt;8 | cManufacturerData[3]);\r\n   \r\n        }        \r\n      }\r\n    }\r\n};\r\n\r\n\/\/ The number of the Rocker Switch pin\r\nint iSwitch = 17;\r\n\/\/ Variable for reading the button status\r\nint SwitchState = 0;\r\n\r\n\/\/ Define LED\r\nint iLED = 2;\r\n\r\n\/\/ Software Version Information\r\nString sver = &quot;29-05&quot;;\r\n\r\nvoid loop() {\r\n\r\n  \/\/ ScanResults\r\n  isBLEScanResults();\r\n\r\n  \/\/ Gravity: Analog Soil Moisture Sensor\r\n  isSoilMoisture();\r\n\r\n  \/\/ Read the state of the Switch value:\r\n  SwitchState = digitalRead(iSwitch);\r\n\r\n  \/\/ Check if the button is pressed. If it is, the SwitchState is HIGH:\r\n  if (SwitchState == HIGH) {\r\n\r\n    \/\/ Bluetooth LE Keyboard\r\n    isBluetooth();\r\n\r\n  }\r\n  \r\n  \/\/ Delay 2 Second\r\n  delay(2000);\r\n\r\n}\r\n<\/pre>\n<p><strong>getBLEScan.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ getBLEScan\r\n\/\/ Setup BLE Scan\r\nvoid isSetupBLEScan(){\r\n\r\n  \/\/ BLE Device\r\n  BLEDevice::init(&quot;&quot;);\r\n  \/\/ Create new scan\r\n  pBLEScan = BLEDevice::getScan();\r\n  \/\/ Set Advertised Device Callbacks\r\n  pBLEScan-&gt;setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());\r\n  \/\/ Active scan uses more power, but get results faster\r\n  pBLEScan-&gt;setActiveScan(true);\r\n  \/\/ Set Interval\r\n  pBLEScan-&gt;setInterval(100);\r\n  \/\/ Less or equal setInterval value\r\n  pBLEScan-&gt;setWindow(99);\r\n  \r\n}\r\n\/\/ BLE Scan Results\r\nvoid isBLEScanResults(){\r\n\r\n  \/\/ Put your main code here, to run repeatedly:\r\n  BLEScanResults foundDevices = pBLEScan-&gt;start(scanTime, false);\r\n  \/\/ Delete results fromBLEScan buffer to release memory\r\n  pBLEScan-&gt;clearResults();\r\n  \r\n}\r\n<\/pre>\n<p><strong>getBleKeyboard.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Ble Keyboard\r\n\/\/ Bluetooth\r\n\/\/ isBluetooth\r\nvoid isBluetooth() {\r\n\r\n  \/\/ ESP32 BLE Keyboard\r\n  if(bleKeyboard.isConnected()) {\r\n\r\n    \/\/ Send Size Length\r\n    sendSize = sKeyboard.length();\r\n\r\n    \/\/ Send Size, charAt\r\n    for(byte i = 0; i &lt; sendSize+1; i++){\r\n\r\n       \/\/ Write\r\n       bleKeyboard.write(sKeyboard.charAt(i));\r\n       delay(50);\r\n    \r\n    }\r\n    bleKeyboard.write(KEY_RETURN);\r\n\r\n  }\r\n\r\n}\r\n<\/pre>\n<p><strong>getSoilMoisture.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Gravity: Analog Soil Moisture Sensor\r\n\/\/ Soil Moisture\r\nvoid isSoilMoisture(){\r\n\r\n  \/\/ bleKeyboard\r\n  \/\/ DFR|Version|Soil Moisture|*\r\n  \/\/ SData =&gt; 0~900 Soil Moisture\r\n  float SData = map( Sensor_Data, 1, 3000, 0, 900);\r\n  sKeyboard = &quot;DFR|&quot; + sver + &quot;|&quot; + String(SData) + &quot;|*&quot;;\r\n\r\n}\r\n<\/pre>\n<p><strong>setup.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Setup\r\nvoid setup()\r\n{\r\n\r\n  \/\/ Give display time to power on\r\n  delay(100);\r\n\r\n  \/\/ Bluetooth LE keyboard\r\n  bleKeyboard.begin();\r\n\r\n  \/\/ Give display time to power on\r\n  delay(100);\r\n\r\n  \/\/ Setup BLE Scan\r\n  isSetupBLEScan();\r\n  \r\n  \/\/ Initialize the Switch pin as an input\r\n  pinMode(iSwitch, INPUT);\r\n  \r\n  \/\/ Initialize digital pin iLED as an output\r\n  pinMode(iLED, OUTPUT);\r\n  \/\/ Outputting high, the LED turns on\r\n  digitalWrite(iLED, HIGH);\r\n\r\n  \/\/ Delay 5 Second\r\n  delay( 5000 );\r\n\r\n}\r\n<\/pre>\n<p>&#8212;&#8212;<\/p>\n<p><strong>People can contact us:<\/strong> https:\/\/www.donluc.com\/?page_id=1927<\/p>\n<p><strong>Teacher, Instructor, E-Mentor, R&#038;D and Consulting<\/strong><\/p>\n<ul>\n<li>Programming Language<\/li>\n<li>Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi, Arm, Silicon Labs, Espressif, Etc&#8230;)<\/li>\n<li>IoT<\/li>\n<li>Wireless (Radio Frequency, Bluetooth, WiFi, Etc&#8230;)<\/li>\n<li>Robotics<\/li>\n<li>Automation<\/li>\n<li>Camera and Video Capture Receiver Stationary, Wheel\/Tank and Underwater Vehicle<\/li>\n<li>Unmanned Vehicles Terrestrial and Marine<\/li>\n<li>Machine Learning<\/li>\n<li>Artificial Intelligence (AI)<\/li>\n<li>RTOS<\/li>\n<li>eHealth Sensors, Biosensor, and Biometric<\/li>\n<li>Research &#038; Development (R &#038; D)<\/li>\n<li>Consulting<\/li>\n<\/ul>\n<p><strong>Follow Us<\/strong><\/p>\n<p><strong>Luc Paquin \u2013 Curriculum Vitae &#8211; 2024<\/strong><br \/>\nhttps:\/\/www.donluc.com\/luc\/<\/p>\n<p><strong>Web:<\/strong> https:\/\/www.donluc.com\/<br \/>\n<strong>Facebook:<\/strong> https:\/\/www.facebook.com\/neosteam.labs.9\/<br \/>\n<strong>YouTube:<\/strong> https:\/\/www.youtube.com\/@thesass2063<br \/>\n<strong>Twitter:<\/strong> https:\/\/twitter.com\/labs_steam<br \/>\n<strong>Pinterest:<\/strong> https:\/\/www.pinterest.com\/NeoSteamLabs\/<br \/>\n<strong>Instagram:<\/strong> https:\/\/www.instagram.com\/neosteamlabs\/<\/p>\n<p><strong>Don Luc<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8212;&#8212; #DonLucElectronics #DonLuc #DFRobot #SoilMoistureSensor #FireBeetle2ESP32E #ESP32 #IoT #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; Soil Moisture Soil moisture is the critical parameter in agriculture. If there is a shortage or overabundance of water, plants may die. At the same time, this data depends on many external factors, primarily weather conditions &#8230; <a title=\"Project #29 &#8211; DFRobot &#8211; Soil Moisture &#8211; Mk05\" class=\"read-more\" href=\"https:\/\/www.donluc.com\/?p=3868\" aria-label=\"Read more about Project #29 &#8211; DFRobot &#8211; Soil Moisture &#8211; Mk05\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[318,50,49,317,38,80,59,5,287,58,82,10],"tags":[6,92,242,102,4,320,19,83,85,24,9,84,27,326,33,34,108],"class_list":["post-3868","post","type-post","status-publish","format-standard","hentry","category-ddfrobot","category-arduino","category-consultant","category-dfrobot","category-digitalelectronics","category-esp32","category-fritzing","category-microcontrollers","category-program","category-arduino-programming","category-program-esp32","category-projects","tag-arduino","tag-battery","tag-bluetooth","tag-components","tag-consultant","tag-dfrobot","tag-electronics","tag-esp32","tag-fritzing","tag-microcontroller","tag-programming","tag-programming-esp32","tag-projects-2","tag-soil-moisture","tag-technology","tag-video-blog","tag-vlog"],"_links":{"self":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3868"}],"version-history":[{"count":1,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3868\/revisions"}],"predecessor-version":[{"id":3873,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3868\/revisions\/3873"}],"wp:attachment":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}