티스토리 뷰
Constants
[BiliMon266Constants.h]
#ifndef _BILIMON266_CONSTANTS_H_
#define _BILIMON266_CONSTANTS_H_
#include <Arduino.h>
#define UNDERTESTING false // 테스트용
// compile-time 제어 플래그: 슬레이브 검색/연동 활성화 여부
#define ISBLEENABLED true
// 원격 설정 주소
#define PAGEADDRESS_HOST "http://bilimon265.bilientsvc.org/dbentrance"
#define PAGEADDRESS_BILIENT "http://www.bilientsvc.net/BiliMon265/index.php"
#define PAGEADDRESS_DISCORD "http://211.37.176.108:3771/DsdMessage"
#define PAGEADDRESS_OTA64 "http://bilimon265.bilientsvc.org/ota65"
// 공통 설정 상수
#define TIMEZONE 9 // KR
#define CURRENT_VERSION "V3.0.0"
#define DEFAULTVALUE_DATATYPE "BM265V30" // 데이터 업로드 시 사용할 데이터 타입
#define THISDEVICEID "BMG00_A4833" // 마스터 기기 고유 ID
#define USERID_BMS "BilientManager"
#define USERPW_BMS "BS235.mgr"
#define CLIENTCODE "CODE-20260118"
#define DATAGROUP_CLIENT "BiliMon261"
#define THISDEVICEGROUP "BMG00A" // A: sub-group code
#define THISDATATABLE THISDEVICEID
#define DBNAME_SERVER "BM265_W01"
// 표준화 매핑 상수
#define DATAGROUP THISDEVICEGROUP
#define DATATYPE DEFAULTVALUE_DATATYPE
#define OTA_API_KEY "SECRET_DEVICE_KEY_2026"
// WiFi 기본 설정 (ConfigManager Fallback용)
#define SSID_aaa1 "aaa1"
#define SSPW_aaa1 "aaa1PW"
#define SSID_MASTER "iih2"
#define SSPW_MASTER "1032041032"
#define SSID_SELF "BiliMon"
#define SSPW_SELF "BiliMon20!"
// Wi-Fi SoftAP Portal Fallback 설정
#define USE_WIFI_PORTAL_FALLBACK true
#define EVENTMESSAGEVIADISCORD true
// BiliMon266 BLE 보안용 PIN코드 및 ezBLE 키 설정
#define DEFAULT_BLE_PINCODE "BiliMon266_SecretPIN_2026" // HMAC 무결성 및 레거시 핀코드
#define SHARED_AES_KEY "MG24_SECURE_KEY_A" // ezBLE 복호화 대칭키 (16바이트)
#define SHARED_HMAC_KEY "MG24_SECURE_KEY_A" // ezBLE 무결성 검증용 키
// BLE 및 제어 명령 상수 매크로 정의
#define BLE_SERVICE_UUID "0000FFF0-0000-1000-8000-00805F9B34FB"
#define BLE_CHARACTERISTIC_UUID_RX "0000FFF1-0000-1000-8000-00805F9B34FB"
#define BLE_CHARACTERISTIC_UUID_TIME "0000FFF2-0000-1000-8000-00805F9B34FB"
#define BLE_CHARACTERISTIC_UUID_TX "0000FFF3-0000-1000-8000-00805F9B34FB"
#define BLE_CHARACTERISTIC_UUID_DEV "0000FFF4-0000-1000-8000-00805F9B34FB"
#define BLE_SCAN_PREFIX "XIAO_MG24_"
#define SLAVE_DEV_NAME_VERIFIED "XIAO_MG24_Slave"
#define SLAVE_DEV_NAME_CANDIDATE "XIAO_MG24_Candidate"
#define CONTENT_NAME_REALTIME "RealtimeData"
#define CONTENT_NAME_UPLOAD "UploadData"
#define BLE_CMD_REQ_DATA "REQ_DATA"
#define BLE_CMD_ACK_REQ_DATA "ACK_REQ_DATA"
#define BLE_CMD_REBOOT "CMD_REBOOT"
#define BLE_CMD_SCAN_CLEAR "CMD_SCAN_CLEAR"
#define BLE_CMD_FORCE_TELEGRAM "CMD_FORCE_TELEGRAM"
#define BLE_CMD_SLAVE_DISCONNECT "CMD_SLAVE_DISCONNECT:"
#define BLE_CMD_SET_SCAN_PERIOD "CMD_SET_SCAN_PERIOD:"
#define BLE_CMD_SLAVE_CONTROL "CMD_SLAVE_CONTROL:"
// ----------------------------------------------------
// 로컬 cSlave_SensorsActuators 연동용 추가 설정 및 주기
// ----------------------------------------------------
#define UPLOAD_PERIOD_TC1047 3600000L // 1시간 (정기 업로드 주기)
#define UPLOAD_PERIOD_LIS2DW12TR 3600000L // 1시간
#define UPLOAD_PERIOD_DHT11 3600000L // 1시간
#define ADDR_LIS2DW12TR 0x19 // LIS2DW12TR 가속도 센서 I2C 주소
// Arduino Nano ESP32 물리 핀 맵핑
#define PIN_TC1047 A0 // 아날로그 온도 센서 핀 (A0)
#define PIN_DHT11 D2 // DHT11 디지털 온습도 센서 핀 (D2)
// =============================================================================
// BiliMonConstants.h 기반 ADS1219 & BatteryTester 관리 전용 매크로 이식 병합
// =============================================================================
#define ISTESTING false
#define ISPRINTABLE true
#define IS4HIGHCURRENT false
#define IS4DATARATE_100 true
// BatteryTester 하드웨어 탑재 유무 구분 상수
#define SYSTEM_HAS_BATTERY_TESTER true
#define ADDRESSNUMBER 10
#define CHANNELNUMBER 2
#define MONITORINGNUMBER 60
#define mVARATIO_0R1OHM 100.0 // 0.1 Ohm
#define mVARATIO_AMC1100 8.0
#define MULTIPLIER_AMC1311 1.0
#define CONFIG_REGISTER_ADDRESS 0x40
#define ADDRESS_ADS1219A0 0X40
#define ADDRESS_BATTERYTESTER0 0x20
#define ADDRESS_ADS1219A1 0X41
#define ADDRESS_BATTERYTESTER1 0x21
#define ADDRESS_ADS1219A2 0X42
#define ADDRESS_BATTERYTESTER2 0x22
#define ADDRESS_ADS1219A3 0X43
#define ADDRESS_BATTERYTESTER3 0x23
#define ADDRESS_ADS1219A4 0X44
#define ADDRESS_BATTERYTESTER4 0x24
#define ADDRESS_ADS1219A5 0X45
#define ADDRESS_BATTERYTESTER5 0x25
#define ADDRESS_ADS1219A6 0X46
#define ADDRESS_BATTERYTESTER6 0x26
#define ADDRESS_ADS1219A7 0X47
#define ADDRESS_BATTERYTESTER7 0x27
#define ADDRESS_ADS1219A8 0X48
#define ADDRESS_BATTERYTESTER8 0x28
#define ADDRESS_ADS1219A9 0X49
#define ADDRESS_BATTERYTESTER9 0x29
#define ADS1219STATUS_SETCHANNEL 100
#define ADS1219STATUS_READCHANNEL 200
#if (IS4DATARATE_100)
#define CONF_ADS1219_CH1x1 0X06 // 0x06 Channel#1,90SPS, x1
#define CONF_ADS1219_CH2x1 0X26 // 0x26 Channel#2, 90SPS, x1
#define CONVERSION_INTERVAL 41 // [ms]
#else
#define CONF_ADS1219_CH1x1 0X02
#define CONF_ADS1219_CH2x1 0X22
#define CONVERSION_INTERVAL 90 // [ms]
#endif
#define ADDRESSSTATUS_INITIALIZED 10
#define ADDRESSSTATUS_EVENTED 100
#define ADDRESSSTATUS_OPERATING 200
#define ADDRESSSTATUS_IDLING 400
#define ADDRESSSTATUS_WAITING 300
#define ADDRESSSTATUS_TESTERMODECHANGED 130
#define ADDRESSSTATUS_MONITORING 800
#define ADDRESSSTATUS_NONE 900
#define ADDRESSSTATUS_DISCONNECTED 940
#define ADDRESSSTATUS_CONNECTED 930
#define TESTERSTATUS_REPETITION 160
#define ADDRESSSTATUS_REPETITION TESTERSTATUS_REPETITION
#define TESTERMODE_MONITORING 100
#define TESTERMODE_INTERMITTENTDISCHARGE 210
#define TESTERMODE_INTERMITTENTCHARGE 310
#define TESTERMODE_CONTINUOUSDISCHARGE 220
#define TESTERMODE_CONTINUOUSCHARGE 320
#define TESTERMODE_CHANGING 910
#define TESTERMODE_OFF 400
#define TESTERMODE_NONE 900
#define ISSTAGECONTINUING 10
#define IS4SHORTUPLOAD 12
#define IS4EVENTED 16
#define TONEXTSTAGE 20
#define ISAFTERPEAKDETECTED 22
#define ISCONDITIONSATISFIED 26
#define ISVOLTAGEDROPPED 32
#define ISVOLTAGEJUMPED 36
#define ISCURRENTDROPPED 42
#define ISCURRENTJUMPED 46
#define ISVALUECHANGED 50
#define ISVALUEDROPPPED 52
#define ISVALUEJUMPED 56
#define ISSIGNCHANGED 90
#define STARTMODE_POWER 100
#define STARTMODE_EXCEPTION 200
#define LOWERLIMIT_VOLTAGE 0.1
#define OPENVALUE_VOLTAGE 0.1
#define DEFAULT_REFERENCECURRENT 0.0
#define RESISTANCEHIGH 1000.
#define RESISTANCELOW_A0C1 20.
#define LSBVALUE 244140
#define MULTIPLIER_A0C1 MULTIPLIER_AMC1311
#if (IS4HIGHCURRENT)
#define mVARATIO_A0C2 mVARATIO_ACS712ELCTR_05B_T
#define MINIMUMVALUE_CURRENT 0.01
#define MINIMUMVALUE_VOLTAGE 1.1
#define OPENVALUE_CURRENT 0.005
#else
#define mVARATIO_A0C2 (mVARATIO_0R1OHM * mVARATIO_AMC1100)
#define MINIMUMVALUE_CURRENT 10.
#define MINIMUMVALUE_VOLTAGE 1.1
#define OPENVALUE_CURRENT 2.
#endif
#define BASE_VOLTAGE_VALUE 1.0 // 기준 전압 (V)
#define BASE_CURRENT_VALUE 10.0 // 기준 전류 (mA)
#define LIMIT_MIN_VOLTAGE_INITIAL 1000.0
#define LIMIT_MAX_VOLTAGE_INITIAL 0.1
#define LIMIT_BATTERY_DISCHARGE_ABSOLUTE_MIN 0.05
#define READVALUE_NONE -9999.9
#define REQUESTBYTENUMBER 3
#define MAXNUMBER_VALUE 20
#define PWMSTEP_CHARGE 50
#define PWMSTEP_DISCHARGE 50
#define PWMDEFAULT_CHARGE 50
#define PWMDEFAULT_DISCHARGE 50
#define DEFAULTVALUE_PWM 23
#define PWM_STEP 50
#define STARTVALUE_PWM 100
#define LIMIT_VALUESTRINGLENGTH 800
#define LIMIT_OPERATIONTIME 60000L
#define TESTERSTATUS_CHARGE 'C'
#define TESTERSTATUS_DISCHARGE 'D'
#define TESTERSTATUS_OFF 'O'
#define TESTERSTATUS_ACK 'A'
#define TESTERSTATUS_MONITORING 'M'
#define UPDATEPERIOD_OPERATING (60L * 1000)
#define UPDATEPERIOD_IDLING (60L * 60 * 1000)
#define UPDATEPERIOD_WAITING (6L * 60 * 60 * 1000)
#define PERIOD_TESTERCHARGE 45000L
#define PERIOD_TESTERDISCHARGE 45000L
#define PERIOD_TESTEROFF 15000L
#define WAITINGTIME_300_BEFOREDISCHARGE (6L * 60 * 60 * 1000)
#define WAITINGTIME_400_BEFORECHARGE (6L * 60 * 60 * 1000)
// 센서 데이터 및 이력 추적을 위한 구조체 정의
struct sValueInfo {
unsigned long elapsedTime;
float thisValue;
};
struct sAccValueInfo {
unsigned long elapsedTime;
float accX;
float accY;
float accZ;
};
struct sVIValueInfo {
unsigned long elapsedTime;
float voltValue;
float currValue;
};
struct sValueHistoryInfo {
bool isResetted = false;
sValueInfo firstInfo;
sValueInfo currentInfo;
sValueInfo maxInfo;
sValueInfo minInfo;
};
struct sAccHistoryInfo {
bool isResetted = false;
sAccValueInfo firstInfo;
sAccValueInfo currentInfo;
sAccValueInfo maxInfo_X;
sAccValueInfo maxInfo_Y;
sAccValueInfo maxInfo_Z;
sAccValueInfo minInfo_X;
sAccValueInfo minInfo_Y;
sAccValueInfo minInfo_Z;
};
struct sVIHistoryInfo {
bool isResetted = false;
sVIValueInfo firstInfo;
sVIValueInfo currentInfo;
sVIValueInfo maxVoltage;
sVIValueInfo minVoltage;
sVIValueInfo maxCurrent;
sVIValueInfo minCurrent;
};
// 구조체 갱신 헬퍼 인라인 함수들
inline sValueHistoryInfo UpdateValueInfo(sValueInfo valueInfo, sValueHistoryInfo historyInfo) {
if (!historyInfo.isResetted) {
historyInfo.firstInfo = valueInfo;
historyInfo.maxInfo = valueInfo;
historyInfo.minInfo = valueInfo;
historyInfo.isResetted = true;
} else {
if (valueInfo.thisValue > historyInfo.maxInfo.thisValue) historyInfo.maxInfo = valueInfo;
if (valueInfo.thisValue < historyInfo.minInfo.thisValue) historyInfo.minInfo = valueInfo;
}
historyInfo.currentInfo = valueInfo;
return historyInfo;
}
inline sAccHistoryInfo UpdateAccValueInfo(sAccValueInfo valueInfo, sAccHistoryInfo historyInfo) {
if (!historyInfo.isResetted) {
historyInfo.firstInfo = valueInfo;
historyInfo.maxInfo_X = valueInfo;
historyInfo.maxInfo_Y = valueInfo;
historyInfo.maxInfo_Z = valueInfo;
historyInfo.minInfo_X = valueInfo;
historyInfo.minInfo_Y = valueInfo;
historyInfo.minInfo_Z = valueInfo;
historyInfo.isResetted = true;
} else {
if (valueInfo.accX > historyInfo.maxInfo_X.accX) historyInfo.maxInfo_X = valueInfo;
if (valueInfo.accY > historyInfo.maxInfo_Y.accY) historyInfo.maxInfo_Y = valueInfo;
if (valueInfo.accZ > historyInfo.maxInfo_Z.accZ) historyInfo.maxInfo_Z = valueInfo;
if (valueInfo.accX < historyInfo.minInfo_X.accX) historyInfo.minInfo_X = valueInfo;
if (valueInfo.accY < historyInfo.minInfo_Y.accY) historyInfo.minInfo_Y = valueInfo;
if (valueInfo.accZ < historyInfo.minInfo_Z.accZ) historyInfo.minInfo_Z = valueInfo;
}
historyInfo.currentInfo = valueInfo;
return historyInfo;
}
inline sVIHistoryInfo UpdateVIValueInfo(sVIValueInfo valueInfo, sVIHistoryInfo historyInfo) {
if (!historyInfo.isResetted) {
historyInfo.firstInfo = valueInfo;
historyInfo.maxVoltage = valueInfo;
historyInfo.minVoltage = valueInfo;
historyInfo.maxCurrent = valueInfo;
historyInfo.minCurrent = valueInfo;
historyInfo.isResetted = true;
} else {
if (valueInfo.voltValue > historyInfo.maxVoltage.voltValue) historyInfo.maxVoltage = valueInfo;
if (valueInfo.currValue > historyInfo.maxCurrent.currValue) historyInfo.maxCurrent = valueInfo;
if (valueInfo.voltValue < historyInfo.minVoltage.voltValue) historyInfo.minVoltage = valueInfo;
if (valueInfo.currValue < historyInfo.minCurrent.currValue) historyInfo.minCurrent = valueInfo;
}
historyInfo.currentInfo = valueInfo;
return historyInfo;
}
#endif
반응형
'BilientSevices > Measurement&Monitoring' 카테고리의 다른 글
| BiliMon 시스템을 활용한 우선 추진 비즈니스 모델 (0) | 2026.06.03 |
|---|---|
| 프로그래머를 위한 BiliMon 활용 방안 (0) | 2026.05.31 |
| 관리자를 위한 BiliMon 활용 방법 (0) | 2026.05.30 |
| 데이터 분석가를 위한 BiliMon 활용 방법 (0) | 2026.05.24 |
| 개발자를 위한 BiliMon 활용 방법 (0) | 2026.05.23 |
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 혁신과허들
- DYOV
- image
- 치매
- arduino
- Video
- 전압
- 심심풀이치매방지기
- Innovation&Hurdles
- 아두이노
- 오블완
- ServantClock
- 빌리칠드
- 둎
- 배프
- 심심풀이
- 절연형
- BiliChild
- Decorator
- Innovations
- 티스토리챌린지
- Innovations&Hurdles
- BSC
- 치매방지
- 빌리언트
- bilient
- 혁신
- 허들
- 전류
- Hurdles
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함

