物联网邮箱卫士
文件列表(压缩包大小 238.16K)
免费
概述
ESP8266 WiFi模块(ESP-01)
ESP programmer(USB到ESP8266适配器)
微动开关 SCH48
Mini 360 DC / DC降压转换器
为了在我打开邮箱盖后收到一封电子邮件。我使用了基于ESP8266的ESP-01S模块,该模块可以连接WLAN并发送电子邮件。
GitHub储存库中也提供了BlackBerry程序,你也可以直接在下载区下载,电路图和本例程的布局(图像和EAGLE文件)。
这是用于设置发送电子邮件所需的SMTP2GO帐户的链接。
#include <ESP8266WiFi.h>
const char *wifi_ssid = "YOUR-WIFI-NAME";
const char *wifi_pass = "YOUR-WIFI-PASSWORD";
const char *mail_server = "mail.smtp2go.com";
const int mail_port = 2525;
const char *mail_user_base64 = "YOUR-BASE64-SMTP2GO-USERNAME";
const char *mail_pass_base64 = "YOUR-BASE64-SMTP2GO-PASSWORD";
const char *mail_sender = "YOUR-MAIL-SENDER"; // E-mail address that's shown as sender
const char *mail_recipients[] = { "YOUR-MAIL-RECIPIENT-1", "YOUR-MAIL-RECIPIENT-2" }; // Array of one or more e-mail recipients
const char *mail_subject = "IoT mailbox guard";
const char *mail_body = "The mailbox was opened.";
WiFiClient espClient;
void setup() {
Serial.end();
Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
Serial.println();
blink();
Serial.println();
Serial.print("Connecting to WiFi: ");
Serial.println(wifi_ssid);
WiFi.begin(wifi_ssid, wifi_pass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.println();
Serial.println("IP: ");
Serial.println(WiFi.localIP());
for (int i = 0; i < sizeof(mail_recipients) / sizeof(const char *); i++) {
if (sendEmail(mail_recipients[i])) {
Serial.println();
Serial.println("E-Mail sent successfully.");
} else {
Serial.println();
Serial.println("Error!");
}
}
Serial.println();
Serial.println("Pulling RX LOW.");
Serial.println("Application done.");
blink();
// LED ON
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
// RX LOW
pinMode(3, FUNCTION_3);
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
}
void loop() {
}
bool sendEmail(const char *recipient) {
Serial.println();
Serial.println("Connecting to mail server");
if (espClient.connect(mail_server, mail_port) != 1) return false;
if (!emailResp()) return false;
Serial.println();
Serial.println("Sending EHLO");
espClient.println("EHLO www.example.com");
if (!emailResp()) return false;
/*
Serial.println();
Serial.println("Sending TTLS");
espClient.println("STARTTLS");
if (!emailResp()) return false;
*/
Serial.println();
Serial.println("Sending AUTH LOGIN");
espClient.println("AUTH LOGIN");
if (!emailResp()) return false;
Serial.println();
Serial.println("Sending username");
espClient.println(mail_user_base64);
if (!emailResp()) return false;
Serial.println();
Serial.println("Sending password");
espClient.println(mail_pass_base64);
if (!emailResp()) return false;
Serial.println();
Serial.println(F("Sending sender"));
espClient.print("MAIL From: ");
espClient.println(mail_sender);
if (!emailResp()) return false;
Serial.println();
Serial.println("Sending recipient");
espClient.print("RCPT To: ");
espClient.println(recipient);
if (!emailResp()) return false;
Serial.println();
Serial.println("Sending data");
espClient.println("DATA");
if (!emailResp()) return false;
espClient.print("To: ");
espClient.println(recipient);
espClient.print("From: ");
espClient.println(mail_sender);
espClient.print("Subject: ");
espClient.println(mail_subject);
espClient.println("Content-Transfer-Encoding: 8bit");
espClient.println("Content-Type: text/html; charset=\"UTF-8\"");
espClient.println();
espClient.println(mail_body);
espClient.println(".");
if (!emailResp()) return false;
Serial.println();
Serial.println("Ending session");
espClient.println("QUIT");
if (!emailResp()) return false;
espClient.stop();
return true;
}
bool emailResp() {
byte responseCode;
byte readByte;
int loopCount = 0;
while (!espClient.available()) {
delay(1);
loopCount++;
if (loopCount > 20000) {
espClient.stop();
Serial.println("Timeout!");
return false;
}
}
responseCode = espClient.peek();
while (espClient.available()) {
readByte = espClient.read();
Serial.write(readByte);
}
return responseCode < '4';
}
void blink() {
// LED ON
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
delay(25);
// LED OFF
digitalWrite(2, HIGH);
pinMode(2, INPUT);
delay(25);
}
一旦打开信箱活门的启动销就会激活微动开关,然后一个9 V电池模块和一个DC / DC降压转换器(3.3 V)就会为电路供电。
我设计了一个软锁存电路可以切断整个ESP-01S电路,所以它本身的工作完成后,在空闲状态下几乎不消耗功率。但尽管如此,我仍然需要确定9 V电源模块的确切使用寿命,我的一块9V电源已经使用了5个月,当它变成7V时才需要更换。ESP-01S可以工作在3.3 V 70 mA,发送电子邮件大约需要10秒钟。(如果WLAN接收受到干扰,则会在20秒后汇报超时,并再次禁用电路)
调节销是一根碳棒,它穿过一根黄铜管,并通过一个小的胶粘端头固定,以防止滑出。我滴加了一滴机油且使用带有长杆的微动开关来制动,制动所需的力相对较小。因此,信箱盖在“盖关闭”状态下可以安全地操作开关。附加电路仅在释放开关时才产生短路电流脉冲,从而激活软锁存电路。
金属邮箱类似于法拉第笼,因此ESP-01S上的小型印刷天线没有良好的覆盖范围,所以我利用一个老化的闲置Linksys WRT54GL路由器,我利用了它的两根天线。
为此,我切断了印刷天线的导体,将其焊接至外部天线的同轴电缆,并用一些环氧树脂将其固定。这充分增加了发送电子邮件的范围(与图片相反,在图片中,我仅焊接了两根短漆包铜线作为临时外部天线)。
我在面包板上做了第一个版本,而上面显示版本的电路是在DIY CNC上做的。
我将铝块用作板和邮箱壁之间的垫片,用双面胶带将所有物品固定在正确的位置,当信箱盖关闭时,信箱盖会将碳棒完全推入。
我出于调试目的需要使用TX引脚时,以及使用RX引脚关闭软锁存电路,并且在启动时GPIO0引脚和GPIO2引脚上都发生了错误:
GPIO0显然输出一个方波信号为675赫兹。
GPIO2似乎正在发送一些数据。在电源切换的时候,这种现象是错误的。
由于GPIO0和GPIO2引脚的状态决定了模块的启动模式(引导或闪烁),因此我将两个引脚都通过一个上拉电阻拉至HIGH,以确保安全。同时,我也将ENABLE和RESET引脚连接至高电平。
请看下载区的代码,以了解如何将RX引脚用作普通GPIO。
所有需要的文件在下载区均可找到。
via:https://www.hackster.io/shredengineer/iot-mailbox-guard-ab33c1
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)