import time
import machine
from network import WLAN
import network
import urequests as requests
# Initial phase
INTERVAL = 30 # 30 seconds for cloud
POT = machine.ADC(26)
# Wifi Details
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
BASE_URL = "http://httpbin.org"
DEBUG = True
# Led to indicate data transmission to cloud
LED = machine.Pin("LED", machine.Pin.OUT)
def convertU16toVolts(raw: float, max_volt: float = 3.3) -> float:
"""
Convert unsigned 16-bit value to voltage scale 0 - {max_volt} V
"""
conversion_factor = max_volt / 65535
volt = raw * conversion_factor
# ...
return volt
def dlog(data) -> None:
if DEBUG:
print(repr(data))
return None
def sendData(keyvalues: list[tuple]) -> None:
"""
Send data in HTTP get request.
Only key-value data pairs
"""
endpoint = "/get"
queryparams = ""
for i in range(len(keyvalues)):
key, value = keyvalues[i]
if i == 0:
queryparams += "?"
else:
queryparams += "&"
queryparams += f'{key}={value}'
request_url = BASE_URL + endpoint + queryparams
dlog(f"request: {request_url}")
response = requests.get(request_url)
dlog(f"response_statuscode: {response.status_code}")
dlog(f"response_content: {response.content}")
return None
def connectWifi() -> WLAN:
"""
This function connects Pico W to wireless AP(Access Point)
Connection process is shown in console.
After succesful connection, the function shows LAN IP(ifconfig)
if debuggin is on.
"""
wlan = network.WLAN(network.STA_IF) # Mode => STA (usually number 1)
print("Connecting to WiFi", end="")
wlan.active(True)
# print(WIFI_SSID, WIFI_PASS)
wlan.connect(WIFI_SSID, WIFI_PASS) # connection parameters
while not wlan.isconnected():
print(".", end='')
time.sleep(0.1)
print("\nConnected!")
if DEBUG:
print(wlan.ifconfig())
return wlan
# Operations "routines"
def main() -> None:
time.sleep(1)
print("Program starting.")
wlan = connectWifi()
while True:
# blink LED
LED.on()
raw = POT.read_u16()
volts = convertU16toVolts(raw)
wipe = ' ' * 40
# TODO send data to cloud
queryparams: list[tuple] = [
("pot", str(raw)),
("volt", str(volts))
]
sendData(queryparams)
print(f'\r{wipe}\r', end='')
print(f'Raw {raw}, Voltage {volts} V', end='')
time.sleep(0.2)
LED.off()
time.sleep(INTERVAL)
print("Program ending.")
return None
main()