Arduino Nano 33 BLE Sense를 활용한 배터리 잔량 수신 장치- Battery Level Indicator
학습할 Arduino Nano 33 BLE Sense 보드의 예제 코드 설명
이 자습서 시리즈에서는 Bluetooth Low Level에 대해 알아야 할 기본 아이디어를 제공하며 Arduino BLE 칩셋을 사용하여 휴대폰 및 기타 Arduino 보드에서 무선으로 데이터를 주고받을 수 있는 방법을 보여줍니다. 시작합시다.
여기까지 Arduino Nano 33 Sense 정리한 자료
Arduino Nano 33 BLE Sense 개발 가이드 1 - 시작하기
Arduino Nano 33 BLE Sense 개발 가이드 2 - 훑어보기
Arduino Nano 33 BLE Sense 개발 가이드 3 - 센서 다루기
Arduino Nano 33 BLE Sense 개발 가이드 4 - 센서 종합 테스트
Arduino Nano 33 BLE Sense
새로운 버전의 아두이노 Nano 보드가 있다. 9축 관성 측정 장치, 압력, 빛, 심지어 제스처와 마이크로폰 같은 다양한 센서가 있으며, IOT에 중점을 둔 BLE 연결 가능한 특성을 가진 Arduino Nano 33 BLE Sense 보드다.

BLE 및 Bluetooth 5 연결을 지원하는 Nina B306 모듈로 구동됩니다. 내장된 Bluetooth 모듈은 매우 낮은 전력을 소비하며 Arduino 라이브러리를 사용하여 쉽게 액세스 할 수 있습니다. 따라서 프로젝트를 보다 쉽게 프로그래밍하고 무선 연결할 수 있습니다. 프로젝트에 Bluetooth 기능을 추가하기 위해 외부 Bluetooth 모듈을 사용할 필요가 없습니다. 공간과 전력을 절약하십시오.
Arduino BLE – Bluetooth 저 에너지 소개
BLE는 매우 낮은 데이터 전송률로 매우 낮은 전력 소비 상황에 최적화된 Bluetooth 버전입니다. 몇 주 또는 몇 달 동안 코인 셀을 사용하여 이러한 장치를 작동할 수도 있습니다.
Arduino는 BLE에 대한 훌륭한 소개(아두이노 BLE 라이브러리)를 볼 수 있지만 여기서는 BLE 통신을 시작할 수 있는 간단한 소개를 제공합니다.
기본적으로 BLE 통신 블록을 고려할 때 두 가지 유형의 장치가 있습니다.
- 주변 장치
- 중앙 장치
주변 장치는 다양한 공지의 데이터를 읽거나 새로운 공지를 보드에 고정할 수 있는 공지 게시판과 같습니다. 이 정보가 필요한 모든 장치에 대한 데이터를 게시합니다.

중앙 장치는 게시판에서 알림을 읽는 사람과 같습니다. 여러 사용자가 동시에 게시판에서 데이터를 읽고 가져올 수 있습니다. 마찬가지로 여러 중앙 장치가 주변 장치에서 동시에 데이터를 읽을 수 있습니다.
주변 장치가 제공하는 정보는 서비스로 구성됩니다. 그리고 이러한 서비스는 특성으로 더 나뉩니다. 서비스를 게시판에서 다른 통지로, 서비스를 각 게시판에서 다른 단락으로 생각하십시오.
가속도계가 서비스라면 그들의 값인 X, Y 및 Z는 세 가지 특징이 될 수 있다. 이제 간단한 Arduino BLE 예제를 살펴보겠습니다.
Arduino BLE 예 1 – 배터리 잔량 표시기
이 예에서는 BLE를 통해 스마트 폰을 사용하여 Arduino의 핀 A0에 연결된 배터리 레벨을 읽는 방법을 설명합니다. 이것은 코드입니다. 이것은 약간 변경 한 배터리 모니터의 예제 코드와 거의 동일합니다. 설명해 드리겠습니다.
먼저 라이브러리 관리자에서 ArduinoBLE 라이브러리를 설치해야 합니다.
스케치 환경에서 메뉴 -> 툴 -> 라이브러리 매니저를 선택합니다.

라이브러리 매니저 화면에서 "ArduinoBLE"로 검색하고 간단하게 설치합니다. 화면의 맨 위 ArduinoBLE를 선택해 설치합니다.

