Мы уже писали о том, как сделать умный термостат, чтобы отапливать дом, и рассказывали, как, потратив всего 5 долларов, из подручных материалов собрать спектрометр. Сегодня мы делимся переводом статьи о превращении простой кофеварки в устройство, которое может включаться и выключаться по заданным вами условиям. Все перечисленные приборы работают при помощи Python, а у нас скоро стартует курс по Fullstack-разработке на этом языке. Подробности преображения кофеварки читайте под катом.


Вам нравится идея приготовления кофе на ходу? Из своей постели? Пока вы едете в автобусе домой? Тогда Tweet-a-pot для вас. Tweet-a-pot — это устройство с поддержкой Twitter. Эта кофеварка при помощи Twitter и платы Arduino позволяет владельцу приготовить кофе из любого места, где есть сотовая связь.

Tweet-a-pot — простая реализация удалённого управления устройством. Немного программирования, кое-какое оборудование — и вы получите кофеварку с поддержкой Twitter. Посмотрите короткое видео, за него отдельное спасибо Sam:

1. Компоненты

Вам понадобятся:

1. Реле Power Switch Tail с проводами без оплётки — это интерфейс к переменному току высокого напряжения.

2. Любая плата Arduino.

3. Компьютер с Python и Arduino IDE.

4. Капельная кофеварка.

2. Настройка компьютера

Сначала необходимо настроить принимающий компьютер
Сначала необходимо настроить принимающий компьютер

Arduino и Twitter будут общаться через Python. Библиотека, позволяющая работать с API Twitter, называется python-twitter. После установки Python установите библиотеку python-twitter и все её зависимости. Если возникнут проблемы, просто обратитесь к документации python-twitter. Затем установите Arduino IDE, чтобы запрограммировать Arduino и иметь возможность взаимодействия через последовательный порт. После настройки и проверки работы нужно получить данные учётной записи Twitter.

3. Twitter

Раньше взаимодействие с Twitter было простым, в код достаточно было ввести имя и пароль, всё работало. Теперь Twitter серьёзнее относится к информации о пользователях, аутентификация работает через OAuth, то есть нужно зарегистрировать своё приложение в Twitter и получить ключ API. Создайте для проекта отдельный аккаунт. Затем зайдите на dev.twitter.com и зарегистрируйте своё приложение, это позволит вам получить:

  • токен доступа;

  • секрет токена доступа;

  • ключ клиента;

  • секрет клиента.

Все эти ключи будут необходимы для взаимодействия с API Twitter.

4. Python

Код в основном работает с python-twitter, запрашивая у Twitter статусы пользователя x, затем берёт последний статус и ищет тег #driptwit. Если строка #driptwitstop найдена, в последовательный порт (и в Arduino) Python посылает значение ASCII 1, а если не найдена, то 0. Сообщения проверяются каждые 15 секунд. Как вы видите, в коде ниже вводятся полученные от Twitter ключи:

#******************************************#
# Tweet-a-Pot by Gregg Horton 2011         #
# Please email changes or                  # 
# updates to greggawatt@instructables.com  #
# so i can keep it updated		   #
# *****************************************#

##Import Libraries

import twitter
import serial
import time

##authenticate yourself with twitter
api = twitter.Api(consumer_key='your key here', consumer_secret='your key here', access_token_key='your key here', access_token_secret='your here here') 

##set to your serial port
ser = serial.Serial('/dev/ttyUSB0', 19200)

## check serial port
def checkokay():
	ser.flushInput()
	time.sleep(3)
	line=ser.readline()
	time.sleep(3)

	if line == ' ':
		line=ser.readline()
	print 'here'
## Welcome message
print 'Welcome To Drip Twit!'

def driptwit():
	status = [] 
	x = 0
	
	status = api.GetUserTimeline('yourusername') ##grab latest statuses
	
	checkIt = [s.text for s in status] ##put status in an array

	drip = checkIt[0].split() ##split first tweet into words

	## check for match and write to serial if match
	if drip[0] == '#driptwit':
		print 'Tweet Recieved, Making Coffee'
		ser.write('1')
	elif drip[0] == '#driptwitstop': ##break if done
		ser.write('0')
		print 'stopped, awaiting instructions.'
	else:
		ser.write('0')
		print 'Awaiting Tweet'
		
		
	
while 1:
	driptwit() ## call driptwit function
	time.sleep(15) ## sleep for 15 seconds to avoid rate limiting

5. Arduino

Единственная связь между кодом на Python и кодом в Arduino — это одно значение, подаваемое через последовательный порт. Python отправляет его в ASCII, поэтому Arduino интерпретирует его как битовое число, в нашем случае 1 на Python означает 49 в Arduino. Я не знал, как заставить Python посылать в порт байты, поэтому просто изменил код Arduino так, чтобы он реагировал на нужное значение:

