Last active
December 30, 2025 12:25
-
-
Save joshnuss/cb8aa0208b53cc3b7bc4a141c2484696 to your computer and use it in GitHub Desktop.
Wireless multimeter over UDP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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