迪文科技论坛

 找回密码
 立即注册
搜索
查看: 422|回复: 6

【2024.4.24获奖项目】基于T5L的物联开发套件

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11955
发表于 2024-5-28 13:55:44 | 显示全部楼层 |阅读模式
【开源】基于T5L的物联开发套件


一、项目简介:

1.本项目是基于T5L1芯片设计的一款多功能物联领域的学习、测试、开发综合套件,板子上扩展了如下接口:

(1)USB串口,用的ch340g芯片,接在T5L的串口1,用于在线烧录程序或者扩展esp wifi模块等

(2)4.3寸的触摸液晶电容屏

(3)SD卡接口,用于批量下载程序

(4)音频喇叭接口

(5)PWM信号接口

(6)RGB彩灯接口

(7)环境感知接口

(8)时钟芯片接口

(9)人体感应接口

(10)wifi模块接口(也可以外带OV系列的摄像头)

(11)ADC采样接口

(12)温湿度传感器接口

(13)独立按键接口

(14)LED跑马灯

(15)IR红外收发接口

(16)继电器接口

(17)蜂鸣器接口

(18)直流电机接口

2.示意图如下所示:






3.板子的背面实物图如下:





4.其中外扩的wifi模块为esp32,可以支持外带一个OV系列摄像头的(比如OV2640等),原理图如下所示:




二、项目设计
1.素材展示:


                                                                                                              图标素材                                                                                                              图片素材


2.工程界面展示

  

                                                                                                                                  开机动画                                                                                                             部件自检流程

  

                                                                                                                                     密码验证界面                                                                                                      主界面




菜单界面                                                                                                                        WiFi配网界面        





时钟设置界面                                                                                                                     密码修改界面




版本信息                                                                                                                             恢复出厂设置


基本设置                                                                                                                            外设应用功能


数值型                                                                                                                                       环境型


媒体型                                                                                                                                    空闲界面



三、程序设计


