当前位置:首页 > 技术类 > esp8266 检测有人发送邮件

esp8266 检测有人发送邮件

微信用户3年前 (2022-02-16)技术类2738

esp8266 检测有人发送邮件

用 esp8266 当感知到人体活动时,在中断函数中记录一个标志变量,然后 loop 循环判断标志变量是否为 true,如果是则发送邮件通知。

源代码

邮件发送代码做了部分优化

//To use send Email for qq to port 465 (SSL)#include <Arduino.h>#if defined(ESP32)  #include <WiFi.h>#elif defined(ESP8266)  #include <ESP8266WiFi.h>#endif#include <ESP_Mail_Client.h>// PIR OUTPUT端口 D6 GPIO12 LED端口 D4 GPIO2const int LED = 2;const int PIR_sensor = 12;// 获取当前时间unsigned long now = millis();// 上一次触发中断的时间unsigned long lastTrigger = 0;// boolean humanTrigger = false;/* wifi ssid和密码 */#define WIFI_SSID "xxxx"#define WIFI_PASSWORD "xxxxxx"/* qq 邮箱的 smtp 地址和端口号 */#define SMTP_HOST "smtp.qq.com"#define SMTP_PORT 465/* 你的邮箱和授权码 授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。 如何获取授权码 https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256*/#define AUTHOR_EMAIL "xxxxx@qq.com"#define AUTHOR_PASSWORD "xxxxxx"/* 接收人邮箱地址 email*/#define RECIPIENT_EMAIL "xxxxxxx@qq.com"/* 定义 smtp session 对象*/SMTPSession smtp;ESP_Mail_Session session;/* 获取邮件发送状态的回调函数 */void getSmtpStatusCallback(SMTP_Status status);// 检测人体感应的中断触发函数,将LED置为高电平ICACHE_RAM_ATTR void detectHuman() {  Serial.println("Human Detected!!!");  digitalWrite(LED  HIGH);  humanTrigger = true;}void irSetup(){  // 将人体感应数据口连接的IO口设置为输入上拉模式,使引脚即使在未连接外部组件的时候也能保持确定的逻辑电平。  pinMode(PIR_sensor  INPUT_PULLUP);  // 将人体感应数据口连接的IO口设置为中断模式  赋值中断函数和将中断模式设置为RISING(当引脚由低电平变为高电平时,触发中断)  attachInterrupt(digitalPinToInterrupt(PIR_sensor)  detectHuman  RISING);  pinMode(LED  OUTPUT);  digitalWrite(LED  LOW);}void wifiSetup(){  Serial.println();  Serial.print("连接 Wifi");  WiFi.begin(WIFI_SSID  WIFI_PASSWORD);  while (WiFi.status() != WL_CONNECTED){    Serial.print(".");    delay(200);  }  Serial.println("");  Serial.println("WiFi 连接成功.");  Serial.println("IP 地址: ");  Serial.println(WiFi.localIP());  Serial.println();}void smtpSetup(){   /* smtp开启debug,debug信息输出到串口 */  smtp.debug(0);  /* 注册回调函数,获取邮件发送状态 */  smtp.callback(getSmtpStatusCallback);  /* 设置smtp 相关参数, host  port等 */  session.server.host_name = SMTP_HOST;  session.server.port = SMTP_PORT;  session.login.email = AUTHOR_EMAIL;  session.login.password = AUTHOR_PASSWORD;  session.login.user_domain = "";  /* 连接smtp服务器 */  if (!smtp.connect(&session))    return;}/* 获取发送状态的回调函数 */void getSmtpStatusCallback(SMTP_Status status){  /* 输出邮件发送状态信息 */  Serial.println(status.info());  /*状态获取成功,打印状态信息 */  if (status.success()){    Serial.println("----------------");        ESP_MAIL_PRINTF("邮件发送成功个数: %d\n"  status.completedCount());    ESP_MAIL_PRINTF("邮件发送失败个数: %d\n"  status.failedCount());        Serial.println("----------------\n");    struct tm dt;    for (size_t i = 0; i < smtp.sendingResult.size(); i++){      /* 依次获取发送邮件状态 */      SMTP_Result result = smtp.sendingResult.getItem(i);      time_t ts = (time_t)result.timestamp;      localtime_r(&ts  &dt);      ESP_MAIL_PRINTF("收件人: %s邮件发送状态信息\n"  result.recipients);      ESP_MAIL_PRINTF("状态: %s\n"  result.completed ? "success" : "failed");      ESP_MAIL_PRINTF("发送时间: %d/%d/%d %d:%d:%d\n"  dt.tm_year + 1900  dt.tm_mon + 1  dt.tm_mday  dt.tm_hour  dt.tm_min  dt.tm_sec);      ESP_MAIL_PRINTF("邮件标题: %s\n"  result.subject);    }        Serial.println("----------------\n");  }}void emailSendHtml(char* subject  char* recipient  String htmlMsg){    /* 定义smtp message消息类 */  SMTP_Message message;    /* 定义邮件消息类的名称,发件人,标题和添加收件人 */  message.sender.name = "Esp8266er";  message.sender.email = AUTHOR_EMAIL;  message.subject = subject;  message.addRecipient("Sara"  recipient);  message.html.content = htmlMsg.c_str();  message.html.content = htmlMsg.c_str();  message.text.charSet = "us-ascii";  message.html.transfer_encoding = Content_Transfer_Encoding::enc_7bit;    /* 调用发送邮件函数,失败的话,获取失败信息 */  if (!MailClient.sendMail(&smtp  &message))    Serial.println("发送邮件失败,失败原因是   " + smtp.errorReason());}void setup(){  Serial.begin(115200);  wifiSetup();  irSetup();  smtpSetup();  }void loop(){  if (humanTrigger) {    String htmlMsg = "<div style=\"color:#2f4468;\"><h1>Human Detected!!!</h1><p>Send from Esp8266er</p></div>";    emailSendHtml("Esp8266er Email"  RECIPIENT_EMAIL  htmlMsg);    humanTrigger = false;  }}

