安装—
1)上传的代码,首先你必须包括JSON文件包括在板截面的ESP板。为此,复制下面的文本(选择文本并按Ctrl + C),打开Arduino IDE去文件菜单,点击喜好,去额外的董事经理网址粘贴(点击白框并点击Ctrl + V)复制的文本,然后单击“确定”按钮。
http://arduino.esp8266.com/stable/package_esp8266com_index.json
现在检查如果加入ESP板,进入工具菜单,然后选择相应的除尘板板。选择正确的端口的计算机,FTDI突破板连接。
代码—
gsender.cpp和gsender .h文件正在使用,从教学“ESP8266 G-Mail发件人”的Borya。
打开Arduino IDE和复制下面的代码—
#包括<< esp8266wifi。” #包括“gsender。”
#定义干0湿1 #定义
布尔状态=干; 布尔currentState =;
# pragma区域全局 const char* SSID =“”;// WiFi网络名称 const char *密码=“”;// WiFi网络密码 uint8_t connection_state = 0;//连接到WiFi或不 uint16_t reconnect_interval = 10000;//如果没有连接等待时间再试一次 #语用铁心端部定点企业
uint8_t wificonnect(const char * nssid = nullptr,const char * npassword = nullptr) { 静态uint16_t尝试= 0; 串口打印(“连接”); 如果(nssid){ WiFi。开始(nssid,npassword); 系列。println(nssid);其他 } { WiFi。开始(SSID,密码); 系列。
uint8_t i = 0; 而(WiFi!= wl_connected &我+ + < 50) { 延迟(200); 串口打印(“。”); } +尝试; 串行out.println(“”); 如果(我= = 51){ 串口打印(“连接超时的尝试::“); 系列。println(未遂); 如果(尝试% 2 = = 0) 串行out.println(“检查接入点可用或SSID和密码\r\n”); return false;} 串行 out.println(“连接建立”); 系列。打印(“IP地址”); 系列
无效awaits() { uint32_t TS = millis(); 而!connection_state) { 延迟(50); 如果(millis() >(TS + reconnect_interval)!connection_state){ connection_state = wificonnect(); TS = millis(); } }
无效setup() { 系列。开始(115200); 串行out.println(“读”); connection_state = wificonnect()!connection_state)//如果没有连接到WiFi awaits();/ /不断尝试连接 }
无效loop() { gsender * gsender = gsender::instance();//获取指向类实例 字符串对象=“植物状态”; int模拟值= analogread(2); 延迟(;
如果(模拟值<= 300){ currentState =干; } 如果((模拟值> 300)&(模拟值<950)){ currentState =湿;
如果(当前状态!=初始状态){ 如果((模拟值> 300)&(模拟值<950)){ //潮湿的土壤 如果(gsender ->主题(主题)->发送(“***你的电子邮件地址是***”、“土壤水分适宜。植物是非常快乐的。”)){ 串行out.println(“发送消息”);} { 其他 串口打印(“错误发送信息:”); 系列。println(gsender -> geterror());} }如果 (模拟值<= 300)&(模拟值<950)){ //干土 如果(gsender ->主题(主题)->发送(“***你的电子邮件地址是***”、“土壤水分。植物是非常不幸的。”)){ 串行out.println(“发送消息”);} { 其他 串口打印(“错误发送信息:”); 系列。println(gsender -> geterror());} } } 状态=
现在打开一个新标签,点击向下的箭头在右上角,选择新标签选项,给它一个名字,Gsender.cpp和下面的代码粘贴在该选项卡—
#包括“gsender。” gsender * gsender::_instance = 0; gsender::gsender() { } gsender * gsender::instance() { 如果(_instance = = 0) _instance =新gsender; 返回
gsender * gsender::主体(const char*对象) { 删除[ ] _subject; _subject =新字符[ strlen(主体)+ 1 ]; strcpy(_subject,主体); 返回_instance; } gsender * gsender::主体(const string&主体) { 回归主体(
布尔gsender::AwaitSMTPResponse(wificlientsecure客户,const string& RESP,uint16_t超时) { uint32_t TS = millis(); !客户端。available()) { 如果(millis() >(TS +超时)){ _error =“SMTP响应超时!; return false;} } _serverresponce =客户。readstringuntil('\n'); #如果定义(gs_serial_log_1)| |定义(gs_serial_log_2) 系列。println(_serverresponce); # endif 如果(或与_serverresponce。indexOf(RESP)= = 1)返回假
字符串gsender::getlastresponce() { 返回_serverresponce;
const char * gsender::geterror() { 返回_error;
布尔gsender::发送(const string&,const string&消息) { wificlientsecure客户端; #如果定义(gs_serial_log_2) 串口打印(“连接到”); 系列。println(smtp_server); !客户端连接(smtp_server,smtp_port)){ _error =“无法连接到邮件服务器”; return false;} !AwaitSMTPResponse(客户,“220”)){ _error =“连接错误”; return false;
#如果定义(gs_serial_log_2) 串行out.println(“你好朋友:“); # endif 客户端。println(“你好朋友”)!AwaitSMTPResponse(客户,“250”)){ _error =“识别错误”; return false;
#如果定义(gs_serial_log_2) 串行out.println(“登录名:”); # endif 客户端。println(“登录名”); awaitsmtpresponse;
#如果定义(gs_serial_log_2) 串行out.println(“emailbase64_login:”); # endif 客户端。println(emailbase64_login); awaitsmtpresponse;
#如果定义(gs_serial_log_2) 串行out.println(“emailbase64_password:”); # endif 客户端。println(emailbase64_password)!AwaitSMTPResponse(客户,“235”)){ _error =“SMTP AUTH的错误”; return false;} 字符串mailfrom =“邮件来自:<“+字符串(从)+“>”; #如果定义(gs_serial_log_2) 系列。println(mailfrom); # endif println(mailfrom)客户端;
字符串RCPT =“RCPT TO:<“+ +”>“; #如果定义(gs_serial_log_2) 系列。println(RCPT); # endif 客户端。println(RCPT); ;
#如果定义(gs_serial_log_2) 串行out.println(“数据”); # endif 客户端。println(“数据”)!AwaitSMTPResponse(客户,“354”)){ _error =“SMTP数据错误”; return false;} 客户端。println(”:<< +字符串(从)+“>”); 客户端。println(”:<<“+ +”>“); 客户端。打印(“主题:”); 客户端。println(_subject); 客户端。println(“MIME版本:1”); 客户端。println(“Content-Type: text/html;字符集=“UTF-8””); println(”客户端。内容传输编码:7bit”); println()客户端。
”; 客户端。println(体); 客户端。println(“。”)!AwaitSMTPResponse(客户,“250”)){ _error =“发送错误信息”; return false;} 客户端 out.println(“退出”)!AwaitSMTPResponse(客户,“221”)){ _error =“SMTP退出错误”; return false;} 返回true
打开一个新标签,给它起了个名字gsender,标签和粘贴以下代码—
#则g_sender #定义g_sender #定义gs_serial_log_1 /打印服务器响应 串行/ #定义gs_serial_log_2 /打印到客户端的命令和服务器的响应 串行#包括<< wificlientsecure。”#p#分页标题#e#
类gsender { 保护: gsender(); 私人: const int smtp_port = 465; const char* smtp_server =“SMTP。Gmail。com”; const char* emailbase64_login =“”;//电子邮件地址转换成Base64格式 const char* emailbase64_password =“”;//电子邮件地址密码转换成Base64格式 const char * =“”;//电子邮件地址 const char* _error = nullptr; char * _subject = nullptr; 字符串_serverresponce; 静态gsender * _instance; 布尔awaitsmtpresponse(wificlientsecure客户,const string&分别;
市民: 静态gsender * instance(); gsender *主体(const char*对象); gsender *主体(const string&主体); bool发送(const string&,const string&消息); 字符串getlastresponce(); const char* geterror();
现在上传的代码在ESP8266。在上传代码,断开的GPIO 0引脚连接到GND。