Table of Contents

3. IoT zařízení - periferie

Cíle cvičení

  1. Seznámení s externími periferiemi
  2. Implementace tlačítka s přerušením
  3. Seznámení se sběrnicemi (SPI, I2C, 1-Wire) a implementace (LED Maticový displej, Gyroskop + Akcelerometr, senzor teploty)

Implementace tlačítka s přerušením

Implementujte kód, který bude sledovat logickou úroveň na tlačítku. Do kódu zahrňte blokující fuknci (např. time.sleep(1)) a sledujte, jak tlačítko na stisknutí reaguje. Poté vyzkoušejte stejnou implementaci tlačítka s využitím přerušení.

from machine import Pin
import time
 
led = Pin("LED", Pin.OUT)
button = Pin(16, Pin.IN, Pin.PULL_UP)
 
def button_pressed(pin):
    led.toggle()
 
button.irq(trigger=Pin.IRQ_FALLING, handler=button_pressed)
 
while True:
    time.sleep(1)

Maticový displej

Modul využívá čip MAX7219, který je převážně určen jako řadič 7segmentových displejů, ale lze jej využít i pro ovládání maticového displeje. Čip využívá sběrnici SPI pro komunikaci.

Datasheet: MAX7219 / MAX7221

Vytvořte si funkce pro inicializaci, smazání, a zobrazení obrázku na displeji.

Inicializace SPI:

from machine import Pin, SPI
 
matrix_SPI = SPI(0, baudrate=1000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(19))
 
matrix_cs = Pin(17, Pin.OUT)
matrix_cs.value(1)

Funkce pro práci s displejem:

def matrix_write(register, data):
    matrix_cs.value(0)
    matrix_SPI.write(bytearray([register,data]))
    matrix_cs.value(1)
 
def init_display():
    matrix_write(0x0C, 0x01)  # Shutdown register: normal operation
    matrix_write(0x0F, 0x00)  # Display test: off
    matrix_write(0x0B, 0x07)  # Scan limit: display all 8 digits
    matrix_write(0x09, 0x00)  # Decode mode: none (matrix mode)
    matrix_write(0x0A, 0x08)  # Intensity: medium brightness
 
def clear_display():
    for i in range(1,9):
        matrix_write(i, 0x00) # Write digit i: toggle off all segments
 
def display_image(image):
    for i in range(1,9):
        matrix_write(i, image[i-1]) # Write digit i

Bitmapy pro inspiraci

Kód můžete rozšířit o přijetí dat obrázku přes UART, popř. vytvořit scrollující text (např. zobrazovače v MHD).

Akcelerometr + Gyroskop

Využijte modul MPU-9250 pro vyčtení dat akcelerometru a gyroskopu. Modul komunikuje po sběrnici I2C (adresa 0x68).

Datasheet: MPU-9250 Register Map

Inicializace I2C:

from machine import I2C, Pin
 
mpu9250 = I2C(1, scl=Pin(15), sda=Pin(14), freq=400000)

Vyčtení “WHO_AM_I” registru:

MPU_ADDR = 0x68
 
who = mpu9250.readfrom_mem(MPU_ADDR, 0x75, 1) # Read WHO_AM_I (reads 1 byte)
print(f"Read value 0x{who[0]:x}")

Čip obsahuje také magnetometr, který je obsažen v čipu jako externí I2C zařízení. S magnetometrem lze komunikovat pomocí I2C masteru obsaženém v čipu, nebo je potřeba zapnout I2C bypass (viz. datasheet).

Senzor teploty

Pro měření teploty a vlhkosti lze využít DHT11/22, který je připojen prostřednictvím 1-wire sériové sběrnice. Modul dht je v Micropythonu vestavěn. Senzor komunikuje po vlastní sběrnici, podobné sběrnici 1-Wire.

Datasheet: DHT22

Inicializace senzoru:

from machine import Pin
import dht
 
sensor = dht.DHT22(Pin(15))

Výčet teploty a vlhkosti:

sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print(f"Temperature: {temp:.1f}°C  Humidity: {hum:.1f} %")

Při výčetu dat může dojit k timeoutu - může být vhodné zabalit výčet dat do try / except bloku.