mcu_ctrl_board.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Author: NiuJiuRu
  2. // Email: niujiuru@qq.com
  3. // Date: 2025-11-20
  4. package mcu_ctrl_board
  5. import (
  6. "fmt"
  7. "time"
  8. "hnyfkj.com.cn/rtu/linux/baseapp"
  9. )
  10. const MODULE_NAME = "MCUCtrlBoard"
  11. var (
  12. Board = &MCUCtrlBoard{
  13. OneEnvDataCh: make(chan *EnvSensorData, 1),
  14. ReqTakePhoCh: make(chan bool, 1),
  15. PwrWillOffCh: make(chan struct{}),
  16. }
  17. )
  18. // 定义控制板的结构体
  19. type MCUCtrlBoard struct {
  20. OneEnvDataCh chan *EnvSensorData // 单条环境数据
  21. ReqTakePhoCh chan bool // 请求开始拍照
  22. PwrWillOffCh chan struct{} // 通知即将掉电
  23. }
  24. // 定义传感器数据结构
  25. type EnvSensorData struct {
  26. NowTime string `json:"nowtm"` // 时间, 格式:YYYY-MM-DD HH:MM:SS
  27. Temperature string `json:"temperature"` // 温度, °C
  28. Humidity string `json:"humidity"` // 湿度, %RH
  29. WindSpeed string `json:"wind_speed"` // 风速, m/s
  30. WindDir string `json:"wind_dir"` // 风向, °
  31. Pressure string `json:"pressure"` // 大气压, hPa
  32. Voltage string `json:"voltage"` // 电压, V
  33. }
  34. // 传感器数据字符串化
  35. func (d EnvSensorData) String() string {
  36. return fmt.Sprintf("时间: %s, 温度: %s°C, 湿度: %s%%RH, 风速: %s m/s, 风向: %s°, 大气压: %s hPa, 电压: %s V",
  37. d.NowTime, d.Temperature, d.Humidity, d.WindSpeed, d.WindDir, d.Pressure, d.Voltage)
  38. }
  39. // 初始化控制板的串口
  40. func ModuleInit() bool {
  41. err := loadCfgParams()
  42. if err != nil {
  43. baseapp.Logger.Errorf("[%s] 加载MCU运行参数配置项失败: %v!!", MODULE_NAME, err)
  44. return false
  45. }
  46. var ret int
  47. for range 5 {
  48. if baseapp.IsExit1() {
  49. return false
  50. }
  51. ret, err = mcuCtrlBoard_ComInit()
  52. if ret == -1 {
  53. time.Sleep(1 * time.Second)
  54. continue
  55. } else {
  56. break
  57. }
  58. }
  59. if err != nil {
  60. baseapp.Logger.Errorf("[%s] 初始化与MCU控制板通信失败: %v!!", MODULE_NAME, err)
  61. }
  62. return true
  63. }
  64. // 释放掉控制板的串口
  65. func ModuleExit() {
  66. mcuCtrlBoard_ComExit()
  67. }
  68. // 通知数据板即将掉电
  69. func (board *MCUCtrlBoard) NotifyPwrWillOff() <-chan struct{} {
  70. return board.PwrWillOffCh
  71. }