이 포스트는 ‘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 |
---|