SHT3X_ATY.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /**
  2. * @file SHT3X_ATY.h
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2026 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief Dev-style interface for SHT3X temperature & humidity sensor
  20. *
  21. * @version
  22. * - 2_00_251112 > ATY
  23. * -# Refactor to Dev-style interface with platform-agnostic callbacks
  24. ********************************************************************************
  25. */
  26. #ifndef __SHT3X_ATY_H
  27. #define __SHT3X_ATY_H
  28. /*
  29. * Dev 风格头文件:不直接耦合具体平台头文件。
  30. * 由上层通过回调提供 I2C 读写与延时能力。
  31. */
  32. /* 用户可选的 DEBUG 宏保留为注释,占位:
  33. // #define __DEBUG_SHT3X_ATY
  34. */
  35. /******************************************************************************/
  36. // Generator polynomial for CRC
  37. #define POLYNOMIAL 0x131 // P(x) = x^8 + x^5 + x^4 + 1 = 100110001
  38. // Sensor Commands
  39. typedef enum{
  40. CMD_READ_SERIALNBR = 0x3780, // read serial number
  41. CMD_READ_STATUS = 0xF32D, // read status register
  42. CMD_CLEAR_STATUS = 0x3041, // clear status register
  43. CMD_HEATER_ENABLE = 0x306D, // enabled heater
  44. CMD_HEATER_DISABLE = 0x3066, // disable heater
  45. CMD_SOFT_RESET = 0x30A2, // soft reset
  46. CMD_MEAS_CLOCKSTR_H = 0x2C06, // measurement: clock stretching, high repeatability
  47. CMD_MEAS_CLOCKSTR_M = 0x2C0D, // measurement: clock stretching, medium repeatability
  48. CMD_MEAS_CLOCKSTR_L = 0x2C10, // measurement: clock stretching, low repeatability
  49. CMD_MEAS_POLLING_H = 0x2400, // measurement: polling, high repeatability
  50. CMD_MEAS_POLLING_M = 0x240B, // measurement: polling, medium repeatability
  51. CMD_MEAS_POLLING_L = 0x2416, // measurement: polling, low repeatability
  52. CMD_MEAS_PERI_05_H = 0x2032, // measurement: periodic 0.5 mps, high repeatability
  53. CMD_MEAS_PERI_05_M = 0x2024, // measurement: periodic 0.5 mps, medium repeatability
  54. CMD_MEAS_PERI_05_L = 0x202F, // measurement: periodic 0.5 mps, low repeatability
  55. CMD_MEAS_PERI_1_H = 0x2130, // measurement: periodic 1 mps, high repeatability
  56. CMD_MEAS_PERI_1_M = 0x2126, // measurement: periodic 1 mps, medium repeatability
  57. CMD_MEAS_PERI_1_L = 0x212D, // measurement: periodic 1 mps, low repeatability
  58. CMD_MEAS_PERI_2_H = 0x2236, // measurement: periodic 2 mps, high repeatability
  59. CMD_MEAS_PERI_2_M = 0x2220, // measurement: periodic 2 mps, medium repeatability
  60. CMD_MEAS_PERI_2_L = 0x222B, // measurement: periodic 2 mps, low repeatability
  61. CMD_MEAS_PERI_4_H = 0x2334, // measurement: periodic 4 mps, high repeatability
  62. CMD_MEAS_PERI_4_M = 0x2322, // measurement: periodic 4 mps, medium repeatability
  63. CMD_MEAS_PERI_4_L = 0x2329, // measurement: periodic 4 mps, low repeatability
  64. CMD_MEAS_PERI_10_H = 0x2737, // measurement: periodic 10 mps, high repeatability
  65. CMD_MEAS_PERI_10_M = 0x2721, // measurement: periodic 10 mps, medium repeatability
  66. CMD_MEAS_PERI_10_L = 0x272A, // measurement: periodic 10 mps, low repeatability
  67. CMD_FETCH_DATA = 0xE000, // readout measurements for periodic mode
  68. CMD_R_AL_LIM_LS = 0xE102, // read alert limits, low set
  69. CMD_R_AL_LIM_LC = 0xE109, // read alert limits, low clear
  70. CMD_R_AL_LIM_HS = 0xE11F, // read alert limits, high set
  71. CMD_R_AL_LIM_HC = 0xE114, // read alert limits, high clear
  72. CMD_W_AL_LIM_HS = 0x611D, // write alert limits, high set
  73. CMD_W_AL_LIM_HC = 0x6116, // write alert limits, high clear
  74. CMD_W_AL_LIM_LC = 0x610B, // write alert limits, low clear
  75. CMD_W_AL_LIM_LS = 0x6100, // write alert limits, low set
  76. CMD_NO_SLEEP = 0x303E,
  77. }sht3xCommands;
  78. // Measurement Repeatability
  79. typedef enum{
  80. REPEATAB_HIGH, // high repeatability
  81. REPEATAB_MEDIUM, // medium repeatability
  82. REPEATAB_LOW, // low repeatability
  83. }sht3xRepeatability;
  84. // Measurement Mode
  85. typedef enum{
  86. MODE_CLKSTRETCH, // clock stretching
  87. MODE_POLLING, // polling
  88. }sht3xMode;
  89. typedef enum{
  90. FREQUENCY_HZ5, // 0.5 measurements per seconds
  91. FREQUENCY_1HZ, // 1.0 measurements per seconds
  92. FREQUENCY_2HZ, // 2.0 measurements per seconds
  93. FREQUENCY_4HZ, // 4.0 measurements per seconds
  94. FREQUENCY_10HZ, // 10.0 measurements per seconds
  95. }sht3xFrequency;
  96. /* Dev 风格设备结构体与接口 */
  97. typedef struct {
  98. /* 设备地址与可选通道(用于多路 I2C 控制器场景) */
  99. uint8_t addr;
  100. uint8_t channel;
  101. /* 平台回调:I2C 读写与延时 */
  102. int (*i2c_write)(uint8_t addr, const uint8_t* data, uint16_t len, uint8_t channel);
  103. int (*i2c_read)(uint8_t addr, uint8_t* data, uint16_t len, uint8_t channel);
  104. void (*delay_ms)(uint32_t ms);
  105. /* 统一锁与日志 */
  106. void (*lock)(uint8_t lock);
  107. uint8_t debugEnable;
  108. void (*LOG)(const char* fmt, ...);
  109. /* 最近一次测量结果与状态 */
  110. float lastTemperatureC;
  111. float lastHumidityPct;
  112. uint8_t warningFlag; /* 0:最佳范围; 1:警告; 2:越界已钳制 */
  113. } SHT3X_ATY_Dev;
  114. /* Dev 风格函数原型 */
  115. void SHT3X_InitDev(SHT3X_ATY_Dev* dev, uint8_t addr, uint8_t channel);
  116. void SHT3X_StartPeriodicDev(SHT3X_ATY_Dev* dev, sht3xRepeatability repeatability, sht3xFrequency frequency);
  117. int SHT3X_ReadMeasurementDev(SHT3X_ATY_Dev* dev);
  118. int SHT3X_GetTempAndHumiClkStretchDev(SHT3X_ATY_Dev* dev, sht3xRepeatability repeatability);
  119. float SHT3X_GetTemperatureCDev(const SHT3X_ATY_Dev* dev);
  120. float SHT3X_GetHumidityPctDev(const SHT3X_ATY_Dev* dev);
  121. uint8_t SHT3X_GetWarningFlagDev(const SHT3X_ATY_Dev* dev);
  122. #endif /* __SHT3X_ATY_H */
  123. /******************************** End Of File *********************************/