Skip to content

Instantly share code, notes, and snippets.

@joshnuss
Last active December 30, 2025 12:25
Show Gist options
  • Select an option

  • Save joshnuss/cb8aa0208b53cc3b7bc4a141c2484696 to your computer and use it in GitHub Desktop.

Select an option

Save joshnuss/cb8aa0208b53cc3b7bc4a141c2484696 to your computer and use it in GitHub Desktop.
Wireless multimeter over UDP
# Using an ESP32 (Super Mini C3)
#
# How it works:
# The latest ADC voltage value is sent over UDP
#
# Usage:
# Connect over netcat port 33
#
# $> nc <ip> 33
from network import WLAN
from machine import Pin, ADC, idle
from time import sleep_ms
import socket
SSID = "<ssid>"
PASSWORD = "<wifi password>"
ADC_PIN = 1
pin = Pin(ADC_PIN, Pin.IN)
adc = ADC(pin, atten=ADC.ATTN_11DB)
def start_wlan():
wlan = WLAN(WLAN.IF_STA)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
idle()
sleep_ms(100)
ip = wlan.ipconfig('addr4')
print(f'wlan connected {ip}')
def start_udp_server():
sock = socket.socket(socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind(('0.0.0.0', 33))
sock.listen()
print(f'listening on 0.0.0.0:33')
while True:
client, addr = sock.accept()
print(f'client connected {addr}')
while True:
voltage = adc.read_uv() / 1_000_000.0
try:
buf = client.send(f"{voltage}v\n")
except: # FAFO
break
finally:
sleep_ms(500)
print(f'client closed {addr}')
client.close()
start_wlan()
start_udp_server()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment