Skip to content

Rpi Pico

Web server + WiFi

import network
import socket
from time import sleep
from picozero import pico_temp_sensor, pico_led
import machine
import rp2
import sys

ssid = 'XXXX'
password = 'XXXX'

def open_socket(ip):
    # Open a socket
    address = (ip, 80)
    s = socket.socket()
    s.bind(address)
    s.listen(1)
    return s


def connect():
    #Connect to WLAN
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(ssid, password)
    while wlan.isconnected() == False:
        if rp2.bootsel_button() == 1:
            sys.exit()
        print('Waiting for connection...')
        pico_led.on()
        sleep(0.5)
        pico_led.off()
        sleep(0.5)
    ip = wlan.ifconfig()[0]
    print(f'Connected on {ip}')
    pico_led.on()
    return ip

def serve(s):
    #Start a web server
    while True:
        conn, addr = s.accept()
        request = conn.recv(1024).decode()
        print('Request:', request)

        response = ['HTTP/1.1 200 OK', 'Content-Type: text/plain', '', 'yo yo']
        conn.send('\r\n'.join(response))
        conn.close()

ip = connect()
s = open_socket(ip)
serve(s)

Triggering via STDIN over tty

import select
import sys

import utime
import machine

switch_pin = machine.Pin(2, machine.Pin.OUT, value=1)  # GPIO2 as an output, default HIGH

def trigger_switch():
    switch_pin.value(0)  # "Press" the button (short to ground)
    utime.sleep(0.1)
    switch_pin.value(1)  # "Release" the button (disconnect)

while True:
    if select.select([sys.stdin],[],[],0)[0]:
        cmd = sys.stdin.readline().strip()
        print('stdin', cmd)
        #if cmd == "trigger":
        print('running trigger')
        trigger_switch()
    utime.sleep(0.1)