Programming the Raspberry Pi Pico/W in MicroPython

We have decided not to make the programs available as a download because this is not the point of the book - the programs are not finished production code but something you should type in and study.

The best solution is to provide the source code of the programs in a form that can be copied and pasted into Thonny or VS Code project. 

The only downside is that you have to create a project to paste the code into.

To do this follow the instructions in the book.

All of the programs below were copy and pasted from working programs in the IDE. They have been formatted using the built in formatter and hence are not identical in layout to the programs in the book. This is to make copy and pasting them easier. The programs in the book are formatted to be easy to read on the page.

If anything you consider important is missing or if you have any requests or comments  contact:

This email address is being protected from spambots. You need JavaScript enabled to view it. 

Page 32

from machine import Pin
import time

pin = Pin("LED", Pin.OUT)
while True:
    pin.value(1)
    time.sleep(1)
    pin.value(0)
    time.sleep(1)

Page 32

from machine import Pin
import time

pin = Pin(22, Pin.OUT)
while True:
    pin.value(1)
    time.sleep(1)
    pin.value(0)
    time.sleep(1)

Page 38

from machine import Pin
import time

pin = Pin(22,Pin.OUT)
while True:
    pin.toggle()
    time.sleep(1)
 

Page 38

from machine import  Pin
def flash():
    pin = Pin(22, Pin.OUT)
    while True:
        pin.value(1)
        pin.value(0)
flash()

Page 39

from machine import Pin

@micropython.native
def flash():
    pin = Pin(22, Pin.OUT)
    while True:
        pin.value(1)
        pin.value(0)
flash()

Page 40

from machine import Pin
import time

pin = Pin(22, Pin.OUT)
while True:
    pin.value(1)
    time.sleep(0.5)
    pin.value(0)
    time.sleep(0.5)
 

Page 40

from machine import Pin
import time

pin = Pin(22, Pin.OUT)
while True:
    pin.value(1)
    time.sleep_us(10)
    pin.value(0)
    time.sleep_us(10)

Page 40

from machine import Pin
import time
pin = Pin(22, Pin.OUT)
n = 10
while True:
    for i in range(n):
        pass
    pin.value(1)
    for i in range(n):
        pass
    pin.value(0)

Page 42

from machine import Pin

pin1 = Pin(21, Pin.OUT)
pin2 = Pin(22, Pin.OUT)
while True:
    pin1.value(1)
    pin2.value(0)
    pin1.value(0)
    pin2.value(1)

Page 44

from machine import Pin
import machine

def gpio_get():
    return machine.mem32[0xd0000000+0x010]

def gpio_set(value, mask):
    machine.mem32[0xd0000000 +  0x01C] = (machine.mem32[0xd0000000+0x010]) ^ value & mask

pin = Pin(22, Pin.OUT)
pin = Pin(21, Pin.OUT)
value1 = 1 << 22 | 0 << 21
value2 = 0 << 22 | 1 << 21
mask = 1 << 22 | 1 << 21
while True:
    gpio_set(value1, mask)
    gpio_set(value2, mask)
 

Page 65

from machine import Pin
import time
pinIn = Pin(22, Pin.IN,Pin.PULL_UP)
pinLED = Pin(25, Pin.OUT)

while True:
    if pinIn.value():
        pinLED.on()
    else:
        pinLED.off()
    time.sleep(0.5)

Page 66

from machine import Pin
import time
pinIn = Pin(22, Pin.IN, Pin.PULL_DOWN)
pinLED = Pin(25, Pin.OUT)

while True:
    while pinIn.value() == 0:
        pass
    while pinIn.value() == 1:
        pass
    pinLED.on()
    time.sleep(1)
    pinLED.off()

Page 67 

from machine import Pin
import time
pinIn = Pin(22, Pin.IN, Pin.PULL_DOWN)
pinLED = Pin(25, Pin.OUT)

while True:
    while pinIn.value() == 0:
        pass
    t = time.ticks_ms()
    time.sleep_ms(1)
    while pinIn.value() == 1:
        pass
    t = time.ticks_diff(time.ticks_ms(), t)
    if t < 2000:
        pinLED.on()
        time.sleep(1)
        pinLED.off()
    else:
        for i in range(10):
            pinLED.on()
            time.sleep_ms(100)
            pinLED.off()
            time.sleep_ms(100)

Page 68

from machine import Pin
import time
pinIn = Pin(22, Pin.IN)

while True:
    while pinIn.value() == 1:
        pass
    while pinIn.value() == 0:
        pass

    t = time.ticks_us()
    while pinIn.value() == 1:
        pass
    t = time.ticks_diff(time.ticks_us(), t)
    print(t)
    time.sleep(1)

Page 69

import time
import machine

pinIn = machine.Pin(22, machine.Pin.IN)

while True:
    t = machine.time_pulse_us(pinIn, 1)
    print(t)
    time.sleep(1)

Page 69

import machine
import time

import machine
pinIn = machine.Pin(22, machine.Pin.IN)

while True:
    while pinIn.value() == 1:
        pass
    t = machine.time_pulse_us(pinIn, 1)
    print(t)
    time.sleep(1)

Page 72

from machine import Pin
import time
pinIn = Pin(22, Pin.IN)

s = 0
count = 0
while True:
    i = pinIn.value()
    t = time.ticks_add(time.ticks_us(), 1000*100)
    if s == 0:  # button not pushed
        if i:
            s = 1
            count = count+1
            print("Button Push ", count)
    elif s == 1:  # button pushed
        if not i:
            s = 0
    else:
        s = 0
    while time.ticks_us() < t:
        pass

Page 74

from machine import Pin
import time
pinIn = Pin(22, Pin.IN)

s = 0
while True:
    i = pinIn.value()
    t = time.ticks_add(time.ticks_us(), 1000*100)
    if s == 0:  # button not pushed
        if i:
            s = 1
        tpush = t
    elif s == 1:  # button pushed
        if not i:
            s = 0
            if time.ticks_diff(t, tpush) > 2000000:
                print("Button held \n\r")
            else:
                print("Button pushed \n\r")
    else:
        s = 0
    while time.ticks_us() < t:
        pass 
 

Page 75 

from machine import Pin
import time
pinIn = Pin(22, Pin.IN)
pinLED1 = Pin(21, Pin.OUT)
pinLED2 = Pin(20, Pin.OUT)
pinLED3 = Pin(19, Pin.OUT)
pinLED1.on()
pinLED2.off()
pinLED3.off()
s = 0
buttonState = pinIn.value()
while True:
    buttonNow = pinIn.value()
    edge = buttonState-buttonNow
    buttonState = buttonNow
    t = time.ticks_add(time.ticks_us(), 1000*100)
    if s == 0:
        if edge == 1:
            s = 1
            pinLED1.off()
            pinLED2.on()
            pinLED3.off()

    elif s == 1:
        if edge == 1:
            s = 2
            pinLED1.off()
            pinLED2.off()
            pinLED3.on()
    elif s == 2:
        if edge == 1:
            s = 0
            pinLED1.on()
            pinLED2.off()
            pinLED3.off()
    else:
        s = 0
    while time.ticks_us() < t:
        pass
 

Page 83

from utime import sleep
from machine import Pin
import machine


