diff --git "a/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\343\200\220RSOC25\343\200\221Day5 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\206\257\345\256\276/\344\273\243\347\240\201.c" "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\343\200\220RSOC25\343\200\221Day5 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\206\257\345\256\276/\344\273\243\347\240\201.c" new file mode 100644 index 0000000000000000000000000000000000000000..2abcdddcddee22be25c3d43673d36a159c6012f4 --- /dev/null +++ "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\343\200\220RSOC25\343\200\221Day5 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\206\257\345\256\276/\344\273\243\347\240\201.c" @@ -0,0 +1,99 @@ + +#include +#include +#include +#include +#include +#include "mqttclient.h" +#include "RyanJson.h" + +#ifndef KAWAII_MQTT_HOST +#define KAWAII_MQTT_HOST "broker.emqx.io" +#endif +#ifndef KAWAII_MQTT_PORT +#define KAWAII_MQTT_PORT "1883" +#endif +#ifndef KAWAII_MQTT_CLIENTID +#define KAWAII_MQTT_CLIENTID "rtthread9906" +#endif +#ifndef KAWAII_MQTT_USERNAME +#define KAWAII_MQTT_USERNAME "rt-thread" +#endif +#ifndef KAWAII_MQTT_PASSWORD +#define KAWAII_MQTT_PASSWORD "rt-thread" +#endif +#ifndef KAWAII_MQTT_SUBTOPIC +#define KAWAII_MQTT_SUBTOPIC "rtt-sub" +#endif +#ifndef KAWAII_MQTT_PUBTOPIC +#define KAWAII_MQTT_PUBTOPIC "rtt-pub" +#endif + +static char mqtt_payload[256]; +static RyanJson_t myjson; + +static void sub_topic_handle1(void* client, message_data_t* msg) +{ + KAWAII_MQTT_LOG_I("-----------------------------------------------------------------------------------"); + KAWAII_MQTT_LOG_I("%s:%d %s()...\ntopic: %s\nmessage:%s", __FILE__, __LINE__, __FUNCTION__, msg->topic_name, (char*)msg->message->payload); + KAWAII_MQTT_LOG_I("-----------------------------------------------------------------------------------"); + (void)client; +} + +static int mqtt_publish_handle1(mqtt_client_t *client) +{ + myjson = RyanJsonCreateObject(); + RyanJsonAddStringToObject(myjson, "student", STUDENT_NAME); + RyanJsonAddStringToObject(myjson, "learned", LEARNED_WHAT); + + uint32_t len = 0; + char *json_str = RyanJsonPrint(myjson, 0, RyanJsonFalse, &len); + if (!json_str) return -1; + + strncpy(mqtt_payload, json_str, sizeof(mqtt_payload) - 1); + mqtt_payload[sizeof(mqtt_payload) - 1] = '\0'; + + RyanJsonFree(json_str); + RyanJsonDelete(myjson); + + mqtt_message_t msg = {0}; + msg.qos = QOS0; + msg.payload = mqtt_payload; + msg.payloadlen = strlen(mqtt_payload); + + return mqtt_publish(client, KAWAII_MQTT_PUBTOPIC, &msg); +} + +static void kawaii_mqtt_demo(void *parameter) +{ + mqtt_log_init(); + mqtt_client_t *client = mqtt_lease(); + + mqtt_set_client_id(client, KAWAII_MQTT_CLIENTID); + mqtt_set_host(client, KAWAII_MQTT_HOST); + mqtt_set_port(client, KAWAII_MQTT_PORT); + mqtt_set_user_name(client, KAWAII_MQTT_USERNAME); + mqtt_set_password(client, KAWAII_MQTT_PASSWORD); + mqtt_set_clean_session(client, 1); + + KAWAII_MQTT_LOG_I("The ID of the Kawaii client is: %s ", KAWAII_MQTT_CLIENTID); + + mqtt_connect(client); + mqtt_subscribe(client, KAWAII_MQTT_SUBTOPIC, QOS0, sub_topic_handle1); + + while (1) { + mqtt_publish_handle1(client); + mqtt_sleep_ms(4 * 1000); + } +} + +int ka_mqtt(void) +{ + rt_thread_t tid_mqtt = rt_thread_create("kawaii_demo", kawaii_mqtt_demo, RT_NULL, 2048, 17, 10); + if (tid_mqtt == RT_NULL) { + return -RT_ERROR; + } + rt_thread_startup(tid_mqtt); + return RT_EOK; +} +MSH_CMD_EXPORT(ka_mqtt, Kawaii MQTT client test program); \ No newline at end of file diff --git "a/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\343\200\220RSOC25\343\200\221Day5 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\206\257\345\256\276/\347\254\224\350\256\260.md" "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\343\200\220RSOC25\343\200\221Day5 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\206\257\345\256\276/\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..711dd385e193e605ae135c413bbc4c103671ef68 --- /dev/null +++ "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\343\200\220RSOC25\343\200\221Day5 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\206\257\345\256\276/\347\254\224\350\256\260.md" @@ -0,0 +1,33 @@ +## 【RSOC25】Day5 课程笔记:冯宾 + +`软件包`定义:运行于 RT-Thread 物联网操作系统平台上,面户不同应用领域的软件组件形成一个个软件包,由软件包描述信息,软件包源代码或库文件组成。 + +若要制作软件包,需要先对软件包的功能进行准确的定义,确保`不要粿合`与产品业务逻辑有关的代码,提高软件包的`通用性`。 + +`软件包更新机制` + +当 Env 工具无法自动获取最新软件包时,可通过 Git 手动更新。 + +git pull origin master # 更新官方软件包仓库 + +`LLM-chat 组件配置要点` + +API 注册:需在阿里云模型市场(https://bailian.console.aliyun.com)完成账号注册并获取 API 密钥。 + +CONFIG_LLM_MAX_FRAGMENT_LENGTH=6144 # 调整最大分片长度(字节) +CONFIG_USING_MBEDTLS=y # 启用 MbedTLS 加密库 +CONFIG_USING_EMAC=y # 启用以太网 MAC 驱动 + +`配置文件转换流程` + +Kconfig(.config) ──scons──▶ rtconfig.h ──编译器──▶ 编译选项 + +.config:Kconfig 系统生成的中间配置文件,包含所有选项的实际值。 + +rtconfig.h:由 SCons 工具根据 .config 生成的 C 语言头文件,定义编译所需的宏。 + +Kconfig 文件组织结构 + +osource:引用上级目录的 Kconfig 文件。 + +source:引用当前目录的子目录中的 Kconfig 文件。 \ No newline at end of file