이글의 전부 또는 일부, 사진, 소스프로그램 등은 저작자의 동의 없이는 상업적인 사용을 금지합니다. 또한, 비상업적인 목적이라하더라도 출처를 밝히지 않고 게시하는 것은 금지합니다.
이미 STM32F103으로 ESP8266 제어하기에서 STM32F103으로 ESP8266와 통신을 해 봤습니다. 이 글에서는 STM32f103의 USART3에 ESP8266-12F 모듈을 연결해서 시리얼로 통신 가능하게 했었습니다. 이어지는 글 STM32F103 CDC 사용하기에서 PC와 USB로 연결해서, PC에서 ESP8266을 제어할 수 있도록 했었습니다.
이글에서는 STM32F103으로 ESP8266의 AT 명령어를 이용해서 소켓 통신을 할 예정입니다. ESP8266의 SDK를 활용해서 더 빠르고 보안 문제가 적은 통신을 할 수도 있는 것 같습니다. 그러나 ESP8266 자체를 연구해야 하므로 배보다 배꼽이 더 커지는 것 같아서, 간단히 AT 명령어를 이용한 소켓 통신을 구현해 봅니다. AT 명령을 이용한 인터넷 소켓 통신은 보안 측면에서 아주 취약할 듯합니다. 본 글과 관련된 시리즈의 글에서는 보안 문제를 전혀 다루지 않습니다만, MCU에 올리는 펌웨어와 PC나 스마트폰의 프로그램에서 보안에 대한 대책을 반드시 마련해야 합니다.
이글과 다음 글에서는 STM32F103이 소켓 통신에서 서버로 동작하는 프로그램을 만들 예정입니다. 이글은 프로젝트를 만드는 내용을 다룰 것이고, 다음 글에서는 C++로 코딩하는 내용을 다룰 예정입니다.
그 후에 Visual Studio 2019 Community의 MFC를 이용해서 STM32F103 서버와 통신하는 간단한 PC용 클라이언트 프로그램을 C로 작성할 예정입니다. PC용 프로그램을 만든 후에는 Android Studio를 사용해서 Android 스마트 폰에서 동작하는 간단한 클라이언트 프로그램을 java로 프로그래밍 해 볼 예정입니다.
위의 프로그램들을 모두 마치고 공유기에서 필요한 설정을 하면, 외부에서 인터넷을 통해서 MCU와 통신할 수 있습니다. MCU에 프로그래밍하는 내용에 따라 정보를 얻을 수도 있고, 명령을 실행하게 할 수도 있습니다.
전에 다루었던 DHT22(AM2303) 온도 습도 센서 사용하기와 미세먼지 센서 SDS011 사용하기에서 만든 장치를 집에 두고, 외부에서 집안의 온도와 습도 미세 먼지 상태를 알아 볼 수 있습니다. 뿐만 아니라 여기에 STM32F103으로 IR 신호 다루기(1편)과 STM32F103으로 IR 신호 다루기(2편)의 내용을 결합하면 필요에 따라 에어콘이나 공기 청정기 등 리모콘으로 동작시킬 수 있는 기기들을 제어할 수도 있을 것입니다.
STM32F103이 서버로 동작하게 하는 소켓 프로그램을 작성하는 본 글과 다음 글은 다음과 같은 환경에서 프로그래밍합니다.
① OS : Windows 10 64bit
② 개발 도구 : STM32CubeIDE
③ Programming Language : c++
④ MCU : STM32F103C8T6
이전의 글들은 True Studio 9.x 버전에서 작성했습니다만, True Studio 9.3.0 이후로 더 이상 True Studio는 업데이트하지 않을 것이고 STMCubeIDE를 업데이트한다고 합니다. 이에 따라 가급적 STM32CubeIDE(앞으로는 CubeIDE로 칭함.)로 프로그래밍할 예정입니다.
True Studio는 C++을 지원하지 않았던 것으로 기억합니다만, CubeIDE는 C++을 지원하므로 이번 프로그램은 테스트 겸 C++로 작성해 봅니다.
먼저 ST Microelectronic 홈페이지(https://www.st.com/en/development-tools/stm32cubeide.html)에서 STM32CubeIDE를 다운 받아 설치합니다. 이글을 쓰는 현재 최신 버전은 1.2.0입니다.
① CubeIDE를 시실행한 후에 [File] - [New] - [STM32 Project]를 선택합니다.
② MCU를 선택합니다. 인터넷이 연결되어 있으면 CubeIDE가 자동으로 MCU 등과 관련된 필요한 정보를 업데이트합니다. 업데이트가 끝나면 MCU를 선택하는 화면이 나타납니다. 이글에서 사용하고 있는 blue pill 보드는 실제로는 STM32F103C8T6을 사용하고 있지만, 실제 사용할 수 있는 플래시 메모리가 128KB이므로 MCU로 STM32F103CBT6를 선택했습니다.
③ 프로젝트 이름을 입력합니다. 프로젝트의 이름을 STM32F103ESP8266으로 입력했고, c++로 프로그래밍할 것이므로 Targeted Language를 C++로 서선택했습니다. 여기서 C++로 선택했음에도 불구하고 실제 만들어진 프로젝트는 c로 만들어집니다. C++로 프로그래밍하려면 확장자가 c인 파일들을 수동으로 cpp로 바꾸어 주어야 합니다.
④ STM32CubeMX를 실행하겠냐는 다음의 메시지에 [Yes]를 클릭합니다. (perspective는 관점, 시각, 원근법, 투시, 균형감 등과 같은 뜻을 가진 단어인데 이렇게도 사용하는군요.)
⑤ 다음 그림과 같이 MCU가 나오면 [System Core]의 하위 메뉴에서 [SYS]를 선택해서 디버깅 방법으로 [Serial Wire]를 선택합니다.
⑥ [RCC]에서 [High Speed Clock(HSE)]를 [Crystal/Ceramic Resonator]를 선택합니다.
⑦ [Connectivity] 메뉴의 하위 메뉴에서 [USART3]를 선택학하고, [Mode]를 [Asynchronous]로 선택합니다. [Hardware Flow Control]은 사용하지 않으므로 [Disable] 상태로 둡니다. 아래의 [Parameter Settings] 항목에서 통신속도, 데이터비트, 패리티, 스톱비트 등을 ESP8266에 설정한 내용과 같게 지정합니다. 본인은 115200bps, 8bit 데이터 , 패리티 none, 1 스톱비트로 설정했습니다.
⑧ ESP8266에서 STM32F103으로 오는 데이터는 인터럽트 방식으로 처리할 것이므로 [NVIC Settings] 항목의 [USART3 global interrupt] Enabled에 체크합니다.
⑨ [Project] 메뉴에서 [Generate Code]를 클릭하여 코드를 생성합니다. 단순히 소켓 통신을하기 위해서는 특별히 클럭을 따로 설정할 필요가 없어서 클럭 부분은 그냥 넘어갑니다. 소켓 통신 이외에 다른 기기들을 연결하려면 그에 맞게 클럭을 적절히 설정해 주어야 합니다.
⑩ [Project] 메뉴에서 [Generate Report]를 클릭하여 참고 자료 파일을 만들어 둡니다. 이 과정은 필수는 아니지만, 나중에 시스템 설정 상태를 간단히 살펴 볼 때에 유익하므로 만들어 두는 것을 권장합니다.
⑪ ESP8266을 제어하는 루틴들을 클래스 ESP8266으로 만들어 사용할 예정입니다. main.c와 stm32fxx_it.c에서 클래스 ESP8266을 사용해야 합니다. 앞에서 잠시 언급한 바와 마찬가지로 소스 프로그램에서 C++ 요소인 클래스를 인식하려면 확장자를 c에서 cpp로 바꾸어 주어야 합니다. 아래 그림들과 같이 [Project Explorer]에서 파일명 main.c를 마우스 오른쪽 버튼으로 클릭하고, 팝업 메뉴에서 [Rename]을 선택해서 main.cpp로 이름을 바꾸어 줍니다. 같은 방법으로 stm32fxx_it.c를 stm32fxx_it.cpp로 바꾸어 줍니다.
⑫ 다음 그림에서와 같이 [Project Explorer]의 [Inc]를 오른쪽 바우스 버튼으로 클릭하여 [New], [Header File]을 순서대로 선택한 후에 [ESP8266.h] 파일을 추가합니다.
⑬ 다음 그림에서와 같이 [Project Explorer]의 [Src]를 오른쪽 바우스 버튼으로 클릭하여 [New], [Source File]을 순서대로 선택한 후에 [ESP8266.cpp] 파일을 추가합니다.
이상과 같이하여 일단 프로젝트를 생성했습니다. 다음 글에서는 코딩을 할 예정입니다.
'STM32F103' 카테고리의 다른 글
STM32F103으로 ESP8266을 이용한 소켓 통신하기 - 제3편 (1) | 2020.01.28 |
---|---|
STM32F103으로 ESP8266을 이용한 소켓 통신하기 - 제2편 (3) | 2020.01.20 |
STM32F103으로 IR 신호 다루기(2편) (3) | 2019.11.20 |
STM32F103으로 IR 신호 다루기(1편) (0) | 2019.11.18 |
STM32F103 CDC 사용하기 (0) | 2018.12.28 |