프롬프트
file: ai-9-8-uart-ping-pong.md
프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.다음의 조건에 따라 마이크로파이썬 프로그램을 만들고 설명해 줘. - 동일한 개발 보드에 있는 UART1과 UART2를 서로 연결할거야. import pinno as P uart1 = UART(1, baudrate=9600, tx=P.TX, rx=P.RX, timeout=10) uart2 = UART(2, baudrate=9600, tx=P.R5, rx=P.R6, timeout=10) - UART1에서 UART2로 {'ser':1}을 데이터로 보내면, UART2에서는 5초를 기다렸다가 ser에 1을 더하여 {'ser':2}를 UART1으로 돌려 보내게 돼. - UART1에도 5초를 기다렸다가 받은 데이터 ser에 1을 더하여 {'ser':3}를 UART2으로 보내는 행위를 무한 반복하는 거야. - 각 단계에서 UART의 이름과 받은 ser을 출력하고, 보낼 때도 이름과 ser을 출력하면 돼.
AI가 만든 코드
프로그램: 9_10_uart_ping_pong.py
from machine import UART import pinno as P import time import json # UART 초기화 uart1 = UART(1, baudrate=9600, tx=P.TX, rx=P.RX, timeout=10) uart2 = UART(2, baudrate=9600, tx=P.R5, rx=P.R6, timeout=10) def main(): # 초기 데이터 전송 data = {'ser': 1} uart1.write(json.dumps(data) + '\n') # 데이터를 JSON 문자열로 전송 print(f"UART1 sent: {data}") while True: # UART2에서 데이터 수신 및 처리 if uart2.any(): # UART2에 수신된 데이터가 있으면 received = uart2.readline() # 데이터를 줄 단위로 읽기 try: received_data = json.loads(received.decode().strip()) # JSON 디코드 print(f"UART2 received: {received_data}") # ser 값 증가 및 출력 received_data['ser'] += 1 print(f"UART2 sending: {received_data}") # 5초 대기 후 UART1로 전송 time.sleep(5) uart2.write(json.dumps(received_data) + '\n') except Exception as e: print(f"Error processing UART2 data: {e}") # UART1에서 데이터 수신 및 처리 if uart1.any(): # UART1에 수신된 데이터가 있으면 received = uart1.readline() # 데이터를 줄 단위로 읽기 try: received_data = json.loads(received.decode().strip()) # JSON 디코드 print(f"UART1 received: {received_data}") # ser 값 증가 및 출력 received_data['ser'] += 1 print(f"UART1 sending: {received_data}") # 5초 대기 후 UART2로 전송 time.sleep(5) uart1.write(json.dumps(received_data) + '\n') except Exception as e: print(f"Error processing UART1 data: {e}") if __name__ == "__main__": main()