IoT Programming — Raspberry Pi Labs

GPIO · SPI · Matrix LED Programming

💡
Aim: GPIO — Light the LED
With and without Button | RPi.GPIO · BCM mode
Without Button — Blink LED on GPIO 18
import RPi.GPIO as GPIO
from time import sleep

ledPin = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(ledPin, GPIO.OUT)

try:
    while True:
        GPIO.output(ledPin, True)
        print("LED ON")
        sleep(1)
        GPIO.output(ledPin, False)
        print("LED OFF")
        sleep(1)
finally:
    GPIO.output(ledPin, False)
    GPIO.cleanup()
With Button — Button on GPIO 23, LED on GPIO 24
# with button
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.OUT)

try:
    while True:
        button_state = GPIO.input(23)
        if button_state == False:
            GPIO.output(24, True)
            print('Button Pressed...')
            time.sleep(0.2)
        else:
            GPIO.output(24, False)
except:
    GPIO.cleanup()
📷
Aim: SPI Interface — Camera Module Integration
PiCamera · 1280×720 capture
Capture image with PiCamera
from time import sleep
from picamera import PiCamera

camera = PiCamera()
camera.resolution = (1280, 720)
camera.start_preview()
sleep(2)
camera.capture('/home/pi/Pictures/newImage.jpg')
camera.stop_preview()
camera.close()
🔲
Aim: 8×8 LED Grid Control
Matrix LED Programming · MAX7219 · Luma library · Live clock display
Display live time on 8×8 LED matrix via SPI
from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop
from luma.core.render import canvas
from luma.core.legacy import text
from luma.core.legacy.font import proportional, TINY_FONT
from datetime import datetime
import time

serial = spi(port=0, device=0, gpio=noop())
device = max7219(
    serial,
    cascaded=1,
    block_orientation=-90,
    blocks_arranged_in_reverse_order=True
)
device.contrast(16)

def test():
    now = datetime.now()
    dt1_string = now.strftime("%I:%M:%S")
    with canvas(device) as draw:
        text(draw, (3, 1), dt1_string, fill="white",
             font=proportional(TINY_FONT))

while True:
    test()
    time.sleep(1)