Micropython basic tasks for ESP-32 server

 BASIC WIFI DETECTION

import network

import time


def scan_wifi():

    wlan = network.WLAN(network.STA_IF)  # Create a WLAN object in station mode

    wlan.active(True)  # Activate the WLAN interface


    print("Scanning for Wi-Fi networks...")

    networks = wlan.scan()  # Scan for available networks


    for net in networks:

        ssid = net[0].decode('utf-8')  # SSID is the first item in the tuple

        print("Found network: SSID: {}".format(ssid))


if __name__ == "__main__":

    scan_wifi()


BASIC SERVER

import network

import socket

import time


def setup_wifi():

    wlan = network.WLAN(network.STA_IF)

    wlan.active(True)

    wlan.connect("NETWORK", "PASSWORD")

    while not wlan.isconnected():

        time.sleep(1)

    print('Connected to Wi-Fi network:', wlan.ifconfig())


def start_server():

    addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

    s = socket.socket()

    s.bind(addr)

    s.listen(1)

    print('Listening on', addr)


    while True:

        cl, addr = s.accept()

        print('Client connected from', addr)

        request = cl.recv(1024)

        print('Request:', request)

        response = """\

HTTP/1.1 200 OK


Hello from ESP32!

"""

        cl.send(response)

        cl.close()


if __name__ == "__main__":

    setup_wifi()

    start_server()


BASIC HTML JS PAGE SERVING FROM ESP-32 SERVER
import network
import socket
import time

# Global variable for reply message
reply_message = "Server response here"

def setup_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect('NETWORL', 'PASSWORD')
    while not wlan.isconnected():
        time.sleep(1)
    print('Connected to Wi-Fi network:', wlan.ifconfig())

def handle_request(request):
    global reply_message
    try:
        if request.startswith('POST /'):
            if '\r\n\r\n' in request:
                body = request.split('\r\n\r\n')[1]
                params = body.split('&')
                message = params[0].split('=')[1]
                print('Received message:', message)
                return "Message received: {}".format(message)
            else:
                return "Invalid request format"
        else:
            return reply_message
    except Exception as e:
        print("Error handling request:", e)
        return "Error processing request"

def start_server():
    addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
    s = socket.socket()
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # Allow address reuse
    
    try:
        s.bind(addr)
        s.listen(1)
        print('Listening on', addr)

        while True:
            try:
                cl, addr = s.accept()
                print('Client connected from', addr)
                request = cl.recv(1024).decode()
                print('Request:', request)
                response_body = handle_request(request)
                response = """\
HTTP/1.1 200 OK
Content-Type: text/html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ESP32 Web Server</title>
</head>
<body>
    <div class="container">
        <h1>ESP32 Web Server</h1>
        <form id="dataForm">
            <label for="message">Enter your message:</label>
            <input type="text" id="message" name="message" required>
            <input type="submit" value="Send">
        </form>
        <div id="response" class="response"></div>
    </div>
    
</body>
</html>
""".format(response_body)

                cl.send(response)
            except Exception as e:
                print("Error during communication:", e)
            finally:
                cl.close()
    except OSError as e:
        print("Socket error:", e)
    finally:
        s.close()  # Ensure the socket is always closed

if __name__ == "__main__":
    setup_wifi()
    start_server()

Comments

Popular posts from this blog

MicroPython with microcontroller and sensor

Android Roadmap