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

esp8266 检测有人发送邮件

微信用户2年前 (2022-02-16)技术类1836

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://www.lmwmm.com/post/12.html

分享给朋友:

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

抖音宣布全量开放帐号IP属地功能

抖音宣布全量开放帐号IP属地功能

       4月29日消息,稍早前,有用户发现,抖音也支持了IP属地功能,即作者、评论显示地理位置。今日晚间,“抖音安全中心”微信公众号宣布,抖音一直致力于维护真实有序的社区讨论氛围,确保平台传播内...

解决Chrome浏览器翻译无法使用

解决Chrome浏览器翻译无法使用

由于谷歌翻译退出中国,目前,谷歌浏览器Chrome的翻译功能也无法使用,根据科技博客TechCrunch的消息称,谷歌发言人通过电子邮件告诉TechCrunch,该公司由于“使用率低”的原因,已停止中国大陆的谷歌翻译服务。这一变化也影响了中...

MQTT服务器4G远程遥控小车代码

MQTT服务器4G远程遥控小车代码

接收机代码#include <ESP8266WiFi.h> #include <PubSubClient.h> #include<Servo.h> #include ...

普通2.4g遥控车改4g遥控车资料-8266

普通2.4g遥控车改4g遥控车资料-8266

  背景:传统遥控器都是航模为代表的2.4G遥控器,它们在室外且无障碍物时遥控距离很长,可达几千米,但是有障碍物时,遥控距离可能仅有10多米。市面上也有一些2.4g遥控改装4G的,是读取2.4g遥控信号,并转发至服务器,...

重大突破,电脑能用鸿蒙系统了!

重大突破,电脑能用鸿蒙系统了!

近年来,“缺芯少魂”带来的卡脖子危机为众多行业敲响警钟,我们必须加快国产操作系统替代研发进程.可喜的是,随着国内操作系统市场快速增长以及政策投入力度的加大,国产操作系统正逐渐实现从无到有、从“可用”到“好用”的跨越式发展。同时,一批极具竞争...

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

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

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