【开源获奖案例】AI智能交互新方案:基于T5L智能屏的AI DeepSeek大模型

——来自迪文开发者论坛

本期为大家推送迪文开发者论坛获奖开源案例——AI智能交互新方案:基于T5L智能屏的AI DeepSeek大模型。该方案通过T5L串口与AI模块开发板进行数据交互,支持用户与屏幕智能实时对话交互,并同步展示动态表情,构建了具有情感化交互能力的AI终端解决新方案。


【演示视频】

    

完整开发资料含迪文屏DGUS工程资料与C51代码,获取方式

前往迪文开发者论坛获取:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=12235

微信公众号中回复AI DeepSeek大模型”获取。


【UI素材展示】

UI素材

【C51工程设计】


(1)屏幕主要程序如下


#defineMAX_PACKETS 20//预设最大包数量

typedefstruct {

        unsigned char *indata;//数据指针

        int length;//包长度

} Packet;

int split_packets(constunsigned char *indata, int data_len, Packet *packets, int *packet_count) 

{

        int positions[MAX_PACKETS] = {0};

        int count = 0;

        int i;

//查找所有包头位置

        for ( i = 0; i <= data_len - 2&& count < MAX_PACKETS; ) 

        {

                if (indata == 0x5A &&indata[i+1] == 0xA5) {

                positions[count++] = i;

                i += 2;//跳过包头

                } else {

                            i++;

                }

        }

        if (count == 0) return -1;

        *packet_count = count;

        for ( i = 0; i < count; i++) {

                int start = positions;

                int end = (i < count-1) ?positions[i+1] : data_len;

                packets.indata = indata + start;

                packets.length = end - start;

        }

        return 0;

}

#defineOutGbkLen       256

unsignedchar HuanBuffdata[1024];

voidHandleRecData(unsigned char *inputdata,unsigned char len){

        char emotions=0;

        char emoarr[2];

        memset(HuanBuffdata,0,sizeof(HuanBuffdata));

        memcpy(HuanBuffdata,inputdata,len);

        switch(HuanBuffdata[2]){

            case 1://表情

                if(HuanBuffdata[3]>20)

                    emotions=0;

                    else

                    emotions=HuanBuffdata[3];

                    emoarr[0]=0;

                    emoarr[1]=emotions+1;

                    write_dgusii_vp(0x3000,emoarr,1);            

                    break;

            case 2://网络状态

                    break;

            case 3://通知消息

                    write_dgusii_vp(0x2000,&HuanBuffdata[3],strlen(&HuanBuffdata[3])/2);

                    break;

            case 4://聊天信息

                    write_dgusii_vp(0x4000,&HuanBuffdata[3],strlen(&HuanBuffdata[3])/2);                  

                    break;

        }

}

voidDispDataHandle(void){

        int i ;

        int data_len = uart4_rx_count;

        Packet packets[MAX_PACKETS];//栈内存分配

        int packet_count;

        if (split_packets(Uart4_Rx, data_len,packets, &packet_count) == 0) {

                for ( i = 0; i < packet_count; i++){

                        HandleRecData(packets.indata,packets.length);

                }

        }

}


(2)AI模块开发板程序如下:


voidXINGZHI_1_54_TFT_LcdDisplay::SetChatMessage(const char* role, const char* content) {

        DisplayLockGuard lock(this);

        if(chat_message_label_ == nullptr) {

            return;

        }

        lv_label_set_text(chat_message_label_, content);

        char senddata[10];

        int i=0;

        memset(senddata,0,sizeof(senddata));

        senddata[i++]=0x5a;

        senddata[i++]=0xa5;

        senddata[i++]=0x4;

        uart_write_bytes(USART_UX,senddata,i);

        uint16_t unicode_string[256];//足够大的缓冲区

        memset(unicode_string,0,sizeof(unicode_string));

        uint32_tretlen=utf8_to_unicode((const uint8_t*)content,strlen(content),unicode_string);

        uint8_t gbk_string[256];//足够大的缓冲区   

        UnicodeToGbk(unicode_string,gbk_string,sizeof(gbk_string));

        uart_write_bytes(USART_UX,gbk_string,strlen((char *)gbk_string));

}

voidXINGZHI_1_54_TFT_LcdDisplay::SetStatus(const char* status) {

        DisplayLockGuard lock(this);

        if (status_label_ ==nullptr) {

            return;

        }

        lv_label_set_text(status_label_, status);

        lv_obj_clear_flag(status_label_, LV_OBJ_FLAG_HIDDEN);

        lv_obj_add_flag(notification_label_, LV_OBJ_FLAG_HIDDEN);

        char senddata[10];int i=0;

        memset(senddata,0,sizeof(senddata));

        senddata[i++]=0x5a;

        senddata[i++]=0xa5;

        senddata[i++]=0x3;

        uart_write_bytes(USART_UX,senddata,i);

        uint16_t unicode_string[256];//足够大的缓冲区

        memset(unicode_string,0,sizeof(unicode_string));

        uint32_tretlen=utf8_to_unicode((const uint8_t*)status,strlen(status),unicode_string);

        uint8_t gbk_string[256];//足够大的缓冲区

        UnicodeToGbk(unicode_string,gbk_string,sizeof(gbk_string));

        uart_write_bytes(USART_UX,gbk_string,strlen((char *)gbk_string));

}


上一篇

下一篇DGUS素材库上线,欢迎使用!