개발자/Arduino

Arduino Nano 33 BLE Sense 개발 가이드 5 - BLE 통신 테스트

지구빵집 2020. 5. 1. 19:23
반응형

 

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 보드다. 

 

아두이노 nano의 새롭고 강력한 버전

 

BLE 및 Bluetooth 5 연결을 지원하는 Nina B306 모듈로 구동됩니다. 내장된 Bluetooth 모듈은 매우 낮은 전력을 소비하며 Arduino 라이브러리를 사용하여 쉽게 액세스 할 수 있습니다. 따라서 프로젝트를 보다 쉽게 ​​프로그래밍하고 무선 연결할 수 있습니다. 프로젝트에 Bluetooth 기능을 추가하기 위해 외부 Bluetooth 모듈을 사용할 필요가 없습니다. 공간과 전력을 절약하십시오.

 

Arduino BLE – Bluetooth 저 에너지 소개

 

BLE는 매우 낮은 데이터 전송률로 매우 낮은 전력 소비 상황에 최적화된 Bluetooth 버전입니다. 몇 주 또는 몇 달 동안 코인 셀을 사용하여 이러한 장치를 작동할 수도 있습니다.

 

Arduino는 BLE에 대한 훌륭한 소개(아두이노 BLE 라이브러리)를 볼 수 있지만 여기서는 BLE 통신을 시작할 수 있는 간단한 소개를 제공합니다.

 

기본적으로 BLE 통신 블록을 고려할 때 두 가지 유형의 장치가 있습니다.

 

- 주변 장치

- 중앙 장치

 

주변 장치는 다양한 공지의 데이터를 읽거나 새로운 공지를 보드에 고정할 수 있는 공지 게시판과 같습니다. 이 정보가 필요한 모든 장치에 대한 데이터를 게시합니다.

 

BLE Devices – Peripheral and Central Devices 이미지는 https://rootsaid.com/arduino-ble-example/

 

중앙 장치는 게시판에서 알림을 읽는 사람과 같습니다. 여러 사용자가 동시에 게시판에서 데이터를 읽고 가져올 수 있습니다. 마찬가지로 여러 중앙 장치가 주변 장치에서 동시에 데이터를 읽을 수 있습니다.

 

주변 장치가 제공하는 정보는 서비스로 구성됩니다. 그리고 이러한 서비스는 특성으로 더 나뉩니다. 서비스를 게시판에서 다른 통지로, 서비스를 각 게시판에서 다른 단락으로 생각하십시오.

 

가속도계가 서비스라면 그들의 값인 X, Y 및 Z는 세 가지 특징이 될 수 있다. 이제 간단한 Arduino BLE 예제를 살펴보겠습니다.

 

Arduino BLE 예 1 – 배터리 잔량 표시기

 

이 예에서는 BLE를 통해 스마트 폰을 사용하여 Arduino의 핀 A0에 연결된 배터리 레벨을 읽는 방법을 설명합니다. 이것은 코드입니다. 이것은 약간 변경 한 배터리 모니터의 예제 코드와 거의 동일합니다. 설명해 드리겠습니다.

 

먼저 라이브러리 관리자에서 ArduinoBLE 라이브러리를 설치해야 합니다.

 

스케치 환경에서 메뉴 -> 툴 -> 라이브러리 매니저를 선택합니다.

 

스케치 환경에서 메뉴 -> 툴 -> 라이브러리 매니저를 선택

 

라이브러리 매니저 화면에서 "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 용 앱 설치

 

app “nRF Connect” 설치

 

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

 

nRF Connect

 

배터리 서비스를 탭하면 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 

 

 

 

 

반응형