打印
[DemoCode下载]

NuMaker开发板WIFI-Mail发送简单示例

[复制链接]
1263|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mwang|  楼主 | 2015-9-25 17:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于NuMaker开发板的资料可以前往牛卧堂论坛下载
购买可以前往芯唐天猫官方旗舰店

本例是个简单的邮件发送例程,板上实时监测DHT11的温度值,当温度值超过30度并保持一段时间后,通过于邮件服务商的SMTP服务器通讯,往指定邮箱发送邮件。


软件设置
需要在使用之前配置自己的邮箱信息和寄信的邮箱信息。
SendMail: 如果你的邮箱是ic@126.com,想寄信给ee@139.com
char *id:你的邮箱id,这里是ic
char *pw:你的邮箱密码,自行填写******
char *server:你的邮箱域名,126.com
char *from: 你的邮箱全名,这里是ic@126.com
char *to: 寄信目标地址,这里是ee@139.com
char *subject:邮件标题,这里是Warning
char *data:邮件内容,这里是TempOver 30. Beep! To do or Not.
NuMakerWifiClient
按照RAK415V1.6文档中WIFI的连接方法,进入设置界面,设置为:

这里可以前往路由器查询WIFI模块获得的IP。同时模块IP网关等信息会在初始化函数中由串口打印出来,PC可以连接PC7PC8来观察整个模块的工作情况。

设置IO通信为TCP-Client,配置我们要访问的邮件服务器地址:smtp.126.com,对应网站端口:25(常用SMTP服务器端口为25)。不是126邮箱的可以自行查询对应邮箱smtp设置方法。
下载程序后就可以看到,屏幕默认显示DHT11测得的当前温度值和一个用于计时的参数值。当温度持续超过30度时,计数值会递增,当到达89时,大约2s*90=180s,会发送邮件到指定邮箱。


Nano102-NuMakerSMTP.zip

373.37 KB

沙发
734774645| | 2015-9-28 12:56 | 只看该作者
竟然有这个,以前没用过呢,下载看看吧

使用特权

评论回复
板凳
wahahaheihei| | 2015-9-28 22:39 | 只看该作者
这个好玩,不错,学习一下,回头改装改装

使用特权

评论回复
地板
huangcunxiake| | 2015-9-28 22:47 | 只看该作者
这个东西好,可以换成各种传感器

使用特权

评论回复
5
yiyigirl2014| | 2015-9-29 09:50 | 只看该作者
好东西呀,学会了这个,可以做物联网

使用特权

评论回复
6
cowboy2014| | 2015-9-29 09:53 | 只看该作者
还是头一次听说这个呢,谢谢楼主分享

使用特权

评论回复
7
甘陵至尊| | 2015-12-11 11:02 | 只看该作者
正需要这部分资料  谢谢分享

使用特权

评论回复
8
dongnanxibei| | 2016-8-26 22:26 | 只看该作者
#include <stdio.h>
#include <string.h>
#include "RAK.h"
#include "Nano1X2Series.h"
#include "LY096BG30.h"
#include "base64.h"
#include "sensorinit.h"
#include "DHT11.h"


#define SMTP_BUFF 64
#define RESEND    3
#define SENDTIME  90 //3min=180s 180/2=90
#define DEBUG_PRINTF(...) // printf(__VA_ARGS__)

char base64[SMTP_BUFF];
uint8_t g_u8RecData[1024];
volatile int32_t g_i32pointer;
volatile uint16_t time_DHT11[40];
volatile uint32_t capture_count =0;
uint16_t DHT11_D[2];

extern void print_Line(uint8_t Line, char Text[]);
/* SendMail: 如果你的邮箱是ic@126.com,想寄信给ee@139.com
char *id:你的邮箱id,这里是ic
char *pw:你的邮箱密码,自行填写******
char *server:你的邮箱域名,126.com
char *from: 你的邮箱全名,这里是ic@126.com
char *to: 寄信目标地址,这里是ee@139.com
char *subject:邮件标题,这里是Warning
char *data:邮件内容,这里是Temp Over 30. Beep! To do or Not.
*/
int SendMail(char *id, char *pw, char *server, char *from, char *to, char *subject ,char *data);
int mailcmd(char *cmd, char *content, char *expect);

