Что такое Arduino и с чем его едят можно посмотреть на официальном сайте.
В данном примере Arduino будет Вас информировать о новых сообщениях на Gmail. Так как, пока не приобрел LCD дисплей, в качестве индикации будут моргать светодиоды. Дома еще завалялся цифровой датчик DS1820. Не лишним будет выводить температуру в комнате на conky с интервалом 30 с.
Приложение состоит из 2-х частей. Первая часть на ПК — скрипт на Python, который с помощью conky запускается каждые 30 секунд, проверяет сообщения, отправляет количество непрочитанных писем по последовательному порту в Arduino и запрашивает температуру. Вторая часть на Arduino — скейтч, который проверяет значение отправляемое с ПК и если писем больше нуля то начинает моргать светодиодами, а также считывает с датчика температуру и отправляет по последовательному порту.
Схема подключения элементов:
Скрипт на 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() > 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:
|
${execi 30 python ~/dev/Gmail_check.py}°C
|