728x90
반응형

1. 블루투스 설정과 내장 led제어
import bluetooth
import time
from machine import Pin
# ==========================================================
# ⭐ [학생 수정 영역] 여기에 고유한 블루투스 이름을 입력하세요!
# (예: "ESP32_1반05번_철수", "ESP32_2조")
DEVICE_NAME = "ESP32_1반01번"
# ==========================================================
# 내장 LED 핀 (수신 테스트용)
led = Pin(2, Pin.OUT)
class BLEUART:
def __init__(self, name=DEVICE_NAME):
self.ble = bluetooth.BLE()
self.ble.active(True)
self.ble.irq(self._irq)
# Nordic UART Service (NUS) 표준 UUID 정의
UART_UUID = bluetooth.UUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E")
TX_UUID = bluetooth.UUID("6E400003-B5A3-F393-E0A9-E50E24DCCA9E")
RX_UUID = bluetooth.UUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E")
UART_SERVICE = (
UART_UUID,
(
(TX_UUID, bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY),
(RX_UUID, bluetooth.FLAG_WRITE),
),
)
services = (UART_SERVICE,)
((self.tx, self.rx),) = self.ble.gatts_register_services(services)
self._connections = set()
self.device_name = name
self._advertise()
def _irq(self, event, data):
# 스마트폰이 연결되었을 때
if event == 1:
conn_handle, _, _ = data
self._connections.add(conn_handle)
print(f"\n>> 스마트폰 연결 성공! [장치명: {self.device_name}]")
# 스마트폰 연결이 끊어졌을 때
elif event == 2:
conn_handle, _, _ = data
if conn_handle in self._connections:
self._connections.remove(conn_handle)
print("\n>> 연결 끊김. 다시 검색 신호를 보냅니다...")
self._advertise()
# 스마트폰에서 데이터를 전송했을 때
elif event == 3:
conn_handle, value_handle = data
if value_handle == self.rx:
received = self.ble.gatts_read(self.rx).decode().strip()
print(f"[수신 데이터]: {received}")
# 간단한 LED 제어 실습 연계
if received == "ON":
led.value(1)
self.send("LED가 켜졌습니다.")
elif received == "OFF":
led.value(0)
self.send("LED가 꺼졌습니다.")
def send(self, data):
"""스마트폰으로 데이터 전송"""
for conn_handle in self._connections:
self.ble.gatts_notify(conn_handle, self.tx, data + "\n")
def _advertise(self):
"""블루투스 장치 이름을 주변에 브로드캐스팅"""
name_bytes = bytes(self.device_name, 'utf-8')
adv_payload = bytearray(
b'\x02\x01\x06' + # Flags 모드
bytes([len(name_bytes) + 1, 0x09]) + # 0x09: Complete Local Name
name_bytes
)
self.ble.gap_advertise(100000, adv_payload)
print(f"블루투스 검색 대기 중... [장치명: {self.device_name}]")
# 블루투스 서버 시작
ble = BLEUART(DEVICE_NAME)
print("준비 완료. 스마트폰 앱에서 블루투스를 연결하세요.")
2. AI 활용 웹앱 만들고 활용하기
![]() |
![]() |
728x90
반응형
'esp32 보드활용' 카테고리의 다른 글
| esp32 BLE 온습도센서 웹앱 활용하기. (0) | 2026.09.02 |
|---|---|
| esp32 온습도 센서 활용 (1) | 2026.09.02 |
| esp32 - thonny 활용 펌웨어 설치 및 내장 led 제어 (0) | 2026.09.02 |
| esp32 보드 / 확장 쉴드 설명 (0) | 2026.09.02 |

