로봇/ESP32

ESP32, STM32를 이용한 WiFi-Serial Bridge 만들기

with-RL 2023. 7. 11. 21:21

이 포스트는 ‘ESP32를 이용한 WiFi-Serial Bridge 만들기‘ 과정을 통해 프로그래밍된 ESP32에 STM32를 추가해서 WiFi – ESP32 Serial – STM32 Serial #1 – STM32 Serial #2 – PC로 명령어를 전달하는 WiFi-Serial Bridget 기능을 만들어 보는 과정에 대한 설명입니다.

이 포스트는 다음 과정을 완료한 후에 참고하시길 바랍니다.

이전 과정에 추가된 환경은 다음과 같습니다.

  • STM32CubeIDE-1.12.0
  • STM32 NUCLEO-F103RB 보드
  • Tera Term-4.106

1. WiFi-Serial Bridge 설명

  • WiFi-Serial Bridge는 ESP32 WiFi를 통해서 수신한 명령을 Serial 통신을 이용해 STM32에 전달하면 STM32는 해당 명령을 처리하고 그 결과를 Serial 통신을 이용해 ESP32에 전달하고 ESP32는 수신받은 결과를 WiFi를 통해 전달하는 기능입니다.

  • WiFi to Serial Bridge는 다음과 같이 동작합니다.
    PC에서 WiFi를 통해 ESP32에 메시지를 전달합니다.
    ESP32는 수신한 메시지를 Serial (UART1)을 통해 STM32에 전달합니다.
    STM32는 Serail(UART1)으로 수신한 메시지를 Serial(UART2)를 이용해 PC에 전달합니다.
  • Serial to WiFi Bridge는 다음과 같이 동작합니다.
    PC에서 Serial(UART2)을 통해 STM32에 메시지를 전달합니다.
    STM32는 Serial(UART2)를 통해 수신한 메시지를 Serial(UART1)을 통해 ESP32로 전달합니다.
    ESP32는 Serial을 통해 수신한 메시지를 WiFi을 통해 PC에 전달합니다.
  • 이전 과정에서 구현한 ESP32와 Python 코드는 수정하지 않고 그대로 사용합니다.

2. ESP32와 STM32의 핀 구성

  • 아래 그림은 NUCLEO-F103RB의 핀 구성입니다. 아래 핀들은 ESP32와 연결되도록 회로를 구성할 것입니다.
    +5V: ESP32에 5V 전원을 공급하는 역할입니다. ESP32의 5V와 연결합니다.
    GND: ESP32의 GND와 연결합니다.
    PA9: UART1의 TX를 보내는 역할을 합니다. ESP32의 U0RXD와 연결합니다.
    PA10: UART1의 RX를 보내는 역할을 합니다. ESP32의 U0TXD와 연결합니다.

  • 아래 그림은 ESP32의 핀 구성입니다. 아래 핀들은 STM32와 연결되도록 회로를 구성할 것입니다.
    5V: ESP32에 5V 전원을 공급하는 역할입니다. STM32의 5V와 연결합니다.
    GND: STM32의 GND와 연결합니다.
    U0RXD: RX신호를 수신하는 역할을 수행합니다. STM32의 PA9와 연결합니다.
    U0TXD: TX신호를 발송하는 역할을 수행합니다. STM32의 PA10와 연결합니다.

  • ESP32와 STM32가 아래 그림과 같이 핀이 연결되도록 구성합니다.

  • ESP32와 STM32를 실제로 연결한 모습니다.

3. STM32 기능 구현

  • ESP32-STM32 WiFi Serial Bridge 기능을 위해서 STM32에 프로그래밍하는 과정입니다.
  • STM32는 다음 두 개의 Serial(UART) 통신을 사용할 예정입니다. 구성은 아래와 같습니다.
    ESP32와 STM32 연결: UART1 (PA9, PA10), 핀을 이용해서 ESP32와 연결
    STM32와 PC 연결: UART2 (PA2, PA2), USB를 이용해서 PC와 연결
  • STM32CubeIDE 메뉴에서 ‘File’ >> ‘New’ >> ‘STM32 Project’를 선택합니다.

  • 실행되는 ‘STM32 Project’ 창에서 ‘Bard Selector’ 탭을 선택 후 ‘Commercial Part Number’에 NUCLEO-F103RB를 입력하고 우측 ‘Board List’에서 ‘NUCLEO-F103RB’를 선택 후 ‘Next’ 버튼을 누릅니다.

  • 다음 ‘STM32 Project’ 창에서 ‘Project Name’을 입력하고 ‘Finish’ 버튼을 누릅니다.

  • 아래 화면과 같이 STM32 Project가 생성됩니다.

  • 우측 탭에서 ‘Pinout & Configuration’ >> ‘Connectivity’ >> ‘USART1’을 선택한 후 아래와 같이 설정합니다. Baud Rate를 비롯한 모든 값은 기본값으로 그대로 둡니다. 우측 ‘Pinout view’에 PA9, PA10 두 Pin이 활성화된 것을 확인할 수 있습니다.
    Mode: Asynchronous

  • 상단 툴바에서 ‘Device Configuration Tool Code Generation’ 버튼을 클릭해서 설정 내용이 반영된 코드를 생성합니다.

  • ‘/* USER CODE BEGIN 0 */’ 과 ‘/* USER CODE END 0 */’ 사이에 아래 코드를 작성합니다.