Arduino BLE 튜토리얼 배터리 잔량 표시기 코드
//Arduino BLE Tutorial Battery Level Indicator Code
//코드 출처: https://rootsaid.com/arduino-ble-example/
//마지막 수정일: 2020. 05.01
//
#include <ArduinoBLE.h>
BLEService batteryService("1101");
BLEUnsignedCharCharacteristic batteryLevelChar("2101", BLERead | BLENotify);
void setup() {
Serial.begin(9600);
while (!Serial);
pinMode(LED_BUILTIN, OUTPUT);
if (!BLE.begin())
{
Serial.println("starting BLE failed!");
while (1);
}
BLE.setLocalName("BatteryMonitor");
BLE.setAdvertisedService(batteryService);
batteryService.addCharacteristic(batteryLevelChar);
BLE.addService(batteryService);
BLE.advertise();
Serial.println("Bluetooth device active, waiting for connections...");
}
void loop()
{
BLEDevice central = BLE.central();
if (central)
{
Serial.print("Connected to central: ");
Serial.println(central.address());
digitalWrite(LED_BUILTIN, HIGH);
while (central.connected()) {
int battery = analogRead(A0);
int batteryLevel = map(battery, 0, 1023, 0, 100);
Serial.print("Battery Level % is now: ");
Serial.println(batteryLevel);
batteryLevelChar.writeValue(batteryLevel);
delay(200);
}
}
digitalWrite(LED_BUILTIN, LOW);
Serial.print("Disconnected from central: ");
Serial.println(central.address());
}
Arduino Bluetooth 배터리 잔량 표시기 코드 설명
#include <ArduinoBLE.h>
BLEService batteryService("1101");
BLEUnsignedCharCharacteristic batteryLevelChar("2101", BLERead | BLENotify);
코드의 첫 번째 줄은 ArduinoBLE.h 파일을 포함하는 것입니다. 그런 다음 배터리 서비스와 배터리 잔량 특성을 여기에 선언합니다. 여기서는 BLERead 및 BLENotify의 두 가지 권한을 부여합니다.
BLERead는 중앙 장치 (휴대폰)가 주변 장치 (Arduino)에서 데이터를 읽을 수 있도록 합니다. 그리고 BLENotify를 사용하면이 특성이 변경되면 원격 클라이언트가 알림을 받을 수 있습니다. 이제 설정 기능으로 넘어갑니다.
Serial.begin(9600);
while (!Serial);
pinMode(LED_BUILTIN, OUTPUT);
if (!BLE.begin())
{
Serial.println("starting BLE failed!");
while (1);
}
시리얼 통신과 BLE를 초기화하고 시리얼 모니터가 열릴 때까지 기다립니다. BLE 장치의 로컬 이름을 설정하십시오. 이 이름은 광고 패킷에 표시되며 원격 장치에서 이 BLE 장치를 식별하는 데 사용할 수 있습니다.
BLE.setLocalName("BatteryMonitor");
BLE.setAdvertisedService(batteryService);
batteryService.addCharacteristic(batteryLevelChar);
BLE.addService(batteryService);
여기서는 서비스 UUID 및 특성에 대한 값을 추가하고 설정합니다.
BLE.advertise();
Serial.println("Bluetooth device active, waiting for connections...");
그리고 BLE 광고를 시작하겠습니다. BLE 광고 패킷을 지속적으로 전송하기 시작하고 새 연결을 수신할 때까지 원격 BLE 중앙 장치에 표시됩니다.
BLEDevice central = BLE.central();
if (central) {
Serial.print("Connected to central: ");
Serial.println(central.address());
digitalWrite(LED_BUILTIN, HIGH);
그리고 여기 루프 기능이 있습니다. 모든 설정이 완료되고 광고가 시작되면 장치는 중앙 장치를 기다립니다. 연결되면 장치의 MAC 주소가 표시되고 내장 LED가 켜집니다.
while (central.connected()) {
int battery = analogRead(A0);
int batteryLevel = map(battery, 0, 1023, 0, 100);
Serial.print("Battery Level % is now: ");
Serial.println(batteryLevel);
batteryLevelChar.writeValue(batteryLevel);
delay(200);
}
이제 A0에서 아날로그 전압을 판독하기 시작합니다. A0은 0에서 1023 사이의 값이 되고 0에서 100 사이의 값으로 매핑됩니다. 직렬 모니터에서 배터리 수준을 인쇄하고 배터리 수준 특성에 대한 값이 기록되고 200ms 동안 기다립니다. 그 후 중앙 장치가 주변 장치에 연결되어 있으면 전체 루프가 다시 실행됩니다.
digitalWrite(LED_BUILTIN, LOW);
Serial.print("Disconnected from central: ");
Serial.println(central.address());
연결이 끊어지면 중앙 장치에 메시지가 표시되고 LED가 꺼집니다.
Android 용 앱 설치

Android 스마트 폰에서 “nRF Connect”앱을 설치하십시오. 그것을 열고 스캐너를 시작하십시오. 장치 목록에 장치 "Battery Monitor"가 나타납니다. 이제 연결을 탭 하면 새 탭이 열립니다.

배터리 서비스를 탭하면 Arduino에서 배터리 잔량을 읽을 수 있습니다.

여기까지 정리하고 테스트 하기!
참고 자료
Arduino Nano 33 Sense | BLE Battery Level Tutorial
Arduino BLE Example Explained Step by Step
Getting Started with Bluetooth LE on the Arduino Nano 33 Sense
'개발자 > Arduino' 카테고리의 다른 글
| NANO 33 BLE Sense - 6 온보드 컬러 인식 RGB센서 실습 (0) | 2020.05.10 |
|---|---|
| NANO 33 BLE Sense - 5 온보드 제스처 센싱 실습 (0) | 2020.05.10 |
| NANO 33 BLE Sense - 4. 온습도 센서 HTS221 실습 (0) | 2020.05.10 |
| NANO 33 BLE Sense - 3 기압 센서 사용해보기 (0) | 2020.05.10 |
| Arduino Nano 33 BLE Sense 개발 가이드 4 - 센서 종합 테스트 (0) | 2020.05.01 |
| Arduino NANO 33 BLE Sense 개발 가이드 3 - 센서 다루기 (2) | 2020.05.01 |
| Arduino NANO 33 BLE Sense 개발 가이드 2 - Pinmap과 기능 훑어보기 (0) | 2020.05.01 |
| Arduino NANO 33 BLE Sense 개발 가이드 1 - 시작하기 (2) | 2020.05.01 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