Nefry BT와 MIT App Inventor의 android 애플리케이션을 이용한 BLE 통신 이야기

안녕하세요.
저는 동해대학교에서 학생으로 일하고 있습니다.
계속
그러면 제목과 같이 Nefry BT로 안드로이드 앱에서 BLE(Bluetooth Low Energy) 통신을 하면서 이런 내용을 적어 봤습니다.
그래서 참고하면서 많이 했어요.
초보자라 잘 모르는 것들이 많습니다.
그럼에도 불구하고 참고만 해주시면 좋겠습니다.
실제로 만들어진 것은 Giithub 위에 있다.
연구실 모두와 함께 네프리 BT를 사용해 처음으로 아이오트 기기를 만들어 봤어요.
개요
• Android 애플리케이션을 통해 Nefry BT L 전송
·Nefry BT의 version은 1.0.5를 사용합니다.
(Nefry BT의 최신 버전은 왠지 잘 안 풀린다...)
마이크로컴퓨터 방면의 프로그램
우선 Nefry BT의 샘플 프로그램(BLE notify)을 참고해 개량했다.
그럼 제가 설명해 드릴게요.
github에 열거된 BLELED2_success.ino라는 프로그램을 보면서 나는 쉽게 이해할 수 있다고 생각한다.
UID 설정
먼저 UID의 Sevice와 Characteristic을 설정합니다.
이것은 검색하면 자동으로 생성되는 서비스가 있으니 마음대로 설정하세요.
#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
원하는 기능
안드로이드 프로그램의 버튼을 누르면 Nefry BT의 LED가 임의로 빛을 바꾸는 프로그램입니다.
따라서 이 프로그램은 다음과 같이 프로그램이 어떤 '문자열' 을 보내면 LED의 빛이 무작위로 변한다.
class MyCallbacks: public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic2) {
      std::string j = pCharacteristic2->getValue();

         randomSeed(analogRead(A0));

         if (j.length() > 0) {
         red=random(255);          //random関数は0-255の数値をランダムに返します。
         green=random(255);
         blue=random(255);
         Nefry.setLed(red,green,blue);
         delay(1000);
         Nefry.println("On");   
         }else{
         Nefry.println("Off");
         }
    }
};
MyCallbacks myCallbacks;//名前を端的にわかりやすくした
BLE의 초기 설정
// Create the BLE Device
  BLEDevice::init("MyESP32");

  /////////////////////////////////////////////////////////////////////
  //BLEServer *pServer = BLEDevice::createServer();
  BLEServer *pServer = new BLEServer();
  ///上の2行は同じ意味のようだが,Nefry BTのバージョンによってエラーが出るので,その都度,どちらかを置き換えて使うこと.
  ///最新のバージョンだと上の一行が正しい
  //////////////////////////////////////////////////////////////////////
   // Create the BLE Service
  BLEService *pService2 = pServer->createService(SERVICE_UUID2);
   //serviceのどういうことをやるかをcharacteristic(特性)を指定する,READ,WRITEなど 
  BLECharacteristic *pCharacteristic2 = pService2->createCharacteristic(
                                         CHARACTERISTIC_UUID2,
                                         BLECharacteristic::PROPERTY_READ |
                                         BLECharacteristic::PROPERTY_WRITE
                                       );
  pCharacteristic2->setCallbacks(&myCallbacks);//特性を指定したclassにもどす.機能の追加には&をつける.classはpythonみたいな感じ.読み込んだ値なども格納されている.
  pCharacteristic2->setValue("Hello");
 pService2->start();
pServer->getAdvertising()->start();
이런 느낌으로voidsetup에 프로그램을 하나 써요.
Android 애플리케이션
안드로이드 앱을 만들어 봤다고 하지만, 안드로이드 스튜디오를 능숙하게 사용할 수 있는 기술력이 있는 것은 아니어서 쉽게 앱을 만들 수 있다.먼저 위의 웹 사이트를 방문하십시오.
그리고 우선 Giithub의 프로그램을 실행해 봅시다.
https://github.com/minwinmin/NefryBT_BLE_AndroidApp
MIT inventor 가져오기 및 BLE 기능 추가 적용
1. MIT app inventor 액세스
위의 주소에 액세스하십시오. Creat apps!클릭하여 확인합니다.
MIT App Inventor
2. BLE 기능 추가
MIT App Inventor에서 BLE 기능을 사용하려면 라이브러리에 저장해야 합니다.
폴더에 'edu.mit.applinventor.ble.ix' 를 넣으십시오. 우선 'start new 프로젝트' 로 새 프로젝트를 만드십시오.
https://github.com/minwinmin/NefryBT_BLE_AndroidApp/tree/master/Androidapp_BLE
import 아까의ix 파일로 왼쪽에 있는 "Extension"을 누르십시오.

이렇게 하면 BLE 기능을 사용할 수 있습니다.
3. 프로그램 시작
다음 그림과 같이 BLENefryBT.아아를 채워주세요.

이렇게 나와야지.

4. 프로그램의 동작 확인
위의connect를 누르십시오.
이어 "Al componion"을 클릭합니다.QR 코드와 문자열이 나타납니다. 프로그램 측면에서 QR 코드를 읽거나 문자열을 입력하십시오. 다음과 같습니다.

예컨대 다음과 같은 느낌

5. 안드로이드 스마트폰에'MIT AI2 Companion'이라는 앱 가져오기
다운로드해 부팅 후 4에 나오는 QR코드나 코드를 입력하면 앱이 시작된다.(앱을 apk 형태로 출력해 스마트폰에 직접 설치하는 방법도 있다.)

애플리케이션 사용 방법

1. 스마트폰의 블루투스 설정을 켜고 앱에서'scan'을 눌러라
2. "Available Devices"를 선택하고 Nefry BT 측에서 설정한 장치 이름을 선택하여 짝짓기 완료
3. "Control"을 클릭하면 Nefry BT에 L 토치카를 표시합니다

Android 애플리케이션의 컨텐츠
MIT 앱 Inventor를 열고'블록'을 클릭해 어떤 프로그램인지 살펴본다.
그렇다면 우선 네프리 BT와 스마트폰에 대한 접근이 필요하다.
아래 그림은 BLE나 Bluetooth를 사용하는 데 필요한 기본 프로그램으로 어떤 프로그램이든 사용할 수 있다고 생각합니다.


다음에 "Botton1"즉 "Control"단추를 눌렀을 때의 프로그램을 기술합니다. 이것은 아래의 그림입니다.
여기서 중요한 것은 Nefry BT에 미리 기록된 프로그램이 설정한 '서비스 UID' 와'characteristic UID '가 일치한다는 것이다.
이번에는'Control'버튼을 누른 후'Hello'라는 문자열을 Nefry BT에 보내면 Nefry BT로 L 공격을 할 수 있다.

총결산
BLE를 사용할 수 있을 때 너무 즐거웠어요.
BLE 지식이나 안드로이드 애플리케이션에 대한 지식은 전혀 없지만, 왠지 해보니 뭔가 만들어진 것 같다.
그래서 저는 내용의 정확성에 대해 자신이 없기 때문에 저에게 참고를 해 주셨으면 합니다.

좋은 웹페이지 즐겨찾기