#include <M5StickC.h>
// the setup routine runs once when M5StickC starts up
void setup(){
// Initialize the M5StickC object
M5.begin();
// LCD display
M5.Lcd.print("Hello World");
}
// the loop routine runs over and over again forever
void loop() {
}
M5Stack를 이용해서 BLE 서버를 만들고 App Inventor를 이용해서 안드로이드 용 BLE 클라이언트를 만들어 보았습니다.
BLE통신을 간단하게 설명하면, BLE 서버는 BLE 이름, UUID(고유주소), 거리 정보를 송출하고, 이 정보로 BLE 클라이언트가 접속하면, BLE 기기는 다른 BLE 클라이언트가 접속하지 않도록, BLE 이름을 더 이상 송출하지않고, 서비스목록과 해당 서비스의 특성 정보를 송출합니다. BLE 클라이언트는 필요한 서비스와 특성을 찾아서 용도에 따라 다르겠지만 여기 예제에서는 간단하게 문자열을 주고 받도록 했습니다.
M5Stack BLE 서버 만들기
서비스 UUID, 특성 UUID를 미리 정해야 합니다. 예제 소스에는 상수로 미리 만들어 두었습니다.
BLE 접속상태의 이벤트로 받기 위해서 BLEServerCallbacks 클래스를 상속받아서 구현하고, 서비스의 특성을 이용해서 문자열 수신하는 이벤트를 받기 위해서 BLECharacteristicCallbacks 클래스를 상속 받아서 구현 합니다.
전체 소스
#include <M5Stack.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <BLE2902.h>
// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
bool deviceConnected = false;
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
M5.Lcd.println("connect");
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
M5.Lcd.println("disconnect");
deviceConnected = false;
}
};
class MyCallbacks: public BLECharacteristicCallbacks {
void onRead(BLECharacteristic *pCharacteristic) {
M5.Lcd.println("read");
pCharacteristic->setValue("Hello World!");
}
void onWrite(BLECharacteristic *pCharacteristic) {
M5.Lcd.println("write");
std::string value = pCharacteristic->getValue();
M5.Lcd.println(value.c_str());
}
};
void setup() {
Serial.begin(115200);
M5.begin();
M5.setWakeupButton(BUTTON_A_PIN);
M5.Lcd.println("BLE start.");
m5.Speaker.mute();
BLEDevice::init("m5-stack"); // BLD 이름 설정
BLEServer *pServer = BLEDevice::createServer(); // BLE 서버 생성
pServer->setCallbacks(new MyServerCallbacks()); // BLE 상태 콜백 함수 등록 (접속 이벤트 처리)
BLEService *pService = pServer->createService(SERVICE_UUID); // 서비스 UUID 등록
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_INDICATE
); // BLE 특성 등록
pCharacteristic->setCallbacks(new MyCallbacks()); // BLE 문자열 수신 콜백 함수 등록
pCharacteristic->addDescriptor(new BLE2902());
pService->start(); // BLE 서버 실행 -> BLE 이름 노출
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
if(M5.BtnA.wasPressed()) {
M5.powerOFF();
}
if (deviceConnected) { // BLE가 연결되어 있는 경우
if(M5.BtnB.wasPressed()) { // M5Stack의 B버튼이 선택한 경우
M5.Lcd.println("Button B pressed!");
pCharacteristic->setValue("Button B pressed!"); // BLE 클라이언트에 전달할 문자열 설정
pCharacteristic->notify(); // BLE 클라이언트에 문자열 전달
}
}
M5.update();
}
App Inventor 2 : BLE 클라이언트 만들기
App Inventor는 MIT에서 만든 블럭 형태의 코딩으로 안드로이드 어플을 쉽게 만들 수 있어서 IOT 개발시 많이 사용됩니다. 기본적으로 BT 통신만 지원했고, BLE 통신은 지원하지 않았지만, 최근에 확장 라이브러리를 통해서 지원하고 있습니다. BLE 확장 라이브러리를 다운 받아서 Import 하시면 BLE 통신을 구현 할 수 있습니다.
예제는 BLE 목록을 조회하고, 조회된 목록에서 M5Stack를 선택하여 BLE 서버에 접속하고, 미리 정해둔 서비스와 특성을 등록하고, M5Stack에서 B버튼을 선택시 전달 받은 문자열을 텍스트박스에 출력하고, 안드로이드 어플에서 문자열을 M5Stack에 전송 합니다.
안녕하세요 현재 앱 인벤터에서 ble를 추가하고 블루투스4.0을 연결하기 위해서 어플을 제작하는 중에 있습니다. 그런대 제가 생각한것 만큼 블루투스 연결이 잘 안되는대 혹시 프로젝트 파일이나 apk 공유해주실수 있나요....
갤럭시 s9+에서 어플을 사용할 예정이고 제가 연결하고 싶은 기기는 TDA7492P 2*25라는 제품으로 디지털 앰프 모듈입니다 일반적인 방법으로 연결이 되지않아 BLE를 사용하려고 합니다
M5Stack Faces의 GameBoy 키보드로 게임을 하기 위해서 게임파일 (NES 파일)을 M5Stack에 업로드 하는 방법을 정리해 보았습니다.
펌웨어 다운로드
Github에서 firmware.zip이라는 게임 보이 시뮬레이터 펌웨어를 다운로드하십시오. 그리고 firmware.zip의 압축을 풉니다.
게임파일 (NES 파일) 업로드
Open Flash Download Tools Espressif(다운로드)에서 [ESP32 DownloadTool] 옵션을 선택하고 4 개의 파일을 선택한 후 다음 그림과 같이 해당 작업을 실행하십시오. (펌웨어 파일 선택, 직렬 포트, [ERASE] 및 프로그램 플래시[START] )
ESPFlashDownloadTool_v3.6.4.exe 실행 - [ESP32 DownloadTool] 버튼 선택 - 펌웨어파일 선택 - COM포트 / 속도 설정 - [ERASE] 버튼 선택 - [START] 버튼 선택
[리셋] 버튼 선택
실행
M5Stack 물품 구매는 <네이버 검색/쇼핑에서 M5StackKorea>를 검색하시거나, M5Stack 공식 파트너인 <위즈네트 쇼핑몰: Shop.wiznet.io> 으로 접속하세요.
댓글을 달아 주세요