[DemoCode下载] NuMaker开发板WIFI-Mail发送简单示例

[复制链接]
 楼主| 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, 下载次数: 18

734774645 发表于 2015-9-28 12:56 来自手机 | 显示全部楼层
竟然有这个,以前没用过呢,下载看看吧
wahahaheihei 发表于 2015-9-28 22:39 来自手机 | 显示全部楼层
这个好玩,不错,学习一下,回头改装改装
huangcunxiake 发表于 2015-9-28 22:47 来自手机 | 显示全部楼层
这个东西好,可以换成各种传感器
yiyigirl2014 发表于 2015-9-29 09:50 来自手机 | 显示全部楼层
好东西呀,学会了这个,可以做物联网
cowboy2014 发表于 2015-9-29 09:53 | 显示全部楼层
还是头一次听说这个呢,谢谢楼主分享
甘陵至尊 发表于 2015-12-11 11:02 | 显示全部楼层
正需要这部分资料  谢谢分享
dongnanxibei 发表于 2016-8-26 22:26 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "RAK.h"
  4. #include "Nano1X2Series.h"
  5. #include "LY096BG30.h"
  6. #include "base64.h"
  7. #include "sensorinit.h"
  8. #include "DHT11.h"


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

  13. char base64[SMTP_BUFF];
  14. uint8_t g_u8RecData[1024];
  15. volatile int32_t g_i32pointer;
  16. volatile uint16_t time_DHT11[40];
  17. volatile uint32_t capture_count =0;
  18. uint16_t DHT11_D[2];

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

  31. void TMR0_IRQHandler(void)
  32. {
  33.     time_DHT11[capture_count] = TIMER_GetCaptureData(TIMER0);
  34.                 capture_count++;
  35.     TIMER_ClearCaptureIntFlag(TIMER0);
  36. }

  37. int main()
  38. {
  39.     char tmp[SMTP_BUFF];
  40.     uint32_t sendtime=0;
  41.    
  42.     SYS_Init();
  43.     UART_Init();
  44.     Init_DHT11();
  45.     I2C_Init();
  46.     WIFI_Init();

  47.     while(1)
  48.     {
  49.         CLK_SysTickDelay(2000000);
  50.         Read_DHT11(DHT11_D);
  51.         
  52.         DEBUG_PRINTF("Humidity    = %d\n", DHT11_D[0]);
  53.         DEBUG_PRINTF("Temperature = %d\n", DHT11_D[1]);
  54.         snprintf(tmp, SMTP_BUFF, "Temperature=%2d", DHT11_D[1]);
  55.         print_Line(2, tmp);
  56.         
  57.         if((DHT11_D[1] > 30))
  58.         {
  59.             if((sendtime % SENDTIME) == (SENDTIME-1))
  60.             {
  61.                 print_Line(1, "Send Mail Now ");  
  62.                 if (SendMail("ic", "*******", \
  63.                             "126.com", "ic@126.com", "ee@139.com", \
  64.                                 "Warning", "Temp Over 30. Beep! To do or Not."))
  65.                 {
  66.                     DEBUG_PRINTF("Send Successful\r\n");
  67.                     print_Line(1, "Send Mail Ok  ");
  68.                     sendtime = 0;
  69.                 }
  70.                 else
  71.                 {
  72.                     DEBUG_PRINTF("Send Failed\r\n");
  73.                     print_Line(1, "Send Mail Fail");
  74.                     sendtime = SENDTIME/3;
  75.                 }
  76.             }
  77.             sendtime = (sendtime > SENDTIME)?(0):(sendtime+1);
  78.         }
  79.         else sendtime = 0;
  80.         snprintf(tmp, SMTP_BUFF, "Send Time:%2d", sendtime);
  81.         print_Line(3, tmp);
  82.     }
  83. }

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

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

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

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

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

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

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

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

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

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

  102.     flag &= mailcmd("%squit\r\n\r\n", "", "221");
  103.         
  104.     return flag;
  105. }

  106. int mailcmd(char *cmd, char *content, char *expect)
  107. {
  108.     char tmp[SMTP_BUFF];
  109.     int i=1;
  110.    
  111.     while(1)
  112.     {
  113.         snprintf(tmp, SMTP_BUFF, (const char *)cmd, content);
  114.         RAK_UART_Send((uint8_t *)tmp, strlen(tmp));
  115.         CLK_SysTickDelay(500000);
  116.         DEBUG_PRINTF(tmp);
  117.         DEBUG_PRINTF((char *)g_u8RecData);
  118.         if(strstr((const char *)g_u8RecData, expect))
  119.             break;
  120.         if(++i > RESEND)
  121.             return 0;
  122.     }
  123.    
  124.     return 1;
  125. }


dongnanxibei 发表于 2016-8-26 22:26 | 显示全部楼层
WIFI芯片是哪个,没看出来啊
稳稳の幸福 发表于 2016-8-26 22:42 | 显示全部楼层
这个发邮件功能是WIFI模块内部已经弄好的吧
捉虫天师 发表于 2016-8-27 21:09 | 显示全部楼层
示例不错,越多越好,要不真是不好办。
zhuomuniao110 发表于 2016-8-27 21:52 | 显示全部楼层
有个什么教程没,关于WIFI如何提交数据给服务器的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

51

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

5

主题

51

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部