From eea14b6023b320ed25dcdb92905fd7d8499043cf Mon Sep 17 00:00:00 2001 From: niconiconi_lzy <15593031+niconiconilzy@user.noreply.gitee.com> Date: Sun, 23 Aug 2026 00:38:30 +0800 Subject: [PATCH] Day5: add MQTT TLS application and learning notes --- .../\344\275\234\344\270\232/Day5_README.md" | 71 + .../applications/SConscript" | 15 + .../applications/aht10_service.c" | 56 + .../applications/day5_service.h" | 12 + .../applications/fs_record.c" | 93 ++ .../applications/led_control.c" | 49 + .../applications/main.c" | 20 + .../applications/mqtt_service.c" | 152 +++ .../\344\275\234\344\270\232/config/.config" | 1211 +++++++++++++++++ .../\344\275\234\344\270\232/config/Kconfig" | 20 + .../config/rtconfig.h" | 408 ++++++ .../tls_support/emqxsl-ca.crt" | 22 + .../tls_support/pahomqtt_SConscript" | 30 + .../tls_support/tls_net.c" | 685 ++++++++++ ...24\345\244\251\347\254\224\350\256\260.md" | 170 +++ 15 files changed, 3014 insertions(+) create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/Day5_README.md" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/SConscript" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/aht10_service.c" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/day5_service.h" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/fs_record.c" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/led_control.c" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/main.c" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/mqtt_service.c" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/.config" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/Kconfig" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/rtconfig.h" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/emqxsl-ca.crt" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/pahomqtt_SConscript" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/tls_net.c" create mode 100644 "2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\347\254\224\350\256\260/\347\254\254\344\272\224\345\244\251\347\254\224\350\256\260.md" diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/Day5_README.md" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/Day5_README.md" new file mode 100644 index 0000000..f51349b --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/Day5_README.md" @@ -0,0 +1,71 @@ +# RSOC26 Day5 软件包、MQTT 与文件系统综合实验 + +## 1. 工程环境 + +- 开发板:STM32F407-RT-SPARK(星火一号) +- RT-Thread:4.1.1 +- 编译器:GCC +- 工程目录:`G:\RT-ThreadStudio\workspace\RSOC26_Day5` + +## 2. BSP 与软件包配置 + +工程使用星火一号 BSP 的 RW007 Wi-Fi、SPI2 和外部 SPI Flash 配置;温湿度传感器使用 I2C3。启用的组件为 AHT10 软件包、Sensor 框架、Paho MQTT、mbedTLS、RW007、DFS/ELM FatFs、FAL、SFUD 与 ulog。Paho 以 `ssl://` URI 连接,工程的 mbedTLS 用户证书目录中包含 EMQX Cloud 的 CA 证书。 + +FAL 的分区名为 `filesystem`,挂载点为 `/fal`。程序不会自动格式化 Flash;若分区没有已存在的 ELM 文件系统,会记录挂载失败,需要在 MSH 中按实际情况单独格式化后再重启。 + +## 3. AHT10 采集流程 + +`applications/aht10_service.c` 在应用初始化阶段创建线程,等待设备稳定后通过 `aht10_init("i2c3")` 初始化传感器。线程每 2 秒读取一次温度和湿度,并把本次上电后的采样序号传递给文件系统和 MQTT 服务。 + +## 4. 文件系统记录 + +`applications/fs_record.c` 调用 `fal_init()`、`fal_blk_device_create("filesystem")` 和 `dfs_mount()` 挂载 `/fal`。采集结果使用 POSIX `open`、`write`、`close` 以追加方式写入 `/fal/Data.txt`: + +```text +Temp: 25.50 ; Humi: 60.20 ; Count: 1 +``` + +挂载成功后可在 MSH 中执行: + +```text +cat /fal/Data.txt +``` + +## 5. MQTT 通信与 LED 控制 + +`applications/mqtt_service.c` 集中保存 Wi-Fi 与 Broker 的连接参数;密码不写入本文档。客户端 ID 为 `spark_f407_001`,并以 TLS 连接 EMQX Cloud 的 8883 端口: + +```c +#define WIFI_SSID "" +#define WIFI_PASSWORD "" +#define MQTT_HOST "" +#define MQTT_PORT 8883 +#define MQTT_USERNAME "" +#define MQTT_PASSWORD "" +#define MQTT_PUB_TOPIC "sensor/aht10" +#define MQTT_SUB_TOPIC "led/control" +``` + +MQTT 线程先等待 `rt_wlan_is_connected()`,再启动 Paho 客户端。服务以 JSON 发布采样数据到 `sensor/aht10`,并订阅 `led/control`。收到 `ON`/`1` 时点亮 PF12 红灯,收到 `OFF`/`0` 时熄灭;LED 使用 RT-Thread PIN 设备接口。 + +## 6. 实机测试记录 + +- 模块化整合工程已完成 GCC Build,并已通过 ST-Link 下载和校验。 +- 串口已实际输出 AHT10 周期采样数据,例如温度约 `24.6°C`、湿度约 `48%RH`。 +- GCC Build 已在启用 Paho MQTT TLS 与 mbedTLS 后通过,生成的 `rtthread.bin` 已通过 ST-Link 下载和校验。 +- EMQX Cloud TLS 连接已实际建立。开发板持续打印 `publish success`,例如:`{"temp":26.84,"humi":50.76,"count":24}`。 +- 使用命令行 Python `paho-mqtt` 客户端订阅 `sensor/aht10`,已收到开发板连续上报的 JSON 数据。 +- 使用同一命令行客户端向 `led/control` 发布 `ON` 和 `OFF`;开发板分别打印 `MQTT command: ON/OFF` 与 `[LED] command received: ON/OFF`,随后通过 PF12 的 `rt_pin_write()` 执行 LED 控制。 +- W25Q64 的 probe 在首次复位时存在偶发失败;文件系统服务会在 `W25Q64` 缺失时对 `spi20` 执行一次只读 SFUD probe 重试。实机已验证该重试成功:真实 RT-Thread 设备名为 `W25Q64`,SPI 设备名为 `spi20`,CS 为 `PB12`;FAL 初始化成功,`filesystem` 块设备创建成功。 +- `dfs_mount(..., "/fal", "elm", ...)` 实测失败,表明 `filesystem` 分区当前没有可识别的 ELM 文件系统。按要求未执行格式化;MSH 的 `mount` 只显示 `/dev` 和 ROMFS,`cat /fal/Data.txt` 返回打开失败。因此当前尚未实际写入 `Data.txt`。 +- Wi-Fi 已实测连接到配置的网络并通过 DHCP 获得地址。 + +## 7. 文件结构 + +```text +applications/ +├── aht10_service.c +├── fs_record.c +├── led_control.c +└── mqtt_service.c +``` diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/SConscript" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/SConscript" new file mode 100644 index 0000000..1eaad93 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/SConscript" @@ -0,0 +1,15 @@ +from building import * +import os + +cwd = GetCurrentDir() +CPPPATH = [cwd] +src = Glob('*.c') + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +list = os.listdir(cwd) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) + +Return('group') diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/aht10_service.c" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/aht10_service.c" new file mode 100644 index 0000000..f6c4dd3 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/aht10_service.c" @@ -0,0 +1,56 @@ +#include +#include +#define LOG_TAG "aht10" +#define LOG_LVL LOG_LVL_INFO +#include + +#include "day5_service.h" + +#define AHT10_I2C_BUS "i2c3" + +static void aht10_thread_entry(void *parameter) +{ + aht10_device_t device; + rt_uint32_t count = 0; + + RT_UNUSED(parameter); + rt_thread_mdelay(2000); + if (day5_fs_init() != RT_EOK) + LOG_E("filesystem recording is unavailable"); + + device = aht10_init(AHT10_I2C_BUS); + if (device == RT_NULL) + { + LOG_E("[AHT10] init failed on %s", AHT10_I2C_BUS); + return; + } + LOG_I("[AHT10] init success on %s", AHT10_I2C_BUS); + + while (1) + { + float humidity = aht10_read_humidity(device); + float temperature = aht10_read_temperature(device); + int temp_i = (int)temperature; + int humi_i = (int)humidity; + int temp_f = (int)((temperature >= 0 ? temperature : -temperature) * 100) % 100; + int humi_f = (int)((humidity >= 0 ? humidity : -humidity) * 100) % 100; + + count++; + LOG_I("Temp: %d.%02d Humi: %d.%02d Count: %u", + temp_i, temp_f, humi_i, humi_f, count); + day5_fs_append(temperature, humidity, count); + day5_mqtt_publish(temperature, humidity, count); + rt_thread_mdelay(2000); + } +} + +static int aht10_service_start(void) +{ + rt_thread_t thread = rt_thread_create("aht10", aht10_thread_entry, RT_NULL, + 2048, 17, 10); + if (thread == RT_NULL) + return -RT_ERROR; + rt_thread_startup(thread); + return RT_EOK; +} +INIT_APP_EXPORT(aht10_service_start); diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/day5_service.h" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/day5_service.h" new file mode 100644 index 0000000..c142cdb --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/day5_service.h" @@ -0,0 +1,12 @@ +#ifndef DAY5_SERVICE_H__ +#define DAY5_SERVICE_H__ + +#include + +rt_err_t day5_fs_init(void); +rt_err_t day5_fs_append(float temperature, float humidity, rt_uint32_t count); +rt_err_t day5_led_init(void); +rt_err_t day5_led_set(rt_bool_t on); +rt_err_t day5_mqtt_publish(float temperature, float humidity, rt_uint32_t count); + +#endif diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/fs_record.c" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/fs_record.c" new file mode 100644 index 0000000..d33dac9 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/fs_record.c" @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include +#include + +#undef LOG_TAG +#undef LOG_LVL +#define LOG_TAG "fs" +#define LOG_LVL LOG_LVL_INFO +#include + +#include "day5_service.h" + +#define DAY5_FAL_PARTITION "filesystem" +#define DAY5_MOUNT_POINT "/fal" +#define DAY5_DATA_FILE "/fal/Data.txt" + +static rt_bool_t fs_ready; + +rt_err_t day5_fs_init(void) +{ + struct rt_device *flash_dev; + + /* The BSP probe can run before the shared SPI bus has settled after reset. */ + if (rt_device_find("W25Q64") == RT_NULL) + { + LOG_I("retry W25Q64 probe on spi20 before FAL initialization"); + if (rt_sfud_flash_probe("W25Q64", "spi20") == RT_NULL) + { + LOG_E("external flash W25Q64 is unavailable; skip filesystem mount"); + return -RT_ERROR; + } + } + + fal_init(); + flash_dev = fal_blk_device_create(DAY5_FAL_PARTITION); + if (flash_dev == RT_NULL) + { + LOG_E("cannot create block device for partition '%s'", DAY5_FAL_PARTITION); + return -RT_ERROR; + } + + if (dfs_mount(flash_dev->parent.name, DAY5_MOUNT_POINT, "elm", 0, 0) != 0) + { + LOG_E("mount %s failed; format the partition separately before use", DAY5_MOUNT_POINT); + return -RT_ERROR; + } + + fs_ready = RT_TRUE; + LOG_I("filesystem mounted at %s", DAY5_MOUNT_POINT); + return RT_EOK; +} + +rt_err_t day5_fs_append(float temperature, float humidity, rt_uint32_t count) +{ + char line[96]; + int fd; + int written; + int temp_i = (int)temperature; + int humi_i = (int)humidity; + int temp_f = (int)((temperature >= 0 ? temperature : -temperature) * 100) % 100; + int humi_f = (int)((humidity >= 0 ? humidity : -humidity) * 100) % 100; + + if (!fs_ready) + return -RT_ERROR; + + written = rt_snprintf(line, sizeof(line), + "Temp: %d.%02d ; Humi: %d.%02d ; Count: %u\\r\\n", + temp_i, temp_f, humi_i, humi_f, count); + if (written <= 0 || written >= (int)sizeof(line)) + return -RT_ERROR; + + fd = open(DAY5_DATA_FILE, O_WRONLY | O_CREAT | O_APPEND, 0); + if (fd < 0) + { + LOG_E("open %s failed", DAY5_DATA_FILE); + return -RT_ERROR; + } + + if (write(fd, line, written) != written) + { + close(fd); + LOG_E("write %s failed", DAY5_DATA_FILE); + return -RT_ERROR; + } + + close(fd); + LOG_I("[FS] write success: count=%u", count); + return RT_EOK; +} diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/led_control.c" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/led_control.c" new file mode 100644 index 0000000..59dd493 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/led_control.c" @@ -0,0 +1,49 @@ +#include +#include +#include +#define LOG_TAG "led" +#define LOG_LVL LOG_LVL_INFO +#include + +#include "day5_service.h" + +/* STM32F407-RT-SPARK onboard red LED: active low. */ +#define DAY5_LED_PIN GET_PIN(F, 12) + +rt_err_t day5_led_init(void) +{ + rt_pin_mode(DAY5_LED_PIN, PIN_MODE_OUTPUT); + rt_pin_write(DAY5_LED_PIN, PIN_HIGH); + LOG_I("LED ready on PF12 (active low)"); + return RT_EOK; +} + +rt_err_t day5_led_set(rt_bool_t on) +{ + rt_pin_write(DAY5_LED_PIN, on ? PIN_LOW : PIN_HIGH); + LOG_I("[LED] command received: %s", on ? "ON" : "OFF"); + return RT_EOK; +} + +static void day5_led(int argc, char **argv) +{ + if (argc != 2) + { + rt_kprintf("Usage: day5_led on|off\\n"); + return; + } + + if (!rt_strcmp(argv[1], "on")) + day5_led_set(RT_TRUE); + else if (!rt_strcmp(argv[1], "off")) + day5_led_set(RT_FALSE); + else + rt_kprintf("Usage: day5_led on|off\\n"); +} +MSH_CMD_EXPORT(day5_led, control Day5 onboard LED); + +static int day5_led_service_start(void) +{ + return day5_led_init(); +} +INIT_APP_EXPORT(day5_led_service_start); diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/main.c" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/main.c" new file mode 100644 index 0000000..31e8594 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/main.c" @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-5-10 ShiHao first version + */ + +#include +#define LOG_TAG "day5" +#define LOG_LVL LOG_LVL_INFO +#include + +int main(void) +{ + LOG_I("Day5 services are initialized by application init hooks"); + return 0; +} diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/mqtt_service.c" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/mqtt_service.c" new file mode 100644 index 0000000..3432808 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/applications/mqtt_service.c" @@ -0,0 +1,152 @@ +#include +#include +#include +#include +#define LOG_TAG "mqtt" +#define LOG_LVL LOG_LVL_INFO +#include + +#include "day5_service.h" + +/* EMQX Cloud connection parameters. The Paho MQTT URI below uses TLS. */ +#define WIFI_SSID "" +#define WIFI_PASSWORD "" +#define MQTT_HOST "" +#define MQTT_PORT 8883 +#define MQTT_USERNAME "" +#define MQTT_PASSWORD "" +#define MQTT_CLIENT_ID "spark_f407_001" +#define MQTT_PUB_TOPIC "sensor/aht10" +#define MQTT_SUB_TOPIC "led/control" + +static MQTTClient mqtt_client; +static rt_bool_t mqtt_started; + +static void mqtt_command_callback(MQTTClient *client, MessageData *message_data) +{ + char command[8] = {0}; + int length = message_data->message->payloadlen; + + RT_UNUSED(client); + if (length > (int)sizeof(command) - 1) + length = sizeof(command) - 1; + rt_memcpy(command, message_data->message->payload, length); + LOG_I("MQTT command: %s", command); + + if (!rt_strcmp(command, "ON") || !rt_strcmp(command, "1")) + day5_led_set(RT_TRUE); + else if (!rt_strcmp(command, "OFF") || !rt_strcmp(command, "0")) + day5_led_set(RT_FALSE); + else + LOG_E("unsupported LED command: %s", command); +} + +static void mqtt_online_callback(MQTTClient *client) +{ + RT_UNUSED(client); + LOG_I("[MQTT] connected"); +} + +static void mqtt_offline_callback(MQTTClient *client) +{ + RT_UNUSED(client); + LOG_E("[MQTT] disconnected"); +} + +static void mqtt_thread_entry(void *parameter) +{ + MQTTPacket_connectData connect_data = MQTTPacket_connectData_initializer; + static char uri[96]; + + RT_UNUSED(parameter); + if (WIFI_SSID[0] == '\0') + { + LOG_I("Wi-Fi credentials are empty; use: wifi join "); + } + + while (rt_wlan_is_connected() != RT_TRUE) + { + if (WIFI_SSID[0] != '\0') + { + LOG_I("request Wi-Fi connection to configured SSID"); + rt_wlan_connect(WIFI_SSID, WIFI_PASSWORD); + } + LOG_I("waiting for Wi-Fi connection before MQTT startup"); + rt_thread_mdelay(5000); + } + LOG_I("wifi connected"); + + if (MQTT_HOST[0] == '\0') + { + LOG_E("MQTT_HOST is empty; broker connection is intentionally skipped"); + return; + } + + rt_memset(&mqtt_client, 0, sizeof(mqtt_client)); + rt_snprintf(uri, sizeof(uri), "ssl://%s:%d", MQTT_HOST, MQTT_PORT); + mqtt_client.uri = uri; + mqtt_client.condata = connect_data; + mqtt_client.condata.clientID.cstring = MQTT_CLIENT_ID; + mqtt_client.condata.username.cstring = MQTT_USERNAME; + mqtt_client.condata.password.cstring = MQTT_PASSWORD; + mqtt_client.condata.keepAliveInterval = 60; + mqtt_client.condata.cleansession = 1; + mqtt_client.buf_size = 1024; + mqtt_client.readbuf_size = 1024; + mqtt_client.buf = rt_malloc(mqtt_client.buf_size); + mqtt_client.readbuf = rt_malloc(mqtt_client.readbuf_size); + if (mqtt_client.buf == RT_NULL || mqtt_client.readbuf == RT_NULL) + { + LOG_E("MQTT buffer allocation failed"); + return; + } + + mqtt_client.online_callback = mqtt_online_callback; + mqtt_client.offline_callback = mqtt_offline_callback; + mqtt_client.messageHandlers[0].topicFilter = MQTT_SUB_TOPIC; + mqtt_client.messageHandlers[0].callback = mqtt_command_callback; + mqtt_client.messageHandlers[0].qos = QOS1; + paho_mqtt_start(&mqtt_client); + mqtt_started = RT_TRUE; + LOG_I("MQTT started: publish=%s subscribe=%s", MQTT_PUB_TOPIC, MQTT_SUB_TOPIC); +} + +static int mqtt_service_start(void) +{ + rt_thread_t thread = rt_thread_create("mqtt", mqtt_thread_entry, RT_NULL, + 2048, 18, 10); + if (thread == RT_NULL) + return -RT_ERROR; + rt_thread_startup(thread); + return RT_EOK; +} +INIT_APP_EXPORT(mqtt_service_start); + +rt_err_t day5_mqtt_publish(float temperature, float humidity, rt_uint32_t count) +{ + char payload[96]; + MQTTMessage message; + int temp_i = (int)temperature; + int humi_i = (int)humidity; + int temp_f = (int)((temperature >= 0 ? temperature : -temperature) * 100) % 100; + int humi_f = (int)((humidity >= 0 ? humidity : -humidity) * 100) % 100; + + if (!mqtt_started || !mqtt_client.isconnected) + return -RT_ERROR; + + rt_snprintf(payload, sizeof(payload), + "{\"temp\":%d.%02d,\"humi\":%d.%02d,\"count\":%u}", + temp_i, temp_f, humi_i, humi_f, count); + message.qos = QOS1; + message.retained = 0; + message.payload = payload; + message.payloadlen = rt_strlen(payload); + if (MQTTPublish(&mqtt_client, MQTT_PUB_TOPIC, &message) != 0) + { + LOG_E("publish failed"); + return -RT_ERROR; + } + + LOG_I("publish success: %s", payload); + return RT_EOK; +} diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/.config" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/.config" new file mode 100644 index 0000000..d135ad5 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/.config" @@ -0,0 +1,1211 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=1024 +# CONFIG_RT_USING_TIMER_SOFT is not set + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_TINY_FFS is not set +# CONFIG_RT_KPRINTF_USING_LONGLONG is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x40101 +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M4=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_RT_USING_DFS=y +CONFIG_DFS_USING_POSIX=y +CONFIG_DFS_USING_WORKDIR=y +CONFIG_DFS_FILESYSTEMS_MAX=4 +CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 +CONFIG_DFS_FD_MAX=16 +# CONFIG_RT_USING_DFS_MNTTABLE is not set +CONFIG_RT_USING_DFS_ELMFAT=y +CONFIG_RT_USING_DFS_DEVFS=y +CONFIG_RT_USING_DFS_ROMFS=y +# CONFIG_RT_USING_DFS_RAMFS is not set +# CONFIG_RT_USING_DFS_NFS is not set +CONFIG_RT_USING_FAL=y +CONFIG_FAL_DEBUG_CONFIG=y +CONFIG_FAL_DEBUG=1 +CONFIG_FAL_PART_HAS_TABLE_CFG=y +CONFIG_FAL_USING_SFUD_PORT=y +CONFIG_FAL_USING_NOR_FLASH_DEV_NAME="norflash0" +# CONFIG_RT_USING_LWP is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +CONFIG_RT_USING_I2C=y +# CONFIG_RT_USING_PHY is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +CONFIG_RT_USING_SPI=y +# CONFIG_RT_USING_SPI_BITOPS is not set +# CONFIG_RT_USING_QSPI is not set +# CONFIG_RT_USING_SPI_MSD is not set +CONFIG_RT_USING_SFUD=y +CONFIG_RT_SFUD_USING_SFDP=y +CONFIG_RT_SFUD_USING_FLASH_INFO_TABLE=y +# CONFIG_RT_SFUD_USING_QSPI is not set +CONFIG_RT_SFUD_SPI_MAX_HZ=50000000 +# CONFIG_RT_DEBUG_SFUD is not set +# CONFIG_RT_USING_ENC28J60 is not set +# CONFIG_RT_USING_SPI_WIFI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +CONFIG_RT_USING_SENSOR=y +CONFIG_RT_USING_SENSOR_CMD=y +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +CONFIG_RT_USING_WIFI=y +CONFIG_RT_WLAN_DEVICE_STA_NAME="wlan0" +CONFIG_RT_WLAN_DEVICE_AP_NAME="wlan1" +CONFIG_RT_WLAN_SSID_MAX_LENGTH=32 +CONFIG_RT_WLAN_PASSWORD_MAX_LENGTH=32 +CONFIG_RT_WLAN_DEV_EVENT_NUM=2 +CONFIG_RT_WLAN_MANAGE_ENABLE=y +CONFIG_RT_WLAN_SCAN_WAIT_MS=10000 +CONFIG_RT_WLAN_CONNECT_WAIT_MS=10000 +CONFIG_RT_WLAN_SCAN_SORT=y +CONFIG_RT_WLAN_MSH_CMD_ENABLE=y +CONFIG_RT_WLAN_AUTO_CONNECT_ENABLE=y +CONFIG_AUTO_CONNECTION_PERIOD_MS=2000 +CONFIG_RT_WLAN_CFG_ENABLE=y +CONFIG_RT_WLAN_CFG_INFO_MAX=3 +CONFIG_RT_WLAN_PROT_ENABLE=y +CONFIG_RT_WLAN_PROT_NAME_LEN=8 +CONFIG_RT_WLAN_PROT_MAX=2 +CONFIG_RT_WLAN_DEFAULT_PROT="lwip" +CONFIG_RT_WLAN_PROT_LWIP_ENABLE=y +CONFIG_RT_WLAN_PROT_LWIP_NAME="lwip" +# CONFIG_RT_WLAN_PROT_LWIP_PBUF_FORCE is not set +CONFIG_RT_WLAN_WORK_THREAD_ENABLE=y +CONFIG_RT_WLAN_WORKQUEUE_THREAD_NAME="wlan" +CONFIG_RT_WLAN_WORKQUEUE_THREAD_SIZE=2048 +CONFIG_RT_WLAN_WORKQUEUE_THREAD_PRIO=15 +# CONFIG_RT_WLAN_DEBUG is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# C/C++ and POSIX layer +# +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# POSIX (Portable Operating System Interface) layer +# +CONFIG_RT_USING_POSIX_FS=y +CONFIG_RT_USING_POSIX_DEVIO=y +# CONFIG_RT_USING_POSIX_STDIO is not set +CONFIG_RT_USING_POSIX_POLL=y +CONFIG_RT_USING_POSIX_SELECT=y +CONFIG_RT_USING_POSIX_SOCKET=y +# CONFIG_RT_USING_POSIX_TERMIOS is not set +# CONFIG_RT_USING_POSIX_AIO is not set +# CONFIG_RT_USING_POSIX_MMAN is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +CONFIG_RT_USING_POSIX_PIPE=y +CONFIG_RT_USING_POSIX_PIPE_SIZE=512 +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Network +# +CONFIG_RT_USING_SAL=y +CONFIG_SAL_INTERNET_CHECK=y + +# +# Docking with protocol stacks +# +CONFIG_SAL_USING_LWIP=y +# CONFIG_SAL_USING_AT is not set +# CONFIG_SAL_USING_TLS is not set +CONFIG_SAL_USING_POSIX=y +CONFIG_RT_USING_NETDEV=y +CONFIG_NETDEV_USING_IFCONFIG=y +CONFIG_NETDEV_USING_PING=y +CONFIG_NETDEV_USING_NETSTAT=y +CONFIG_NETDEV_USING_AUTO_DEFAULT=y +# CONFIG_NETDEV_USING_IPV6 is not set +CONFIG_NETDEV_IPV4=1 +CONFIG_NETDEV_IPV6=0 +# CONFIG_NETDEV_IPV6_SCOPES is not set +CONFIG_RT_USING_LWIP=y +# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set +# CONFIG_RT_USING_LWIP141 is not set +CONFIG_RT_USING_LWIP203=y +# CONFIG_RT_USING_LWIP212 is not set +# CONFIG_RT_USING_LWIP_LATEST is not set +CONFIG_RT_USING_LWIP_VER_NUM=0x20003 +# CONFIG_RT_USING_LWIP_IPV6 is not set +CONFIG_RT_LWIP_MEM_ALIGNMENT=4 +CONFIG_RT_LWIP_IGMP=y +CONFIG_RT_LWIP_ICMP=y +# CONFIG_RT_LWIP_SNMP is not set +CONFIG_RT_LWIP_DNS=y +CONFIG_RT_LWIP_DHCP=y +CONFIG_IP_SOF_BROADCAST=1 +CONFIG_IP_SOF_BROADCAST_RECV=1 + +# +# Static IPv4 Address +# +CONFIG_RT_LWIP_IPADDR="192.168.1.30" +CONFIG_RT_LWIP_GWADDR="192.168.1.1" +CONFIG_RT_LWIP_MSKADDR="255.255.255.0" +CONFIG_RT_LWIP_UDP=y +CONFIG_RT_LWIP_TCP=y +CONFIG_RT_LWIP_RAW=y +# CONFIG_RT_LWIP_PPP is not set +CONFIG_RT_MEMP_NUM_NETCONN=8 +CONFIG_RT_LWIP_PBUF_NUM=16 +CONFIG_RT_LWIP_RAW_PCB_NUM=4 +CONFIG_RT_LWIP_UDP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_SEG_NUM=40 +CONFIG_RT_LWIP_TCP_SND_BUF=8196 +CONFIG_RT_LWIP_TCP_WND=8196 +CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=10 +CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 +CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=1024 +# CONFIG_LWIP_NO_RX_THREAD is not set +# CONFIG_LWIP_NO_TX_THREAD is not set +CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 +CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=1024 +CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 +# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set +CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 +CONFIG_LWIP_NETIF_LINK_CALLBACK=1 +CONFIG_SO_REUSE=1 +CONFIG_LWIP_SO_RCVTIMEO=1 +CONFIG_LWIP_SO_SNDTIMEO=1 +CONFIG_LWIP_SO_RCVBUF=1 +CONFIG_LWIP_SO_LINGER=0 +# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set +CONFIG_LWIP_NETIF_LOOPBACK=0 +# CONFIG_RT_LWIP_STATS is not set +# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set +CONFIG_RT_LWIP_USING_PING=y +# CONFIG_LWIP_USING_DHCPD is not set +# CONFIG_RT_LWIP_DEBUG is not set +# CONFIG_RT_USING_AT is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +CONFIG_RT_USING_ULOG=y +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RT_LINK is not set +# CONFIG_RT_USING_VBUS is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +CONFIG_PKG_USING_PAHOMQTT=y +CONFIG_PAHOMQTT_PIPE_MODE=y +# CONFIG_PAHOMQTT_UDP_MODE is not set +# CONFIG_PKG_USING_PAHOMQTT_EXAMPLE is not set +# CONFIG_PKG_USING_PAHOMQTT_TEST is not set +CONFIG_MQTT_USING_TLS=y +CONFIG_RT_PKG_MQTT_THREAD_STACK_SIZE=6144 +CONFIG_PKG_PAHOMQTT_SUBSCRIBE_HANDLERS=1 +CONFIG_MQTT_DEBUG=y +CONFIG_PKG_PAHOMQTT_PATH="/packages/iot/pahomqtt" +# CONFIG_PKG_USING_PAHOMQTT_LATEST is not set +CONFIG_PKG_USING_PAHOMQTT_V120=y +CONFIG_PKG_PAHOMQTT_VER="v1.2.0" +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +CONFIG_PKG_USING_RW007=y +CONFIG_PKG_RW007_PATH="/packages/iot/WiFi/rw007" +# CONFIG_PKG_USING_RW007_V210 is not set +CONFIG_PKG_USING_RW007_V201=y +# CONFIG_PKG_USING_RW007_V200 is not set +# CONFIG_PKG_USING_RW007_V111 is not set +# CONFIG_PKG_USING_RW007_V110 is not set +# CONFIG_PKG_USING_RW007_V100 is not set +# CONFIG_PKG_USING_RW007_LATEST_VERSION is not set +CONFIG_PKG_RW007_VER="v2.0.1" +# CONFIG_RW007_NOT_USE_EXAMPLE_DRIVERS is not set +CONFIG_RW007_USING_STM32_DRIVERS=y +CONFIG_RW007_SPI_MAX_HZ=30000000 +CONFIG_RW007_SPI_BUS_NAME="spi2" +CONFIG_RW007_CS_PIN=90 +CONFIG_RW007_BOOT0_PIN=29 +CONFIG_RW007_BOOT1_PIN=90 +CONFIG_RW007_INT_BUSY_PIN=107 +CONFIG_RW007_RST_PIN=111 +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_EZ_IOT_OS is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set + +# +# security packages +# +CONFIG_PKG_USING_MBEDTLS=y +CONFIG_PKG_USING_MBEDTLS_USER_CERTS=y +CONFIG_MBEDTLS_AES_ROM_TABLES=y +CONFIG_MBEDTLS_ECP_WINDOW_SIZE=2 +CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=4096 +CONFIG_PKG_USING_MBEDTLS_V27102=y +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_PERSIMMON is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_RT_TRACE is not set + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set + +# +# peripheral libraries and drivers +# + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +CONFIG_PKG_USING_AHT10=y +CONFIG_PKG_USING_AHT10_V210=y +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ESP_IDF is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set + +# +# miscellaneous packages +# + +# +# project laboratory +# + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# CONFIG_PKG_USING_GET_IRQ_PRIORITY is not set + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set + +# +# Uncategorized +# +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F407ZG=y +CONFIG_BOARD_STM32F407_SPARK=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_USB_TO_USART=y +# CONFIG_BSP_USING_COM2 is not set +# CONFIG_BSP_USING_COM3 is not set +# CONFIG_BSP_USING_RS485 is not set +# CONFIG_BSP_USING_SRAM is not set +# CONFIG_BSP_USING_ONBOARD_LCD is not set +# CONFIG_BSP_USING_ONBOARD_LED_MATRIX is not set +# CONFIG_BSP_USING_LVGL is not set +CONFIG_BSP_USING_SPI_FLASH=y +# CONFIG_BSP_USING_EEPROM is not set +# CONFIG_BSP_USING_ENC28j60 is not set +CONFIG_BSP_USING_FS=y +CONFIG_BSP_USING_FAL=y +# CONFIG_BSP_USING_EASYFLASH is not set +CONFIG_BSP_USING_RW007_WLAN=y +# CONFIG_BSP_USING_AHT21 is not set +# CONFIG_BSP_USING_AP3216C is not set +# CONFIG_BSP_USING_ICM20608 is not set +# CONFIG_BSP_USING_USB_MOUSE is not set + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_UART1_TX_USING_DMA is not set +# CONFIG_BSP_USING_UART2 is not set +# CONFIG_BSP_USING_UART3 is not set +# CONFIG_BSP_USING_UART4 is not set +# CONFIG_BSP_USING_UART5 is not set +# CONFIG_BSP_USING_UART6 is not set +# CONFIG_BSP_USING_TIM is not set +# CONFIG_BSP_USING_PWM is not set +CONFIG_BSP_USING_ON_CHIP_FLASH=y +# CONFIG_BSP_USING_SOFT_SPI is not set +CONFIG_BSP_USING_SPI=y +# CONFIG_BSP_USING_SPI1 is not set +CONFIG_BSP_USING_SPI2=y +# CONFIG_BSP_SPI2_TX_USING_DMA is not set +# CONFIG_BSP_SPI2_RX_USING_DMA is not set +# CONFIG_BSP_USING_ADC is not set +CONFIG_BSP_USING_I2C=y +# CONFIG_BSP_USING_I2C1 is not set +# CONFIG_BSP_USING_I2C2 is not set +CONFIG_BSP_USING_I2C3=y +CONFIG_BSP_I2C3_SCL_PIN=64 +CONFIG_BSP_I2C3_SDA_PIN=65 +# CONFIG_BSP_USING_ONBOARD_PM is not set +# CONFIG_BSP_USING_DAC is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +# CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_SDIO is not set +# CONFIG_BSP_USING_USBD is not set +# CONFIG_BSP_USING_USBH is not set +# CONFIG_BSP_USING_PULSE_ENCODER is not set +# CONFIG_BSP_USING_EXT_FMC_IO is not set +# CONFIG_BSP_USING_FMC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set + +# +# Board extended module Drivers +# +# CONFIG_BSP_USING_AT_ESP8266 is not set diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/Kconfig" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/Kconfig" new file mode 100644 index 0000000..a82134c --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/Kconfig" @@ -0,0 +1,20 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "rt-thread" + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "$RTT_DIR/../libraries/Kconfig" diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/rtconfig.h" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/rtconfig.h" new file mode 100644 index 0000000..9fabd24 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/config/rtconfig.h" @@ -0,0 +1,408 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 1024 + +/* kservice optimization */ + +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40101 +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M4 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define RT_USING_DFS +#define DFS_USING_POSIX +#define DFS_USING_WORKDIR +#define DFS_FILESYSTEMS_MAX 4 +#define DFS_FILESYSTEM_TYPES_MAX 4 +#define DFS_FD_MAX 16 +#define RT_USING_DFS_DEVFS +#define RT_USING_DFS_ELMFAT +#define RT_USING_DFS_ROMFS +#define RT_DFS_ELM_CODE_PAGE 437 +#define RT_DFS_ELM_WORD_ACCESS +#define RT_DFS_ELM_USE_LFN_3 +#define RT_DFS_ELM_USE_LFN 3 +#define RT_DFS_ELM_LFN_UNICODE_0 +#define RT_DFS_ELM_LFN_UNICODE 0 +#define RT_DFS_ELM_MAX_LFN 255 +#define RT_DFS_ELM_DRIVES 2 +#define RT_DFS_ELM_MAX_SECTOR_SIZE 4096 +#define RT_DFS_ELM_REENTRANT +#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 +#define RT_USING_FAL +#define FAL_DEBUG_CONFIG +#define FAL_DEBUG 1 +#define FAL_PART_HAS_TABLE_CFG +#define FAL_USING_SFUD_PORT +#define FAL_USING_NOR_FLASH_DEV_NAME "norflash0" + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN +#define RT_USING_I2C +#define RT_USING_I2C_BITOPS +#define RT_USING_SENSOR +#define RT_USING_SENSOR_CMD +#define RT_USING_SPI +#define RT_USING_SFUD +#define RT_SFUD_USING_SFDP +#define RT_SFUD_USING_FLASH_INFO_TABLE +#define RT_SFUD_SPI_MAX_HZ 50000000 +#define RT_USING_WIFI +#define RT_WLAN_DEVICE_STA_NAME "wlan0" +#define RT_WLAN_DEVICE_AP_NAME "wlan1" +#define RT_WLAN_SSID_MAX_LENGTH 32 +#define RT_WLAN_PASSWORD_MAX_LENGTH 32 +#define RT_WLAN_DEV_EVENT_NUM 2 +#define RT_WLAN_MANAGE_ENABLE +#define RT_WLAN_SCAN_WAIT_MS 10000 +#define RT_WLAN_CONNECT_WAIT_MS 10000 +#define RT_WLAN_SCAN_SORT +#define RT_WLAN_MSH_CMD_ENABLE +#define RT_WLAN_AUTO_CONNECT_ENABLE +#define AUTO_CONNECTION_PERIOD_MS 2000 +#define RT_WLAN_CFG_ENABLE +#define RT_WLAN_CFG_INFO_MAX 3 +#define RT_WLAN_PROT_ENABLE +#define RT_WLAN_PROT_NAME_LEN 8 +#define RT_WLAN_PROT_MAX 2 +#define RT_WLAN_DEFAULT_PROT "lwip" +#define RT_WLAN_PROT_LWIP_ENABLE +#define RT_WLAN_PROT_LWIP_NAME "lwip" +#define RT_WLAN_WORK_THREAD_ENABLE +#define RT_WLAN_WORKQUEUE_THREAD_NAME "wlan" +#define RT_WLAN_WORKQUEUE_THREAD_SIZE 2048 +#define RT_WLAN_WORKQUEUE_THREAD_PRIO 15 + +/* Using USB */ + + +/* C/C++ and POSIX layer */ + +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* POSIX (Portable Operating System Interface) layer */ + +#define RT_USING_POSIX_FS +#define RT_USING_POSIX_DEVIO +#define RT_USING_POSIX_POLL +#define RT_USING_POSIX_SELECT +#define RT_USING_POSIX_SOCKET + +/* Interprocess Communication (IPC) */ + +#define RT_USING_POSIX_PIPE +#define RT_USING_POSIX_PIPE_SIZE 512 + +/* Socket is in the 'Network' category */ + + +/* Network */ + +#define RT_USING_SAL +#define SAL_INTERNET_CHECK + +/* Docking with protocol stacks */ + +#define SAL_USING_LWIP +#define SAL_USING_POSIX +#define RT_USING_NETDEV +#define NETDEV_USING_IFCONFIG +#define NETDEV_USING_PING +#define NETDEV_USING_NETSTAT +#define NETDEV_USING_AUTO_DEFAULT +#define NETDEV_IPV4 1 +#define NETDEV_IPV6 0 +#define RT_USING_LWIP +#define RT_USING_LWIP203 +#define RT_USING_LWIP_VER_NUM 0x20003 +#define RT_LWIP_MEM_ALIGNMENT 4 +#define RT_LWIP_IGMP +#define RT_LWIP_ICMP +#define RT_LWIP_DNS +#define RT_LWIP_DHCP +#define IP_SOF_BROADCAST 1 +#define IP_SOF_BROADCAST_RECV 1 + +/* Static IPv4 Address */ + +#define RT_LWIP_IPADDR "192.168.1.30" +#define RT_LWIP_GWADDR "192.168.1.1" +#define RT_LWIP_MSKADDR "255.255.255.0" +#define RT_LWIP_UDP +#define RT_LWIP_TCP +#define RT_LWIP_RAW +#define RT_MEMP_NUM_NETCONN 8 +#define RT_LWIP_PBUF_NUM 16 +#define RT_LWIP_RAW_PCB_NUM 4 +#define RT_LWIP_UDP_PCB_NUM 4 +#define RT_LWIP_TCP_PCB_NUM 4 +#define RT_LWIP_TCP_SEG_NUM 40 +#define RT_LWIP_TCP_SND_BUF 8196 +#define RT_LWIP_TCP_WND 8196 +#define RT_LWIP_TCPTHREAD_PRIORITY 10 +#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 +#define RT_LWIP_TCPTHREAD_STACKSIZE 1024 +#define RT_LWIP_ETHTHREAD_PRIORITY 12 +#define RT_LWIP_ETHTHREAD_STACKSIZE 1024 +#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_NETIF_LINK_CALLBACK 1 +#define SO_REUSE 1 +#define LWIP_SO_RCVTIMEO 1 +#define LWIP_SO_SNDTIMEO 1 +#define LWIP_SO_RCVBUF 1 +#define LWIP_SO_LINGER 0 +#define LWIP_NETIF_LOOPBACK 0 +#define RT_LWIP_USING_PING + +/* Utilities */ + +#define RT_USING_ULOG +#define ULOG_OUTPUT_LVL 7 +#define ULOG_USING_ISR_LOG + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + +#define PKG_USING_PAHOMQTT +#define PAHOMQTT_PIPE_MODE +#define MQTT_USING_TLS +#define RT_PKG_MQTT_THREAD_STACK_SIZE 6144 +#define PKG_PAHOMQTT_SUBSCRIBE_HANDLERS 1 +#define MQTT_DEBUG +#define PKG_USING_PAHOMQTT_V120 + +/* mbedTLS supplies certificate verification for Paho MQTT TLS. */ +#define PKG_USING_MBEDTLS +#define PKG_USING_MBEDTLS_USER_CERTS +#define MBEDTLS_AES_ROM_TABLES +#define MBEDTLS_ECP_WINDOW_SIZE 2 +#define MBEDTLS_SSL_MAX_CONTENT_LEN 4096 +#define PKG_USING_MBEDTLS_V27102 + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + +#define PKG_USING_RW007 +#define PKG_USING_RW007_V201 +#define RW007_USING_STM32_DRIVERS +#define RW007_SPI_MAX_HZ 30000000 +#define RW007_SPI_BUS_NAME "spi2" +#define RW007_CS_PIN 90 +#define RW007_BOOT0_PIN 29 +#define RW007_BOOT1_PIN 90 +#define RW007_INT_BUSY_PIN 107 +#define RW007_RST_PIN 111 + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + + +/* XML: Extensible Markup Language */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + +/* sensors drivers */ + +#define PKG_USING_AHT10 +#define PKG_USING_AHT10_V210 + + +/* touch drivers */ + + +/* Kendryte SDK */ + + +/* AI packages */ + + +/* Signal Processing and Control Algorithm Packages */ + + +/* miscellaneous packages */ + +/* project laboratory */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Arduino libraries */ + + +/* Projects and Demos */ + + +/* Sensors */ + + +/* Display */ + + +/* Timing */ + + +/* Data Processing */ + + +/* Data Storage */ + +/* Communication */ + + +/* Device Control */ + + +/* Other */ + + +/* Signal IO */ + + +/* Uncategorized */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F4 + +/* Hardware Drivers Config */ + +#define SOC_STM32F407ZG +#define BOARD_STM32F407_SPARK + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_USART +#define BSP_USING_SPI_FLASH +#define BSP_USING_FS +#define BSP_USING_FLASH_FATFS +#define BSP_USING_FAL +#define BSP_USING_RW007_WLAN + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 +#define BSP_USING_ON_CHIP_FLASH +#define BSP_USING_SPI +#define BSP_USING_SPI2 +#define BSP_USING_I2C +#define BSP_USING_I2C3 +#define BSP_I2C3_SCL_PIN 64 +#define BSP_I2C3_SDA_PIN 65 + +/* Board extended module Drivers */ + + +#endif diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/emqxsl-ca.crt" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/emqxsl-ca.crt" new file mode 100644 index 0000000..798e002 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/emqxsl-ca.crt" @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/pahomqtt_SConscript" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/pahomqtt_SConscript" new file mode 100644 index 0000000..4b8ab6b --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/pahomqtt_SConscript" @@ -0,0 +1,30 @@ +Import('RTT_ROOT') +from building import * + +# get current directory +cwd = GetCurrentDir() + +# The set of source files associated with this SConscript file. +src = Glob('MQTTPacket/src/*.c') + +if GetDepend('PAHOMQTT_UDP_MODE'): + src += ['MQTTClient-RT/paho_mqtt_udp.c'] +else: + src += ['MQTTClient-RT/paho_mqtt_pipe.c'] + +if GetDepend(['PKG_USING_PAHOMQTT_EXAMPLE']): + src += Glob('samples/*.c') + +if GetDepend(['PKG_USING_PAHOMQTT_TEST']): + src += Glob('tests/*.c') + +path = [cwd + '/MQTTPacket/src'] +path += [cwd + '/MQTTClient-RT'] + +if GetDepend('MQTT_USING_TLS'): + path += [cwd + '/../mbedtls-v2.7.10.2/mbedtls/include'] + path += [cwd + '/../mbedtls-v2.7.10.2/ports/inc'] + +group = DefineGroup('paho-mqtt', src, depend = ['PKG_USING_PAHOMQTT'], CPPPATH = path) + +Return('group') diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/tls_net.c" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/tls_net.c" new file mode 100644 index 0000000..54834d8 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\344\275\234\344\270\232/tls_support/tls_net.c" @@ -0,0 +1,685 @@ +/* + * TCP/IP or UDP/IP networking functions + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#include +#include + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + + + +#include "tls_net.h" + +#include + +#if defined(_WIN32) +#define SIGPIPE 13 +#endif + +#undef _WIN32 + +#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \ + !defined(EFI32) + +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif +/* Enables getaddrinfo() & Co */ +#define _WIN32_WINNT 0x0501 +#include + +#include +#include + +#if defined(_MSC_VER) +#if defined(_WIN32_WCE) +#pragma comment( lib, "ws2.lib" ) +#else +#pragma comment( lib, "ws2_32.lib" ) +#endif +#endif /* _MSC_VER */ + +static int wsa_init_done = 0; + +#elif defined(RTTHREAD_VERSION) /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ + +#include +#include +#include +#include +#if RT_VER_NUM >= 0x40004 +#include +#include +#include +#else +#include +#include +#endif +#include + +#include + +#define __socklen_t_defined + +/* input flags for struct addrinfo */ +#define AI_PASSIVE 0x01 +#define AI_CANONNAME 0x02 +#define AI_NUMERICHOST 0x04 +#define AI_NUMERICSERV 0x08 +#define AI_V4MAPPED 0x10 +#define AI_ALL 0x20 +#define AI_ADDRCONFIG 0x40 + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ + +/* Some MS functions want int and MSVC warns if we pass size_t, + * but the standard fucntions use socklen_t, so cast only for MSVC */ +#if defined(_MSC_VER) +#define MSVC_INT_CAST (int) +#else +#define MSVC_INT_CAST +#endif + +#include +#include + +#include + +#include + +/* + * Prepare for using the sockets interface + */ +static int net_prepare( void ) +{ +#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ + !defined(EFI32) + WSADATA wsaData; + + if( wsa_init_done == 0 ) + { + if( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 ) + return( MBEDTLS_ERR_NET_SOCKET_FAILED ); + + wsa_init_done = 1; + } +#else +#if !defined(EFIX64) && !defined(EFI32) && !defined(RTTHREAD_VERSION) + signal( SIGPIPE, SIG_IGN ); +#endif +#endif + return( 0 ); +} + +/* + * Initialize a context + */ +void mbedtls_net_init( mbedtls_net_context *ctx ) +{ + ctx->fd = -1; +} + +/* + * Initiate a TCP connection with host:port and the given protocol + */ +int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto ) +{ + int ret; + struct addrinfo hints, *addr_list, *cur; + + if( ( ret = net_prepare() ) != 0 ) + return( ret ); + + /* Do name resolution with both IPv6 and IPv4 */ + memset( &hints, 0, sizeof( hints ) ); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; + hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; + + if( getaddrinfo( host, port, &hints, &addr_list ) != 0 ) + { + /* + * RT-Thread 4.1.1's SAL getaddrinfo() is not available for every + * netdev, while gethostbyname() is. Fall back to the IPv4 resolver + * so that a DNS-resolvable MQTT hostname can still use TLS/SNI. + */ + struct hostent *hostent; + struct sockaddr_in server_addr; + + hostent = gethostbyname(host); + if (hostent == NULL || hostent->h_addr_list == NULL || + hostent->h_addr_list[0] == NULL) + return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); + + ctx->fd = (int)socket(AF_INET, hints.ai_socktype, hints.ai_protocol); + if (ctx->fd < 0) + return( MBEDTLS_ERR_NET_SOCKET_FAILED ); + + memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons((unsigned short)atoi(port)); + memcpy(&server_addr.sin_addr, hostent->h_addr_list[0], + hostent->h_length); + if (connect(ctx->fd, (struct sockaddr *)&server_addr, + sizeof(server_addr)) == 0) + return(0); + + closesocket(ctx->fd); + return(MBEDTLS_ERR_NET_CONNECT_FAILED); + } + + /* Try the sockaddrs until a connection succeeds */ + ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; + for( cur = addr_list; cur != NULL; cur = cur->ai_next ) + { + ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, + cur->ai_protocol ); + if( ctx->fd < 0 ) + { + ret = MBEDTLS_ERR_NET_SOCKET_FAILED; + continue; + } + + if( connect( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) == 0 ) + { + ret = 0; + break; + } + + closesocket( ctx->fd ); + ret = MBEDTLS_ERR_NET_CONNECT_FAILED; + } + + freeaddrinfo( addr_list ); + + return( ret ); +} + +/* + * Create a listening socket on bind_ip:port + */ +int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto ) +{ + int n, ret; + struct addrinfo hints, *addr_list, *cur; + + if( ( ret = net_prepare() ) != 0 ) + return( ret ); + + /* Bind to IPv6 and/or IPv4, but only in the desired protocol */ + memset( &hints, 0, sizeof( hints ) ); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; + hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; + if( bind_ip == NULL ) + hints.ai_flags = AI_PASSIVE; + + if( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) + return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); + + /* Try the sockaddrs until a binding succeeds */ + ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; + for( cur = addr_list; cur != NULL; cur = cur->ai_next ) + { + ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, + cur->ai_protocol ); + if( ctx->fd < 0 ) + { + ret = MBEDTLS_ERR_NET_SOCKET_FAILED; + continue; + } + + n = 1; + if( setsockopt( ctx->fd, SOL_SOCKET, SO_REUSEADDR, + (const char *) &n, sizeof( n ) ) != 0 ) + { + closesocket( ctx->fd ); + ret = MBEDTLS_ERR_NET_SOCKET_FAILED; + continue; + } + + if( bind( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) != 0 ) + { + closesocket( ctx->fd ); + ret = MBEDTLS_ERR_NET_BIND_FAILED; + continue; + } + + /* Listen only makes sense for TCP */ + if( proto == MBEDTLS_NET_PROTO_TCP ) + { + if( listen( ctx->fd, MBEDTLS_NET_LISTEN_BACKLOG ) != 0 ) + { + closesocket( ctx->fd ); + ret = MBEDTLS_ERR_NET_LISTEN_FAILED; + continue; + } + } + + /* I we ever get there, it's a success */ + ret = 0; + break; + } + + freeaddrinfo( addr_list ); + + return( ret ); + +} + +#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ + !defined(EFI32) +/* + * Check if the requested operation would be blocking on a non-blocking socket + * and thus 'failed' with a negative return value. + */ +static int net_would_block( const mbedtls_net_context *ctx ) +{ + ((void) ctx); + return( WSAGetLastError() == WSAEWOULDBLOCK ); +} +#else +/* + * Check if the requested operation would be blocking on a non-blocking socket + * and thus 'failed' with a negative return value. + * + * Note: on a blocking socket this function always returns 0! + */ +static int net_would_block( const mbedtls_net_context *ctx ) +{ + /* + * Never return 'WOULD BLOCK' on a non-blocking socket + */ +// if( ( fcntl( ctx->fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) +// return( 0 ); + +// switch( errno ) +// { +//#if defined EAGAIN +// case EAGAIN: +//#endif +//#if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN +// case EWOULDBLOCK: +//#endif +// return( 1 ); +// } +// return( 0 ); + + if( ( fcntl( ctx->fd, F_GETFL) & O_NONBLOCK ) != O_NONBLOCK ) + return( 0 ); + return( 1 ); + +} +#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ + +/* + * Accept a connection from a remote client + */ +int mbedtls_net_accept( mbedtls_net_context *bind_ctx, + mbedtls_net_context *client_ctx, + void *client_ip, size_t buf_size, size_t *ip_len ) +{ + int ret; + int type; + +// struct sockaddr_storage client_addr; //by FlyLu + + struct sockaddr_in client_addr; + +#if defined(__socklen_t_defined) || defined(_SOCKLEN_T) || \ + defined(_SOCKLEN_T_DECLARED) || defined(__DEFINED_socklen_t) + socklen_t n = (socklen_t) sizeof( client_addr ); + socklen_t type_len = (socklen_t) sizeof( type ); +#else + int n = (int) sizeof( client_addr ); + int type_len = (int) sizeof( type ); +#endif + + /* Is this a TCP or UDP socket? */ + if( getsockopt( bind_ctx->fd, SOL_SOCKET, SO_TYPE, + (void *) &type, &type_len ) != 0 || + ( type != SOCK_STREAM && type != SOCK_DGRAM ) ) + { + return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + } + + if( type == SOCK_STREAM ) + { + /* TCP: actual accept() */ + ret = client_ctx->fd = (int) accept( bind_ctx->fd, + (struct sockaddr *) &client_addr, &n ); + } + else + { + /* UDP: wait for a message, but keep it in the queue */ + char buf[1] = { 0 }; + + ret = (int) recvfrom( bind_ctx->fd, buf, sizeof( buf ), MSG_PEEK, + (struct sockaddr *) &client_addr, &n ); + +#if defined(_WIN32) + if( ret == SOCKET_ERROR && + WSAGetLastError() == WSAEMSGSIZE ) + { + /* We know buf is too small, thanks, just peeking here */ + ret = 0; + } +#endif + } + + if( ret < 0 ) + { + if( net_would_block( bind_ctx ) != 0 ) + return( MBEDTLS_ERR_SSL_WANT_READ ); + + return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + } + + /* UDP: hijack the listening socket to communicate with the client, + * then bind a new socket to accept new connections */ + if( type != SOCK_STREAM ) + { +// struct sockaddr_storage local_addr; + struct sockaddr_in local_addr; + int one = 1; + + if( connect( bind_ctx->fd, (struct sockaddr *) &client_addr, n ) != 0 ) + return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + + client_ctx->fd = bind_ctx->fd; + bind_ctx->fd = -1; /* In case we exit early */ + +// n = sizeof( struct sockaddr_storage ); + n = sizeof( struct sockaddr_in ); + +// if( getsockname( client_ctx->fd, +// (struct sockaddr *) &local_addr, &n ) != 0 || +// ( bind_ctx->fd = (int) socket( local_addr.ss_family, + if( getsockname( client_ctx->fd, + (struct sockaddr *) &local_addr, &n ) != 0 || + ( bind_ctx->fd = (int) socket( local_addr.sin_family, + SOCK_DGRAM, IPPROTO_UDP ) ) < 0 || + setsockopt( bind_ctx->fd, SOL_SOCKET, SO_REUSEADDR, + (const char *) &one, sizeof( one ) ) != 0 ) + { + return( MBEDTLS_ERR_NET_SOCKET_FAILED ); + } + + if( bind( bind_ctx->fd, (struct sockaddr *) &local_addr, n ) != 0 ) + { + return( MBEDTLS_ERR_NET_BIND_FAILED ); + } + } + + if( client_ip != NULL ) + { +// if( client_addr.ss_family == AF_INET ) + if( client_addr.sin_family == AF_INET ) + { + struct sockaddr_in *addr4 = (struct sockaddr_in *) &client_addr; + *ip_len = sizeof( addr4->sin_addr.s_addr ); + + if( buf_size < *ip_len ) + return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); + + memcpy( client_ip, &addr4->sin_addr.s_addr, *ip_len ); + } + else + { +// struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) &client_addr; +// *ip_len = sizeof( addr6->sin6_addr.s6_addr ); + +// if( buf_size < *ip_len ) +// return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); + +// memcpy( client_ip, &addr6->sin6_addr.s6_addr, *ip_len); + } + } + + return( 0 ); +} + +/* + * Set the socket blocking or non-blocking + */ +/* +int mbedtls_net_set_block( mbedtls_net_context *ctx ) +{ +#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && + !defined(EFI32) + u_long n = 0; + return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); +#else + return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) & ~O_NONBLOCK ) ); +#endif + +} + +int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ) +{ +#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && + !defined(EFI32) + u_long n = 1; + return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); +#else + return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) | O_NONBLOCK ) ); +#endif +} +*/ + +/* + * Set the socket blocking or non-blocking + */ +int net_set_block(int fd) +{ +#if defined(WIN32) || defined(_WIN32_WCE)|| defined(RT_VERSION) //?RTT??????? + long n = 0; + return (ioctlsocket(fd, FIONBIO, &n)); +#else + return (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK)); +#endif +} + +int net_set_nonblock(int fd) +{ +#if defined(WIN32) || defined(_WIN32_WCE) ||defined(RT_VERSION) //?RTT??????? + long n = 1; + return (ioctlsocket(fd, FIONBIO, &n)); +#else + return (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK)); +#endif +} + +/* + * Portable usleep helper + */ +void mbedtls_net_usleep( unsigned long usec ) +{ +#if defined(_WIN32) + Sleep( ( usec + 999 ) / 1000 ); +#else + struct timeval tv; + tv.tv_sec = usec / 1000000; +#if defined(__unix__) || defined(__unix) || \ + ( defined(__APPLE__) && defined(__MACH__) ) + tv.tv_usec = (suseconds_t) usec % 1000000; +#else + tv.tv_usec = usec % 1000000; +#endif + select( 0, NULL, NULL, NULL, &tv ); +#endif +} + +/* + * Read at most 'len' characters + */ +int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ) +{ + int ret; + int fd = ((mbedtls_net_context *) ctx)->fd; + + if( fd < 0 ) + return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + + ret = (int) recv( fd, buf, len, 0); + + + if( ret < 0 ) + { + if( net_would_block( ctx ) != 0 ) + return( MBEDTLS_ERR_SSL_WANT_READ ); + +#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ + !defined(EFI32) + if( WSAGetLastError() == WSAECONNRESET ) + return( MBEDTLS_ERR_NET_CONN_RESET ); +#elif defined(RTTHREAD_VERSION) + if (errno == ECONNRESET) + return (MBEDTLS_ERR_NET_CONN_RESET); + if( errno == EINTR ) + return( MBEDTLS_ERR_SSL_WANT_READ ); +#else + if( errno == EPIPE || errno == ECONNRESET ) + return( MBEDTLS_ERR_NET_CONN_RESET ); + + if( errno == EINTR ) + return( MBEDTLS_ERR_SSL_WANT_READ ); +#endif + + return( MBEDTLS_ERR_NET_RECV_FAILED ); + } + + return( ret ); +} + +/* + * Read at most 'len' characters, blocking for at most 'timeout' ms + */ +int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, + uint32_t timeout ) +{ + int ret; + struct timeval tv; + fd_set read_fds; + int fd = ((mbedtls_net_context *) ctx)->fd; + + if( fd < 0 ) + return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + + FD_ZERO( &read_fds ); + FD_SET( fd, &read_fds ); + + tv.tv_sec = timeout / 1000; + tv.tv_usec = ( timeout % 1000 ) * 1000; + + ret = select( fd + 1, &read_fds, NULL, NULL, timeout == 0 ? NULL : &tv ); + + /* Zero fds ready means we timed out */ + if( ret == 0 ) + return( MBEDTLS_ERR_SSL_TIMEOUT ); + + if( ret < 0 ) + { +#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ + !defined(EFI32) + if( WSAGetLastError() == WSAEINTR ) + return( MBEDTLS_ERR_SSL_WANT_READ ); +#else + if( errno == EINTR ) + return( MBEDTLS_ERR_SSL_WANT_READ ); +#endif + + return( MBEDTLS_ERR_NET_RECV_FAILED ); + } + + /* This call will not block */ + return( mbedtls_net_recv( ctx, buf, len ) ); +} + +/* + * Write at most 'len' characters + */ +int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ) +{ + int ret; + int fd = ((mbedtls_net_context *) ctx)->fd; + + if( fd < 0 ) + return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + + ret = (int) send( fd, buf, len, 0 ); + + if( ret < 0 ) + { + if( net_would_block( ctx ) != 0 ) + return( MBEDTLS_ERR_SSL_WANT_WRITE ); + +#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ + !defined(EFI32) + if( WSAGetLastError() == WSAECONNRESET ) + return( MBEDTLS_ERR_NET_CONN_RESET ); +#elif defined(RTTHREAD_VERSION) + if (errno == ECONNRESET) + return (MBEDTLS_ERR_NET_CONN_RESET); + if( errno == EINTR ) + return( MBEDTLS_ERR_SSL_WANT_READ ); +#else + if( errno == EPIPE || errno == ECONNRESET ) + return( MBEDTLS_ERR_NET_CONN_RESET ); + + if( errno == EINTR ) + return( MBEDTLS_ERR_SSL_WANT_WRITE ); +#endif + + return( MBEDTLS_ERR_NET_SEND_FAILED ); + } + + return( ret ); +} + +/* + * Gracefully close the connection + */ +void mbedtls_net_free( mbedtls_net_context *ctx ) +{ + if( ctx->fd == -1 ) + return; + + closesocket( ctx->fd ); + ctx->fd = -1; +} + diff --git "a/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\347\254\224\350\256\260/\347\254\254\344\272\224\345\244\251\347\254\224\350\256\260.md" "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\347\254\224\350\256\260/\347\254\254\344\272\224\345\244\251\347\254\224\350\256\260.md" new file mode 100644 index 0000000..5dcf0b6 --- /dev/null +++ "b/2026/\347\254\2542\347\273\204/\346\235\216\345\255\220\345\260\247/\347\254\254\344\272\224\345\244\251/\347\254\224\350\256\260/\347\254\254\344\272\224\345\244\251\347\254\224\350\256\260.md" @@ -0,0 +1,170 @@ +--- +title: RT-Thread 夏令营 Day5 学习笔记 +date: 2026-08-21 +--- + +# RT-Thread 大学生夏令营 Day5 学习笔记 + +> 日期:2026-08-21 +> 内容:传感器接入、MQTT 通信、文件系统与物联网应用实践 + +## 一、今日学习内容概述 + +第五天把前几天的内核、设备驱动和硬件抽象内容组合到一个物联网应用中:传感器采集、数据处理、网络通信、本地存储和远程控制。 + +- 基于 STM32F407-RT-SPARK(星火一号)BSP 创建 RT-Thread 工程; +- 使用 AHT10 软件包采集温湿度; +- 使用 Sensor 设备框架; +- 使用 MQTT 发布/订阅进行数据通信; +- 学习 DFS、FAL 文件系统; +- 实现 MQTT 消息控制 LED。 + +## 二、基于星火一号 BSP 创建工程 + +使用开发板 BSP 创建工程,而不是只按芯片型号创建,可以直接获得 GPIO、常用外设、Flash 分区和网络组件等板级支持。创建完成后先进行基础编译,确认 BSP 能构建运行,再逐步加入软件包与应用模块。 + +## 三、AHT10 温湿度传感器接入 + +### 1. Sensor 设备框架 + +传统传感器接入通常需要分别处理总线初始化、寄存器配置、数据读取和单位转换。RT-Thread Sensor 框架将应用层访问方式统一起来: + +```text +应用程序 + ↓ +RT-Thread Sensor 框架 + ↓ +AHT10 驱动 + ↓ +I2C 总线 + ↓ +硬件传感器 +``` + +应用层关注温度和湿度数据,底层由 AHT10 软件包及 I2C 驱动完成。 + +### 2. 采集流程 + +```text +AHT10 初始化 + ↓ +打开传感器设备 + ↓ +读取温湿度 + ↓ +应用层处理 + ↓ +上传或保存 +``` + +本次周期采集温度、湿度和自上电开始计数的 `Count`,采样周期为 2 秒。 + +## 四、MQTT 物联网通信 + +### 1. 发布/订阅模型 + +MQTT 是面向物联网场景的轻量级消息传输协议,应用通过 Broker 解耦: + +```text +Publisher → MQTT Broker → Subscriber +``` + +- 发布者:发布传感器数据的开发板; +- Broker:消息服务器; +- 订阅者:接收主题消息的客户端。 + +### 2. TLS 连接 EMQX Cloud + +本次使用 Paho MQTT 与 mbedTLS 连接 EMQX Cloud 的 TLS 端口。TLS 连接需要加载 CA 证书以校验服务器身份;用户名和密码属于环境配置,不写入提交笔记或公开源码。 + +连接过程: + +```text +设备启动 → Wi-Fi 连接 → 加载 CA 证书 → TLS 握手 + → MQTT 身份认证 → 发布/订阅 +``` + +## 五、温湿度数据上传 + +发布主题为: + +```text +sensor/aht10 +``` + +发布数据使用 JSON: + +```json +{ + "temp": 25.6, + "humi": 60.2, + "count": 1 +} +``` + +数据链路为: + +```text +AHT10 → Sensor 框架 → 应用程序 → MQTT Client → EMQX Cloud +``` + +实机验证中,开发板周期输出 `publish success`;命令行订阅客户端能够收到对应主题的连续 JSON 数据。 + +## 六、MQTT 远程控制 LED + +设备订阅主题: + +```text +led/control +``` + +收到 `ON` 或 `1` 时打开 LED,收到 `OFF` 或 `0` 时关闭 LED。消息回调函数调用 RT-Thread PIN 设备接口 `rt_pin_write()`,没有直接操作寄存器。 + +```text +云端消息 → MQTT 回调 → GPIO/PIN 接口 → LED 状态变化 +``` + +实机联调时,通过命令行发布 `ON`、`OFF`,串口分别输出 `MQTT command: ON/OFF` 和 LED 控制日志。 + +## 七、文件系统学习 + +RT-Thread 的 DFS 提供统一的文件系统访问接口,FAL 提供 Flash 分区管理: + +```text +应用程序 → DFS 文件系统 → FAL 分区管理 → Flash 存储设备 +``` + +应用层使用 `open`、`write`、`close` 以追加方式计划写入 `/fal/Data.txt`: + +```text +Temp: 25.6 ; Humi: 60.2 ; Count: 1 +Temp: 25.7 ; Humi: 60.5 ; Count: 2 +``` + +本次实机已验证 FAL 初始化与 `filesystem` 块设备创建;该分区尚未具有可挂载的 ELM 文件系统。为避免破坏已有 Flash 数据,未执行格式化,因此 `Data.txt` 的真实写入保留为后续步骤。 + +## 八、RT-Thread 软件包生态 + +| 软件包/组件 | 作用 | +| --- | --- | +| AHT10 | 温湿度传感器驱动 | +| Sensor | 传感器设备框架 | +| Paho MQTT | MQTT 发布、订阅与认证 | +| mbedTLS | TLS 加密与服务器证书验证 | +| RW007 | Wi-Fi 网络接入 | +| DFS | 文件系统框架 | +| FAL | Flash 分区管理 | + +软件包机制使应用能复用已有驱动、协议栈和中间件,应用代码可以集中在传感器服务、MQTT 服务、文件记录和 LED 控制等模块。 + +## 九、今日总结 + +Day5 实践形成了以下应用链路: + +```text +传感器采集 → 数据处理 → MQTT TLS 通信 → 云端发布/订阅 + ↓ + LED 远程控制 +``` + +通过 AHT10、Sensor、Paho MQTT、mbedTLS、DFS 和 FAL 的组合,能够较快搭建 RT-Thread 物联网应用。文件系统部分还需要在确认 Flash 分区可安全格式化后完成实际挂载和数据落盘验证。 -- Gitee