반응형
오마이 갓,,
꿀같던 연휴를 뒤로하고.. 출근을 했다
오늘은 교육을 듣고 연구실 프로젝트를 진행했다
금요일날 퇴근을 하고 소장님이랑 미팅을 하니..
기존에 데이터 저장공간이 300개였는데 999개로 늘리고 그에따라서 데이터 전송을 999개로 늘려야했기 때문에
한 캐릭터리스틱에 512바이트이기 때문에 최대 12개씩 전송되는 방법으로 전송을 하려면 84번의 고강도 반복이 필요했다
if-else 84개를 만들다가 눈알이 돌아 갈 것 같았다..
노가다 하다가 이건 아닌것 같아 배열을 이용해보기로 했다
void ble_send(){
File file = SPIFFS.open("/test_data2.txt" , "r" ); // 파일 읽기전용으로 오픈
file.seek(((diff_num+1)*42),SeekSet); // 1번 찾아서
String dataString = file.readStringUntil(EOF) ; // 그 번호부터 파일 끝까지 dataString에 저장
file.close(); // 파일 닫음
int data_byte = 504; // 최대로 보낼 수 있는 데이터 바이트 수
String sub[84] = {"",}; // 스트링 저장공간
bool s[84] = {0,}; // 해당 세트의 참 거짓 배열
int data_numbers = (dataString.length()/504); // 읽은 데이터가 몇 세트인지 개수 확인
if(data_numbers > 0){ // 데이터 세트가 0보다 크면
for(int i = 0; i<(data_numbers); i++){
sub[i] += dataString.substring(data_byte*i,data_byte*(i+1));
} // 데이터를 504바이트씩 쪼개서 sub[] 배열에 넣음
}
sub[data_numbers] += dataString.substring(data_byte*data_numbers,dataString.length()); // 84번 저장
// 만약 6.5 세트이면 6세트만큼은 위에서 넣었으니 나머지 .5세트에 해당하는 데이터를 넣음
s[data_numbers] = 1; // 해당 세트에 해당하는 불리언 배열값을 참으로 넣음
if(s[data_numbers] == 1){ // 해당 세트를 확인하고
for(int i= 0; i < (data_numbers+1); i++){ // 0번부터 해당 세트번까지 반복
pCharacteristic->setValue(sub[i].c_str()); // setValue에 스트링 값을 char배열로 치환해서
pCharacteristic->notify(); // notify
}
s[data_numbers] = 0; // 불리언 배열 초기화
}
}
이렇게 짧게 구현을 했다
반응형
근데 이렇게 하다보니 데이터 전송을 하는데 999개중 324번째의 데이터까지밖에 오지않았다..
왜 이럴까 생각하며 계속 반복을 해보니 어떨때는 데이터가 324가오고, 어떨때는 348번째까지 오고,, 하는거 보니
esp32의 송신속도와 스마트폰의 수신속도의 차이 때문 인 것 같았다. 그래서 for 구문 안 notify 아래에 delay를 넣어보니
전송되는 데이터가 400개가 되었고 delay시간을 늘리니 500,,, 700,, 점점 증가했다 결국 루프 하나당 delay를 25정도는 줘야
999개의 데이터가 정상적으로 전송이 되었다!
if(s[data_numbers] == 1){ //데이터 전송
for(int i= 0; i < (data_numbers+1); i++){
pCharacteristic->setValue(sub[i].c_str());
pCharacteristic->notify();
delay(25);
}
BLE 의 notify를 이용하여 파일 전송을 할 때 얼핏보면 송 수신 데이터가 빠른 것 같지만,
시퀀스가 안맞으면 데이터가 유실될 수 있기 때문에 notfity후 delay를 어느정도 주는것은 필요 할 것 같다.!!
반응형
'🎟Esp32' 카테고리의 다른 글
연구실 프로젝트 - Esp32 u8g2 (0) | 2022.08.05 |
---|---|
연구실 프로젝트 - Esp32 SPIFFS (0) | 2022.08.05 |
연구실 프로젝트 - Esp32 BLE Server (0) | 2022.08.05 |
연구실 프로젝트 - 개요(Esp32 , BLE, SPIFFS, u8g2 ...) (0) | 2022.08.05 |