Отправка сообщение на мыло при срабатывания пина
- Войдите на сайт для отправки комментариев
Вс, 01/06/2014 - 01:32
Сталкнусля с проблемой отсылки сообщения на мыло если сработал тот или иной пин на ардуине. есть которые работают чере монитор и у них есть косяк отсылает только 1 сообщение потом не может отправить вот код
Для работы данного кода нужна библа "Base64.h" скачать её можно тут
#include <Base64.h>
#include <SPI.h>
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>
//структура для сообщения
struct Message
{
String From;//адрес отправителя
String To;// адрес получателя
String Subject;// Тема письма
String Body;// Текст письма
};
//mac адрес устройства (можно не менять)
byte mac[] = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x05 };
//IP адрес адруины (можно не менять)
IPAddress ip(192,168,0,54);
// IP smtp сервера
IPAddress server(94, 100, 177, 1);// mail.ru
// IP других сереров можно найти в инете
// логин и пароль к почтовому сервису
char login[] = "ВашЛогин";//без @mail.ru
char password[] = "ВашПароль";
// создаем экземпляр клиента
EthernetClient client;
void setup(){
Serial.begin(9600);// UART
Ethernet.begin(mac,ip);// Запускаем шилд
Serial.println("Start");
}
void loop(){
while(Serial.available()){
char inSerialChar = 0;
inSerialChar = Serial.read();
if(inSerialChar == 's'){
SendMessage();// При отправке в дуину 's', отправляем сообщение.
}
}
}
// метод подключения к серверу
bool connectToServer(){
if(client.connected()){
}
else{
if(client.connect(server,25)){
return true;
}
else{
return false;
}
}
}
// метод отправки сообщения
void SendMessage(){
Serial.println("Please wite...");
LogPass();
Message message = {
"ваш_почтовый_ящик@mail.ru",
"почтовый_ящик_получателя@gmail.com",
"Проба пера",//тема
"Огромный привет от Ардуино!!!!" };//само сообщение
client.println("MAIL From:<"+message.From+">");
delay(250);
client.println("RCPT To:<"+message.To+">");
delay(250);
client.println("DATA");
delay(250);
client.println("From:"+message.From);
client.println("To:"+message.To);
client.println("Subject:"+message.Subject);
delay(250);
client.println(message.Body);
delay(250);
client.println(".");// по приходу точки сервер ставит сообщение в очередь
delay(250); // на отправку
client.println("QUIT");// как только закрыли соединение, сообщение улетает
delay(250);
Serial.println("Message sending...");
}
// подключение к сереверу и авторизация
void LogPass(){
char array[64];// массив для кодирования
if(connectToServer()){
client.println(F("helo 1.2.3.4"));
delay(250);
client.println(F("AUTH LOGIN"));
delay(250);
client.println(strToBase64(login));
delay(250);
client.println(strToBase64(password));
delay(250);
}
else{
Serial.println("Server not connected...");
}
}
// кодировка Base64
String strToBase64(char str[]){
char charArray[64];
base64_encode(charArray,str,strlen(str));
String result = charArray;
return result;
}
Потом нашол кторый работает с пинами но у меня с ним ничегоне отсылает что не так или как сделать чтобы при срабатывания на пине или нажатии на кнопку происходила отправка сообщения.
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>
#include <SPI.h>
//
// Constants for this program
//
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 8; // the number of the LED pin
const int WAIT = 300; // delay time
//
// Variables for this program.
//
// Variable for reading the digital status
int intButtonState = 0;
// ******************************** Arduino network information
// Your Ehternet Shield MAC address
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x23, 0x86 };
// Home IP address data (if unable to use DHCP)
byte ip[] = { 192, 168, 1, 108 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 1, 1 };
// Data for COMCAST SMTP mail server - NOTE *This changes*
byte smtpServerIP[] = { 76, 96, 62, 117 };
String smtpServerName = "smtp.comcast.net";
// Login data for COMCAST (already in MIME Base64 format)
String UserName64 = "dXNlcm5hbWU=";
String Password64 = "cGFzc3dvcmQ=";
// ******************************** Mail information
String Sender = "someone@comcast.net";
String Recipient = "others@theplace.com";
String Subject = "Arduino Button Click!";
String Body = "Button attached to digital input 2 pressed down.";
// ******************************** Arduino network connection
String ServerResponse="";
EthernetClient client;
//********************************************************
//** setup
//** This is the first function to run and will initialize all
//** components that are connected to the Arduino.
//********************************************************
void setup()
{
Serial.begin(9600); // for debug
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
// get me some ip addressage!
vodSetupCommunications();
}
//********************************************************
//** loop
//** This is the main function to run and will act as
//** the control loop for the Arduino.
//********************************************************
void loop()
{
//
// Read the state of the pushbutton value.
//
intButtonState = digitalRead(buttonPin);
//
// Check to see the pushbutton is pressed down.
// IF it is, the intButtonState is HIGH
// - turn on the LED for visual notification
// - send the vodSendEmail notification
//
if (intButtonState == HIGH)
{
// Turn LED on.
digitalWrite(ledPin, HIGH);
// Send the vodSendEmail notification.
vodSendEmail();
// Ensure that port is still open.
vodTestConnection();
}
else
{
// Turn LED off.
digitalWrite(ledPin, LOW);
}
}
/***********************************************
CALLED FUNCTIONS BELOW HERE
************************************************/
//********************************************************
//** vodSetupCommunications
//** This function is called in order to initialize
//** the communication with the ethernet port. It
//** gets the IP address using DHCP, but could use a
//** specific IP address, subnet, and gateway.
//********************************************************
void vodSetupCommunications()
{
//
// Variable for this function
//
byte byteIPByte;
//
// Attempt to establish connection to ethernet port.
//
Serial.println("Trying to connect to ethernet port ...");
// if (!Ethernet.begin(mac))
// //if (!Ethernet.begin(mac, ip, subnet, gateway))
// {
// Serial.println("Failed to establish DHCP connection.");
// // No point in carrying on, so do nothing forevermore.
// while(true);
// }
/* Non-DHCP : while ( !Ethernet.begin(mac, ip, subnet, gateway) ) */
while ( !Ethernet.begin(mac) )
{
Serial.println("Failed to establish DHCP connection.");
Serial.println("retry ...");
}
// Pause to ensure successful connection.
delay(WAIT);
//
// Display the established IP address for debugging
//
Serial.print("My IP address: ");
for (byteIPByte = 0; byteIPByte < 4; byteIPByte++) {
// Print the value of each byte of the IP address.
Serial.print(Ethernet.localIP()[byteIPByte], DEC);
Serial.print(".");
}
Serial.println();
Serial.println("***************************************");
Serial.println();
}
//********************************************************
//** vodSendEmail
//** This function will connect to the SMTP server and
//** send the email message.
//********************************************************
void vodSendEmail()
{
Serial.println("Connecting to the SMTP server ...");
//
// If successful connecting to the SMTP server on
// port 587, then pass it the information needed
// to send the email message. Otherwise, display
// a failure message for debugging.
//
if (client.connect(smtpServerIP, 587))
{
Serial.println("Connected to the SMTP server ...");
vodEthernetOut("HELO " + smtpServerName); /* say hello*/
vodEthernetOut("AUTH LOGIN ");
vodEthernetOut(UserName64); /* Username*/
vodEthernetOut(Password64); /* Password */
vodEthernetOut("MAIL From:<" + Sender +">"); /* identify sender */
vodEthernetOut("RCPT To:<" + Recipient + ">"); /* identify recipient */
vodEthernetOut("DATA");
vodEthernetOut("To: " + Recipient); /* recipient in message header */
vodEthernetOut("From: " + Sender); /* seder name in message header */
vodEthernetOut("Subject: "+ Subject); /* insert subject */
vodEthernetOut(""); /* empty line */
vodEthernetOut(Body); /* insert body */
vodEthernetOut(""); /* empty line */
vodEthernetOut("."); /* end mail */
vodEthernetOut("QUIT"); /* terminate connection */
client.println();
}
else
{
Serial.println("The SMTP connection has failed!");
}
}
//********************************************************
//** vodEthernetOut
//** This function will write to the ethernet port
//** and then display the data written as well as any
//** response for debugging purposes.
//********************************************************
void vodEthernetOut(String m) {
// Write the string to the ethernet port.
client.println(m);
// Display the string that was written.
Serial.println(">>>" + m);
// Pause in order to wait for a response.
delay(WAIT);
// Read and display any response.
vodGetResponse();
}
//********************************************************
//** vodGetResponse
//** This function look for and display any server
//** response for debugging purposes.
//********************************************************
void vodGetResponse() {
if (client.available()) {
char c = client.read();
while (client.available()) { // Store command char by char.
ServerResponse +=c;
c = client.read();
}
Serial.println("<<<" + ServerResponse);
ServerResponse="";
}
}
void vodTestConnection()
{
if (!client.connected())
{
Serial.println();
Serial.println("Port closed ... reconnecting ...");
client.stop();
delay(WAIT);
vodSetupCommunications();
}
}
подскажите как можно осуществить
В конце сеанса связи с почтовым сервером надо выполнить client.stop(); - тогда должно работать нормально
на втором коде сообщения вообще не отправляются. где smpt.я менял на маил.ру как обычно но сообщения не идут ( при срабатывании пина