/*
Tweet-a-pot Gregg Horton 2011
Please email changes to greggawatt@instructables.com so i
can improve this code!

Enables blinking/relay control over twitter, using python code
Based off of Blink and Serial demo code

*/

int relayPin = 13; // LED connected to digital pin 13
int incomingByte = 0; //declare incoming byte
// The setup() method runs once, when the sketch starts

void setup() {
  // initialize the digital pin as an output:
  pinMode(relayPin, OUTPUT);
  Serial.begin(19200); // set up Serial library at 19200 bps

  Serial.println("Arduino is ready!");
}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop() {
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();
    Serial.println(incomingByte);
    if (incomingByte == 49) {
      digitalWrite(relayPin, HIGH);
    } else {
      digitalWrite(relayPin, LOW);
    }

    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte, DEC);
  }
}

6. Оборудование

Установка довольно проста: напряжение управляется через Power Switch Tail, позволяющее подключить два провода, один — к земле, другой — к управляющему контакту, чтобы включать и выключать реле.

Как видно из кода, всё, что вам нужно, — условный оператор установки высокого и низкого напряжений. Подключите Arduino к компьютеру и убедитесь, что последовательный порт установлен, подключите выводы Power Switch Tail к контакту 13 и к земле. После соедините кофеварку и реле, а затем включите реле в обычную розетку. Это просто! Увлёкшись, не забудьте о кофе и воде в самой кофеварке.

7. Готовим кофе

Ещё 3 фото

Я провёл много испытаний, прежде чем подключить всё к настоящей кофеварке (и даже после этого обнаружил несколько ошибок), но, как только вы заставите устройство работать, настанет время готовить кофе. Наполните кофеварку водой и кофе, с вашего отдельного аккаунта отправьте сообщение в Твиттер. Если в сообщении есть слово #driptwit, кофеварка запустится, а если в нём #driptwitstop или что-то другое, кофеварка выключится. Как только кофе будет готов, снова отправьте сообщение, чтобы выключить устройство, — и насладитесь чашкой горячего твит-кофе.

11. И последнее

Этот проект будет работать с любым устройством переменного тока, которым захочется управлять дистанционно. Включать свет или открывать ворота по тому же принципу — не проблема. Значительным улучшением проекта была бы интеграция с кабельным интернетом, чтобы не занимать отдельный компьютер. Особую благодарность хочу выразить команде разработчиков python-twitter, без них проект оказался бы намного сложнее.

Конечно, кофе ассоциируется прежде всего с Java, курс по разработке на котором у нас тоже есть, но если вы хотите чувствовать себя ближе к железу, управлять им, писать производительный код, то вы можете обратить внимание на наш курс по разработке на C++, если же нравится лаконичный Python, то присмотритесь к программе курса Fullstack-разработчик на Python. А за кружкой кофе можно заниматься аналитикой данных или узнать, как начать карьеру или прокачаться в других направлениях:

 Python, веб-разработка

Data Science и Machine Learning

 Мобильная разработка

 Java и C#

 От основ — в глубину

 А также:

Комментарии (9)


  1. Amor-roma
    31.07.2021 18:33

    Так вот чему у вас в школе учат))


  1. iliasam
    31.07.2021 18:40

    А не проще wifi розетку использовать?


  1. Knkplua
    31.07.2021 20:41
    +1

    Розетка или реле на ESP8266 будет и проще, и дешевле, и эстетичнее. Это скорее пример того, что сделать можно, но не нужно.


  1. ABy
    31.07.2021 21:33

    Забавно то, что благодаря интеграции почти во все, Твиттер стало удобно использовать тех для вещей, для которых он не предназначен от слова "совсем".


  1. AlexTheLost
    01.08.2021 01:18

    Жесть, куда идет хабр?

    12 бессмысленных картинок кофемашины, и копипаст примитивного кода по переключению реле. Все для того что бы потом вставить в конце кучу рекламных ссылок.

    На мой взгляд или хабр начнет с этим бороться постепенно блокируя аккаунты этих мусорок или скатится. 2/3 статей это бездушный копипаст или статьи который не имеют никакого инженерного смысла - написанные только ради размещения в них рекламных ссылок.


    1. in_heb
      01.08.2021 15:43

      Хабр это площадка для почти бесплатных объявлений (переводы вообще копейки стоят у фрилансеров)


  1. agmt
    01.08.2021 07:18

    Как я понимаю, совместимости с datatracker.ietf.org/doc/html/rfc7168 нет?


  1. avs24rus
    02.08.2021 11:25

    Абсолютно бесполезное устройство, на мой взгляд.

    Свежую воду в емкость зальете и СВЕЖЕМОЛОТЫЙ кофе в фильтр насыпите, вы тоже через Твиттер? А иначе вся затея с "удаленным управлением" - полная фигня.


  1. Kenya
    03.08.2021 13:13

    Извините, но разогревает за счет горения попцов всяких твиттерских активистов?)