개발자/Arduino

Portenta H7 BLE 연결

지구빵집 2021. 3. 3. 10:19
반응형

 

 

Portenta H7의 BLE 연결

 

이 튜토리얼은 Portenta H7에서 BLE 연결을 사용하여 외부 Bluetooth 애플리케이션을 사용하여 내장 LED를 제어하는 ​​방법을 설명합니다. 

 

Portents H7의 BLE 연결

 

Portents H7의 BLE 연결

 

이 튜토리얼에서는 Portenta H7에서 Low Energy Bluetooth(BLE)를 활성화하여 외부 블루투스 장치를 켜거나 끄는 방식으로 내장 LED를 제어할 수 있습니다.

 

배울 것

 

 

필수 하드웨어 및 소프트웨어

 

 

Portenta 및 Low Energy Bluetooth (BLE)

 

H7의 온보드 WiFi / Bluetooth 모듈은 Arduino Nano 33 IoT 또는 대부분의 최신 스마트 폰과 같은 BLE도 지원하는 장치에 쉽게 연결할 수 있는 유연성을 보드에 제공하는 BLE 기능을 제공합니다. 기존 Bluetooth와 비교하여 BLE는 유사한 통신 범위를 유지하면서 상당한 전력 소비와 비용을 줄 이도록 설계되었습니다. 

 

 

개발 환경 구성

 

Bluetooth를 통해 Portenta H7과 통신하기 위해 Bluetooth 네트워크를 시작하고 LED를 제어하는 ​​데 사용되는 모바일 장치를 연결할 수 있는 미리 빌드된 스케치를 업로드하는 것으로 시작하겠습니다. 스케치는 BLE 모듈을 활성화하고 다른 장치에서 제공하는 서비스와의 스캔, 연결 및 상호 작용과 같은 중요한 기능을 처리하는 ArduinoBLE 라이브러리를 사용합니다. 또한 모바일 장치에서 실행되는 타사 응용 프로그램 (예 : nRF Connect )을 사용하여 장치를 보드에 연결하고 내장 LED를 제어할 수 있습니다. 

 

BLE 구성 체계

 

1. 기본 설정

 

USB-C 케이블을 사용하여 Portenta 보드를 컴퓨터에 연결하고 Arduino IDE 또는 Arduino Pro IDE를 엽니다. 보드에서 Arduino 스케치 파일을 처음 실행하는 경우 진행하기 전에 Arduino 용 Portenta H7을 설정하는 방법을 확인하는 것이 좋습니다. 

 

Portenta H7은 적절한 USB-C 케이블을 사용하여 컴퓨터에 연결할 수 있습니다.

 

2. ArduinoBLE 라이브러리 설치

 

사용 중인 Arduino IDE에 ArduinoBLE 라이브러리를 설치해야 합니다. 이 예에서는 고전적인 Arduino IDE를 사용합니다. 에 라이브러리 이동 설치하려면 : 도구 -> Libararies 관리... 입력 ArduinoBLE을 클릭 설치합니다. ArduinoBLE 버전 1.1.3 이상을 설치해야 합니다. 

 

라이브러리 관리자에서 BLE 라이브러리를 다운로드합니다.

 

3. BLE 스케치 만들기

 

다음 예제 스케치를 사용하여 Portenta를 프로그래밍해 보겠습니다. BLE 모듈을 올바르게 초기화할 수 있는 경우 스케치를 업로드한 후 1 초 동안 파란색 LED가 켜집니다. 실패하면 빨간색 LED가 대신 켜집니다. IDE의 새 스케치에 다음 코드를 복사하여 붙여 넣거나 다음 위치에서 엽니다. 예제-> Arduino_Pro_Examples-> Portenta H7의 BLE 연결-> PortentaBLE  

 

#include <ArduinoBLE.h>

BLEService ledService("19b10000-e8f2-537e-4f6c-d104768a1214");

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19b10000-e8f2-537e-4f6c-d104768a1214", BLERead | BLEWrite);

const int ledPin = LED_BUILTIN; // Pin to use for the LED

void setup() {
  Serial.begin(9600);
  //while (!Serial);   // Uncomment to wait for serial port to connect.

  // Set LED pin to output mode
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  // Begin initialization
  if (!BLE.begin()) {
    Serial.println("Starting BLE failed!");
    digitalWrite(LEDR, LOW);
    delay(1000);
    digitalWrite(LEDR, HIGH);

    // Stop if BLE couldn't be initialized.
    while (1);
  }

  // Set advertised local name and service UUID:
  BLE.setLocalName("LED-Portenta-01");
  BLE.setAdvertisedService(ledService);

  // Add the characteristic to the service
  ledService.addCharacteristic(switchCharacteristic);

  // Add service
  BLE.addService(ledService);

  // Set the initial value for the characeristic:
  switchCharacteristic.writeValue(0);

  // start advertising
  BLE.advertise();
  digitalWrite(LEDB, LOW);
  delay(1000);
  digitalWrite(LEDB, HIGH);
  Serial.println("BLE LED Control ready");
}

