Raspberry Pi Pico W
Sensor Readings Over WiFi

For this project, I connected up a sensor to the Pico W. I went with a DS18B20 breakout and connected it to Pin 15, 3V3 and GND according to the markings on the breakout. I also have a 4.7K resistor connecting the signal line to 3V3. You could replace this with a different sensor if you needed. This is a photograph of the breadboard,

Pico Circuit

Here is the code I used to serve the web page over WiFi. I used the CDN for Bootstrap 5 libraries to make a simple responsive page that I could check on my phone.

from time import sleep
from network import WLAN, STA_IF
from secrets import secrets
from socket import socket, getaddrinfo
from machine import Pin
from onewire import OneWire
from ds18x20 import DS18X20

html = """<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Temperature Server</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>

<div class="container-fluid p-5 bg-primary text-white text-center">
  <h1>Pico W Temperature Server</h1>
  
</div>
<div class="container-fluid">
  <p>The temperature is %.2f&deg;C.</p>
</div>
<body>
</html>
"""

wlan = WLAN(STA_IF)

# set up temperature sensor with onewire
ow = OneWire(Pin(15))
ds = DS18X20(ow)
r = ds.scan()[0]




def connect():
    wlan.active(True)
    wlan.config(pm = 0xa11140)
    wlan.connect(secrets["ssid"], secrets["password"])

    # try to connect or fail
    max_wait = 10
    while max_wait >0:
        if wlan.status() <0 or wlan.status()>=3:
            break
        max_wait -= 1
        print("Waiting for connection...")
        sleep(1)

    # connection error
    if wlan.status() != 3:
        return False
    else:
        status = wlan.ifconfig()
        print("Connected to", secrets["ssid"], "on", status[0])
        print()
        return True

def disconnect():
    wlan.disconnect()
    print("Disconnected")
    print()



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

while True:
    try:
        cl, addr = s.accept()
        print("Client connected from", addr)
        request = cl.recv(1024)
        #print(request)
        ds.convert_temp()
        t = round(ds.read_temp(r), 2)
        print(t)
        response = html % t
        cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
        cl.send(response)
        cl.close()
    except OSError as e:
        cl.close()
        print("Connection closed.")

This is a screenshot of the page I loaded on my phone. I did this at school, so I could be quite a distance from the room where I had the sensor and still be able to get a reading.

Pico Circuit