|
【开源】基于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.示意图如下所示:
4.其中外扩的wifi模块为esp32,可以支持外带一个OV系列摄像头的(比如OV2640等),原理图如下所示:
二、项目设计
1.素材展示:
图标素材 图片素材
2.工程界面展示
开机动画 部件自检流程
密码验证界面 主界面
菜单界面 WiFi配网界面
版本信息 恢复出厂设置
基本设置 外设应用功能
数值型 环境型
媒体型 空闲界面
三、程序设计
C51程序上的难点就是和wifi模块的交互了,以及获取jpg图片如何显示在迪文屏上,下面就是jpg图片显示的核心代码:
- void sys_draw_jpg(u16 vp,u8 *jpg_data,u32 data_len)
- {
- u32 i;
-
- for(i=0;i<data_len;i++)
- {
- if((jpg_data==0xFF)&&(jpg_data[i+1]==0xD8))
- break;
- }
- if(i==data_len)
- return;
-
- data_len = (data_len-i)/2+1;
- sys_write_vp(vp+2,jpg_data+i,data_len);
- data_len |= 0x5AA50000;
- sys_write_vp(vp,(u8*)&data_len,2);
- }
- 以及动态或者外设的模板接口
- #define PERIPHERAL_TEMPLATE "[\
- {"icon":"led","name":"LED1","pid":500},\
- {"icon":"relay","name":"RELAY1","pid":501},\
- {"icon":"motor","name":"MOTOR1","pid":502}]"
- char * user_handler(u16 cmd,u8 * val)
- {
- char * respond = 0;
-
- val = val;
- if(cmd==USER_CMD_GET_TEMPLATE)
- respond = PERIPHERAL_TEMPLATE;
-
-
- return respond;
- }
- 外设驱动上就以RGB彩灯为例:
- void rgbled_send_zero()
- {
- u8 i;
-
- RGBLED_SDA = 0;
- for(i=0;i<32;i++)
- {
- RGBLED_SCL = 0;
- sys_delay_about_us(200);
- RGBLED_SCL = 1;
- sys_delay_about_us(200);
- }
- }
- u8 rgbled_reverse_data(u8 dat)
- {
- dat = ((~dat) & 0xC0) >> 6;
- return dat;
- }
- void rgbled_send_data(u32 dat)
- {
- u8 i;
-
- for(i=0;i<32;i++)
- {
- if(dat&0x80000000)
- RGBLED_SDA = 1;
- else
- RGBLED_SDA = 0;
-
- dat <<= 1;
- RGBLED_SCL = 0;
- sys_delay_about_us(200);
- RGBLED_SCL = 1;
- sys_delay_about_us(200);
- }
- }
- //数据处理
- void rgbled_process(u8 r,u8 g,u8 b)
- {
- u32 dat = 0;
-
- dat |= (u32)0x03 << 30;
- dat |= (u32)rgbled_reverse_data(b) << 28;
- dat |= (u32)rgbled_reverse_data(g) << 26;
- dat |= (u32)rgbled_reverse_data(r) << 24;
- dat |= (u32)b << 16;
- dat |= (u32)g << 8;
- dat |= r;
-
- rgbled_send_data(dat);
- }
- void rgbled_show(u8 r,u8 g,u8 b)
- {
- P2MDOUT |= 0x0C;
- rgbled_send_zero();
- rgbled_process(r, g, b);
- rgbled_process(r, g, b);
- }
- void rgbled_init(void)
- {
- rgbled_show(0,0,0);
- }
- 然后用到的iic协议驱动代码如下
- #include "iic.h"
- sbit IIC_SDA_PIN = P2^2;
- sbit IIC_SCL_PIN = P2^3;
- #define SDA_IN() P2MDOUT&=0xFB
- #define SDA_OUT() P2MDOUT|=0x04
- #define IIC_SCL IIC_SCL_PIN
- #define IIC_SDA IIC_SDA_PIN
- #define READ_SDA IIC_SDA_PIN
- #define delay_us sys_delay_about_us
- void IIC_Init(void)
- {
- P2MDOUT |= 0x0C;
- IIC_SDA = 1;
- IIC_SCL = 1;
- }
- void IIC_Start(void)
- {
- SDA_OUT();
- IIC_SDA=1;
- IIC_SCL=1;
- delay_us(4);
- IIC_SDA=0;
- delay_us(4);
- IIC_SCL=0;
- }
- void IIC_Stop(void)
- {
- SDA_OUT();
- IIC_SCL=0;
- IIC_SDA=0;
- delay_us(4);
- IIC_SCL=1;
- delay_us(4);
- IIC_SDA=1;
- }
- u8 IIC_Wait_Ack(void)
- {
- u8 ucErrTime=0;
- SDA_IN();
- IIC_SDA=1;delay_us(1);
- IIC_SCL=1;delay_us(1);
- while(READ_SDA)
- {
- ucErrTime++;
- if(ucErrTime>250)
- {
- IIC_Stop();
- return 1;
- }
- }
- IIC_SCL=0;
- return 0;
- }
- void IIC_Ack(void)
- {
- IIC_SCL=0;
- SDA_OUT();
- IIC_SDA=0;
- delay_us(2);
- IIC_SCL=1;
- delay_us(2);
- IIC_SCL=0;
- }
-
- void IIC_NAck(void)
- {
- IIC_SCL=0;
- SDA_OUT();
- IIC_SDA=1;
- delay_us(2);
- IIC_SCL=1;
- delay_us(2);
- IIC_SCL=0;
- }
-
- void IIC_Send_Byte(u8 txd)
- {
- u8 t;
- SDA_OUT();
- IIC_SCL=0;
- for(t=0;t<8;t++)
- {
- IIC_SDA=(txd&0x80)>>7;
- txd<<=1;
- delay_us(2);
- IIC_SCL=1;
- delay_us(2);
- IIC_SCL=0;
- delay_us(2);
- }
- }
- u8 IIC_Read_Byte(u8 ack)
- {
- u8 i,receive=0;
- SDA_IN();
- for(i=0;i<8;i++ )
- {
- IIC_SCL=0;
- delay_us(2);
- IIC_SCL=1;
- receive<<=1;
- if(READ_SDA)receive++;
- delay_us(1);
- }
- if (!ack)
- IIC_NAck();
- else
- IIC_Ack();
- return receive;
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|