import digitaliofrom board import*import time# use Onboard LED on the XIAO boardled = digitalio.DigitalInOut(D13)led.direction = digitalio.Direction.OUTPUTtry:whileTrue:# press Ctrl+C to stop led.value =True time.sleep(0.1) led.value =False time.sleep(0.1)exceptKeyboardInterrupt:passled.value =0# LED output level LOWled.deinit()# release the LED pin (D13)print('Done')
import digitalio
from board import *
import time
led = digitalio.DigitalInOut(D13)
led.direction = digitalio.Direction.OUTPUT
try:
t = int(1000*time.monotonic()) # in msec
while True: # press Ctrl+C to stop
now = int(1000*time.monotonic()) # in msec
# toggle LED every 100 msec
if now - t >= 100:
t = now
led.value = not led.value
except KeyboardInterrupt:
pass
led.value = 0
led.deinit()
print('Done')
import pwmio
from board import *
import time
pwm = pwmio.PWMOut(pin=D13,duty_cycle=0,frequency=10)
pwm.duty_cycle = (2**15 - 1) # (16-bit value) -> 50%
try:
while True:
time.sleep(1.0)
except KeyboardInterrupt:
pass
pwm.duty_cycle = 0 # set duty cycle to 0
pwm.deinit() # relase the PWM output pin
print('Done')
import board
import neopixel_write
import digitalio
import time
np_pin = digitalio.DigitalInOut(board.D10)
np_pin.direction = digitalio.Direction.OUTPUT
NUM_PIXELS = 8
for i in range(256):
colors = bytearray(NUM_PIXELS*[0,255-i,0]) # GRB
neopixel_write.neopixel_write(np_pin, colors)
time.sleep(0.01)
np_pin.deinit() # release the output pin
import board
import time
import neopixel
NUM_PIXELS = 8
# bpp=3 (3 bytes per pixel), pixel order GRB
pixels = neopixel.NeoPixel(board.D10, NUM_PIXELS,
bpp=3, pixel_order=neopixel.GRB, auto_write=False)
color = (255, 0, 0) # red, green, blue
pixels[0] = color
for i in range(NUM_PIXELS): # turn on (use red color)
pixels[i] = color if i==0 else pixels[i-1]
pixels.show()
time.sleep(0.1)
pixels.fill( (0,255,0) ) # change all pixels to green
for i in range(101): # fade the RGB LEDS off
pixels.brightness = (100-i)/100.0
pixels.show()
time.sleep(0.02)
time.sleep(2.0)
# turn off the Neopixel strip and release pin
pixels.deinit()
del pixels
import time
import board
from adafruit_dht import DHT22
dht = DHT22(pin=board.D9,use_pulseio=True)
try:
text = '{:.1f} deg.C, {:.1f} %RH'
while True: # press Ctrl+C to stop
dht.measure() # perform measurement
values = (dht.temperature, dht.humidity)
print( text.format(*values) )
time.sleep(2.0)
except KeyboardInterrupt:
pass
dht.exit()
del dht
import time
from busio import I2C
from board import SCL, SDA
import adafruit_si7021 as si7021
SI7021_ADDR = 0x40
i2c = I2C(SCL, SDA,frequency=100000) # 100kHz speed
addr_found = []
if i2c.try_lock():
addr_found = i2c.scan()
print("I2C found:", [hex(addr) for addr in addr_found])
i2c.unlock()
if SI7021_ADDR not in addr_found:
print('SI7021 not found')
dev = si7021.SI7021(i2c,address=SI7021_ADDR)
text = '{:.1f} deg.C, {:.1f} %RH'
try:
while True: # press Ctrl+C to stop
values = (dev.temperature,dev.relative_humidity)
print( text.format(*values) )
time.sleep(1.0)
except OSError:
print('Sensor reading error!')
except KeyboardInterrupt:
pass
finally:
i2c.deinit()
print('Done')
import time
from busio import I2C
from board import SCL, SDA
import adafruit_bme680 as bme680
BME680_ADDR = 0x77
i2c = I2C(SCL, SDA,frequency=100000) # 100kHz speed
addr_found = []
if i2c.try_lock():
addr_found = i2c.scan()
print("I2C found:", [hex(addr) for addr in addr_found])
i2c.unlock()
if BME680_ADDR not in addr_found:
print('BME680 not found')
dev = bme680.Adafruit_BME680_I2C(i2c,address=BME680_ADDR)
text = '{:.1f} deg.C, {:.1f} %RH, {:.2f} hPa'
try:
while True: # press Ctrl+C to stop
t = dev.temperature # deg.C
h = dev.relative_humidity # %RH
p = dev.pressure # hPa
print( text.format(t,h,p) )
time.sleep(1.0)
except OSError:
print('Sensor reading error!')
except KeyboardInterrupt:
pass
finally:
i2c.deinit()
print('Done')
import time
import gc
from busio import I2C
from board import SCL, SDA, D9
SI7021_ADDR = 0x40
BME680_ADDR = 0x77
i2c = I2C(SCL, SDA)
addr_found = []
if i2c.try_lock():
addr_found = i2c.scan()
print("I2C found:", [hex(addr) for addr in addr_found])
i2c.unlock()
if BME680_ADDR not in addr_found:
print('BME680 not found')
if SI7021_ADDR not in addr_found:
print('SI7021 not found')
def read_si7021(dev):
text = 'SI7021: {:.1f} deg.C, {:.1f} %RH'
t = dev.temperature
h = dev.relative_humidity
print( text.format(t,h) )
def read_bme680(dev):
text = 'BME680: {:.1f} deg.C, {:.1f} %RH, {:.2f} hPa'
t = dev.temperature # deg.C
h = dev.relative_humidity # %RH
p = dev.pressure # hPa
print( text.format(t,h,p) )
def read_dht22(dev):
text = 'DHT22 : {:.1f} deg.C, {:.1f} %RH'
dev.measure()
values = (dev.temperature, dev.humidity)
print( text.format(*values) )
try:
while True: # press Ctrl+C to stop
## read DHT22
import adafruit_dht as dht
dev = dht.DHT22(pin=D9,use_pulseio=True)
read_dht22(dev)
dev.pulse_in.deinit()
del dev
gc.collect() # call garbage collector
time.sleep(1.0)
## read SI7021
import adafruit_si7021 as si7021
dev = si7021.SI7021(i2c,address=SI7021_ADDR)
read_si7021(dev)
del dev
gc.collect() # call garbage collector
time.sleep(1.0)
## read BME680
import adafruit_bme680 as bme680
dev = bme680.Adafruit_BME680_I2C(i2c,address=BME680_ADDR)
read_bme680(dev)
del dev
gc.collect() # call garbage collector
time.sleep(1.0)
print(50*'-')
except OSError:
print('Sensor reading error!')
except KeyboardInterrupt:
pass
finally:
i2c.deinit()
print('Done')
import time
import board
from analogio import AnalogIn
from microcontroller import pin
## pin map for Seeeduino-XIAO
## A0=PA02, A1=PA04, A2=PA10, A3=PA11, A4=PA08, A5=PA09,
## A6=PB08, A7=PA09, A8=PA07, A9=PA05, A10=PA06
## For Seeeduino XIAO: A1 and PA04 are the same pin.
ain = AnalogIn(board.A1) # use A1 pin
#ain = AnalogIn(pin.PA04) # use PA04 pin
last_btn = 0
NUM_SAMPLES = 5
last_t = int(1000*time.monotonic())
try:
while True:
now = int(1000*time.monotonic())
if now - last_t >= 50:
last_t = now
else:
continue
values = []
for i in range(NUM_SAMPLES):
# read a 16-bit value from the analog pin
value = ain.value >> 6 # reduce to 10 bits
values.append(value)
# apply the median filter
value = sorted(values)[NUM_SAMPLES//2]
if value > 600: # no button press
last_btn = 0
continue
btn = 0
if value < 30:
btn = 1
elif value < 60:
btn = 2
elif value < 120:
btn = 3
elif value < 240:
btn = 4
elif value > 320 and value < 450:
btn = 5
if last_btn != btn and btn > 0:
print( 'SW{} ({})'.format(btn, value) )
last_btn = btn
except KeyboardInterrupt:
pass
ain.deinit() # release the analog pin
print('Done')
import time
import pwmio
import board
from microcontroller import pin
import math
led_pins = [pin.PA18, pin.PA19]
pwm_objects = [
pwmio.PWMOut(pin=pin,duty_cycle=65535,frequency=250)
for pin in led_pins ]
# create a table of (N+1) sine wave values
N=64
sine_int = lambda i: int(65535*(1-math.sin(math.pi*i/N)))
values = [sine_int(i) for i in range(N+1)]
try:
while True:
for pwm in pwm_objects:
for i in range(N+1):
pwm.duty_cycle = values[i]
time.sleep(0.04)
except KeyboardInterrupt:
pass
for pwm in pwm_objects:
pwm.deinit()
print('Done')
import board
import busio
# UART loopback test: connect TX pin to RX pin
uart = busio.UART(board.TX, board.RX,
bits=8, parity=None, stop=1, timeout=0.1,
baudrate=115200)
for i in range(10): # repeat 10 times
text = 'count: {}\n'.format(i)
uart.write( bytes(text, 'utf-8') ) # send string
data = uart.readline() # receive string
print( str(data,'utf-8').strip() )
uart.deinit()
import board
import busio
import time
def pms7003( uart ):
if uart.in_waiting < 32:
return None
try:
data = uart.read(32) # read the next 32 bytes
if data[0] != 0x42 and data[1] != 0x4d:
uart.read(512) # invalid start bytes, flush input data
return None
except OSError:
return None
data = data[2:] # skip the first two bytes
# get the data length (in bytes)
data_len = (data[0] << 8) | data[1]
# Standard particle concentration (CF-1)
pm1_0 = (data[2] << 8) | data[3]
pm2_5 = (data[4] << 8) | data[5]
pm10 = (data[6] << 8) | data[7]
values = {}
values['std'] = (pm10, pm2_5, pm1_0)
# Atmospheric particulate concentration
pm1_0 = (data[8] << 8) | data[9]
pm2_5 = (data[10] << 8) | data[11]
pm10 = (data[12] << 8) | data[13]
values['atm'] = (pm10, pm2_5, pm1_0)
version = data[26]
err_code = data[27]
cksum_calculated = (data[28] << 8) | data[29]
cksum_expected = sum(data[:-2]) + sum([0x42,0x4d])
if cksum_calculated != cksum_expected or err_code !=0:
return None
text = '{{"pm10":{}, "pm2.5":{}, "pm1.0":{}, "unit":"ug/m^3"}}'
return text.format(*values['std'])
uart = busio.UART( board.TX, board.RX,
bits=8, parity=None, stop=1,
timeout=0.1, baudrate=9600)
try:
uart.read(512) # flush input data from serial
except OSError:
print('Serial error')
try:
while True:
result = pms7003(uart)
if result:
print(result)
time.sleep(5.0)
except KeyboardInterrupt:
pass
uart.deinit()
print('Done')
import time
from busio import I2C
import board
from microcontroller import pin
import adafruit_sht31d
SHT31D_ADDR = 0x44
## 1) use board pins or
#scl_pin, sda_pin = board.SCL, board.SDA
## 2) use microcontroller pins
scl_pin, sda_pin = pin.PA23, pin.PA22
i2c = I2C(scl_pin, sda_pin, frequency=100000)
addr_found = []
if i2c.try_lock():
addr_found = i2c.scan() # scan I2C devices
print("I2C found:", [hex(addr) for addr in addr_found])
i2c.unlock()
if SHT31D_ADDR not in addr_found:
print('SHT31D not found')
else:
print('SHT31D found')
dev = adafruit_sht31d.SHT31D(i2c,address=SHT31D_ADDR)
text = '{:.1f} deg.C, {:.1f} %RH'
try:
while True: # press Ctrl+C to stop
values = (dev.temperature,dev.relative_humidity)
print( text.format(*values) )
time.sleep(2.0)
except OSError:
print('Sensor reading error!')
except KeyboardInterrupt:
pass
finally:
i2c.deinit()
print('Done')
import time
from rotaryio import IncrementalEncoder
from board import *
import neopixel
NUM_PIXELS = 12
# bpp=3 (3 bytes per pixel), pixel order GRB
pixels = neopixel.NeoPixel(D2, NUM_PIXELS,
bpp=3, pixel_order=neopixel.GRB, auto_write=False)
enc = IncrementalEncoder(D0, D1)
last_position = enc.position
try:
level = 127 # brightness level
while True:
# read current position
position = enc.position
if position != last_position:
delta = position - last_position
level = (level + 16*delta)
level = min(255,level)
level = max(0,level)
pixels.fill( (level,0,0) )
pixels.show()
print('pos={}, level={}'.format(position,level))
last_position = position
time.sleep(0.01)
except KeyboardInterrupt:
pass
enc.deinit()
pixels.deinit()
print('Done')