티스토리 뷰

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

 

 

 

 

 

반응형
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
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
글 보관함