[IoT] 앱과 연동하는 IoT (BLE 통신 예제) - 1편

🌐 IoT란?

IoT : Internet of Things의 약어, 사물인터넷(여러 사물에 정보통신기술이 융합되어 실시간으로 데이터를 인터넷으로 주고받는 기술)

IoT

제일 이해가 쉽고 명확한 정의를 가지고 왔다.
IoT의 정의는 위와 같고, 실제 사용 예시는 스마트 팩토리, 스마트 시티, 스마트 홈, 스마트 팜 등 다양한 사례들이 있다.

그 중 두 가지만 예시를 들어보자..

1. 우리는 집 밖에서 실내 전등, 에어컨 등을 컨트롤할 수 있고,
2. 농장에 직접 가지 않아도, 관리를 할 수 있다.

1번의 경우 무더운 여름철 집에 들어가기 10분 전에 에어컨을 작동시킬 수 있고,
2번의 경우 온도가 변함에 따라 물을 줄 수 있고, 습도 컨트롤 또한 가능할 것이다.

이렇듯 시대가 많이 발전함에 따라 우리의 실생활도 더욱 편리하게 바뀌고 있다.
따라서 IoT는 매우 흥미로운 주제이다.

출처 : 네이버 지식백과
그림 출처


📱 Mobile Phone과 IoT (feat.모바일앱)

위의 예시 2번의 시나리오를 생각해보자.

시나리오
농장에 토양 수분 함량, 온도, 습도 등을 감지해주는 센서가 있다고 가정해보자.
센서는 서버로 1초마다 데이터를 전송해준다고 가정.
또한, 센서는 서버에서 정보를 읽어와 처리를 할 수 있다고 가정한다.

웹 혹은 앱에서 서버의 DB 정보를 읽어 시간에 따른 토양의 수분 함량, 온도, 습도 UI를 그려줄 수 있을 것이다.
또한, 웹과 앱에서 버튼을 이용하여 Water Valve를 컨트롤할 수도 있을 것이다.

농장주는 수동 모드로 웹이나 앱에서 현재 온도를 보다가 Water Valveopen/close할 수 있다.

데이터만 정확하다면 농장주는 물을 주러 농장에 갈 일은 없게 될 것이다.(위의 세 요인 말고도 많은 요인들이 있겠지만 일단은 배제하자.)

위와 같은 상황에서, 당신은 웹을 선호할 것인가? 앱을 선호할 것인가?

내가 사용자라면 후자를 선택할 것 같다.

Mobile Phone이라는 단어 중, Mobile'움직이는', '이동하는'의 뜻을 가지고 있다.
Desktop보단 laptop, laptop보단 mobile기기가 휴대 및 이동이 편하다.
따라서, 나는 사용자의 입장에서 작고 간편한 mobile phone에 들어가는 Mobile App을 개발하여 IoT 기술을 연동할 목표를 가진다.


❓ IoT 기기와 데이터 송수신 방법

위의 시나리오 2번을 생각해보자.
농장 특정 지점마다 센서가 존재하고, 그 지점에서 토양 수분 함량 정보를 알려주는 것 까지는 ok.
그런데 정보를 알려주는 목적지는 어디로 잡아야 하는가?

우리는 또 두 가지 상황을 나누어 보겠다.

Case 1 : IoT 기기 <-> 앱

센서가 주변 모바일 앱과 Bluetooth connection을 맺어 앱에 직접 데이터를 뿌려주는 방식.(보통 BLE, Bluetooth Low Energy 통신을 함)
이렇게 되면, 서버를 거치지 않아도, 센서 통신 거리 내에서 블루투스 연결만 맺어진다면 IoT 기기를 컨트롤 할 수 있게 된다.

이러한 상황은 위 1번 케이스에서 집 밖에서 스위치를 on/off 하는 것이 아닌, 집 안에서 핸드폰 하나로 제품들(전등, 커튼, 실내등, TV, 에어컨 등)을 블루투스로 연결하여 컨트롤 하는 상황에 적합할 것 같다.

하지만 통신 거리, bluetooth가 끊어졌을 때 등의 이슈가 있을 것 같다.

Case 2 : IoT 기기 <-> 서버

1번 case와는 달리, 센서가 서버로 정보를 주고 받는다면, 앱 역시 서버를 보고 있으면 된다.
따라서, 통신 거리는 관계가 없다.(단, IoT기기와 센서의 거리는 보장해줘야 한다.)
이럴 경우, 멀리에서도 실내등 관리, 농장 관리가 가능해진다.

하지만 실시간으로 계속 서버에 값을 읽고 올리는 작업은 매우 heavy하다.
서버로 데이터를 전송할 때는 센서에서 특정 condition때만 혹은 Timer를 설정하는 것도 방법이 되겠다.
서버에서 변경된 값을 읽어 센서에 처리하는 부분은 어떻게 해야할 지 아직 공부가 더 필요한 것 같다.(Trigger 같은게 되나? 모르겠다)

💪 이 부분에 대해 아신다면 알려주시면 감사하겠습니다!


😎 ESP32 DevKit V1

나는 두 방법 중 Case1을 채택하여 예제를 진행할 것이다.

또한, 개발 보드는 ESP32 DevKit V1을 사용할 것이다.
ESP32는 아래와 같은 이유로 IoT 개발 보드에 적합하다!

1. WIFI와 Bluetooth를 동시 지원해준다
-> 블루투스 모듈과 와이파이 모듈을 따로 연동할 필요 없음.
2. 저전력 소비(BLE)
3. 강한 내구성, 신뢰성
-> -40°C ~ +125°C 에서도 구동 가능
4. 값이 싸다


🔥 앱 개발 시작

참고 : [Arduino] ESP32 BLE + 앱 연동 기초 예제(3)

자 이제 앱 개발을 할 차례이다.
위 포스트에서 nRF Connect앱(타인이 만든 앱)을 사용했다면, 직접 나만의 앱을 만들어보는 예제를 진행할 것이다.

앱 개발 전 상상을 해보자.(+ 거창하게 목표를 설정한다고 할까?)

나는 회사에서 앱 개발 직무를 담당, 다른 팀원들은 센서 작업을 하고 있다.
하드웨어 팀에서 ESP32 + Arduino code를 완성하여 보드에 업로드도 하였다고 가정한다.
간단하게 센서에서는 농장의 토양 수분 함량을 1초마다 앱으로 송신하는 정도의 기능이 있다.
앱에서는 하드웨어 팀이 만든 보드에서 주는 데이터를 앱 UI에 표현할 수 있어야 하고, 앱의 버튼 컨트롤로 보드에 데이터를 보낼 수 있어야 한다.
이 때 보낸 데이터로 센서는 Water Valveopen/close할 것이다.

위와 같은 상황은 실시간으로 토양 수분 함량을 받고 앱에서 버튼으로 물 밸브를 조작하는 시나리오이다.

이러한 앱 개발 시, 필요한 기능 중 하나는 BLE Connection 및 데이터 송수신이라 할 수 있겠다.
보드와 앱이 커넥션이 되고, 데이터 송수신이 가능하다면, 앱 단에서 위 기능을 충분히 만들어낼 수 있을 것이다.

따라서, 다음 2편에서는 앱과 ESP 보드의 데이터 송수신 예제를 살펴보도록 하겠다.
(내용이 너무 길어 1편과 2편을 나누었음)

2편 에서 계속됩니다!

🔥 포스팅에 틀린 내용이 있다면 알려주시면 감사하겠습니다!

Leave a comment