import bluetooth
from machine import Pin, PWM, ADC
import time
import dht
# --- НАСТРОЙКА ПИНОВ ---
# Моторы (L9110S)
MOTOR_A_1A = Pin(26, Pin.OUT)
MOTOR_A_1B = Pin(27, Pin.OUT)
MOTOR_B_1A = Pin(13, Pin.OUT)
MOTOR_B_1B = Pin(14, Pin.OUT)
# Сервопривод (SG90)
servo = PWM(Pin(25), freq=50)
# DHT11
dht_sensor = dht.DHT11(Pin(33))
# ИК-приемник
ir_receiver = Pin(32, Pin.IN)
# --- ФУНКЦИИ УПРАВЛЕНИЯ МОТОРАМИ ---
def stop_motors():
MOTOR_A_1A.value(0)
MOTOR_A_1B.value(0)
MOTOR_B_1A.value(0)
MOTOR_B_1B.value(0)
def move_forward():
MOTOR_A_1A.value(1)
MOTOR_A_1B.value(0)
MOTOR_B_1A.value(1)
MOTOR_B_1B.value(0)
def move_backward():
MOTOR_A_1A.value(0)
MOTOR_A_1B.value(1)
MOTOR_B_1A.value(0)
MOTOR_B_1B.value(1)
def turn_left():
MOTOR_A_1A.value(0)
MOTOR_A_1B.value(1)
MOTOR_B_1A.value(1)
MOTOR_B_1B.value(0)
def turn_right():
MOTOR_A_1A.value(1)
MOTOR_A_1B.value(0)
MOTOR_B_1A.value(0)
MOTOR_B_1B.value(1)
def set_servo_angle(angle):
# Преобразование угла (0-180) в скважность (duty) для MicroPython
# 50Hz -> период 20ms. 0 град = 0.5ms, 180 град = 2.5ms
duty = int((angle / 180 * 2 + 0.5) / 20 * 1023)
servo.duty(duty)
# --- НАСТРОЙКА BLUETOOTH ---
ble = bluetooth.BLE()
ble.active(True)
# В MicroPython для BLE нужна библиотека для UART сервиса.
# Если вы используете стандартный пример, он будет здесь.
# Пока для теста сделаем простую обработку (в реальности нужен Nordic UART Service)
print("Робот LOIK готов к работе!")
# --- ОСНОВНОЙ ЦИКЛ ---
while True:
# 1. Чтение DHT11 (раз в 2 секунды)
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()
print("Температура:", temp, "C, Влажность:", hum, "%")
except OSError as e:
print("Ошибка чтения DHT11")
# 2. Чтение ИК-приемника (просто проверяем, есть ли сигнал)
# Примечание: для реального пульта нужна библиотека NEC, здесь просто проверка
if ir_receiver.value() == 0:
print("ИК сигнал получен!")
# 3. Ожидание команд по Bluetooth (ЗАГЛУШКА, так как BLE в MicroPython сложен)
# В реальном коде здесь должен быть обработчик UART.
time.sleep(2)