uint8_t rx_data[1024];
int rx_len = 10;

  • ‘/* USER CODE BEGIN 3 */’ 과 ‘/* USER CODE END 3 */’ 사이에 아래 코드를 작성합니다.
	  if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) == SET) {
		  rx_len = 44;
		  HAL_UART_Receive(&huart1, rx_data, rx_len, 100);
		  HAL_UART_Transmit(&huart2, rx_data, rx_len, 100);
	  }
	  if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) == SET) {
		  rx_len = 1;
		  HAL_UART_Receive(&huart2, rx_data, rx_len, 100);
		  HAL_UART_Transmit(&huart1, rx_data, rx_len, 100);
	  }

  • 툴바에서 ‘Build Debug for project’ 버튼을 눌러서 코드를 빌드합니다.

  • 프로그램을 다운로드하고 시험하기 위해서 STM32와 컴퓨터를 USB로 연결합니다.

  • 툴바에서 ‘Debug’ >> ‘Debug Configurations…’을 누릅니다.

  • ‘Debug Configurations’ 창에서 ‘STM32 C/C++ Application’을 선택 후 툴바에서 ‘New launch configuration’ 버튼을 클릭합니다.

  • 우측 트리에 새로운 프로젝트가 추가됩니다. ‘Debug’ 버튼을 누르면 컴파일된 이미지가 다운로드되고 프로그램이 실행됩니다.

  • 프로그램이 실행되면 중간에 ‘HAL_Init();’ 부분에서 동작이 중지됩니다. 이때 툴바의 ‘Resume’ 버튼을 눌러서 프로그램이 진행하도록 합니다.

4. STM32 Serial (Tera Term) 연결

  • 이번 과정은 STM32와 PC와 통신을 위한 Serial 연결을 ‘Tera Term’을 이용해서 연결하는 과정입니다.
  • ‘Tera Term’을 실행 후 ‘Tera Term: New connection’ 창에서 ‘Serial’을 선택하고 STM32가 연결된 COM 포트를 선택 후 ‘Ok’ 버튼을 누릅니다.

  • ‘Tera Term VT’ 창 메뉴에서 ‘Setup’ >> ‘Serial port…’를 선택합니다.

  • ‘Tera Term: Serial port setup and configuration’ 창에서 ‘Seeed’를 ‘115200’으로 설정 후 ‘New setting’을 누릅니다.

  • 이제 PC와 STM32간에 통신을 위한 준비가 완료됐습니다.

5. WiFi to Serial Bridge 시험

  • VSCode에서 ‘ESP32_WiFi_test.ipynb’ 파일을 ‘client.send()’ 부분까지 실행합니다.

  • ‘Tera Term’에 ESP32에서 발생한 메시지가 출력되는 것을 확인할 수 있습니다.
  • VSCode에서 ‘ESP32_WiFi_test.ipynb’ 파일에서 ‘client.send()’ 부분을 여러 번 실행합니다.

  • ‘Tera Term’에 여러 개의 메시지가 출력되는 것을 확인할 수 있습니다.

6. Serial to WiFi Bridge 시험

  • VSCode에서 ‘ESP32_WiFi_test.ipynb’ 파일의 ‘client.recv()’ 부분을 실행합니다.

  • ‘Tera Term’에서 전달하고자 하는 메시지를 입력합니다.

  • VSCode에서 ‘Tera Term’에서 입력한 메시지가 출력되는 것을 확인할 수 있습니다.

'로봇 > ESP32' 카테고리의 다른 글

ESP32를 이용한 WiFi-Serial Bridge 만들기  (0) 2023.07.11