项目的核心C源码全部位于 obj/ 目录下,其内部结构清晰,遵循模块化的设计原则。

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
obj/
├── AI # AI 聊天功能模块 (基于OpenAI API)
│   ├── examples
│   ├── include
│   ├── markdown
│   └── src
├── data # 数据持久化模块
│   ├── state_store.c
│   └── state_store.h
├── hardware # 硬件抽象层
│   └── hardware.c
├── http # HTTP客户端实现
│   ├── weather.c
│   └── weather.h
├── Include # 所有模块的公共头文件
│   ├── config.h
│   ├── Hardware.h
│   └── ... (其他 .h 文件)
├── JoyPixels emojis # Emoji图片资源 (C数组格式)
│   └── bolt.c ...
├── MQTT # MQTT通信模块
│   ├── MQTT.c
│   └── MQTT_File.c
└── screen # 所有LVGL屏幕/界面源码
├── screen_ac.c
└── ... (其他页面 .c 文件)

目录说明

  • AI/: 实现了与大语言模型(如OpenAI兼容接口)的交互逻辑,包括聊天功能和Markdown解析。
  • data/: 负责将设备的关键状态(灯光、安防等)保存到本地文件系统,详见 data-persistence.md
  • hardware/: 封装了对 /dev/Led, /dev/beep 等底层硬件设备文件的 ioctl 操作,详见 peripheral-control.md
  • http/: 手动实现的HTTP客户端,用于调用天气等第三方API,详见 api-integration.md
  • Include/: 头文件中心。存放了所有模块对外暴露的函数声明(API)和数据结构。其他模块包含这些头文件来使用其功能。config.h 也在此处,用于配置密钥和服务器地址。
  • JoyPixels emojis/: 一个有趣的设计,将PNG或SVG格式的Emoji图标转换为了LVGL可以直接使用的C数组 (lv_img_dsc_t),避免了在运行时从文件系统读取图片的开销。
  • MQTT/: 负责与MQTT Broker的全部通信,包括一个用于文件传输的扩展实现 (MQTT_File.c),详见 mqtt-communication.md
  • screen/: UI层。每个 .c 文件对应一个独立的屏幕或复杂的UI组件(如仪表盘、灯光控制页),负责该页面的所有LVGL对象创建、布局和事件绑定。