ESP32 with Soil Moisture Sensor on Web Server (MicroPython)

Monitor Soil Moisture with ESP32 board and Soil Moisture Sensor Module with Micro Python. Show Status on ESP32 Web Server.

Connect Soil Moisture Sensor to ESP32 Wiring Diagram
Connect Soil Moisture Sensor to ESP32 Wiring Diagram
Connect Soil Moisture Sensor Module to ESP32
Connect Soil Moisture Sensor Module to ESP32
ESP32 and Soil Moisture Sensor Module
ESP32 and Soil Moisture Sensor Module
Monitor Soil Moisture Sensor Status with ESP32 on WebServer (MicroPython)
Monitor Soil Moisture Sensor Status with ESP32 on WebServer (MicroPython)

MicroPython Code – ESP32 with Soil Moisture Sensor on Web Server

from machine import Pin, SoftI2C
from machine import Pin, ADC
import network
import time
import socket
import _thread

# Soil Moisture
soil = ADC(Pin(35))
m = 100

min_moisture=0
max_moisture=4095

soil.atten(ADC.ATTN_11DB)       #Full range: 3.3v
soil.width(ADC.WIDTH_12BIT)     #range 0 to 4095

def check_moisture():
    print('Check Moisture Starting...')
    global m
    while True:
        try:
            soil.read()
            time.sleep(2)
            m = (max_moisture-soil.read())*100/(max_moisture-min_moisture)
            moisture = 'Soil Moisture: {:.1f} %'.format(m)
            print("Soil Moisture: " + "%.1f" % m +"% (adc: "+str(soil.read())+")")
            time.sleep(5)
        except:
            pass

# START
print('Starting...')

# WIFI
wifi = 'Your_ssid' # your wifi ssid
password = 'Your_Password' # your wifi password
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
time.sleep(3)
wlan.connect(wifi, password)
time.sleep(5)
status = wlan.isconnected() # True/False
ip ,_ ,_ ,_ = wlan.ifconfig()

if status == True:
    print('IP:{}'.format(ip))
    time.sleep(2)
    print('Connected')
else:
    print('Disconnected')

# HTML
html1 = '''
<!doctype html>
<html lang="en">
  <body style="font-family:verdana;">
  <div class="container">
  <form>
    <center>
    <h2><b>ESP32<b></h2>
    <h2><b>Soil Moisture Sensor<b></h2>
    <h2>
'''

html2 = '''
    </h2><br>
    </center>
    </form>
  </div>
  </body>
</html>
'''

# RUN

def runserver():
    global m
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = ''
    port = 80
    s.bind((host,port))
    s.listen(5)

    while True:
        client, addr = s.accept()
        print('Connection from: ', addr)
        data = client.recv(1024).decode('utf-8')
        print([data])
        moisture = '{:.1f} %'.format(m)
        client.send(html1 + moisture + html2)
        client.close()

_thread.start_new_thread(runserver,())
_thread.start_new_thread(check_moisture,())