邮件示例

esp8266 检测有人发送邮件

如果将发送邮件放到中断函数里面,板子会不断重启,邮件发送不出去,初步猜测应该是发送邮件有一定的时间,放在中断函数阻塞时间太长了,导致触发了芯片的软件狗重置。


免责声明
    本网站在国家相关法律法规规定的范围内,只按现有状况提供文章发布第三方网络平台服务,本网站及其所有者非交易一方,也非交易任何一方之代理人或代表;同时,本网站及其所有者也未授权任何人代表或代理本网站及其所有者从事任何网络交易行为或做出任何承诺、保证或其他类似行为,除非有明确的书面授权。
    鉴于互联网的特殊性,本网站无法鉴别和判断相关交易各主体之民事权利和行为能力、资质、信用等状况,也无法鉴别和判断虚拟交易或正在交易或已交易之虚拟物品来源、权属、真伪、性能、规格、质量、数量等权利属性、自然属性及其他各种状况。因此,交易各方在交易前应加以仔细辨明,并慎重考虑和评估交易可能产生的各项风险。

扫描二维码推送至手机访问。

版权声明:本文由点度点度金讯时代-BLOG发布,如需转载请注明出处。

本文链接:https://lmwmm.com/post/12.html

分享给朋友:

“esp8266 检测有人发送邮件” 的相关文章

ChatGPT注册教程攻略:解决手机无法接收验证码问题(亲测有效)

ChatGPT注册教程攻略:解决手机无法接收验证码问题(亲测有效)

今天给大家介绍一款最近非常火爆的AI智能聊天工具:ChatGPT。它的功能:文能写文章,武能改BUG,马斯克对它的评价是“Scary Good!”。不过国内的很多小伙伴在注册这个工具的时候可能会遇到这样或那样的问题导致无法获的ChatGPT...

“充电时真的别玩手机”上热搜,最大的危害是它

“充电时真的别玩手机”上热搜,最大的危害是它

你会在充电时玩手机吗?如今动辄两百多瓦的大功率快充时代,手机边用边充电时是否还会遭遇发热、卡顿、充电慢的问题呢?3月16日下午,“充电时真别玩手机”登上微博热搜榜首位。有很多网友担忧,边充电边玩手机,会不会导致手机爆炸?其实并不会。充电时手...

让文心一言和ChatGPT帮我设计开源项目,结果……

让文心一言和ChatGPT帮我设计开源项目,结果……

hi,我是一名电子工程师。作为一名有着创新精神的潮男,大洋彼岸ChatGPT的热风刚吹来,我就率先在上面提了一个人类永恒的话题:先有鸡还是先有蛋?而刚刚,我又获得了有“中国版ChatGPT”之称的文心一言内测资格,这次我决定让它帮我设计一个...

「ChatGPT最强竞品」爆火:不限量不要钱免注册!一手实测体验在此

「ChatGPT最强竞品」爆火:不限量不要钱免注册!一手实测体验在此

金磊 丰色 发自 凹非寺免费、支持中文、无需注册、不用骚操作直接可用的类ChatGPT产品,它来了!(此等好事必须第一时间和家人们分享)毫不意外的,目前它的热度已经被炒到不行:而且已经有一波网友抢先体验了一番,铺天盖地的一致好评。例如微博博...

谷歌全面开放AI 对话机器人Bard,“人人”可用【附教程】

谷歌全面开放AI 对话机器人Bard,“人人”可用【附教程】

自从ChatGPT发布后,微软借助ChatGPT技术升级Bing搜索、office办公软件等一系列操作,给谷歌造成了很大的压力。但是,毕竟瘦死的骆驼比马大,作为早早以“AI First”作为公司战略的搜索巨头,实力不容小觑。这不,在今天凌晨...

Windows 12 系统概念版 iSO 镜像下载

Windows 12 系统概念版 iSO 镜像下载

[Download]资源名称:(不包含PE)Windows 12 by sun12文件大小:3.96G下载地址1:https://pan.baidu.com/s/1sWristlACMEpMcQz67zrww?pwd=szpv 下载地址2:...