Search
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í.
time.sleep(1)
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)
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).
Využijte modul MPU-9250 pro vyčtení dat akcelerometru a gyroskopu. Modul komunikuje po sběrnici I2C (adresa 0x68).
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).
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.
dht
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.
try
except