C51程序上的难点就是和wifi模块的交互了,以及获取jpg图片如何显示在迪文屏上,下面就是jpg图片显示的核心代码:


  1. void sys_draw_jpg(u16 vp,u8 *jpg_data,u32 data_len)
  2. {
  3.         u32 i;
  4.         
  5.         for(i=0;i<data_len;i++)
  6.         {
  7.                 if((jpg_data==0xFF)&&(jpg_data[i+1]==0xD8))
  8.                         break;
  9.         }
  10.         if(i==data_len)
  11.                 return;
  12.         
  13.         data_len = (data_len-i)/2+1;
  14.         sys_write_vp(vp+2,jpg_data+i,data_len);
  15.         data_len |= 0x5AA50000;
  16.         sys_write_vp(vp,(u8*)&data_len,2);
  17. }


  18. 以及动态或者外设的模板接口

  19. #define PERIPHERAL_TEMPLATE "[\
  20. {"icon":"led","name":"LED1","pid":500},\
  21. {"icon":"relay","name":"RELAY1","pid":501},\
  22. {"icon":"motor","name":"MOTOR1","pid":502}]"

  23. char * user_handler(u16 cmd,u8 * val)
  24. {
  25.         char * respond = 0;
  26.         
  27.         val = val;
  28.         if(cmd==USER_CMD_GET_TEMPLATE)
  29.                 respond = PERIPHERAL_TEMPLATE;

  30.         
  31.         
  32.         return respond;
  33. }

  34. 外设驱动上就以RGB彩灯为例:

  35. void rgbled_send_zero()
  36. {
  37.          u8 i;
  38.         
  39.          RGBLED_SDA = 0;
  40.          for(i=0;i<32;i++)
  41.          {
  42.             RGBLED_SCL = 0;
  43.                         sys_delay_about_us(200);
  44.                         RGBLED_SCL = 1;
  45.                         sys_delay_about_us(200);               
  46.          }
  47. }


  48. u8 rgbled_reverse_data(u8 dat)
  49. {

  50.         dat = ((~dat) & 0xC0) >> 6;
  51.         return dat;
  52. }


  53. void rgbled_send_data(u32 dat)
  54. {
  55.         u8 i;
  56.          
  57.         for(i=0;i<32;i++)
  58.         {
  59.                 if(dat&0x80000000)
  60.                         RGBLED_SDA = 1;
  61.                 else
  62.                         RGBLED_SDA = 0;
  63.                
  64.                 dat <<= 1;
  65.                 RGBLED_SCL = 0;
  66.                 sys_delay_about_us(200);
  67.                 RGBLED_SCL = 1;
  68.                 sys_delay_about_us(200);
  69.         }        
  70. }

  71. //数据处理
  72. void rgbled_process(u8 r,u8 g,u8 b)
  73. {
  74.         u32 dat = 0;
  75.         
  76.         dat |= (u32)0x03 << 30;  
  77.         dat |= (u32)rgbled_reverse_data(b) << 28;
  78.         dat |= (u32)rgbled_reverse_data(g) << 26;
  79.         dat |= (u32)rgbled_reverse_data(r) << 24;
  80.         dat |= (u32)b << 16;
  81.         dat |= (u32)g << 8;
  82.         dat |= r;
  83.         
  84.         rgbled_send_data(dat);
  85. }

  86. void rgbled_show(u8 r,u8 g,u8 b)
  87. {
  88.         P2MDOUT |= 0x0C;   
  89.         rgbled_send_zero();
  90.         rgbled_process(r, g, b);
  91.   rgbled_process(r, g, b);
  92. }

  93. void rgbled_init(void)
  94. {
  95.         rgbled_show(0,0,0);
  96. }

  97. 然后用到的iic协议驱动代码如下

  98. #include "iic.h"


  99. sbit IIC_SDA_PIN = P2^2;
  100. sbit IIC_SCL_PIN = P2^3;


  101. #define SDA_IN()  P2MDOUT&=0xFB
  102. #define SDA_OUT() P2MDOUT|=0x04

  103. #define IIC_SCL   IIC_SCL_PIN
  104. #define IIC_SDA   IIC_SDA_PIN
  105. #define READ_SDA  IIC_SDA_PIN


  106. #define delay_us                sys_delay_about_us



  107. void IIC_Init(void)
  108. {
  109.         P2MDOUT |= 0x0C;
  110.         IIC_SDA = 1;
  111.         IIC_SCL = 1;  
  112. }


  113. void IIC_Start(void)
  114. {
  115.         SDA_OUT();   
  116.         IIC_SDA=1;                    
  117.         IIC_SCL=1;
  118.         delay_us(4);
  119.         IIC_SDA=0;
  120.         delay_us(4);
  121.         IIC_SCL=0;
  122. }         

  123. void IIC_Stop(void)
  124. {
  125.         SDA_OUT();
  126.         IIC_SCL=0;
  127.         IIC_SDA=0;
  128.         delay_us(4);
  129.         IIC_SCL=1;
  130.         delay_us(4);                       
  131.         IIC_SDA=1;                          
  132. }

  133. u8 IIC_Wait_Ack(void)
  134. {
  135.         u8 ucErrTime=0;
  136.         SDA_IN();
  137.         IIC_SDA=1;delay_us(1);         
  138.         IIC_SCL=1;delay_us(1);         
  139.         while(READ_SDA)
  140.         {
  141.                 ucErrTime++;
  142.                 if(ucErrTime>250)
  143.                 {
  144.                         IIC_Stop();
  145.                         return 1;
  146.                 }
  147.         }
  148.         IIC_SCL=0;         
  149.         return 0;  
  150. }


  151. void IIC_Ack(void)
  152. {
  153.         IIC_SCL=0;
  154.         SDA_OUT();
  155.         IIC_SDA=0;
  156.         delay_us(2);
  157.         IIC_SCL=1;
  158.         delay_us(2);
  159.         IIC_SCL=0;
  160. }

  161.             
  162. void IIC_NAck(void)
  163. {
  164.         IIC_SCL=0;
  165.         SDA_OUT();
  166.         IIC_SDA=1;
  167.         delay_us(2);
  168.         IIC_SCL=1;
  169.         delay_us(2);
  170.         IIC_SCL=0;
  171. }               

  172.                   
  173. void IIC_Send_Byte(u8 txd)
  174. {                        
  175.         u8 t;   
  176.         SDA_OUT();            
  177.         IIC_SCL=0;
  178.         for(t=0;t<8;t++)
  179.         {              
  180.                 IIC_SDA=(txd&0x80)>>7;
  181.                 txd<<=1;           
  182.                 delay_us(2);  
  183.                 IIC_SCL=1;
  184.                 delay_us(2);
  185.                 IIC_SCL=0;      
  186.                 delay_us(2);
  187.         }         
  188. }

  189. u8 IIC_Read_Byte(u8 ack)
  190. {
  191.         u8 i,receive=0;
  192.         SDA_IN();
  193.         for(i=0;i<8;i++ )
  194.         {
  195.                 IIC_SCL=0;
  196.                 delay_us(2);
  197.                 IIC_SCL=1;
  198.                 receive<<=1;
  199.                 if(READ_SDA)receive++;   
  200.                 delay_us(1);
  201.         }                                         
  202.         if (!ack)
  203.                         IIC_NAck();
  204.         else
  205.                         IIC_Ack();
  206.         return receive;
  207. }
复制代码


视频演示地址: https://b23.tv/BXJYVgW













本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

1

回帖

47

积分

新手上路

Rank: 1

积分
47
发表于 2024-5-30 13:54:19 | 显示全部楼层
回复

使用道具 举报

1

主题

6

回帖

152

积分

注册会员

Rank: 2

积分
152
发表于 2024-6-9 00:04:13 | 显示全部楼层
回复

使用道具 举报

发表于 2024-6-9 14:41:02 | 显示全部楼层
回复

使用道具 举报

0

主题

694

回帖

4101

积分

论坛元老

Rank: 8Rank: 8

积分
4101
发表于 2024-6-9 20:37:05 | 显示全部楼层
回复

使用道具 举报

0

主题

57

回帖

719

积分

高级会员

Rank: 4

积分
719
QQ
发表于 2024-6-24 11:22:07 | 显示全部楼层
回复

使用道具 举报

0

主题

485

回帖

5172

积分

论坛元老

Rank: 8Rank: 8

积分
5172
发表于 2024-6-24 11:32:33 | 显示全部楼层

您好,可以参考楼上链接
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-21 23:40 , Processed in 0.075729 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表