Барометр + email

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Ответить
serg
Сообщения: 17
Зарегистрирован: 27 мар 2013, 16:18

Барометр + email

Сообщение serg »

На днях собрал барометр на Arduino c отправкой данных на почтовый ящик.

Использовал: Arduino Uno +датчик давления SMP180+часы DS1302+ 3G модем Huawei E160G+комп.

Софт: Arduino 1.6 + Stunnel+ Putty + LiveGraph.

Мне показалось удобным наличие разного питания: 3В у барометра и 5В у часов и так же то, что барометр работает по шине IIC.
Для датчика давления воспользовался документацией SparkFun - https://www.sparkfun.com/products/11824 и их библиотеками SFE_BMP180.cpp и SFE_BMP180.h

А для часов http://www.dx.com/p/ds1302-real-time-cl ... 032-126453
подошла одна единственная (!!) библиотека (во вложении).

Код: Выделить всё

#include <SFE_BMP180.h>
#include <Wire.h>
#include <DS1302.h>

SFE_BMP180 pressure;
DS1302 rtc(5, 6, 7);

void setup()
{
  rtc.halt(false);
  rtc.writeProtect(false);
  
  Serial.begin(9600);
   
  rtc.setTime(17, 23, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(30, 4, 2015);

   if (pressure.begin())
    Serial.println("BMP180 init success");
   else
  {
  Serial.println("BMP180 init fail\n\n");
  while(1); // Pause forever.
 }
}

void loop()
{
  char status;
  double T,P;
   
  status = pressure.startTemperature();
  if (status != 0)
  {
    
    delay(status);

    status = pressure.getTemperature(T);
    if (status != 0)
    {
      
     Serial.print(rtc.getDateStr());// Print date
     Serial.print(" ; ");
     Serial.print(rtc.getTimeStr()); // Print time
     Serial.print(" ; ");
     Serial.print(T,2);// Print Temp
     Serial.print(" ; ");
            
      status = pressure.startPressure(3);
      if (status != 0)
      {
        delay(status);

        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          // Print out the measurement:
          Serial.println(P*0.75014766658,2); //mmHg
                   
        }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(60000);  // Pause for 60 seconds.
}
Еще одна проблема была в том что с декабря прошлого года закрыт 25 порт у почтовых серверов. Выручила программа stunnel - для gmail.com все настройки по умолчанию.
https://www.stunnel.org/index.html

Для отправки почты нашел подробно расписанный js скрипт.

Код: Выделить всё

  
//для работы с закрытым 25 портом нужен stunnel 127.0.0.1
//
objEmail = WScript.CreateObject("CDO.Message");  //создаем объект CDO.Message
//
//Зададим значения для полей письма.
objEmail.From = "mail@gmail.com";  	//адрес отправителя
objEmail.To = "mail2@gmail.com"; 		//адрес получателя
objEmail.BodyPart.CharSet = "utf-8";               //задаем кодовую страницу сообщения
objEmail.Subject = "baro"; 	//тема письма
objEmail.Textbody = "показания барометра";  //тело письма
objEmail.AddAttachment("C:\\baro2904.log");	//добавляем к письму вложение
//
//Зададим значения для полей конфигурации
with (objEmail.Configuration.Fields) {
	Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2; //посылать сообщения по сети, используя SMTP
	Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "127.0.0.1"; //ip или DNS-имя smtp-сервера
	Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25; // порт smtp-сервера
	Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1; // используем basic authentication
	Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "user"; //имя пользователя
	Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "paswd";  //пароль пользователя
	Update();
}
try {
	objEmail.Send();
}
catch(e) {
	WScript.Echo(e.number);  //выводим номер ошибки
	WScript.Echo(e.message); //выводим сообщение об ошибке
}
Перед загрузкой скетча в плату надо забить в него текущее время. И запустить putty с логированием в файл.

Получилась такая последовательность запуска в "планировщике заданий" windows:
1. запускается программы управления модемом http://huawei.mobzon.ru
2. запускается скрипт отправки файла показаний барометра на почту.
3. запускается taskkill для остановки huawei.exe (TASKKILL /IM HUAWEI* /F /T)

На принимающем компьютере LiveGraph строит график изменения атмосферного давления.

Библиотеки во вложении.
З.Ы. Стоит покупать пакет интернета у сотового оператора сразу на месяц.
В планах - отказ от компьютера с модемом и переход на SIM900 или Neoway 660.
Вложения
baro.rar
(76.17 КБ) 1202 скачивания
1.jpg
1.jpg (7.59 КБ) 13858 просмотров
Ответить