aspire89 20.04.2010 21:43

HardwareИндикация о новом сообщении Gmail + термометр через Arduino

Что такое Arduino и с чем его едят можно посмотреть на официальном сайте.
В данном примере Arduino будет Вас информировать о новых сообщениях на Gmail. Так как, пока не приобрел LCD дисплей, в качестве индикации будут моргать светодиоды. Дома еще завалялся цифровой датчик DS1820. Не лишним будет выводить температуру в комнате на conky с интервалом 30 с.

Приложение состоит из 2-х частей. Первая часть на ПК — скрипт на Python, который с помощью conky запускается каждые 30 секунд, проверяет сообщения, отправляет количество непрочитанных писем по последовательному порту в Arduino и запрашивает температуру. Вторая часть на Arduino — скейтч, который проверяет значение отправляемое с ПК и если писем больше нуля то начинает моргать светодиодами, а также считывает с датчика температуру и отправляет по последовательному порту.


Схема подключения элементов:
ds1820_2led.png

Скрипт на Python, для работы требуется библиотека PySerial:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import urllib, re, serial, os

gml = ''
username="***"
password="***"
adr = "https://"+username+":"+password+"@mail.google.com/mail/feed/atom"
cont = urllib.urlopen(adr)
s = cont.read()

reg = re.compile(r"<fullcount>\d+</fullcount>")

gmlcnt = reg.search(s).group()
reg2 = re.compile(r"\d+")
gml = reg2.search(gmlcnt).group()

if os.path.exists('/dev/ttyUSB0') == 1:
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.write(gml) #отправляем кол-во непрочитанных писем
ser.write("t") #отправляем символ "t", по получении которого arduino опросит датчик
print ser.readline().strip() #получаем значение температуры
ser.close()



Скейтч для arduino, для работы потребуется библиотека OneWireTempSensor.h:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <OneWire.h>
#include <OneWireTempSensor.h>

OneWireTempSensor sensors(2);
int numdevs;
int R = 12;
int G = 11;
int i = 0;

void setup(){
numdevs = sensors.getDevices();
Serial.begin(9600);
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
}

void led_blink(){
if (i == 1){
digitalWrite(R, HIGH);
digitalWrite(G, LOW);
delay(100);
digitalWrite(G, HIGH);
digitalWrite(R, LOW);
delay(100);
}
}

void loop(){
int temp;
int mail;

if (Serial.available() &gt; 0){
mail = Serial.read();
if ((char(mail) != 't') && (char(mail) != '0')){
i = 1;
}
if(char(mail) == 't'){
temp = (int) sensors.getTempC(0);
if (temp != 85){
Serial.println(temp);
}
}
if (char(mail) == '0'){
i = 0;
digitalWrite(R, LOW);
digitalWrite(G, LOW);
}
}
led_blink();
}



Библиотека OneWireTempSensor.h не совсем корректно работает со старыми датчиками DS1820 и бывают моменты когда датчик выдает +85 градусов, поэтому с коде сделана на это поправка.
И строчка в conky:
1
${execi 30 python ~/dev/Gmail_check.py}°C



Тэги: arduino conky hardware python
+ 5 -
Похожие Поделиться