|
本帖最后由 good 于 2023-9-20 22:12 编辑
一.前言
开源一个非常实用的项目,大家可能会有这样的一个需求,就是有一些设备当运行出现错误或者报警时,我们希望设备能立即通过邮件的方式把错误日志立即发送给管理员,让管理员做出处理措施,这也是本项目开源的需求所在
二.原理
我们知道T5L迪文屏要想上网,就必须得借助wifi模块或者GPRS模块,或者4G模块等,而我们这里是选择了wifi模块,迪文公司有自己配套的wifi-10模块,而我们使用的是上海乐鑫公司推出的esp8266 wifi模块,此模块成本非常可观,学习资料也是非常的多,
我们把esp8266 wifi模块连接到T5L迪文屏的串口5,然后wifi模块去访问smtp服务器,然后再由smtp服务器把我们的邮件转发给真正的用户,而smtp服务器我们可以自己搭建,当然了也可以直接使用免费现成的,这里我们就使用免费的,现在市面上免费的
主流smtp服务器有163的,还有腾讯的QQ邮箱,这里我们选择了163的smtp服务器
整体的运行框图如下:
如何去使用免费的163 smtp服务器呢?需要做如下操作
1.必须得有一个163的邮箱
2.然后用此邮箱的账号和密码登录到163的管理后台,链接地址为:https://mail.163.com/
3.然后点击"设置"->"POP3/SMTP/IMAP",开启"IMAP/SMTP服务",开启成功后会获得一个授权码即为成功了,如下图所示
esp8266 wifi模块外观如下:
三.DGUS Tool界面设计
直接上图吧,看的更直观
可以在主界面上通过键盘输入收件人邮箱, 邮件标题, 邮件内容等信息
值得关注的是我们的邮件内容是支持多种类型的,分别为: 1.纯文本 2.组态控件(比如发送一个按钮,一个输入框,还有一张图片等等) 3.多样式(比如设置不同的文本颜色,加粗,下划线等等)
四.c51软件设计
这一块的代码比较多,我贴出主要的代码部分,完整的请看源码工程
void uart5_init(u32 baud)
{
SCON3T = 0x80;
SCON3R = 0x80;
baud = (u32)((double)(FOSC/8.0)/baud);
BODE3_DIV_H = (baud>>8)&0xff;
BODE3_DIV_L = baud&0xff;
ES3R = 0;
ES3T = 0;
}
void u5_send_byte(u8 byte)
{
SBUF3_TX = byte;
while(!(SCON3T&0x01));
SCON3T &= 0xfe;
}
void u5_send_bytes(u8 *bytes,u16 len)
{
u16 i;
for(i=0;i<len;i++)
{
SBUF3_TX = bytes;
while(!(SCON3T&0x01));
SCON3T &= 0xfe;
}
}
void get_input(u8 * val,u8 len)
{
u8 i;
for(i=0;i<len;i++)
{
if(val==0xff)
{
val = 0x00;
val[i+1] = 0x00;
return;
}
}
}
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime,u8 clearBuffer)
{
u8 res=0;
rx_sta=0;
if(ack&&waittime&&cmd)
{
while(--waittime)
{
sys_delay_ms(10);
if(rx_sta&0X8000)
{
if(esp8266_check_respond(ack))
break;
}
}
if(waittime==0)res=1;
if(clearBuffer==1)rx_sta=0;
}
return res;
}
typedef struct{
u8 cmd;
u8 email[20];
u8 name[20];
u8 title[20];
u8 msg[60];
}EMAIL_INFO;
EMAIL_INFO email_info;
u8 respond[80];
u8 wifi_name[30];
u8 wifi_passwd[30];
u8 server[30];
u8 port[30];
u8 username[30];
u8 auth_code[30];
u8 rx_sta;
sys_read_vp(0x1000,(u8*)&btn_val,1);
if(btn_val)
{
if(btn_val==1)
{
sys_read_vp(0x3000,email_info.name,10);
sys_read_vp(0x3020,email_info.email,10);
sys_read_vp(0x3040,email_info.title,10);
sys_read_vp(0x3060,email_info.msg,30);
get_input(email_info.name,20);
get_input(email_info.email,20);
get_input(email_info.title,20);
get_input(email_info.msg,60);
send_packet((u8*)&email_info,sizeof(EMAIL_INFO));
if(rx_sta)
send_mail(email_info.email,email_info.title,email_info.msg);
}else if(btn_val==2)
{
sys_read_vp(0x3100,wifi_name,15);
sys_read_vp(0x3120,wifi_passwd,15);
get_input(wifi_name,30);
get_input(wifi_passwd,30);
}else if(btn_val==3)
{
sys_read_vp(0x3200,server,15);
sys_read_vp(0x3220,port,15);
sys_read_vp(0x3240,username,15);
sys_read_vp(0x3260,auth_code,15);
get_input(server,30);
get_input(port,30);
get_input(username,30);
get_input(auth_code,30);
}
btn_val = 0;
sys_write_vp(0x1000,(u8*)&btn_val,1);
}
sys_read_vp(0x2050,(u8*)&btn_val2,1);
if(btn_val2!=old_val)
{
if(btn_val2==1)
sys_write_vp(0x3060,"This is a email from T5L!\0\0",30);
else if(btn_val2==2)
sys_write_vp(0x3060,"<button>Click</button><br><br><input value='good'>\0\0",30);
else if(btn_val2==3)
sys_write_vp(0x3060,"<h3>Bold</h3><h1 style='color:red;'>Red</h1>\0\0",30);
old_val = btn_val2;
}
五.测试效果
迪文屏主界面效果如下:
1.纯文本类型的邮件如下
2.组态控件的邮件如下
3.多样式的邮件如下
视频演示效果:https://b23.tv/3ov67cJ
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|