일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Row Widget
- Snackbar
- Column Widget
- Flutter 앱 배포
- ListTile
- Scaffold
- Networking
- node.js
- CrossAxisAlignment
- Flutter 예제
- Image.network
- ListView.builder
- flutter
- navigator
- 반석천
- MainAxisAlignment
- HTTP
- Load Image
- Hello World
- Flutter Tutorial
- sqlite
- Row
- Flutter Example
- InkWell
- Cached Image
- WillPopScope
- Flutter 강좌
- listview
- FutureBuilder
- AppBar
- Today
- Total
꿈꾸는 시스템 디자이너
ESP32를 만나기까지... (IoT 제품 개발자의 경험담) 본문
작년말 새로운 회사에 합류했다. 보직은... 음 현재 스스로를 잡부라고 부르고 있다.
어쨌든 컨택당시 새로운 플랫폼 사업을 시작하는 스타트업이고 개발팀장이 필요하다하여 합류하게 되었는데 어찌하다보니 IoT 장비 개발의 총괄도 맞게 되었다.
개발하고자 하는 IoT 장비가 뭔지까지는 밝히기 어려우나 간단한 IoT 장비로 BLE를 통해 스마트폰과 연동되어 동작하고 동작결과를 서버로 전송하는 장비였다. 그리고 학부 졸업반 친구들이 개발을하고 있었는데...
흔히 마이크로 컨트롤 보드라하면 Atmega기반에 아두이노를 쉽게 떠올리고 당시 개발자들도 아두이노를 통해 개발을 하고 있었다. 본인은 컴퓨터공학을 전공하고 전기/전자에는 경험이 전무했으며 펌웨어를 개발해본 경험도 없었다. 그러다 슬슬 장비개발에 관여할 수 밖에 없었다.
개발할 장비의 대략적인 구성은 MCU, 센서(UART), 2ch 릴레이(UART), 그리고 스마트폰과 통신하기 위한 블루투스 모듈(UART).
처음에는 많이 사용되는 블루투스 모듈인 HC-06과 HM-10을 이용해서 개발을하다 제품 상용화를 위해 KC 인증을 받은 BLE 모듈을 찾게되었다. 그리고 생각보다 KC 인증을 받은 BLE 모듈이 많지 않음에 좌절하게된다. 그나마 찾은 몇개의 모듈들은 어떠한 이유인지 원활한 통신이 불가능했다. 그와중에 1차 PCB 제작에 들어가고 사용도중에 BLE 모듈이 먹통이되는 문제가 발생했다.
이 시점부터 개발참여에서 개발총괄로 슬슬 포지션이 이동되게 되는데... ㅠㅠ
원점부터 다시 고민하고 찾아보기 시작했다. 과연 그 수많은 BLE 모듈이 탑재 제품들은 어떻게 만들어졌을까? 뭘 사용했을까?
혹시 아두이노(혹은 Atmega) 기반의 보드를 이용해서 IoT 장비를 개발하고자 하는 개발자가 있다면 과감히 포기하고 ESP32를 고민해보라고 말하고 싶다.
여기서 부터는 본인 개인의 경험에 의한 주장으로 꼭 답은 아니다. 판단은 각자의 몫이다.
우선 Atmega의 문제점에 대해서 정리해보자.
성능
Atmega는 8비트 기반이다. 요즘 많이 사용되는 ARM기반의 32비트 MCU와 비교하는 속도면에서 게임이되지 않는다. 더욱이 극악의 SRAM 크기다. 본인이 사용했던 Atmega2560의 경우 8Kbyte의 SRAM을 제공하는데 이게 그나마 많이 주는거다. 뭔가 계획된 절차에 따라 공정이 수행되고 그 결과를 저장하기에는 턱없이 부족한 메모리량이다.
통신모듈과 센서모듈에 UART를 연결해서 인터럽트 처리를 하고 또 1초에 한번씩 타이머를 발생시켜서 공정을 수행하고자 했으나 흔히말하는 쫑나는 현상이 발생했다. 본인의 역량부족인지 모르겠지만, 결과적으로 1초에 1번씩 응답하는 센서모듈을 타이머처럼 이용하는 괴상한 제품으로 개발할 수 밖에 없었다.
크기
Atmega는 MCU다. 그러니 통신을 위해서는 별도의 Wi-Fi나 BLE 모듈들을 UART등으로 연결해서 이용해야 한다. 통신을 위해 물리적인 모듈이 추가되야 한다는 뜻이다. 제품 소형화에 걸림돌이 될 수 있다. 물론 이는 Atmega만의 문제는 아니다. 대부분의 제품 보드에는 MCU와 통신 모듈이 각각 별도로 존재하긴 한다.
비용
크기와 관련된 부분인데 저성능이라고 저렴한게 아니다. Atmega의 경우 꽤 비싼 칩에 속한다. 본인이 사용했던 Atmega2560의 경우 개당 1만원정도 한다. 이에 반해 ARM 기반의 32비트 MCU인 STM32 계열의 경우 성능에 따라 천차만별이긴하지만 2천원대부터 시작한다.
정리하면 Atmega는 성능도 낮고, 값도 비싸고 결과적으로 뭐하나 매력적인게 없는 MCU였다. 그런데 왜 많이 언급될까?
바로 아두이노 때문일 것이다. Atmega를 MCU로 탑재한 아두이노 보드는 이미 엄청난 규모의 생태계를 구축하고 있다. 대학이나 교육기관에서 IoT 장비 관련된 교구로 대부분 아두이노를 활용하고 있다. 쉽고 편해서 시작품을 신속하게 만들 수 있다. 다만 시작품 수준 이상의 제품 개발에는 어려움이 많다.
다시 원래 얘기로 돌아가서 KC 인증을 받은 BLE 모듈을 찾다가 ESP32란 모듈을 알게되었다. 그리고 결론부터 말하자면 신세계였다.
ESP32는 ESPRESSIF라는 중국 회사에서 개발하는 제품의 브랜드로 SoC와 모듈로 구분된다.
SoC의 경우 다양한 제품군이 있는데, ARM계열은 아닌 독자적인 32비트 코어(심지어 듀얼코어도 있음)에 520KB의 SRAM을 제공한다. 8KB를 제공하던 Atmega와는 상대가 안된다.
모듈의 경우도 다양한 제품군이 있는데, SoC 모듈에 플래쉬메모리와 추가 SPRAM 그리고 BLE와 Wi-Fi를 포함하고 있다.
다시 말하면, 그냥 하나의 모듈인데 32비트 MCU에 메모리도 넉넉하고, 파일시스템처럼 사용할 수 있는 플래쉬(기본 4MB)도 포함되고, Wi-Fi와 BLE를 지원하고 더 나아가서 GPIO도 넉넉하게 제공해서 다양한 모듈들과 연동할 수 있다. 근데 이 모듈이 개당 4천원 정도한다. 대부분의 제품들이 KC 인증을 받은 상태다.
아래 모듈이 현재 본인이 개발하고 있는 제품에 탑재되는 ESP32 모듈이다. 제품에 따라 PCB안테나가 탑재되거나 아래 사진처럼 IPEX 안테나 소켓이 달려있어 개발 제품의 특징에 맞게 선택할 수 있다.
아래는 ESP32 테스트 보드에 ESP32 모듈을 탑재한 것이다. 모듈 자체에 왠만한게 다 있으므로 테스트 보드에 원하는 모듈을 결착해서 외부 모듈들과 연결하고 펌웨어 개발도 가능하다.
아래는 ESP32 개발용으로 많이 사용되는 ESP32-devkitc V4 보드로 실제 본인이 꾸며서 개발중인 환경을 촬영한 것이다.
IoT 장비 개발을 하고자 하면 우선 개발 보드가 필요하고, 또 IoT 장치에 걸맞게 Wi-Fi나 BLE(혹은 Class Bluetooth) 기능이 필요하다. 이러한 보드는 확보하기 위해서는 많은 비용과 시간이 발생하는데... 저 보드는 국내에서 1만원 미만으로 구입할 수 있다.
그럼 가장 큰 이슈는 개발난이도 일 것이다.
ESP32의 경우 IDF(IoT Development Framework)라는 차체 SDK를 제공하고 있다. 꽤 성실히 지원하고 있다는 느낌이 든다. 느낌이 든다고 표현한 것은 본인도 안해봤기 때문이다. 왜냐하면 제조사에서 직접 SDK를 랩핑해서 아두이노 프레임워크에서 개발할 수 있도록 제공하고 있기 때문이다.
무슨 소리냐면... 기존의 아두이노를 개발해 본 경험이 있는 개발자라면 IDF를 이용하지 않고 기존의 아두이노 개발 환경에 ESP32 관련 라이브러리와 보드사양만 추가해서 펌웨어를 개발할 수 있다는 것이다. 즉 엄청 쉽고 빠르게 개발할 수 있다.
뭐 단점이 없지는 않다. 아두이노의 기본 API를 모두 호환하는 것은 아니다. 상당수는 아두이노 기본 API가 아닌 ESP32 API를 이용해야 한다. 그리고 정식 IDF를 이용할 때 보다 어느정도 성능저하가 발생한다. 정식 IDF의 70% 수준의 성능이라는 포스팅도 봤으나 경험을 해보지 못해 비교할 순 없었다. 다만 본인이 개발하는 제품에서는 충분히 훌륭한 성능을 제공해 주고 있다.
ESP32의 개발과 관련해 자료가 필요하다면 가볍게 구글링만해도 방대한 자료가 나온다. 본인이 참고한 몇몇 사이트의 링크를 첨부한다. 아두이노 개발 경험이 조금이라도 있다면 별다른 어려움 없이 쉽게 개발할 수 있을 것이다.
https://randomnerdtutorials.com/projects-esp32/
https://dronebotworkshop.com/esp32-intro/
https://lastminuteengineers.com/esp32-arduino-ide-tutorial/