Использовал: 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.
}
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); //выводим сообщение об ошибке
}
Получилась такая последовательность запуска в "планировщике заданий" windows:
1. запускается программы управления модемом http://huawei.mobzon.ru
2. запускается скрипт отправки файла показаний барометра на почту.
3. запускается taskkill для остановки huawei.exe (TASKKILL /IM HUAWEI* /F /T)
На принимающем компьютере LiveGraph строит график изменения атмосферного давления.
Библиотеки во вложении.
З.Ы. Стоит покупать пакет интернета у сотового оператора сразу на месяц.
В планах - отказ от компьютера с модемом и переход на SIM900 или Neoway 660.