import time
import Adafruit_SSD1306
import Adafruit_GPIO.GPIO as GPIO
from PIL import Image, ImageDraw, ImageFont
import openai
# Настройка API OpenAI
openai.api_key = 'YOUR_API_KEY'
# Настройка OLED дисплея
RST = None
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
# Инициализация дисплея
try:
disp.begin()
disp.clear()
disp.display()
print("OLED display initialized successfully.")
except Exception as e:
print(f"Error initializing OLED display: {e}")
# Создание изображения для рисования
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
draw = ImageDraw.Draw(image)
# Загрузка шрифта
font = ImageFont.load_default()
# Пины для кнопок
LEFT_BUTTON_PIN = 17
RIGHT_BUTTON_PIN = 27
UP_BUTTON_PIN = 22
DOWN_BUTTON_PIN = 5
SELECT_BUTTON_PIN = 6
ENTER_BUTTON_PIN = 13
# Инициализация GPIO
gpio = GPIO.get_platform_gpio()
gpio.setup(LEFT_BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
gpio.setup(RIGHT_BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
gpio.setup(UP_BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
gpio.setup(DOWN_BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
gpio.setup(SELECT_BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
gpio.setup(ENTER_BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Переменные для хранения положения курсора
cursorX = 0
cursorY = 20
cursorSize = 12 # Размер курсора
# Текстовая строка
text = ""
# Клавиатура (4x10)
keyboard = [
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
['K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'],
['U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3'],
['4', '5', '6', '7', '8', '9', ' ', '.', ',', '!']
]
def get_chatgpt_response(prompt):
try:
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=150
)
return response.choices[0].text.strip()
except Exception as e:
print(f"Error getting response from ChatGPT: {e}")
return "Error getting response."
while True:
# Проверка нажатия кнопок и обновление позиции курсора
if not gpio.input(LEFT_BUTTON_PIN):
cursorX -= cursorSize
time.sleep(0.2) # Задержка для предотвращения дребезга
if not gpio.input(RIGHT_BUTTON_PIN):
cursorX += cursorSize
time.sleep(0.2)
if not gpio.input(UP_BUTTON_PIN):
cursorY -= cursorSize
time.sleep(0.2)
if not gpio.input(DOWN_BUTTON_PIN):
cursorY += cursorSize
time.sleep(0.2)
# Ограничение курсора в пределах экрана
if cursorX < 0:
cursorX = 0
if cursorX >= width - cursorSize:
cursorX = width - cursorSize
if cursorY < 20:
cursorY = 20
if cursorY >= height - cursorSize:
cursorY = height - cursorSize
# Добавление символа при нажатии кнопки SELECT_BUTTON_PIN
if not gpio.input(SELECT_BUTTON_PIN):
col = cursorX // cursorSize
row = (cursorY - 20) // cursorSize
text += keyboard[row][col]
time.sleep(0.2)
# Обработка нажатия кнопки ENTER_BUTTON_PIN
if not gpio.input(ENTER_BUTTON_PIN):
response = get_chatgpt_response(text)
text = response # Показать ответ вместо вопроса
time.sleep(0.2)
# Обновление дисплея
draw.rectangle((0, 0, width, height), outline=0, fill=0)
draw.text((0, 0), text, font=font, fill=255)
# Рисование клавиатуры
for row in range(4):
for col in range(10):
x = col * cursorSize
y = 20 + row * cursorSize
draw.rectangle((x, y, x + cursorSize, y + cursorSize), outline=255, fill=0)
draw.text((x + 2, y + 2), keyboard[row][col], font=font, fill=255)
# Рисование курсора
draw.rectangle((cursorX, cursorY, cursorX + cursorSize, cursorY + cursorSize), outline=255, fill=255)
# Отображение изображения
disp.image(image)
disp.display()