Projekt polegał na utworzeniu gry pong dla dwóch graczy przy użyciu modułu ESP8266 i płytki do gier "game console" od sic.edu.
1. Płytka Arduino ESP8266
2. Game console od sic.edu
3. kabel mikro USB - USB
4. Ekran OLED SSD1306 (132x64)
Do zaimplementowania kodu, poza niezbędnymi elementami będziemy potrzebowali Komputera, z wejściem USB i z wgranym sterownikiem CP210x, bez którego płytka nie będzie wykrywana. Do implementacji kodu napisanego w microPython'nie użyjemy programu Thonny.
Podłączamy nasze elementy ze sobą zgodnie z oznaczeniami (zwrócić uwagę na pin "SDA" ekranu OLED i piny ESP8266). Podłączamy płytkę ESP do komputera przez mikro usb i instalujemy na naszym komputerze niezbędny sterownik CP210x. Jeśli dobrze wykonaliśmy ten krok to płytka, powinna być wykrywana przez komputer w programie Thonny. Wklejamy i wgrywamy nasz kod, i gra powinna działać.
from machine import Pin, I2C
import ssd1306
import time
# Inicjalizacja OLED
i2c = I2C(scl=Pin(5), sda=Pin(4)) # Dostosuj, jeśli używasz innych pinów
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Inicjalizacja przycisków
button_up_left = Pin(12, Pin.IN, Pin.PULL_UP)
button_down_left = Pin(13, Pin.IN, Pin.PULL_UP)
button_up_right = Pin(2, Pin.IN, Pin.PULL_UP)
button_down_right = Pin(14, Pin.IN, Pin.PULL_UP)
# Parametry gry
paddle_height = 16
game_speed = 0.02
# Funkcja do resetu gry
def reset_game():
global paddle_left_y, paddle_right_y, ball_x, ball_y, ball_dx, ball_dy
# Paletki
paddle_left_y = 26
paddle_right_y = 26
# Piłka
ball_x = 64
ball_y = 32
ball_dx = 2
ball_dy = 2
# Funkcja do rysowania stanu gry
def draw_game():
oled.fill(0) # Wyczyść ekran
# Rysuj paletkę lewą
oled.fill_rect(2, paddle_left_y, 3, paddle_height, 1)
# Rysuj paletkę prawą
oled.fill_rect(123, paddle_right_y, 3, paddle_height, 1)
# Rysuj piłkę
oled.fill_rect(ball_x, ball_y, 3, 3, 1)
# Wyświetl zmiany
oled.show()
# Reset gry na początku
reset_game()
# Główna pętla gry
while True:
# Sterowanie paletką lewą
if not button_up_left.value() and paddle_left_y > 0:
paddle_left_y -= 2
if not button_down_left.value() and paddle_left_y < (64 - paddle_height):
paddle_left_y += 2
# Sterowanie paletką prawą
if not button_up_right.value() and paddle_right_y > 0:
paddle_right_y -= 2
if not button_down_right.value() and paddle_right_y < (64 - paddle_height):
paddle_right_y += 2
# Ruch piłki
ball_x += ball_dx
ball_y += ball_dy
# Odbicia piłki od górnej i dolnej ściany
if ball_y <= 0 or ball_y >= 61:
ball_dy *= -1
# Odbicia od paletki lewej
if ball_x <= 5 and paddle_left_y <= ball_y <= paddle_left_y + paddle_height:
ball_dx *= -1
# Odbicia od paletki prawej
if ball_x >= 120 and paddle_right_y <= ball_y <= paddle_right_y + paddle_height:
ball_dx *= -1
# Sprawdzenie, czy piłka wyszła poza ekran
if ball_x < 0 or ball_x > 127:
oled.fill(0)
oled.text("Game Over!", 30, 24, 1)
oled.show()
time.sleep(3) # Wyświetlenie komunikatu przez 3 sekundy
reset_game() # Restart gry
continue
# Narysuj stan gry
draw_game()
time.sleep(game_speed)