MilladAnsari/esp32s3-thingsboard-mqtts-onboarding

GitHub: MilladAnsari/esp32s3-thingsboard-mqtts-onboarding

该项目演示了 ESP32-S3 通过 MQTTS 安全连接 ThingsBoard 平台,实现遥测传输、设备认领与自动配置的完整 IoT 设备上线流程。

Stars: 0 | Forks: 0

# 物联网作业 4 – 与 ThingsBoard 的安全 [ESP32-S3-Touch](https://www.waveshare.com/esp32-s3-touch-lcd-5.htm) 通信 本仓库包含了**物联网基础**课程**作业 4** 的实现。 该项目演示了 **ESP32-S3** 设备与本地 **ThingsBoard CE** 服务器之间使用 **MQTT over TLS** 的安全 IoT 通信。它还包括设备认领、自动配置、基于证书的安全设置,以及用于显示设备认领码的可选 LCD/LVGL 界面。 ## 概述 该项目的主要目标是了解安全机制如何应用于物联网系统。 在此项目中,ESP32-S3 通过安全的 TLS 通道连接到 ThingsBoard 服务器,并发送温度、湿度和计数器值等遥测数据。该项目还探讨了重要的物联网生命周期功能,例如设备认领和自动配置。 ThingsBoard 服务器使用 Docker Compose 在本地部署,并配置了通过自定义 PKI 设置生成的 TLS 证书。 ## 功能特性 * ESP32-S3 连接到 ThingsBoard * 使用端口 `8883` 的 MQTT over TLS * 单向 TLS 认证 * 使用 Docker Compose 的本地 ThingsBoard CE 部署 * 用于 ThingsBoard 的 PostgreSQL 数据库 * 自定义 CA 和服务器证书设置 * 安全的遥测数据传输 * 设备认领工作流 * 自动配置工作流 * ThingsBoard 认领仪表板 JSON * 用于显示认领码的可选 LCD/LVGL 界面 * 包含 CA、服务器和客户端证书材料的 PKI 文件夹 ## 技术与工具 * ESP32-S3 * Arduino Framework * C++ * ThingsBoard CE * MQTT * TLS / SSL * Docker Compose * PostgreSQL * WiFiClientSecure * ThingsBoard Arduino SDK * Arduino MQTT Client * PubSubClient * ArduinoJson * LVGL * ESP Display Panel ## 仓库结构 ``` . ├── one-way-TLS.ino ├── Claiming.ino ├── Auto-Provisioning.ino ├── docker-compose.yml ├── claiming.json ├── certs/ │ ├── root-ca.pem │ ├── server.pem │ └── server.key ├── pki/ │ ├── ca/ │ ├── server/ │ └── client/ ├── lcd/ │ └── sketch_jul6a/ │ ├── sketch_jul6a.ino │ ├── lvgl_v8_port.cpp │ ├── lvgl_v8_port.h │ └── esp_panel_board_custom_conf.h └── lv_conf.h ``` ## 主要部分 ### 1. 单向 TLS 文件: ``` one-way-TLS.ino ``` 此示例演示了使用 MQTT over TLS 从 ESP32-S3 到 ThingsBoard 的安全遥测传输。 ESP32-S3 使用根 CA 证书验证 ThingsBoard 服务器证书,然后安全地发送遥测数据。 遥测值包括: * 温度 * 湿度 * 计数值 常规流程如下: ``` ESP32-S3 ↓ Wi-Fi ↓ WiFiClientSecure ↓ MQTT over TLS ↓ ThingsBoard CE ``` ### 2. 设备认领 文件: ``` Claiming.ino ``` 此示例实现了 ThingsBoard 设备认领工作流。 ESP32-S3 生成一个随机认领码,并向 ThingsBoard 发送认领请求。然后,用户可以在 ThingsBoard UI 中输入此代码,以认领该设备的所有权。 此功能在物联网系统中非常重要,因为它允许在部署后将物理设备安全地分配给特定用户或客户。 ### 3. 自动配置 文件: ``` Auto-Provisioning.ino ``` 此示例实现了设备自动配置。 ESP32-S3 使用配置凭据连接到 ThingsBoard 并请求设备 token。成功配置后,设备使用接收到的 token 连接并发送遥测数据。 这模拟了真实的物联网设备上线流程,无需在平台中手动创建每个设备即可自动注册设备。 ### 4. 启用 TLS 的 ThingsBoard 文件: ``` docker-compose.yml ``` 该项目包含一个 Docker Compose 配置,用于运行带有 PostgreSQL 的 ThingsBoard CE。 ThingsBoard MQTT TLS 监听器使用 PEM 证书文件在端口 `8883` 上启用。 主要暴露的端口包括: ``` 8080 → ThingsBoard Web UI 1883 → MQTT 8883 → MQTT over TLS 5432 → PostgreSQL ``` ### 5. PKI 与证书 文件夹: ``` certs/ pki/ ``` 该项目包含用于 TLS 配置的证书材料。 PKI 结构包括: * 根 CA 证书 * 服务器密钥和证书 * 客户端证书文件 * CSR 和配置文件 这些文件用于配置 ThingsBoard,并允许 ESP32-S3 验证服务器身份。 ### 6. LCD / LVGL 认领演示 文件夹: ``` lcd/sketch_jul6a/ ``` 此可选部分使用 LVGL 添加了一个显示界面。 ESP32-S3 直接在 LCD 上显示 ThingsBoard 认领状态和认领码,使设备认领过程更加用户友好。 显示的信息包括: * 连接状态 * ThingsBoard 连接结果 * 认领码 * 认领说明 ## 在本地运行 ThingsBoard 启动 ThingsBoard 服务器: ``` docker compose up -d ``` 然后在浏览器中打开 ThingsBoard UI: ``` http://localhost:8080 ``` 安全的 MQTT endpoint 可通过以下地址访问: ``` mqtts://:8883 ``` ## ESP32-S3 设置 在上传示例之前,请根据您的本地设置更新以下值: ``` constexpr char WIFI_SSID[] = "YOUR_WIFI_SSID"; constexpr char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; constexpr char THINGSBOARD_SERVER[] = "YOUR_THINGSBOARD_SERVER_IP"; constexpr uint16_t THINGSBOARD_PORT = 8883U; ``` 对于基于 token 的示例: ``` constexpr char TOKEN[] = "YOUR_DEVICE_TOKEN"; ``` 对于认领示例: ``` constexpr char DEVICE_TOKEN[] = "YOUR_DEVICE_TOKEN"; ``` 对于配置示例: ``` constexpr char PROVISION_KEY[] = "YOUR_PROVISION_KEY"; constexpr char PROVISION_SECRET[] = "YOUR_PROVISION_SECRET"; ``` ## 所需的 Arduino 库 在 Arduino IDE 中安装以下库: ``` ThingsBoard Arduino_MQTT_Client PubSubClient ArduinoJson ``` 对于 LCD/LVGL 版本,还需要安装并配置: ``` LVGL ESP Display Panel ``` ## 安全说明 该项目演示了几个重要的物联网安全概念: * TLS 可防止遥测数据以明文形式发送。 * ESP32-S3 使用根 CA 验证服务器证书。 * MQTT 通信通过 `WiFiClientSecure` 进行保护。 * 设备 token 用于设备身份验证。 * 设备认领有助于分配已部署设备的所有权。 * 自动配置简化了大规模设备上线流程。 对于公开仓库,请勿提交真实的凭据、Wi-Fi 密码、token、配置密钥或私钥。 ## 作者 该项目的实现者: * **Millad Ansari(MiladAnsari)** * **Seyed Sadra Mousavi (SMousavi7)** ## 教育目的 本仓库是作为物联网课程的一部分出于教育目的而开发的。旨在演示使用 ESP32-S3 和 ThingsBoard 的安全物联网通信、TLS 配置、设备认领和配置概念。
标签:测试用例, 版权保护