void loop() {
  // Listen for BLE peripherals to connect:
  BLEDevice central = BLE.central();

  // If a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // Print the central's MAC address:
    Serial.println(central.address());
    digitalWrite(LEDB, HIGH);
    delay(100);
    digitalWrite(LEDB, LOW);
    delay(100);
    digitalWrite(LEDB, HIGH);

    // While the central is still connected to peripheral:
    while (central.connected()) {
      // If the remote device wrote to the characteristic,
      // Use the value to control the LED:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // Any value other than 0
          Serial.println("LED on");
          digitalWrite(ledPin, LOW);          // Will turn the Portenta LED on
        } else {                             
          Serial.println("LED off");
          digitalWrite(ledPin, HIGH);         // Will turn the Portenta LED off          
        }
      }
    }

    // When the central disconnects, print it out:
    Serial.print("Disconnected from central: ");
    Serial.println(central.address());    
    digitalWrite(LEDB, HIGH);
    delay(100);
    digitalWrite(LEDB, LOW);
    delay(100);
    digitalWrite(LEDB, HIGH);
  }
}

 

이 예에서는 장치의 LED를 제어하기 위해 미리 정의된 블루투스 번호 코드 사전 설정을 사용합니다. 이 코드는 두 개의 BLE 장치가 데이터를 전송하는 방법을 정의하는 GATT 코드 라 고도합니다. 장치와 연결이 설정되면 16 비트 식별자 인 각 GATT 코드가 나중에 참조할 수 있도록 조회 테이블에 저장됩니다. 이러한 GATT 코드는 매우 길지만이 예제에서는 항상 동일한 코드입니다.

 

BLEService ledService("19b10000-e8f2-537e-4f6c-d104768a1214"); // BLE LED Service

 

Portenta에서 내장 LED는 LOW로 설정하여 켜지고 대부분의 다른 Arduino 보드와 반대되는 HIGH로 설정하면 꺼집니다. 

 

4. 스케치 업로드

 

내장 LED가 천천히 녹색으로 깜박이도록 재설정 버튼을 두 번 누릅니다. 그런 다음 메뉴에서 보드를 선택합니다. 도구 -> 보드 -> Arduino Portenta H7 (M7 코어) 

 

보드 선택기에서 Arduino Portenta H7 (M7 코어)을 선택합니다.

 

그런 다음 Portenta가 연결된 포트를 선택하고 스케치를 업로드하십시오. 코드를 보드에 업로드한 후 직렬 모니터를 열어 디버깅 메시지를 확인합니다. BLE 설정이 성공하면 메시지가 표시 BLE LED Control ready 됩니다. 문제 Starting BLE failed! 가 발생하면 Arduino BLE 라이브러리 (라이브러리 관리자에서)와 보드 (보드 관리자에서)를 최신 버전으로 업데이트하고 다시 시도하라는 메시지가 표시됩니다. 

 

Portenta가 연결된 포트를 선택하십시오.

 

5. 외부 장치 연결

 

모바일 장치에 nRF Connect 또는 BLE 연결을 허용하는 동등한 앱을 설치하십시오. 이 자습서의 나머지 부분에서는 nRF Connect를 참조합니다. 

 

Apple App Store 또는 Google Play Store에서 nRF Connect 앱을 다운로드합니다.

 

모바일 장치에 nRF 애플리케이션을 다운로드했으면 장치 목록에서 Portenta를 찾으십시오. nRF Connect를 사용하는 경우 보드를 더 쉽게 찾을 수 있도록 "Portenta"로 목록을 필터링할 수 있습니다.

 

  • 목록에서 보드를 찾으면 "연결"을 누릅니다.
  • "서비스"화면으로 이동하여 위쪽 화살표 버튼을 누릅니다.
  • "Bool"유형으로 전환하고 토글을 "True"로 이동합니다. "쓰기"를 탭 하여 대화 상자를 확인하면 내장 LED가 켜진 것을 볼 수 있습니다. 동일한 절차를 다시 수행하지만 토글스위치를 "False"로 설정하면 LED가 꺼집니다. 

 

nRF Connect 앱에서 Bool 토글 스위치를 사용하여 내장 LED를 토글합니다.

 

결론

이 튜토리얼은 BLE 연결을 사용하여 내장 LED를 연결하고 제어하는 ​​방법을 보여줍니다. Portenta와 두 장치 간의 기본 통신 기능이 있는 휴대폰 간의 간단한 BLE 연결이 어떻게 작동하는지 배웠습니다.

 

다음 단계

 

이제 Portenta를 BLE 끝점으로 구성하는 방법을 배웠으므로 양방향 통신을 용이하게 하기 위해 두 개의 Portentas (또는 기타 BLE 지원 Arduino 장치)를 사용해 볼 수 있습니다. 이를 달성하는 방법에 대한 자세한 정보는 BLE 라이브러리 참조 페이지에서 찾을 수 있습니다. 

 

 

문제 해결

 

스케치 업로드 문제 해결

 

스케치를 업로드하려고 할 때 업로드에 실패했다는 오류 메시지가 표시되면 Portenta H7이 부트 로더 모드에 있는 동안 스케치 업로드를 시도할 수 있습니다. 이렇게 하려면 재설정 버튼을 두 번 클릭해야 합니다. 녹색 LED가 페이드 인 / 아웃되기 시작합니다. 스케치를 다시 업로드하십시오. 업로드가 완료되면 녹색 LED가 페이딩을 중지합니다. 

 

본 포스팅의 원문을 참고하세요.

 

 

반응형