haped cac6ef59e3 连接物联网平台
优化WiFi连接,实现温度上传,底座电量上传,体温贴电量上传
2025-08-26 10:46:58 +08:00

902 lines
18 KiB
C

#ifndef _APP_TEMPERATURE_H_
#define _APP_TEMPERATURE_H_
#include <rtthread.h>
#include <finsh.h>
#include "common.h"
#include "param_config.h"
#include "ble_pub.h"
#include "drv_oled.h"
#include "belon_ble.h"
#if (CFG_BLE_VERSION == BLE_VERSION_5_2)
#include "app_ble.h"
#include "app_sdp.h"
#include "app_ble_init.h"
#endif
#if (BLE_APP_SEC)
#include "app_sec.h"
#endif
#include "kernel_mem.h"
/**
* 腋温计iT12
*/
#define BLE_TEMPERATURE_DEVICE_IT12 "iT12"
/**
* 耳温计iT22
*/
#define BLE_TEMPERATURE_DEVICE_IT22 "iT22"
/**
* 产品ID iT18
*/
#define PRODUCTID "iT18"
/**
* 设备ID
*/
#define DEVICEID "iT18_C8478C428848"
/**
* 检测硬件间隔时间
*/
#define BLE_TEMPERATURE_DETECT_DEVICE_INTERVAL 1000
/**
* 蓝牙扫描间隔时间
*/
#define BLE_SCAN_INTERVAL 8000
/**
* 显示温度最小值 低于该值显示LOW
*/
#define BLE_TEMPERATURE_LIMIT_MIN 3200
/**
* 显示温度最大值 高于该值显示HIGH
*/
#define BLE_TEMPERATURE_LIMIT_MAX 4290
/**
* 合法温度最小值 低于该值不计入测温记录
*/
#define BLE_TEMPERATURE_MIN 2000
/**
* 合法温度最大值 高于该值不计入测温记录
*/
#define BLE_TEMPERATURE_MAX 5000
/**
* 盒子复位GPIO
*/
#define BLE_TEMPERATURE_BOX_RESET_LCD 37
/**
* 霍尔按键检测GPIO
*/
#define BLE_TEMPERATURE_HALL_DETECT_PIN 38
/**
* 盒子电源控制GPIO
*/
#define BLE_TEMPERATURE_BOX_POWER_CTR 39
/**
* 检测到充电仓关闭后延迟多长时间关机
*/
#define BLE_TEMPERATURE_POWEROFF_TIMEOUT 3000 //ms
/**
* 进入绑定模式 等待多长时间进行BLE 设备扫描
*/
#define BLE_TEMPERATURE_BIND_MODE_TIMEOUT 8000 //ms
/**
* 霍尔按键检测时间间隔
*/
#define BLE_TEMPERATURE_HALL_DETECT_INTERVAL 50 //ms
/**
* 超时25s 都没有收到温度广播数据 回到等待测温页面
*/
#define BLE_TEMPERATURE_IDLE_MODE_TIMEOUT 30000 //ms
/**
* 配置文件easyflah KEY
*/
#define BLE_TEMPERATURE_FLASH_CONFIG_KEY "dev_cfg"
/**
* 测温记录 easyflah KEY
*/
#define BLE_TEMPERATURE_FLASH_RECORD_KEY "dev_record"
/**
* MQTT ID and KEY
*/
#define SECUREID_MQTT "poka"
#define SECUREKEY_MQTT "Poka&Lock12345"
/**
* 配置文件easyflah KEY BIND MAC
*/
#define BLE_TEMPERATURE_FLASH_CONFIG_KEY_BIND_MAC "bind_mac"
/**
* 测温记录 easyflah KEY temperature
*/
#define BLE_TEMPERATURE_FLASH_RECORD_KEY_TEMPERATURE "m1_temperature"
/**
* 测温记录 easyflah KEY time
*/
#define BLE_TEMPERATURE_FLASH_RECORD_KEY_TIMESTAMP "m1_timestamp"
/**
* 音量记录 easyflah KEY volume
*/
#define BLE_TEMPERATURE_FLASH_RECORD_KEY_VOLUME "m1_volume"
#define BATTERY_TABLE_SIZE 662 // 查表法数据点数量
static const struct {
u16 voltage; // 电压值(mV)
u32 mah; // 对应电量
} voltage_table[BATTERY_TABLE_SIZE] = {
{4179, 0},
{4174, 670},
{4171, 1340},
{4169, 2020},
{4166, 2690},
{4164, 3360},
{4160, 4030},
{4159, 4700},
{4156, 5370},
{4153, 6050},
{4151, 6720},
{4148, 7390},
{4145, 8060},
{4143, 8730},
{4140, 9400},
{4138, 10070},
{4135, 10750},
{4133, 11420},
{4129, 12090},
{4125, 12760},
{4122, 13430},
{4120, 14100},
{4116, 14770},
{4112, 15450},
{4109, 16120},
{4106, 16790},
{4101, 17460},
{4096, 18130},
{4093, 18800},
{4087, 19470},
{4082, 20150},
{4078, 20820},
{4074, 21490},
{4068, 22160},
{4064, 22830},
{4059, 23510},
{4055, 24180},
{4050, 24850},
{4046, 25520},
{4042, 26190},
{4038, 26860},
{4034, 27530},
{4031, 28210},
{4028, 28880},
{4024, 29550},
{4020, 30220},
{4018, 30890},
{4015, 31560},
{4013, 32240},
{4009, 32910},
{4007, 33580},
{4005, 34250},
{4002, 34920},
{4000, 35600},
{3997, 36270},
{3995, 36940},
{3992, 37610},
{3991, 38280},
{3988, 38950},
{3986, 39620},
{3983, 40290},
{3983, 40970},
{3980, 41640},
{3977, 42310},
{3976, 42980},
{3973, 43650},
{3972, 44320},
{3970, 44990},
{3968, 45670},
{3966, 46340},
{3964, 47010},
{3961, 47680},
{3960, 48350},
{3957, 49020},
{3956, 49700},
{3954, 50370},
{3953, 51040},
{3950, 51710},
{3948, 52380},
{3946, 53060},
{3945, 53730},
{3943, 54400},
{3942, 55070},
{3940, 55740},
{3938, 56410},
{3935, 57080},
{3935, 57760},
{3933, 58430},
{3931, 59100},
{3929, 59770},
{3928, 60440},
{3925, 61110},
{3923, 61780},
{3923, 62460},
{3920, 63130},
{3918, 63800},
{3917, 64470},
{3915, 65140},
{3914, 65810},
{3912, 66480},
{3910, 67160},
{3909, 67830},
{3908, 68500},
{3906, 69170},
{3904, 69840},
{3902, 70510},
{3900, 71190},
{3899, 71860},
{3898, 72530},
{3896, 73200},
{3894, 73870},
{3892, 74540},
{3890, 75210},
{3889, 75890},
{3888, 76560},
{3887, 77230},
{3884, 77900},
{3882, 78570},
{3881, 79240},
{3879, 79920},
{3878, 80590},
{3876, 81260},
{3874, 81930},
{3872, 82600},
{3871, 83270},
{3870, 83940},
{3869, 84620},
{3867, 85290},
{3865, 85960},
{3864, 86630},
{3862, 87300},
{3860, 87970},
{3859, 88640},
{3857, 89320},
{3855, 89990},
{3855, 90660},
{3853, 91330},
{3851, 92000},
{3850, 92680},
{3848, 93350},
{3846, 94020},
{3845, 94690},
{3844, 95360},
{3840, 96030},
{3840, 96700},
{3839, 97370},
{3837, 98050},
{3835, 98720},
{3834, 99390},
{3832, 100060},
{3830, 100730},
{3830, 101400},
{3829, 102080},
{3826, 102750},
{3825, 103420},
{3823, 104090},
{3821, 104760},
{3819, 105430},
{3819, 106100},
{3816, 106770},
{3815, 107450},
{3814, 108120},
{3812, 108790},
{3811, 109460},
{3809, 110130},
{3808, 110800},
{3806, 111470},
{3805, 112140},
{3804, 112820},
{3803, 113490},
{3800, 114160},
{3799, 114830},
{3798, 115500},
{3796, 116170},
{3794, 116840},
{3794, 117510},
{3792, 118190},
{3789, 118860},
{3789, 119530},
{3788, 120200},
{3787, 120870},
{3784, 121540},
{3783, 122210},
{3780, 122890},
{3780, 123560},
{3778, 124230},
{3777, 124900},
{3776, 125570},
{3774, 126240},
{3772, 126920},
{3771, 127590},
{3769, 128260},
{3769, 128930},
{3768, 129600},
{3766, 130270},
{3765, 130940},
{3763, 131620},
{3761, 132290},
{3760, 132960},
{3758, 133630},
{3757, 134300},
{3755, 134970},
{3754, 135640},
{3754, 136310},
{3752, 136990},
{3750, 137660},
{3749, 138330},
{3748, 139000},
{3746, 139670},
{3745, 140340},
{3743, 141010},
{3742, 141690},
{3741, 142360},
{3740, 143030},
{3738, 143700},
{3738, 144370},
{3735, 145040},
{3734, 145710},
{3732, 146380},
{3732, 147060},
{3730, 147730},
{3729, 148400},
{3727, 149070},
{3726, 149740},
{3725, 150410},
{3723, 151090},
{3722, 151760},
{3720, 152430},
{3720, 153100},
{3717, 153770},
{3716, 154440},
{3716, 155110},
{3714, 155790},
{3712, 156460},
{3712, 157130},
{3710, 157800},
{3709, 158470},
{3708, 159140},
{3707, 159810},
{3705, 160490},
{3704, 161160},
{3703, 161830},
{3702, 162500},
{3701, 163170},
{3700, 163840},
{3699, 164520},
{3697, 165190},
{3697, 165860},
{3695, 166530},
{3694, 167200},
{3693, 167870},
{3691, 168540},
{3690, 169210},
{3689, 169890},
{3688, 170560},
{3688, 171230},
{3686, 171900},
{3685, 172570},
{3683, 173240},
{3683, 173920},
{3681, 174590},
{3680, 175260},
{3679, 175930},
{3678, 176600},
{3677, 177270},
{3677, 177940},
{3677, 178610},
{3673, 179290},
{3673, 179960},
{3672, 180630},
{3672, 181300},
{3672, 181970},
{3669, 182650},
{3668, 183320},
{3668, 183990},
{3666, 184660},
{3666, 185330},
{3665, 186000},
{3664, 186670},
{3664, 187350},
{3662, 188020},
{3661, 188690},
{3661, 189360},
{3659, 190030},
{3658, 190700},
{3657, 191380},
{3656, 192050},
{3656, 192720},
{3654, 193390},
{3654, 194060},
{3653, 194740},
{3653, 195410},
{3652, 196080},
{3650, 196750},
{3649, 197420},
{3648, 198090},
{3647, 198770},
{3647, 199440},
{3646, 200110},
{3645, 200780},
{3646, 201450},
{3644, 202120},
{3642, 202800},
{3642, 203470},
{3642, 204140},
{3640, 204810},
{3641, 205480},
{3639, 206150},
{3638, 206820},
{3638, 207500},
{3637, 208170},
{3637, 208840},
{3637, 209510},
{3636, 210180},
{3636, 210850},
{3635, 211530},
{3633, 212200},
{3633, 212870},
{3632, 213540},
{3632, 214210},
{3631, 214880},
{3629, 215550},
{3628, 216220},
{3628, 216900},
{3627, 217570},
{3626, 218240},
{3626, 218910},
{3626, 219580},
{3625, 220250},
{3625, 220920},
{3625, 221600},
{3623, 222270},
{3621, 222940},
{3621, 223610},
{3621, 224280},
{3621, 224950},
{3620, 225620},
{3620, 226300},
{3619, 226970},
{3619, 227640},
{3618, 228310},
{3617, 228980},
{3617, 229650},
{3617, 230330},
{3616, 231000},
{3615, 231670},
{3614, 232340},
{3613, 233010},
{3612, 233680},
{3612, 234350},
{3612, 235020},
{3612, 235700},
{3610, 236370},
{3610, 237040},
{3610, 237710},
{3610, 238380},
{3609, 239050},
{3608, 239730},
{3607, 240400},
{3606, 241070},
{3606, 241740},
{3606, 242410},
{3605, 243080},
{3605, 243750},
{3605, 244420},
{3603, 245090},
{3603, 245770},
{3602, 246440},
{3601, 247110},
{3601, 247780},
{3601, 248450},
{3601, 249120},
{3599, 249790},
{3598, 250470},
{3597, 251140},
{3597, 251810},
{3597, 252480},
{3596, 253150},
{3596, 253820},
{3595, 254490},
{3594, 255160},
{3594, 255840},
{3594, 256510},
{3593, 257180},
{3593, 257850},
{3593, 258520},
{3592, 259190},
{3592, 259870},
{3591, 260540},
{3590, 261210},
{3590, 261880},
{3590, 262550},
{3588, 263220},
{3588, 263890},
{3587, 264570},
{3587, 265240},
{3586, 265910},
{3586, 266580},
{3585, 267250},
{3585, 267920},
{3584, 268590},
{3583, 269260},
{3583, 269940},
{3583, 270610},
{3583, 271280},
{3581, 271950},
{3581, 272620},
{3580, 273290},
{3580, 273960},
{3579, 274640},
{3579, 275310},
{3578, 275980},
{3577, 276650},
{3577, 277320},
{3578, 277990},
{3577, 278660},
{3577, 279340},
{3575, 280010},
{3575, 280680},
{3575, 281350},
{3574, 282020},
{3574, 282690},
{3574, 283370},
{3572, 284040},
{3571, 284710},
{3571, 285380},
{3570, 286050},
{3570, 286720},
{3570, 287390},
{3569, 288070},
{3568, 288740},
{3567, 289410},
{3567, 290080},
{3568, 290750},
{3567, 291420},
{3566, 292090},
{3566, 292770},
{3565, 293440},
{3564, 294110},
{3565, 294780},
{3564, 295450},
{3563, 296120},
{3562, 296790},
{3562, 297470},
{3561, 298140},
{3561, 298810},
{3560, 299480},
{3559, 300150},
{3559, 300820},
{3558, 301500},
{3558, 302170},
{3557, 302840},
{3557, 303510},
{3556, 304180},
{3555, 304850},
{3554, 305520},
{3554, 306190},
{3553, 306870},
{3553, 307540},
{3552, 308210},
{3551, 308880},
{3551, 309550},
{3551, 310220},
{3551, 310890},
{3549, 311570},
{3549, 312240},
{3548, 312910},
{3548, 313580},
{3547, 314250},
{3547, 314920},
{3545, 315590},
{3545, 316270},
{3544, 316940},
{3544, 317610},
{3543, 318280},
{3542, 318950},
{3542, 319620},
{3541, 320300},
{3541, 320970},
{3541, 321640},
{3540, 322310},
{3540, 322980},
{3538, 323660},
{3537, 324330},
{3537, 325000},
{3536, 325670},
{3537, 326340},
{3536, 327010},
{3535, 327680},
{3534, 328360},
{3533, 329030},
{3532, 329700},
{3532, 330370},
{3531, 331040},
{3531, 331710},
{3530, 332380},
{3530, 333050},
{3529, 333730},
{3528, 334400},
{3528, 335070},
{3527, 335740},
{3526, 336410},
{3526, 337080},
{3525, 337750},
{3524, 338430},
{3522, 339100},
{3522, 339770},
{3522, 340440},
{3521, 341110},
{3520, 341780},
{3520, 342450},
{3518, 343120},
{3517, 343800},
{3517, 344470},
{3515, 345140},
{3516, 345810},
{3515, 346480},
{3513, 347150},
{3513, 347820},
{3513, 348490},
{3512, 349170},
{3511, 349840},
{3510, 350510},
{3509, 351180},
{3508, 351850},
{3508, 352520},
{3506, 353190},
{3506, 353860},
{3504, 354530},
{3504, 355200},
{3505, 355880},
{3504, 356550},
{3501, 357220},
{3501, 357890},
{3500, 358560},
{3500, 359230},
{3499, 359900},
{3498, 360570},
{3497, 361240},
{3496, 361910},
{3495, 362580},
{3494, 363260},
{3493, 363930},
{3491, 364600},
{3490, 365270},
{3490, 365940},
{3490, 366610},
{3488, 367280},
{3487, 367950},
{3486, 368620},
{3486, 369290},
{3485, 369960},
{3484, 370630},
{3482, 371300},
{3482, 371970},
{3481, 372640},
{3479, 373320},
{3479, 373990},
{3477, 374660},
{3476, 375330},
{3475, 376000},
{3473, 376670},
{3472, 377340},
{3470, 378010},
{3469, 378680},
{3469, 379350},
{3469, 380020},
{3467, 380690},
{3465, 381370},
{3464, 382040},
{3464, 382710},
{3463, 383380},
{3460, 384050},
{3460, 384720},
{3459, 385390},
{3456, 386060},
{3457, 386730},
{3455, 387400},
{3454, 388080},
{3453, 388750},
{3451, 389420},
{3449, 390090},
{3449, 390760},
{3446, 391430},
{3445, 392100},
{3444, 392770},
{3443, 393440},
{3441, 394110},
{3439, 394780},
{3438, 395450},
{3438, 396130},
{3436, 396800},
{3434, 397470},
{3433, 398140},
{3430, 398810},
{3429, 399480},
{3428, 400150},
{3427, 400820},
{3425, 401490},
{3424, 402160},
{3422, 402840},
{3421, 403510},
{3419, 404180},
{3417, 404850},
{3416, 405520},
{3415, 406190},
{3412, 406860},
{3411, 407530},
{3409, 408200},
{3408, 408870},
{3407, 409540},
{3406, 410210},
{3404, 410880},
{3403, 411560},
{3401, 412230},
{3399, 412900},
{3398, 413570},
{3396, 414240},
{3394, 414910},
{3393, 415580},
{3391, 416250},
{3389, 416920},
{3386, 417590},
{3384, 418260},
{3382, 418930},
{3381, 419610},
{3379, 420280},
{3376, 420950},
{3375, 421620},
{3372, 422290},
{3369, 422960},
{3367, 423630},
{3364, 424300},
{3361, 424970},
{3358, 425640},
{3354, 426310},
{3351, 426980},
{3348, 427650},
{3343, 428330},
{3339, 429000},
{3335, 429670},
{3331, 430340},
{3324, 431010},
{3318, 431680},
{3312, 432350},
{3305, 433020},
{3297, 433690},
{3289, 434360},
{3280, 435030},
{3269, 435700},
{3257, 436370},
{3245, 437040},
{3229, 437710},
{3212, 438380},
{3193, 439050},
{3174, 439720},
{3151, 440390},
{3125, 441060},
{3096, 441740},
{3065, 442410},
{3029, 443080},
{3000, 443570}
};
typedef enum
{
APP_MODE_NORMAL,
APP_MODE_BIND,
} app_temperature_mode_t;
typedef struct
{
uint8_t device_name[16];
uint8_t device_mac[6];
uint16_t temperature_body;
uint16_t temperature_obj;
uint16_t temperature_env;
uint16_t batt_percent;
uint16_t batt_val;
uint16_t device_state;
}app_temperature_info_t;
/**
* 盒子硬件信息
*/
typedef struct
{
uint16_t battery_value;
/**
* 1 -- 盒子接入充电 0 -- 盒子未接入充电
*/
uint16_t charge_state;
/**
* 0 -- 合盖 1 -- 开盖
*/
uint16_t hall_state;
}app_box_info_t;
typedef enum
{
//正在测量
STATE_DETECT_ING,
//测量完成
STATE_DETECT_FINISH,
} app_detect_state_t;
/**
* BOX 参数
*/
typedef struct
{
uint8_t bind_mac[6];
uint16_t detect_interval;
}app_dev_info_t;
typedef struct
{
uint8_t timestamp[8];
uint16_t temperature_value;
uint8_t volume;
}app_detect_record_t;
typedef enum
{
UI_IDLE,
UI_WAIT_TEMPERATURE,
UI_BOX_BATTERY,
UI_BOX_BIND,
UI_SHOW_TEMPERATURE,
UI_SHOW_DEVICE_INFO,
UI_SHOW_MEMORY_INFO,
UI_SHOW_LOW_BAT_INFO,
}app_ui_mode;
void temperature_init(void);
void temperature_adv_callback(recv_adv_t *r_ind);
void app_enter_bind_mode(bool enter);
void mqtt_upload_temperature(uint16_t t_value);
int mqtt_start(char username[],char password[]);
int mqtt_start2(char* username,char *password ,char * client_id);
void poka_client_password();
void poka_client_username();
void connnect_wifi(char *oob_ssid,char *connect_key);
void timer_ble_scan_callback(void *arg);
/**
* 保存最新的一次记录
*/
void temperature_save_record(app_detect_record_t *record);
//void temperature_save_record(uint16_t t_value);
/**
* 读取最新的一次记录
*/
void temperature_read_record(app_detect_record_t *record);
void temperature_led_ble(bool onoff);
void app_enter_ui(app_ui_mode mode);
void volume_read_record(app_detect_record_t *record);
void volume_save_record(app_detect_record_t *record);
#endif //_APP_TEMPERATURE_H_