void TMR0_IRQHandler(void)
{
    time_DHT11[capture_count] = TIMER_GetCaptureData(TIMER0);
                capture_count++;
    TIMER_ClearCaptureIntFlag(TIMER0);
}

int main()
{
    char tmp[SMTP_BUFF];
    uint32_t sendtime=0;
   
    SYS_Init();
    UART_Init();
    Init_DHT11();
    I2C_Init();
    WIFI_Init();

    while(1)
    {
        CLK_SysTickDelay(2000000);
        Read_DHT11(DHT11_D);
        
        DEBUG_PRINTF("Humidity    = %d\n", DHT11_D[0]);
        DEBUG_PRINTF("Temperature = %d\n", DHT11_D[1]);
        snprintf(tmp, SMTP_BUFF, "Temperature=%2d", DHT11_D[1]);
        print_Line(2, tmp);
        
        if((DHT11_D[1] > 30))
        {
            if((sendtime % SENDTIME) == (SENDTIME-1))
            {
                print_Line(1, "Send Mail Now ");  
                if (SendMail("ic", "*******", \
                            "126.com", "ic@126.com", "ee@139.com", \
                                "Warning", "Temp Over 30. Beep! To do or Not."))
                {
                    DEBUG_PRINTF("Send Successful\r\n");
                    print_Line(1, "Send Mail Ok  ");
                    sendtime = 0;
                }
                else
                {
                    DEBUG_PRINTF("Send Failed\r\n");
                    print_Line(1, "Send Mail Fail");
                    sendtime = SENDTIME/3;
                }
            }
            sendtime = (sendtime > SENDTIME)?(0):(sendtime+1);
        }
        else sendtime = 0;
        snprintf(tmp, SMTP_BUFF, "Send Time:%2d", sendtime);
        print_Line(3, tmp);
    }
}

int SendMail(char *id, char *pw, char *server, char *from, char *to, char *subject ,char *data)
{
    int flag;

    flag = mailcmd("helo %s\r\n", server, "250");

    flag &= mailcmd("%sauth login\r\n", "", "334");
   
    encode_base64(base64 , id, strlen(id));
    flag &= mailcmd("%s\r\n", base64, "334");

    encode_base64(base64 , pw, strlen(pw));
    flag &= mailcmd("%s\r\n", base64, "235");
        
    flag &= mailcmd("mail from: <%s>\r\n", from, "250");

    flag &= mailcmd("rcpt to: <%s>\r\n", to, "250");

    flag &= mailcmd("%sdata\r\n", "", "354");

    flag &= mailcmd("from: %s\r\n", id, "");

    flag &= mailcmd("to: %s\r\n", to, "");

    flag &= mailcmd("subject: %s\r\n\r\n", subject, "");

    flag &= mailcmd("%s\r\n.\r\n", data, "250");

    flag &= mailcmd("%squit\r\n\r\n", "", "221");
        
    return flag;
}

int mailcmd(char *cmd, char *content, char *expect)
{
    char tmp[SMTP_BUFF];
    int i=1;
   
    while(1)
    {
        snprintf(tmp, SMTP_BUFF, (const char *)cmd, content);
        RAK_UART_Send((uint8_t *)tmp, strlen(tmp));
        CLK_SysTickDelay(500000);
        DEBUG_PRINTF(tmp);
        DEBUG_PRINTF((char *)g_u8RecData);
        if(strstr((const char *)g_u8RecData, expect))
            break;
        if(++i > RESEND)
            return 0;
    }
   
    return 1;
}


使用特权

评论回复
9
dongnanxibei| | 2016-8-26 22:26 | 只看该作者
WIFI芯片是哪个,没看出来啊

使用特权

评论回复
10
稳稳の幸福| | 2016-8-26 22:42 | 只看该作者
这个发邮件功能是WIFI模块内部已经弄好的吧

使用特权

评论回复
11
捉虫天师| | 2016-8-27 21:09 | 只看该作者
示例不错,越多越好,要不真是不好办。

使用特权

评论回复
12
zhuomuniao110| | 2016-8-27 21:52 | 只看该作者
有个什么教程没,关于WIFI如何提交数据给服务器的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

51

帖子

3

粉丝