def gpio_get_events(pinNo):
    mask = 0xF << 4 * (pinNo % 8)
    intrAddr = 0x40014000 + 0x0f0 + (pinNo // 8)*4
    return (machine.mem32[intrAddr] & mask) >> (4 * (pinNo % 8))


def gpio_clear_events(pinNo, events):
    intrAddr = 0x40014000 + 0x0f0 + (pinNo // 8)*4
    machine.mem32[intrAddr] = events << (4 * (pinNo % 8))


pin = Pin(22, Pin.IN, Pin.PULL_UP)
while True:
    event = gpio_get_events(22)
    if(event & Pin.IRQ_FALLING):
        print("falling")
    if(event & Pin.IRQ_RISING):
        print("rising")
    gpio_clear_events(22, Pin.IRQ_FALLING | Pin.IRQ_RISING)
    sleep(0.5)

Page 83

from utime import sleep
from machine import Pin

pin = Pin(22, Pin.IN, Pin.PULL_DOWN)

print("Press Button")
sleep(10)
if pin.value():
    print("Button Pressed")
else:
    print("Button Not Pressed")

Page 84

from utime import sleep
from machine import Pin
import machine


def gpio_get_events(pinNo):
    mask = 0xF << 4 * (pinNo % 8)
    intrAddr = 0x40014000 + 0x0f0 + (pinNo // 8)*4
    return (machine.mem32[intrAddr] & mask) >> (4 * (pinNo % 8))


def gpio_clear_events(pinNo, events):
    intrAddr = 0x40014000 + 0x0f0 + (pinNo // 8)*4
    machine.mem32[intrAddr] = events << (4 * (pinNo % 8))


pin = Pin(22, Pin.IN, Pin.PULL_DOWN)

print("Press Button")
gpio_clear_events(22, Pin.IRQ_FALLING)
sleep(10)
event = gpio_get_events(22)
gpio_clear_events(22, Pin.IRQ_FALLING)
if event & Pin.IRQ_FALLING:
    print("Button Pressed")
else:
    print("Button Not Pressed")

Page 85

import time
from utime import sleep
from machine import Pin
import machine


def gpio_get_events(pinNo):
    mask = 0xF << 4 * (pinNo % 8)
    intrAddr = 0x40014000 + 0x0f0 + (pinNo // 8)*4
    return (machine.mem32[intrAddr] & mask) >> (4 * (pinNo % 8))


def gpio_clear_events(pinNo, events):
    intrAddr = 0x40014000 + 0x0f0 + (pinNo // 8)*4
    machine.mem32[intrAddr] = events << (4 * (pinNo % 8))


pin = Pin(22, Pin.IN, Pin.PULL_DOWN)
while True:
    gpio_clear_events(22, Pin.IRQ_FALLING | Pin.IRQ_RISING)
    while not(gpio_get_events(22) & Pin.IRQ_RISING):
        pass
    t = time.ticks_us()
    while not(gpio_get_events(22) & Pin.IRQ_FALLING):
        pass
    t = time.ticks_diff(time.ticks_us(), t)
    print(t)
    sleep(1)

Page 88

import time
from machine import Pin
import machine
import array

count = 0
t = array.array('L', [0]*20)


def myHandler(pin):
    global t, count
    t[count] = time.ticks_us()
    count = count+1
    if count > 19:
        for i in range(1, 20):
            print(time.ticks_diff(t[i], t[i-1]))
        pin.irq(None, Pin.IRQ_RISING, hard=True)
        return


pin = Pin(22, Pin.IN, Pin.PULL_DOWN)
pin.irq(myHandler, Pin.IRQ_RISING, hard=False)

Page 90

import time
from machine import Pin


def myHandler(pin):
    print(time.ticks_us())


pin = Pin(22, Pin.IN, Pin.PULL_DOWN)
pin.irq(myHandler, Pin.IRQ_RISING, hard=True)
while True:
    print("doing something useful")

Page 96

from machine import Pin, PWM
pwm16 = PWM(Pin(16))
pwm17 = PWM(Pin(17))

pwm16.freq(250)

pwm16.duty_u16(65535//2)
pwm17.duty_u16(65535//4) 
 

Page 97

from machine import Pin, PWM
import machine


def pwm_set_phase(sliceNo, phase):
    Addr = 0x40050000 + 0x14*sliceNo
    if phase:
        machine.mem32[Addr] = machine.mem32[Addr] | 0x2
    else:
        machine.mem32[Addr] = machine.mem32[Addr] & 0xFFFFFFFD


pwm16 = PWM(Pin(16))
pwm17 = PWM(Pin(17))
pwm16.freq(250)
pwm_set_phase(0, True)
pwm16.duty_u16(65535//2)
pwm17.duty_u16(65535//4)

Page 98

from machine import Pin, PWM
def pwm_set_polarity(sliceNo, channel, invert):
    Addr = 0x40050000 + 0x14*sliceNo
    if invert:
        machine.mem32[Addr] = machine.mem32[Addr] | 0x1 << (2+channel)
    else:
        machine.mem32[Addr] = machine.mem32[Addr] & ~(0x1 << (2+channel))


pwm16 = PWM(Pin(16))
pwm17 = PWM(Pin(17))

pwm16.freq(250)
pwm_set_polarity(0, 1, True)
pwm16.duty_u16(65535//4)
pwm17.duty_u16(65535//4)

Page 99

from machine import Pin, PWM

pwm16 = PWM(Pin(16))

pwm16.freq(50)

pwm16.duty_u16(65535//2)
while True:
    pwm16.duty_u16(65535//2)
    pwm16.duty_u16(65535//4)

Page 101

from machine import Pin, PWM
import array
import machine
import math


def pwm_get_wrap(sliceNo):
    Addr = 0x40050000 + 0x10+0x14*sliceNo
    return (machine.mem32[Addr])


wave = array.array('H', [0]*256)
for i in range(256):
    wave[i] = int(65535//2 + (math.sin(i * 2.0 * 3.14159 / 256.0) * 65535//2))


pwm16 = PWM(Pin(16))
pwm16.freq(125000000//256)

print(pwm_get_wrap(0))
while(True):
    for i in range(256):
        pwm16.duty_u16(wave[i])

Page 103

from utime import sleep_ms
from machine import Pin, PWM

pwm25 = PWM(Pin(25))
pwm25.freq(2000)

while True:
    for d in range(0,65535,655):
        pwm25.duty_u16(d)
        sleep_ms(50)

Page 105

from utime import sleep_ms
from machine import Pin, PWM

pwm25 = PWM(Pin(25))
pwm25.freq(2000)

while True:
    for b in range(0,100):
        pwm25.duty_u16(int(65535*b*b*b/1000000))
        sleep_ms(50)

Page 115

from machine import Pin, PWM
from time import sleep

class Motor:
    def __init__(self, pinNo):
        self.gpio = pinNo
        self._on = False
        self.speed=0

        self.pwm1=PWM(Pin(pinNo))
        self.pwm1.freq(2000)
        self.pwm1.duty_u16(0)

    def setSpeed(self,s):
        self._on=True
        self.speed=s
        self.pwm1.duty_u16(int(65535*s/100))
    
    def off(self):
        self._on=False
        self.pwm1.duty_u16(0)
    
    def on(self):
        self._on=True
        self.pwm1.duty_u16(int(65535*self.speed/100))

motor=Motor(16)
motor.setSpeed(50)
sleep(1)
motor.off()
sleep(1)
motor.setSpeed(90)
sleep(1)
motor.off()

Page 120

from machine import Pin, PWM
from time import sleep

class Motor:
    def __init__(self, pinNo):
        self.gpio = pinNo
        self._on = False
        self.speed=0

        self.pwm1=PWM(Pin(pinNo))
        self.pwm1.freq(2000)
        self.pwm1.duty_u16(0)

    def setSpeed(self,s):
        self._on=True
        self.speed=s
        self.pwm1.duty_u16(int(65535*s/100))
    
    def off(self):
        self._on=False
        self.pwm1.duty_u16(0)
    
    def on(self):
        self._on=True
        self.pwm1.duty_u16(int(65535*self.speed/100))

class BiMotor(Motor):
    def __init__(self, pinNo):
        super().__init__(pinNo)
        self.forward=True
        self.pwm2=PWM(Pin(pinNo+1))
        self.pwm2.duty_u16(0)
    
    def setForward(self,forward):
        if self.forward==forward:
            return
        self.pwm1.duty_u16(0)
        self.pwm1,self.pwm2=self.pwm2,self.pwm1        
        self.forward=forward
        self.pwm1.duty_u16(int(65535*self.speed/100))

motor=BiMotor(16)
motor.setSpeed(50)
sleep(1)
motor.setForward(False)
sleep(1)
motor.setSpeed(90)
sleep(1)
motor.setForward(True)
motor.off()

Page 123

from machine import Pin, PWM
from time import sleep

class Servo:
    def __init__(self, pinNo):
        self.pwm = PWM(Pin(pinNo))
        self.pwm.freq(50)
        self.position = 65535*2.5/100

    def setPosition(self, p):
        self.position = p
        self.pwm.duty_u16(int(65535*p/1000 + 65535*2.5/100))

servo=Servo(16)
servo.setPosition(100.0)
sleep(1)
servo.setPosition(50.0)
sleep(1)
servo.setPosition(0)

Page 124-125

from machine import Pin, PWM
import machine
from time import sleep


class Servo:
    def __init__(self, pinNo):
        self.pwm = PWM(Pin(pinNo))
        self.pin = pinNo
        self.pwm.freq(50)
        self.position = 65535*2.5/100

    def setPosition(self, p):
        self.position = p
        self.pwm.duty_u16(int(65535*p/1000 + 65535*2.5/100))

    def getSlice(self):
        return (self.pin >> 1) & 0x07

    def getChannel(self):
        return self.pin & 1

    def setPolarity(self, invert):
        sliceNo = self.getSlice()
        channel = self.getChannel()
        Addr = 0x40050000 + 0x14*sliceNo
        if invert:
            machine.mem32[Addr] = machine.mem32[Addr] | 0x1 << (2+channel)
        else:
            machine.mem32[Addr] = machine.mem32[Addr] & ~(0x1 << (2+channel))


servo = Servo(16)
servo.setPolarity(True)
servo.setPosition(100.0)
sleep(1)
servo.setPosition(50.0)
sleep(1)
servo.setPosition(0)

Page 136

from utime import sleep_ms
from machine import Pin
import machine


class StepperBi4():
    def __init__(self, pinA):
        self.phase = 0
        self.pinA = pinA
        self.timer = None
        self.forward = True
        self.speed = 0

        self.gpios = tuple([Pin(pinA, Pin.OUT), Pin(
            pinA+1, Pin.OUT), Pin(pinA+2, Pin.OUT), Pin(pinA+3, Pin.OUT)])
        self.gpios[0].high()
        self.gpioMask = 0xF << self.pinA
        self.halfstepSeq = [0x1, 0x3, 0x2, 0x6, 0x4, 0xC, 0x8, 0x9]
#   [
#             [0,0,0,1],
#             [0,0,1,1],
#             [0,0,1,0],
#             [0,1,1,0],
#             [0,1,0,0],
#             [1,1,0,0],
#             [1,0,0,0],
#             [1,0,0,1]
#    ]

    def _gpio_set(self, value, mask):
        machine.mem32[0xd0000000 +
                      0x01C] = (machine.mem32[0xd0000000+0x010] ^ value) & mask

    def setPhase(self, phase):
        value = self.halfstepSeq[phase] << self.pinA
        self._gpio_set(value, self.gpioMask)
        self.phase = phase

    def stepForward(self):
        self.phase = (self.phase+1) % 8
        self.setPhase(self.phase)

    def stepReverse(self):
        self.phase = (self.phase-1) % 8
        self.setPhase(self.phase)

    def doRotate(self, timer):
        if self.forward:
            self.stepForward()
        else:
            self.stepReverse()

    def rotate(self, forward, speed):
        self.forward = forward
        self.speed = speed
        if speed == 0:
            self.timer.deinit()
            self.timer = None
            return
        if self.timer == None:
            self.timer = machine.Timer()
        self.timer.init(freq=speed, mode=machine.Timer.PERIODIC,
                        callback=self.doRotate)


step = StepperBi4(16)
step.setPhase(0)
while True:
    step.rotate(True, 100)
    sleep_ms(500)
    step.rotate(True, 0)
    sleep_ms(500)

Page 147

from machine import Pin, SPI

spi = SPI(0, sck=Pin(6), miso=Pin(4), mosi=Pin(7))
spi.init(baudrate=500_000, bits=8, polarity=0, phase=0, firstbit=SPI.MSB)

read = bytearray(3)
write = bytearray([0xAA, 0xAA, 0xAA])
spi.write_readinto(write, read)

print(read, write)
spi.deinit()

Page 152

from utime import sleep_ms
from machine import Pin, SPI
from time import sleep

spi = SPI(0, sck=Pin(18), miso=Pin(16), mosi=Pin(19))
spi.init(baudrate=500_000, bits=8, polarity=0, phase=0, firstbit=SPI.MSB)

CS = Pin(17, Pin.OUT)
CS.high()
sleep_ms(1)

write = bytearray([0xD0])
CS.low()
spi.write(write)
read = spi.read(1)
CS.high()
print("Chip ID is", hex(read[0]))

CS.low()
write = bytearray([0xF2, 0x01])
spi.write(write)
write = bytearray([0xF4, 0x27])
spi.write(write)
CS.high()

CS.low()
write = bytearray([0xF7])
spi.write(write)
sleep_ms(10)
rBuff = spi.read(8)
CS.high()

pressure = (rBuff[0] << 12) | (rBuff[1] << 4) | (rBuff[2] >> 4)
temperature = (rBuff[3] << 12) | (rBuff[4] << 4) | (rBuff[5] >> 4)
humidity = rBuff[6] << 8 | rBuff[7]

print("Humidity = ", humidity)
print("Pressure = ", pressure)
print("Temp. = ", temperature)

Page 157

import machine
import utime
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)

while True:
    reading = sensor_temp.read_u16() * conversion_factor
    temperature = 27 - (reading - 0.706)/0.001721
    print(temperature)
    utime.sleep(2)

Page 163

from utime import sleep_ms
from machine import Pin, SPI
from time import sleep

spi = SPI(0, sck=Pin(18), miso=Pin(16), mosi=Pin(19))
spi.init(baudrate=500_000, bits=8, polarity=0, phase=0, firstbit=SPI.MSB)
CS = Pin(17, Pin.OUT)
CS.high()
sleep_ms(1)
CS.low()
write = bytearray([0x01, 0x80, 0x00])
read = bytearray(3)
spi.write_readinto(write, read)
CS.high()
data = (read[1] & 0x03) << 8 | read[2]
volts = data * 3.3 / 1023.0
print(volts)
spi.deinit()

Page 163

from utime import sleep_ms
from machine import Pin, SPI
from time import sleep


class spiADC:
    def __init__(self, spi, sckNo, misoNo, mosiNo, CSNo):
        self.spi = SPI(spi, sck=Pin(sckNo), miso=Pin(misoNo), mosi=Pin(mosiNo))
        self.spi.init(baudrate=500_000, bits=8, polarity=0,
                      phase=0, firstbit=SPI.MSB)
        self.CS = Pin(CSNo, Pin.OUT)
        self.CS.high()
        sleep_ms(1)

    def read(self, chan):
        write = bytearray([0x01, (0x08 | chan) << 4, 0x00])
        self.CS.low()
        read = bytearray(3)
        self.spi.write_readinto(write, read)
        self.CS.high()
        data = (read[1] & 0x03) << 8 | read[2]
        volts = data * 3.3 / 1023.0
        return volts


adc = spiADC(0, 18, 16, 19, 17)
volts = adc.read(1)
print(volts)

Page 177

from machine import Pin,I2C

i2c0=I2C(0,scl=Pin(17),sda=Pin(16),freq=400000)

buf = bytearray([0xE7])
i2c0.writeto( 0x40, buf, True)
read= i2c0.readfrom(0x40, 1, True)
print("User Register =",read)

Page 179

from utime import sleep_ms
from machine import Pin, I2C
from time import sleep

i2c0 = I2C(0, scl=Pin(17), sda=Pin(16), freq=100*1000)

buf = bytearray([0xE3])
i2c0.writeto(0x40, buf, False)
read = i2c0.readfrom(0x40, 3, True)
msb = read[0]
lsb = read[1]
check = read[2]
print("msb lsb checksum =", msb, lsb, check)

Page 183

from utime import sleep_ms
from machine import Pin, I2C
from time import sleep


def crcCheck(msb, lsb, check):
    data32 = (msb << 16) | (lsb << 8) | check
    divisor = 0x988000
    for i in range(16):
        if data32 & 1 << (23 - i):
            data32 ^= divisor
        divisor >>= 1
    return data32


i2c0 = I2C(0, scl=Pin(17), sda=Pin(16), freq=100*1000)

buf = bytearray([0xE3])
i2c0.writeto(0x40, buf, False)
read = i2c0.readfrom(0x40, 3, True)
msb = read[0]
lsb = read[1]
check = read[2]
print("msb lsb checksum =", msb, lsb, check)

data16 = (msb << 8) | (lsb & 0xFC)
temp = (-46.85 + (175.72 * data16 / (1 << 16)))
print("Temperature C ", temp)
print("Checksum=", crcCheck(msb, lsb, check))

buf = bytearray([0xF5])
i2c0.writeto(0x40, buf, True)
read = bytearray(3)
while True:
    sleep_ms(1)
    try:
        i2c0.readfrom_into(0x40, read, True)
        break
    except:
        continue
msb = read[0]
lsb = read[1]
check = read[2]
print("msb lsb checksum =", msb, lsb, check)
data16 = (msb << 8) | (lsb & 0xFC)
hum = -6 + (125.0 * data16) / 65536
print("Humidity ", hum)
print("Checksum=", crcCheck(msb, lsb, check))

Page 192

import rp2
from machine import Pin


@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW, )
def blink():
    label("again")
    set(pins, 1)
    set(pins, 0)
    jmp("again")


sm = rp2.StateMachine(0, blink, freq=2000, set_base=Pin(16))
sm.active(1)

Page 195

import rp2
from machine import Pin

@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW, )
def blink():
    label("again")
    set(pins, 1)
    set(x,31)
    label("loop1")
    nop() [31]
    jmp(x_dec,"loop1")  
    set(pins, 0)  
    set(x,31)
    label("loop2")
    nop() [31]
    jmp(x_dec,"loop2") 
    jmp("again")  


sm = rp2.StateMachine(0, blink, freq=2000, set_base=Pin(16))
sm.active(1)

Page 196

import rp2
from machine import Pin


@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW, )
def squarewave():
    pull(block)
    label("again")
    set(pins, 1)
    mov(x, osr)
    label("loop1")
    jmp(x_dec, "loop1")
    set(pins, 0)
    mov(x, osr)
    label("loop2")
    jmp(x_dec, "loop2")
    jmp("again")


sm = rp2.StateMachine(0, squarewave, freq=2000, set_base=Pin(16))
sm.active(1)
sm.put(0xFFF)

Page 198

import rp2
from machine import Pin


@rp2.asm_pio(out_init=(rp2.PIO.OUT_LOW, rp2.PIO.OUT_LOW))
def output():
    pull(block)
    label("again")
    out(pins, 2)
    jmp("again")


sm = rp2.StateMachine(0, output, freq=2000, out_base=Pin(
    16), out_shiftdir=rp2.PIO.SHIFT_RIGHT)
sm.active(1)
sm.put(0xFEDCBA98)

Page 200

import rp2
from machine import Pin


@rp2.asm_pio(out_init=(rp2.PIO.OUT_LOW, rp2.PIO.OUT_LOW), autopull=True)
def output():
    label("again")
    out(pins, 2)
    jmp("again")


sm = rp2.StateMachine(0, output, freq=2000, out_base=Pin(
    16), out_shiftdir=rp2.PIO.SHIFT_RIGHT)
sm.active(1)
while True:
    sm.put(0xFEDCBA98)

Page 202

import rp2
from machine import Pin

@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW)
def squarewave():
    label("again")    
    nop().side(1)
    jmp("again").side(0) 

sm = rp2.StateMachine(0, squarewave, freq=2000,sideset_base=Pin(16))
sm.active(1)

Page 202

import rp2
from machine import Pin


@rp2.asm_pio(sideset_init=(rp2.PIO.OUT_LOW, rp2.PIO.OUT_LOW))
def squarewave():
    label("again")
    nop().side(2)
    jmp("again").side(1)


sm = rp2.StateMachine(0, squarewave, freq=2000, sideset_base=Pin(16))
sm.active(1)

Page 204

import rp2
from machine import Pin


@rp2.asm_pio()
def light():
    label("again")
    in_(pins, 1)
    push(block)
    jmp("again")


LED = Pin(25, mode=Pin.OUT)
in1 = Pin(16, mode=Pin.IN)
sm = rp2.StateMachine(0, light, freq=2000, in_base=Pin(16))
sm.active(1)
while True:
    flag = sm.get()
    if (flag == 0):
        LED.value(0)
    else:
        LED.value(1)

Page 206

import rp2
from machine import Pin


@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def squarewave():
    label("again")
    wait(0, pin, 0)
    wait(1, pin, 0)
    set(pins, 1)
    set(pins, 0)
    jmp("again")


in1 = Pin(16, mode=Pin.IN)
sm = rp2.StateMachine(0, squarewave, freq=2000,
                      in_base=Pin(16), set_base=Pin(17))
sm.active(1)
 
 

Page 215

import dht
from machine import Pin
import time

dht=dht.DHT22(Pin(22))
while True:
    dht.measure()
    temp=dht.temperature()
    print(temp)
    hum=dht.humidity()
    print(hum)
    time.sleep(1)

Page 218

from machine import Pin
from utime import sleep_ms, ticks_us


class DHT22():
    def __init__(self, gpio):
        self.pin = gpio
        self.pin = Pin(2, mode=Pin.OUT)
        self.pin.high()
        self.checksum = 0
        self.temperature = 0
        self.humidity = 0
        sleep_ms(1)

    def getReading(self):
        DHT = self.pin
        DHT.low()
        sleep_ms(1)
        DHT.init(mode=Pin.IN)
        for i in range(2):
            while DHT.value() == 1:
                pass
            while DHT.value() == 0:
                pass

        data = 0
        t1 = ticks_us()
        for i in range(32):
            while DHT.value() == 1:
                pass
            while DHT.value() == 0:
                pass
            t2 = ticks_us()
            data = data << 1
            data = data | ((t2 - t1) > 100)
            t1 = t2

        checksum = 0
        for i in range(8):
            while DHT.value() == 1:
                pass
            while DHT.value() == 0:
                pass
            t2 = ticks_us()
            checksum = checksum << 1
            checksum = checksum | ((t2 - t1) > 100)
            t1 = t2
        byte1 = (data >> 24 & 0xFF)
        byte2 = (data >> 16 & 0xFF)
        byte3 = (data >> 8 & 0xFF)
        byte4 = (data & 0xFF)
        self.checksum = (checksum == (byte1+byte2+byte3+byte4) & 0xFF)
        self.humidity = ((byte1 << 8) | byte2) / 10.0
        neg = byte3 & 0x80
        byte3 = byte3 & 0x7F
        self.temperature = (byte3 << 8 | byte4) / 10.0
        if neg > 0:
            self.temperature = -self.temperature


dht = DHT22(2)
dht.getReading()
print("Checksum", dht.checksum)
print("Humidity= ", dht.humidity)
print("Temperature=", dht.temperature)

Page 222

import rp2
from machine import Pin


@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW, autopush=True, in_shiftdir=rp2.PIO.SHIFT_RIGHT)
def dht22():
    wrap_target()
    label("again")
    pull(block)
    set(pins, 0)
    mov(x, osr)
    label("loop1")
    jmp(x_dec, "loop1")
    set(pindirs, 0)

    wait(1, pin, 0)
    wait(0, pin, 0)
    wait(1, pin, 0)
    wait(0, pin, 0)

    set(y, 31)
    label("bits")
    wait(1, pin, 0)
    set(x, 0)
    label("loop2")
    jmp(x_dec, "continue")
    label("continue")
    jmp(pin, "loop2")
    in_(x, 4)
    jmp(y_dec, "bits")

    set(y, 7)
    label("check")
    wait(1, pin, 0)
    set(x, 0)
    label("loop3")
    jmp(x_dec, "continue2")
    label("continue2")
    jmp(pin, "loop3")
    in_(x, 4)
    jmp(y_dec, "check")
    wrap()


class DHT22():
    def __init__(self, gpio):
        self.sm = rp2.StateMachine(0, dht22, freq=976562, in_base=Pin(
            gpio), set_base=Pin(gpio), jmp_pin=Pin(gpio))
        self.sm.active(1)

    def getByte(self):
        count = self.sm.get()
        byte = 0
        for i in range(8):
            byte = byte << 1
            if ((count >> i * 4) & 0x0F) > 8:
                byte = byte | 1
        return byte

    def getReading(self):
        self.sm.put(1000)
        byte1 = self.getByte()
        print(byte1)
        byte2 = self.getByte()
        byte3 = self.getByte()
        print(hex(byte2))
        byte4 = self.getByte()
        checksum = self.getByte()
        self.checksum = (checksum == (byte1+byte2+byte3+byte4) & 0xFF)
        self.humidity = ((byte1 << 8) | byte2) / 10.0
        neg = byte3 & 0x80
        byte3 = byte3 & 0x7F
        self.temperature = (byte3 << 8 | byte4) / 10.0
        if neg > 0:
            self.temperature = -self.temperature


dht = DHT22(2)
dht.getReading()
print("Checksum", dht.checksum)
print("Humidity= ", dht.humidity)
print("Temperature=", dht.temperature)

Page 226

import rp2
from machine import Pin


@rp2.asm_pio(set_init=(rp2.PIO.OUT_LOW, rp2.PIO.OUT_LOW), autopush=True, in_shiftdir=rp2.PIO.SHIFT_LEFT)
def dht22():
    wrap_target()
    label("again")
    pull(block)
    set(pins, 0)
    mov(x, osr)
    label("loop1")
    jmp(x_dec, "loop1")
    set(pindirs, 0)

    wait(1, pin, 0)
    wait(0, pin, 0)
    wait(1, pin, 0)
    wait(0, pin, 0)

    set(y, 31)
    label("bits")
    wait(1, pin, 0)[25]
    in_(pins, 1)
    wait(0, pin, 0)
    jmp(y_dec, "bits")

    set(y, 7)
    label("check")
    wait(1, pin, 0)[25]
    set(pins, 2)
    set(pins, 0)
    in_(pins, 1)
    wait(0, pin, 0)
    jmp(y_dec, "check")
    push(block)
    wrap()


class DHT22():
    def __init__(self, gpio):
        self.sm = rp2.StateMachine(0, dht22, freq=490196, in_base=Pin(
            gpio), set_base=Pin(gpio), jmp_pin=Pin(gpio))
        self.sm.active(1)

    def getReading(self):
        self.sm.put(500)
        data = 0
        data = self.sm.get()
        byte1 = (data >> 24 & 0xFF)
        byte2 = (data >> 16 & 0xFF)
        byte3 = (data >> 8 & 0xFF)
        byte4 = (data & 0xFF)
        checksum = self.sm.get() & 0xFF
        self.checksum = (checksum == (byte1+byte2+byte3+byte4) & 0xFF)
        self.humidity = ((byte1 << 8) | byte2) / 10.0
        neg = byte3 & 0x80
        byte3 = byte3 & 0x7F
        self.temperature = (byte3 << 8 | byte4) / 10.0
        if neg > 0:
            self.temperature = -self.temperature


dht = DHT22(2)
dht.getReading()
print("Checksum", dht.checksum)
print("Humidity= ", dht.humidity)
print("Temperature=", dht.temperature)  
 

Page 248

from utime import sleep_ms, sleep_us
from machine import Pin
from time import sleep


class DS18B20:
    def __init__(self, pin):
        self.pin = Pin(pin, mode=Pin.IN)
        self.pin.high()

    def presence(self):
        self.pin.init(mode=Pin.OUT)
        self.pin.high()
        sleep_ms(1)
        self.pin.low()
        sleep_us(480)
        self.pin.init(mode=Pin.IN)
        sleep_us(70)
        b = self.pin.value()
        sleep_us(410)
        return b

    @micropython.native
    def writeBit(self, b):
        if b == 1:
            delay1 = 1
            delay2 = 30
        else:
            delay1 = 30
            delay2 = 0
        self.pin.low()
        for i in range(delay1):
            pass
        self.pin.high()
        for i in range(delay2):
            pass

    def writeByte(self, byte):
        self.pin.init(mode=Pin.OUT)
        for i in range(8):
            self.writeBit(byte & 1)
            byte = byte >> 1
        self.pin.init(mode=Pin.IN)

    @micropython.native
    def readBit(self):
        self.pin.init(mode=Pin.OUT)
        self.pin.low()
        self.pin.high()
        self.pin.init(mode=Pin.IN)
        b = self.pin.value()
        sleep_us(60)
        return b

    def readByte(self):
        byte = 0
        for i in range(8):
            byte = byte | self.readBit() << i
        return byte

    def convert(self):
        self.writeByte(0x44)
        for i in range(500):
            sleep_ms(10)
            if self.readBit() == 1:
                j = i
                break
        return j

    def crc8(self, data, len):
        crc = 0
        for i in range(len):
            databyte = data[i]
            for j in range(8):
                temp = (crc ^ databyte) & 0x01
                crc >>= 1
                if temp:
                    crc ^= 0x8C
                databyte >>= 1
        return crc

    def getTemp(self):
        if self.presence() == 1:
            return -1000
        self.writeByte(0xCC)
        if self.convert() == 500:
            return -3000
        self.presence()
        self.writeByte(0xCC)
        self.writeByte(0xBE)
        data = []
        for i in range(9):
            data.append(self.readByte())
        if self.crc8(data, 9) != 0:
            return -2000
        t1 = data[0]
        t2 = data[1]
        temp1 = (t2 << 8 | t1)
        if t2 & 0x80:
            temp1 = temp1 | 0xFFFF0000
        return temp1/16


dS18B20 = DS18B20(2)
if dS18B20.presence() == 1:
    print("No device")
else:
    print("Device present")

print(dS18B20.getTemp())

Page 250

from utime import sleep_ms
from machine import Pin
import onewire

class DS18B20:
    def __init__(self,pin):
        self.ow=onewire.OneWire(Pin(pin))    
       
    def convert(self):
        self.ow.writebyte(0x44)
        for i in range(500):
            sleep_ms(10)
            if self.ow.readbit() == 1:
                j=i
                break
        return j
   
    def getTemp(self):
        if not self.ow.reset:
            return -1000
        self.ow.writebyte(0xCC)
        if self.convert()==500:
            return -3000
        self.ow.reset()
        self.ow.writebyte( 0xCC)
        self.ow.writebyte( 0xBE)
        data=bytearray(9)
        self.ow.readinto(data)
        if self.ow.crc8(data)!=0:
            return -2000
        t1 = data[0]
        t2 = data[1]
        temp1 = (t2 << 8 | t1)
        if t2 & 0x80:
            temp1=temp1 | 0xFFFF0000
        return temp1/16

dS18B20=DS18B20(22)
print(dS18B20.getTemp())

Page 257

import rp2
from machine import Pin
from utime import sleep_ms


@rp2.asm_pio(set_init=rp2.PIO.OUT_HIGH, out_init=rp2.PIO.OUT_HIGH, autopush=True, push_thresh=8)
def DS1820():
    wrap_target()
    label("again")
    pull(block)
    mov(x, osr)
    jmp(not_x, "read")
    label("write")
    set(pindirs, 1)
    set(pins, 0)
    label("loop1")
    jmp(x_dec, "loop1")
    set(pindirs, 2)[31]
    wait(1, pin, 0)[31]

    pull(block)
    mov(x, osr)
    label("bytes1")
    pull(block)
    set(y, 7)
    set(pindirs, 3)
    label("bit1")
    set(pins, 0)[1]
    out(pins, 1)[31]
    set(pins, 1)[20]
    jmp(y_dec, "bit1")
    jmp(x_dec, "bytes1")
    set(pindirs, 0)[31]
    jmp("again")

    label("read")
    pull(block)
    mov(x, osr)
    label("bytes2")
    set(y, 7)
    label("bit2")
    set(pindirs, 1)
    set(pins, 0)[1]
    set(pindirs, 0)[5]
    in_(pins, 1)[10]
    jmp(y_dec, "bit2")
    jmp(x_dec, "bytes2")
    wrap()


class DS18B20:
    def __init__(self, pin):
        self.sm = rp2.StateMachine(0, DS1820, freq=490196, set_base=Pin(2), out_base=Pin(
            2), in_base=Pin(2), out_shiftdir=rp2.PIO.SHIFT_RIGHT, in_shiftdir=rp2.PIO.SHIFT_RIGHT)
        self.sm.active(1)

    def writeBytes(self, bytes, len):
        self.sm.put(250)
        self.sm.put(len-1)
        for i in range(len):
            self.sm.put(bytes[i])

    def readBytes(self, len):
        self.sm.put(0)
        self.sm.put(len-1)
        bytes = []
        for i in range(len):
            bytes.append(self.sm.get() >> 24)
        return bytes

    def getTemp(self):
        self.writeBytes([0xCC, 0x44], 2)
        sleep_ms(1000)
        self.writeBytes([0xCC, 0xBE], 2)
        data = self.readBytes(9)
        t1 = data[0]
        t2 = data[1]
        temp1 = (t2 << 8 | t1)
        if t2 & 0x80:
            temp1 = temp1 | 0xFFFF0000
        return temp1/16


dS18B20 = DS18B20(2)
print(dS18B20.getTemp())

Page 267

from machine import UART, Pin
from utime import sleep_ms

uart = UART(1, baudrate=9600, bits=8, parity=2, rx=Pin(5), tx=Pin(4))
SendData = bytearray("Hello World \n", "utf-8")
uart.write(SendData)
RecData = uart.read()
print(RecData)

Page 268

from machine import UART, Pin
from utime import sleep_ms

uart = UART(1, baudrate=9600, bits=8, parity=2, rx=Pin(5), tx=Pin(4))
SendData = bytearray("A"*32, "utf-8")
uart.write(SendData)
sleep_ms(500)
RecData = uart.read(32)
print(RecData)

Page 266

from machine import UART, Pin, mem32
from utime import sleep_ms


def uart_read(uart):
    rxData = bytes()
    while uart.any() > 0:
        rxData += uart.read(1)
    return rxData


uart = UART(1, baudrate=9600, bits=8, parity=2, rx=Pin(5), tx=Pin(4))
SendData = bytearray("A"*65, "utf-8")
uart.write(SendData)
sleep_ms(500)
RecData = uart_read(uart)
print(RecData)
print(len(RecData))

Page 278

def setup(country, ssid, key):
    rp2.country(country)
    wifi=network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED=Pin("LED", Pin.OUT)
    LED.high()
    timeout=20000
    wifi.connect(ssid,key)
    timer=Timer()
    timer.init(period=200, mode=Timer.PERIODIC,
                            callback=lambda t:LED.toggle())
    s=0
    while timeout>0:
        s=wifi.status()
        if s==3 or s<0:
            break
        sleep_ms(100)
        timeout=timeout-100
   
    if(s<2):
        timer.init(period=1000, mode=Timer.PERIODIC,
                            callback=lambda t:LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi

Page 280

wifi=network.WLAN(network.STA_IF)
wifi.active(True)
wifi.disconnect()
aps=wifi.scan()
for ap in aps:
    print(ap)

Page 282

from http.server import HTTPServer, BaseHTTPRequestHandler
from io import BytesIO


class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):

    def sendResponse(self, cmd):
        content_length = int(self.headers['Content-Length'])
        body = self.rfile.read(content_length)
        self.send_response(200)
        self.end_headers()
        response = BytesIO()
        response.write(b'This is a '+bytes(cmd, 'utf-8')+
                                               b' request. ')
        response.write(b'Received: ')
        response.write(body)
        self.wfile.write(response.getvalue())

    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'Hello, world!')


    def do_HEAD(self):
        self.send_response(200)
        self.end_headers()

    def do_POST(self):
        self.sendResponse("POST")

    def do_PUT(self):
        self.sendResponse("PUT")

    def do_DELETE(self):
        self.sendResponse("DELETE")

    def do_PATCH(self):
        self.sendResponse("PATCH")


httpd = HTTPServer(('', 8080), SimpleHTTPRequestHandler)
httpd.serve_forever()

Page 285

import urequests
import network
import rp2
from machine import Pin, Timer
from time import sleep_ms

def setup(country, ssid, key):
    rp2.country(country)
    wifi = network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED = Pin("LED", Pin.OUT)
    LED.high()
    timeout = 20000
    wifi.connect(ssid, key)
    timer = Timer()
    timer.init(period=200, mode=Timer.PERIODIC,
               callback=lambda t: LED.toggle())
    s = 0
    while timeout > 0:
        s = wifi.status()
        if s == 3 or s < 0:
            break
        sleep_ms(100)
        timeout = timeout-100

    if(s < 2):
        timer.init(period=1000, mode=Timer.PERIODIC,
                   callback=lambda t: LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi


wifi = setup("country", "ssid", "key")

url = "http://192.168.253.45:8080"
r = urequests.get(url)
print(r.content)
r.close()

buf = b'Hello World'
r = urequests.post(url, data=buf)
print(r.content)
r.close()

r = urequests.put(url, data=buf)
print(r.content)
r.close()

r = urequests.patch(url, data=buf)
print(r.content)
r.close()

r = urequests.head(url)
print(r.content)
print(r.headers)
r.close()

r = urequests.delete(url, data=buf)
print(r.content)
r.close()

Page 287

from machine import Pin, Timer
import network
import rp2
import onewire
import ds18x20
from time import sleep_ms
import urequests

def setup(country, ssid, key):
    rp2.country(country)
    wifi = network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED = Pin("LED", Pin.OUT)
    LED.high()
    timeout = 20000
    wifi.connect(ssid, key)
    timer = Timer()
    timer.init(period=200, mode=Timer.PERIODIC,
               callback=lambda t: LED.toggle())
    s = 0
    while timeout > 0:
        s = wifi.status()
        if s == 3 or s < 0:
            break
        sleep_ms(100)
        timeout = timeout-100

    if(s < 2):
        timer.init(period=1000, mode=Timer.PERIODIC,
                   callback=lambda t: LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi



wifi = setup("country", "ssid", "key")
url = "http://192.168.253.45:8080"

ow = onewire.OneWire(Pin(22))
presence = ow.reset()
if presence:
    print("Device present")
else:
    print("No device")

DS = ds18x20.DS18X20(ow)
roms = DS.scan()

while True:
    DS.convert_temp()
    temp = DS.read_temp(roms[0])
    buf = str(temp).encode("utf-8")
    try:
        r = urequests.put(url, data=buf)
        r.close()
    except:
        print("Server Not Online")
    sleep_ms(500)

Page 288

from http.server import HTTPServer, BaseHTTPRequestHandler
from io import BytesIO

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
     
    def log_message(self,*args, **kwargs):
        pass

    def do_PUT(self):
        content_length = int(self.headers['Content-Length'])
        body = self.rfile.read(content_length)
        bodyString= body.decode(encoding="utf-8")
        temp=float(bodyString)
        print(temp)
        self.send_response(200)
        self.end_headers()

httpd = HTTPServer(('', 8080), SimpleHTTPRequestHandler)
httpd.serve_forever()

Page 294

import network
import socket
import rp2
from machine import Pin, Timer
from time import sleep_ms

def setup(country, ssid, key):
    rp2.country(country)
    wifi = network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED = Pin("LED", Pin.OUT)
    LED.high()
    timeout = 20000
    wifi.connect(ssid, key)
    timer = Timer()
    timer.init(period=200, mode=Timer.PERIODIC,
               callback=lambda t: LED.toggle())
    s = 0
    while timeout > 0:
        s = wifi.status()
        if s == 3 or s < 0:
            break
        sleep_ms(100)
        timeout = timeout-100

    if(s < 2):
        timer.init(period=1000, mode=Timer.PERIODIC,
                   callback=lambda t: LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi



wifi = setup("country", "ssid", "key")

ai = socket.getaddrinfo("www.example.com", 80,socket.AF_INET)
addr = ai[0][-1]
s = socket.socket(socket.AF_INET)
s.connect(addr)

request = b"GET /index.html HTTP/1.1\r\nHost:example.org\r\n\r\n"
s.send(request)
print(s.recv(512))

Page 296

import network
import socket
import rp2
from machine import Pin, Timer
import ssl
from time import sleep_ms

def setup(country, ssid, key):
rp2.country(country)
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.disconnect()
LED = Pin("LED", Pin.OUT)
LED.high()
timeout = 20000
wifi.connect(ssid, key)
timer = Timer()
timer.init(period=200, mode=Timer.PERIODIC,
callback=lambda t: LED.toggle())
s = 0
while timeout > 0:
s = wifi.status()
if s == 3 or s < 0:
break
sleep_ms(100)
timeout = timeout-100

if(s < 2):
timer.init(period=1000, mode=Timer.PERIODIC,
callback=lambda t: LED.toggle())
else:
timer.deinit()
LED.high()
return wifi

 

wifi = setup("country", "ssid", "key")

ai = socket.getaddrinfo("example.com", 443,socket.AF_INET)
addr = ai[0][-1]
s = socket.socket(socket.AF_INET)
s.connect(addr)
sslSock=ssl.wrap_socket(s)
request = b"GET / HTTP/1.1\r\nHost:example.com\r\n\r\n"
sslSock.write(request)
print(sslSock.read(1024))

Page 299-300

import network
import socket
import rp2
from time import sleep_ms
from machine import Pin, Timer
import onewire
import ds18x20

def setup(country, ssid, key):
    rp2.country(country)
    wifi = network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED = Pin("LED", Pin.OUT)
    LED.high()
    timeout = 20000
    wifi.connect(ssid, key)
    timer = Timer()
    timer.init(period=200, mode=Timer.PERIODIC,
               callback=lambda t: LED.toggle())
    s = 0
    while timeout > 0:
        s = wifi.status()
        if s == 3 or s < 0:
            break
        sleep_ms(100)
        timeout = timeout-100

    if(s < 2):
        timer.init(period=1000, mode=Timer.PERIODIC,
                   callback=lambda t: LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi
 
wifi = setup("country", "ssid", "key")
print("connected")
print(wifi.ifconfig())

ow = onewire.OneWire(Pin(22))
presence = ow.reset()
if presence:
    print("Device present")
else:
    print("No device")

DS = ds18x20.DS18X20(ow)
roms = DS.scan()

template = """<!DOCTYPE html>
<html>
<head> <title>Temperature</title> </head>
<body> <h1>Current Temperature</h1>
Hello Pico W Server World <br/>
The Temperature is: <!--#temp--><br/>
</body>
</html>
"""

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

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(0)
while True:
    cl, addr = s.accept()
    print('client connected from', addr)
    print(cl.recv(512))

    DS.convert_temp()
    temp = DS.read_temp(roms[0])
    html=template.replace("<!--#temp-->",str(temp))
    headers = ("HTTP/1.1 200 OK\r\n"
            "Content-Type: text/html; charset=UTF-8\r\n"
            "Server:Pico\r\n"
            f"Content-Length:{len(html)}\r\n\r\n"
            )
    buf = headers.encode("utf-8")+html.encode("utf-8")
   
    cl.send(buf)
   
    cl.close()
s.close()

Page 303

import network
import socket
import rp2
from time import sleep_ms
from machine import Pin, Timer
import onewire
import ds18x20

import ssl



def setup(country, ssid, key):
    rp2.country(country)
    wifi=network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED=Pin("LED", Pin.OUT)
    LED.high()
    timeout=20000
    wifi.connect(ssid,key)
    timer=Timer()
    timer.init(period=200, mode=Timer.PERIODIC,
                            callback=lambda t:LED.toggle())
    s=0
    while timeout>0:
        s=wifi.status()
        if s==3 or s<0:
            break
        sleep_ms(100)
        timeout=timeout-100
   
    if(s<2):
        timer.init(period=1000, mode=Timer.PERIODIC,
                            callback=lambda t:LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi




key=b'0\x82\x04\xbf\x02\x01\x000\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x04\x82\x04\xa90\x82\x04\xa5\x02\x01\x00\x02\x82\x01\x01\x00\xb9SU\x05\x056\x8c\x92I\\?\xe5rb\x14\xaceG\xb8\x04n\x8f\xb6O\x04o\x9a\xcdP\xbe\xc3\xfb\x07\x8fl\xe4E\xd6\xf6>\xeb\\\xff\x9f\xbe\xad\x941\xda=\x9f\xca\x19\xa8iL\xa8\x91\xd8\xad\xafm\xb7\\|\xd8\x82\xa05:Oe\xe6\xe5\x18\xa6\x0f.\xea\x10<\xe6qh\x00?K\x12m)\xea\x08)\x9e>\'\xab\xca_\xddH\xa3\xd08\xe5\xec0+RB\xae\x8bR\'S\x8dq\x86\xc9\xa9{\xbd1W\xcbG\xb8\xe7V\xbc\x12\x077\x93\xab\xa1\xd6\xb1o\xc1\xdf\x0b\x0b\xa1\xf4Vm\x18\x8b\xf3\xf2\x9c\x86\xa1o\x92|Y\t\x85\x08UpnIFi3\x1d\xd4\x12\x863\n\xef\xb0\xa3\xbf\xd4\xf6\x1c7\x993\xe4\xf4$\x17\xe8\xb7\xb8k\xaaV\xeeB\x92\xa6*\xd9\xa9Y\x88P\x00I\x93Z4)\xb5\xfaW\xe6b\x04L\xee\xe9\xa4\xb1\xbf\'@s\xd0\xb3}\xc3\xf1[\t\xd9\x91\xeau\x0b\xd2\xba\x94\x7f\xbdO\x11\\e\x81Ed\x88\x97Z\x1a~\x16!\x02\x03\x01\x00\x01\x02\x82\x01\x01\x00\x81\xd9\x88\x85\x86\xfc\x8c\x8b\xe7\x08\xd2\xe0R?\xb4\x9a\x8209\x18)\xdbY\xf2\x8dz!-\xe0xyZ\xc7\x16PF\xb5D\x83\xae\xdc<\x82\x03\x0c\x98\x14p\xc5\xa8M\xf0M\xff\xf9\x1f\xb40\xd4p\x05\xad\xcb>\xeb^\xccO\xb2[\xd3\xcb\xe3v\xfb\xc9Ft)\x9e\x0c\xfd\xad\xd2\x1f\xf29\x08\x85"L\x0fB\x11\xd5\x1c\xf8\xbaHg\x04\x81z\xe0\x93\x00\xe5SED\xe1\x85N\x9f\xadd:z%\x8c1\xde\x02\xd7\xaf\xdf\xe6\x06F\xf6\xdc\x03\xf2K\x19B \x8eX\x9dx\xbb\x9c\xbcE\xa8:\x0f\xab\x0b\xd7\x8f\x7fV\xb1\x0c\xe4\x83\xfc\xcd\x9c\x1c\x072\x0e#\xc2\xb22o94r\xf6kp+\xd9\xcc/\x80\x11\xaa\xeb\xea\xac\'\xba\xecm\xe3;\xbf\xee{\xf7\x07K#\xe7\xc5\xadQ3\x9a[^\xf8\xe5\xb4}\xdc4\xedrD\x01\xef\x8ek\x100B\x03t6^\x87\\\x9c\xf9\x98\tN\xb9\xd9\x9a\xf1\xd3,o\xf5\xf3>\x9f8\xb7\x1f\x1a%\r\x8d\x9a\xd4S\x01\x02\x81\x81\x00\xee\xa5h5)w\xba,\x83\xad!\xa5\x7fzg\xa8v\x97F\xe0\x9a\x18\xe3\xc01\xb4\xd2\x96\x1a;\x94>\x99\xd9\xad\xcd<\xee\xf1\x9e\x041\x06\x9a\x8f\x82\xa4&z\xe0;[8{\xecu"\xa3\xeav&\x1e\xf6\xc2<F^\x19\x91\xa7\x05\x80=u\xe4\xf6c\xeb\x99\xcb\xb6\\\xcb\x88\x96]\x07\xf2\xef\xa8\x80\x0e\x9dh`\x19\xa5+\x03\xd3<\x06\xf4\x81\x96\x18\xe0>i\xbe:\xcc\xb9\x0cY\xfa\x03\x18\x11\'\x10\xa66\xb7-\xfdOq\x02\x81\x81\x00\xc6\xcdQ}\xa2\xdf\x84\x95\n\xac+\x1fx\x98\xb02\x19\x10yP\xa4<\xba\xb1F\xbc\x18\xdc \xe7\x91k\x8ed1a\xdb\xe1\x01\x0e\xb3\xba\x7fF{\xa9\x15\xcfN!\xaeBE\xe2\xdfv\xab\xa7\xf2/\xf7\x9cZ\xb1f\xbc\xe0z\x11\xab\xaf\xc0\x01 v_\x01\x1b\xac\xb8Q.h\xaa1yXF\x95\x1fb\x9e\x9c\x87\x9a[\x98\x90\x96\x0c\xe3\xf5#\nu8\\\xf0\x82\xf0\xec\x97\xa9\xb0\x10q\xd8\x84o\x0b#\r<\x05\x81J9\xb1\x02\x81\x80jA\x83\x90\x88\x12"\xf6\xc6\xfaCL\xe8\xe1\x9b]\xca\xcf\xb8c0\xb9|N\x8a\xd34 Y5\xc5\xdf\xc9\xa8\xbeU\xef\x97\x84E\x13 \xb1\x0c\x08q\xe6\x9c\xab\x81ClnM\xdf\x0e\x98\x89\xdbO\x17\xd2\x19\x94\x8a9\xda\x94\x0f\xe2\t\xf4\xfbh\x8e\xb5\x95\xef\xc4\xde\x8b\'\xee\x07\xb6\xcb]J\xb1\xa2\x98\xc1\xe9\x1c\x1c\r\xcf\x18\xc3\xef=~\xebF\xf7\x89\xc3\xee\x86.\x89\x07\xb6,\xe5\xb3\x07\xc5\xa3}}PDts)\xa2A\x02\x81\x81\x00\xac#^[\x86+:\x96\xff-\xc3\r6\x14(\x04\xc9\x15-\xa6x\xff\xa8\xbc\x15\xbe\x8b\\\x18\x15\xcb"1\xa2i\xec\rC\x0f\xf2V\x07\xb7k%jl[\x1b\x91(]t<\x158\xa1<\x04\x06*\xc64\xf5\x85;(\xb8*\x12\xdaTK\xe5z\xf9\x9aq\x07&v\x0c\xd4N\x02\x16\xcb,\x1a\xb5\x99d3\xafk%\xc2\xbd\xf7_d\x07\x7f\xf6\xef7\x05\xaa\xb0\x06\xc3&3\xa5#( \xcd\xd3\x84\xf6-\xe0y\xf7\xd0x\x91\x02\x81\x81\x00\x9fn\xb6|\xbf\x8bu\x98\xf0\xc3\xc2k\x1cn\x18y3\x88\xc8\x07l+\xc5\xbf\xd0\x1f\xa8\xe2e\xc6=\xb8\x1a\xfdW\x929;\xfc5~\x96\xb3\x9e\xa5A\xe3\x94\x8d\xc1I\x91\x87\xe0\xcd\x9bO\x80Z\xdcf\x157\xd0\x96:\x16\xb4%\xce\xd9\x17\xfa\xbeF\x19\x81\xc9\x96\xc2\xfd\x84\xafF\x87"\x91\xfb<\xd0\xc8\x11\xadJb\xf1\x17q\xeb\xb0\x11\xc3W\xc7\xf5\xe1\xa1B\x89\x8bZ\xc6\xe7\xa2\xf4?w\xa4\x0c\n\x89\xfd\x00S4\xabp\xd1'
 
cert=b'0\x82\x03k0\x82\x02S\xa0\x03\x02\x01\x02\x02\x14b\x01\xd9E\xad\x0e\xb3\x7f\x14\xc1\x83\x029V4|\x82E2U0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x0b\x05\x000E1\x0b0\t\x06\x03U\x04\x06\x13\x02AU1\x130\x11\x06\x03U\x04\x08\x0c\nSome-State1!0\x1f\x06\x03U\x04\n\x0c\x18Internet Widgits Pty Ltd0\x1e\x17\r221219141736Z\x17\r231219141736Z0E1\x0b0\t\x06\x03U\x04\x06\x13\x02AU1\x130\x11\x06\x03U\x04\x08\x0c\nSome-State1!0\x1f\x06\x03U\x04\n\x0c\x18Internet Widgits Pty Ltd0\x82\x01"0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\n\x02\x82\x01\x01\x00\xb9SU\x05\x056\x8c\x92I\\?\xe5rb\x14\xaceG\xb8\x04n\x8f\xb6O\x04o\x9a\xcdP\xbe\xc3\xfb\x07\x8fl\xe4E\xd6\xf6>\xeb\\\xff\x9f\xbe\xad\x941\xda=\x9f\xca\x19\xa8iL\xa8\x91\xd8\xad\xafm\xb7\\|\xd8\x82\xa05:Oe\xe6\xe5\x18\xa6\x0f.\xea\x10<\xe6qh\x00?K\x12m)\xea\x08)\x9e>\'\xab\xca_\xddH\xa3\xd08\xe5\xec0+RB\xae\x8bR\'S\x8dq\x86\xc9\xa9{\xbd1W\xcbG\xb8\xe7V\xbc\x12\x077\x93\xab\xa1\xd6\xb1o\xc1\xdf\x0b\x0b\xa1\xf4Vm\x18\x8b\xf3\xf2\x9c\x86\xa1o\x92|Y\t\x85\x08UpnIFi3\x1d\xd4\x12\x863\n\xef\xb0\xa3\xbf\xd4\xf6\x1c7\x993\xe4\xf4$\x17\xe8\xb7\xb8k\xaaV\xeeB\x92\xa6*\xd9\xa9Y\x88P\x00I\x93Z4)\xb5\xfaW\xe6b\x04L\xee\xe9\xa4\xb1\xbf\'@s\xd0\xb3}\xc3\xf1[\t\xd9\x91\xeau\x0b\xd2\xba\x94\x7f\xbdO\x11\\e\x81Ed\x88\x97Z\x1a~\x16!\x02\x03\x01\x00\x01\xa3S0Q0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xcf\x1e\x1ce\xccs,\xd7b^\xd3\x99n\xa4\xebi\xe7\xe3\xe9S0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xcf\x1e\x1ce\xccs,\xd7b^\xd3\x99n\xa4\xebi\xe7\xe3\xe9S0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x1c\x1d\x88\xca\xbd/5\xdf\x1b\xdb\xfe\xe4\x92\x7f\x98AK\xe37\x18qE\xf9\xc7D\x9ex\xb2Fo\xc3w\x17V\xe5fD1\x88\x7f\xe5\xfe\xd5}x\x10i\x9ah\xccl-*/\xfaa\x99\xc0\x82\xec\xbe\xca\'\x91v<\x1e g\xc3mm\xfe\x0f\xf7\xc5\xa8\xc8\xe0E\xce\xbb\\\x87s\x1d\x92b\xdd\x11\x12\x99\x196\x81\xf1\x15F\xf7i\xa7\xa2\x9b\xe6yG\x0e\xd73\x82\x13\x14\x95\xa4f-X\xcf\xb2\xcd\xb9AY=\xce\xb4 X\xe7o\xf5\x83\xad\xb5{y\xb4\x84\xd1\xa8\x0f\xcc;\x19\xd2\xd8A:\x1f\xd3\xc20\xb5\x12\'\xa0\xf0y\x8fE\x97\x0b\xbaj\x1c\xc6+\xfd\t$,\x05 B\x98C\x14j\xa2v6/q\xe8\x1bC\xd2w\xd7Z\xbeG\xd23",`\x00P\xb8a/\xea\xc5/\xc6Gh\xbe\x1e5\n`\x97g\t\xe6\xee\xfd\x88x\xfb\xeb\xe5\xb1\xd3\x96\x896*LE\xb7q\xe9\xf6\x07v\xac~\'s=\xe5\xa1N\x00f\x85!\x0e\xddt*\x98\x8a'
wifi = setup("country", "ssid", "key")
print(wifi.ifconfig())

ow = onewire.OneWire(Pin(22))
presence = ow.reset()
if presence:
    print("Device present")
else:
    print("No device")

DS = ds18x20.DS18X20(ow)
roms = DS.scan()


template = """<!DOCTYPE html>
<html>
<head> <title>Temperature</title> </head>
<body> <h1>Current Temperature</h1>
Hello Pico W Server World <br/>
The Temperature is: <!--#temp--><br/>
</body>
</html>
"""

addr = socket.getaddrinfo('0.0.0.0', 443)[0][-1]

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(5)

while True:
    cl, addr = s.accept()
    print('client connected from', addr)
    client_s =None
   
    try:
        client_s = ssl.wrap_socket(cl, server_side=True, key=key, cert=cert)

        print("wrapped",client_s)
        while True:
            h = client_s.readline()
            if h == b"" or h == b"\r\n":
                    break
            print(h.decode(), end="")

        DS.convert_temp()
        temp = DS.read_temp(roms[0])

        html=template.replace("<!--#temp-->",str(temp))
        headers = ("HTTP/1.1 200 OK\r\n"
                "Content-Type: text/html; charset=UTF-8\r\n"
                "Server:Pico\r\n"
                f"Content-Length:{len(html)}\r\n\r\n"
                )
        buf = headers.encode("utf-8")+html.encode("utf-8")

        client_s.write(buf)
        client_s.close()
    except Exception as e:
       print("exception ",e)

s.close()

Page 315

import uasyncio

async def count(n):
    for i in range(n):
        print(i)
    return n

async def main(myValue):
    t1 = uasyncio.create_task(count(10))  
    print("Hello Coroutine World")
    await uasyncio.sleep(5)
    result = await t1
    print("The result of the task =",result)
    return myValue

result= uasyncio.run(main(42))
print(result)

Page 317

import uasyncio
async def test1(msg):
    print(msg)
    return msg

async def main():
    result = await uasyncio.gather(test1("one"),test1("two"))
    print(result)
    print("Hello Coroutine World")

uasyncio.run(main())

Page 319

import uasyncio
async def test1(msg):
    try:
        await uasyncio.sleep(0)      
    except:
        pass
    print(msg)
    return msg

async def main():
    t1 = uasyncio.create_task(test1("one"))
    await uasyncio.sleep(0)
    t1.cancel()
    print("Hello Coroutine World")
    await uasyncio.sleep(0)

uasyncio.run(main())

Page 319

import uasyncio

async def test(msg):
    print(msg)
    raise Exception("Test exception")


async def main():
    t1=uasyncio.create_task(test("one"))
    try:
        await t1
    except:
        print("an exception has occurred")
    print("Hello Coroutine World")
    await uasyncio.sleep(0)

uasyncio.run(main())

Page 320

import uasyncio

async def test(msg):
    print(msg)
    raise Exception("Test exception")


async def main():
    t1=uasyncio.create_task(test("one"))
    result=None
    try:
        result=await uasyncio.gather(t1,return_exceptions=True)
    except:
        print("an exception has occurred")
    print("Hello Coroutine World")
    print(result)
    await uasyncio.sleep(0)

uasyncio.run(main())

Page 322

import uasyncio

async def count():
    global myCounter
    for i in range(1000):
        temp = myCounter+1
        await uasyncio.sleep(0)
        myCounter = temp

async def main():
    await uasyncio.gather(count(),count())
    print(myCounter)

myCounter=0
uasyncio.run(main())

Page 323

import uasyncio

async def count():
    global myCounter
    global myLock
    for i in range(1000):
        async with myLock:
            temp=myCounter+1
            await uasyncio.sleep(0)
            myCounter=temp


async def main():
    await uasyncio.gather(count(),count())
    print(myCounter)

myCounter=0
myLock=uasyncio.Lock()
uasyncio.run(main())

Page 324

import uasyncio
from machine import Pin

async def blink(led, period_ms):
    while True:
        led.on()
        await uasyncio.sleep_ms(5)
        led.off()
        await uasyncio.sleep_ms(period_ms)

async def main(led1, led2):
    uasyncio.create_task(blink(led1, 700))
    uasyncio.create_task(blink(led2, 400))
    await uasyncio.sleep_ms(10_000)

uasyncio.run(main(Pin(0,Pin.OUT), Pin(1,Pin.OUT)))

Page 325

import uasyncio
from machine import Pin
from time import sleep_ms
async def blink(led, period_ms):
    while True:
        led.on()
        await uasyncio.sleep_ms(5)
        led.off()
        await uasyncio.sleep_ms(period_ms)

async def timewaste():
    while True:
        sleep_ms(10)
        await uasyncio.sleep_ms(0)


async def main(led1, led2):
    uasyncio.create_task(blink(led1, 700))
    uasyncio.create_task(blink(led2, 400))
    uasyncio.create_task(timewaste())
    await uasyncio.sleep_ms(10_000)

Page 327

import uasyncio
from time import sleep_ms
from machine import Pin, Timer
import rp2
import network


def setup(country, ssid, key):
    rp2.country(country)
    wifi=network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED=Pin("LED", Pin.OUT)
    LED.high()
    timeout=20000
    wifi.connect(ssid,key)
    timer=Timer()
    timer.init(period=200, mode=Timer.PERIODIC,
                            callback=lambda t:LED.toggle())
    s=0
    while timeout>0:
        s=wifi.status()
        if s==3 or s<0:
            break
        sleep_ms(100)
        timeout=timeout-100
   
    if(s<2):
        timer.init(period=1000, mode=Timer.PERIODIC,
                            callback=lambda t:LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi
   
async def main():
    reader,writer= await uasyncio.open_connection("www.example.com",80)
    request = b"GET /index.html HTTP/1.1\r\nHost:example.org\r\n\r\n"
    writer.write(request)
    await writer.drain()
    print(await reader.read(512))
    reader.close()
wifi = setup(country, ssid, key)
uasyncio.run(main())

Page 330

import uasyncio
import network
import rp2
from machine import Pin, Timer
from time import sleep_ms
import onewire
import ds18x20


def setup(country, ssid, key):
    rp2.country(country)
    wifi=network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.disconnect()
    LED=Pin("LED", Pin.OUT)
    LED.high()
    timeout=20000
    wifi.connect(ssid,key)
    timer=Timer()
    timer.init(period=200, mode=Timer.PERIODIC, callback=lambda t:LED.toggle())
    s=0
    while timeout>0:
        s=wifi.status()
        if s==3 or s<0:
            break
        sleep_ms(100)
        timeout=timeout-100
   
    if(s<2):
        timer.init(period=1000, mode=Timer.PERIODIC,callback=lambda t:LED.toggle())
    else:
        timer.deinit()
        LED.high()
    return wifi



wifi = setup("country", "ssid", "key")

ow = onewire.OneWire(Pin(22))
presence = ow.reset()
if presence:
    print("Device present")
else:
    print("No device")

DS = ds18x20.DS18X20(ow)
roms = DS.scan()

template = """<!DOCTYPE html>
<html>
<head> <title>Temperature</title> </head>
<body> <h1>Current Temperature</h1>
Hello Pico W Server World <br/>
The Temperature is: <!--#temp--><br/>
</body>
</html>
"""
async def serve_client(reader,writer):
    print("client")
    print(await reader.read(512))
    DS.convert_temp()
    temp = DS.read_temp(roms[0])
    html=template.replace("<!--#temp-->",str(temp))
    headers = ("HTTP/1.1 200 OK\r\n"
            "Content-Type: text/html; charset=UTF-8\r\n"
            "Server:Pico\r\n"
            f"Content-Length:{len(html)}\r\n\r\n"
            )
    buf = headers.encode("utf-8")+html.encode("utf-8")
   
    writer.write(buf)
    await writer.drain()
    writer.close()
    await writer.wait_closed()

async def main():
    await uasyncio.start_server(serve_client, '192.168.253.58', 80,backlog=5)
    while True:
        print("heartbeat")
        await uasyncio.sleep(1)

uasyncio.run(main())

Page 336

from machine import mem32, Pin
from time import sleep_ms
led = Pin(25, mode=Pin.OUT)
addrSIO = 0xd0000000
while True:
    mem32[addrSIO + 0x014] = 1 << 25
    sleep_ms(500)
    mem32[addrSIO + 0x018] = 1 << 25
    sleep_ms(500)

Page 338

from machine import Pin
import machine


def gpio_get():
    return machine.mem32[0xd0000000+0x010]


def gpio_set(value, mask):
    machine.mem32[0xd0000000+0x01C] =
    (machine.mem32[0xd0000000+0x010]) ^ value & mask


pin = Pin(22, Pin.OUT)
pin = Pin(21, Pin.OUT)
value1 = 1 << 22 | 0 << 21
value2 = 0 << 22 | 1 << 21
mask = 1 << 22 | 1 << 21
while True:
    gpio_set(value1, mask)
    gpio_set(value2, mask)

Page 344

import  _thread
counter=0

def task():    
    global counter
    print("thread started")
    for i in range(1000):
        counter=counter+1        

_thread.start_new_thread(task,())
for i in range(1000):
        counter=counter+1
time.sleep(0.5)    
print(counter)

Page 345

import time, _thread, machine
counter=0
myLock=_thread.allocate_lock()
def task():
   
    global counter, myLock
    print("thread started")
    print(myLock.locked())
    for i in range(1000):
        myLock.acquire()
        time.sleep_us(1)
        counter=counter+1        
        myLock.release()
        time.sleep_us(1)

_thread.start_new_thread(task,())

for i in range(1000):
        myLock.acquire()
        time.sleep_us(1)
        counter=counter+1
        myLock.release()
        time.sleep_us(1)
time.sleep(0.5)
print(counter)