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

描述

——来自迪文开发者论坛

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

 


 UI素材展示   
 DeepSeek
  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       256unsignedchar 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));}

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分