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 |
더욱 좋은 정보를 제공하겠습니다.~ ^^