Files
esp32-ir/capture.py
T
2026-08-17 22:09:15 +05:00

68 lines
2.1 KiB
Python

from machine import Pin
import time
import json
RECV_PIN = 20
def capture_raw(pin_num=RECV_PIN, timeout_ms=5000, idle_us=8000):
"""
Захватывает тайминги ИК-сигнала.
timeout_ms - сколько ждать начала сигнала
idle_us - через сколько мкс тишины считать сигнал законченным
"""
pin = Pin(pin_num, Pin.IN, Pin.PULL_UP)
timings = []
print("Ожидание сигнала... наведите пульт и нажмите кнопку")
# Ждём начала сигнала (первый переход в 0, т.к. сигнал инвертирован)
start_wait = time.ticks_ms()
while pin.value() == 1:
if time.ticks_diff(time.ticks_ms(), start_wait) > timeout_ms:
print("Таймаут, сигнал не обнаружен")
return []
last_state = pin.value()
last_time = time.ticks_us()
while True:
state = pin.value()
now = time.ticks_us()
if state != last_state:
duration = time.ticks_diff(now, last_time)
timings.append(duration)
last_time = now
last_state = state
# если долго нет изменений и мы в состоянии "покоя" (1) - сигнал закончился
if state == 1 and time.ticks_diff(now, last_time) > idle_us:
break
print(f"Захвачено {len(timings)} импульсов")
return timings
def save_code(name, timings, filename="codes.json"):
try:
with open(filename, "r") as f:
codes = json.load(f)
except OSError:
codes = {}
codes[name] = timings
with open(filename, "w") as f:
json.dump(codes, f)
print(f"Сохранено: '{name}' ({len(timings)} импульсов)")
def list_codes(filename="codes.json"):
try:
with open(filename, "r") as f:
codes = json.load(f)
for name, timings in codes.items():
print(f"{name}: {len(timings)} импульсов")
except OSError:
print("Файл кодов пока пуст")