Как я научил свою собаку отправлять мне селфи

Перевод статьи How I Taught My Dog to Text Me Selfies, автор – Greg Baugues

Через несколько недель после прибытия нашего щенка, мы научили его включать свет.

Оказывается, Кайра будет делать все, что угодно, если вы можете четко сообщить свои желания и кормить ее с руки. В спальне расположена лампа Икеа, которая активируется при нажатии переключателя в полу. Мы начали обучение путем размещения лапу щенка на коммутаторе, говоря: "Свет" и давая ей лакомство. После того, как она получит его, мы нажимаем на ее лапой и удерживаем, пока не услышим щелчок. В конце концов, мы могли сказать, "Свет" через всю комнату – и Кайра будет работать снова и выполнять свою работу:

Тогда я начал думать, «У меня есть собака, которая может нажать на кнопку. Что я могу сделать с этим дальше?»

Собачьи селфи

Через пару месяцев после того, как сервис Twilio запустил MMS, я читал пост Ricky Robinette по обучению собаки с Tessel и начал задумываться: мы могли бы научить Каиру снимать и отправлять селфи или нет? Я рад сообщить – да! Благодаря Arduino Yun и большой красной кнопке, ответ "Да!", Вы можете видеть документальное подтверждение в этом коротком видео:

Моя собака отправляет мне селфи

То, что вы видите на видео – жилье Cigar Box. Второй параметр служит в качестве подставки для веб-камеры, которая подключена к Yun. (Мой местный магазин продает стеклотару за $ 2 для крепких и стильных корпусов различного оборудования).

Карта WiFi, включенная в Arduino Yun, содержит два микропроцессора: один делает все контактноей взаимодействие, которое вы, как правило, ассоциируете с Arduino. Второй работает на урезанной версии Linux, OpenWRT, которая может запускать программы на вашем любимом языке сценариев (Python предварительно установлен, но вы можете поставить Ruby или Node). Этот проект включает одну программу, работающую на каждом процессоре. Вместе они составляют менее 60 строк кода.

Сценарий на платформе Arduino прост:

  • ждем нажатия кнопки
  • запускаем команду оболочки для создания фотографии
  • запуск скрипта на Python для загрузки изображение на Dropbox и отправки MMS
#include <Bridge.h>
#include <Process.h>

const int BUTTON = 7;

void setup() {
  pinMode(BUTTON, INPUT);
  Bridge.begin();
}

void loop() {
  if (digitalRead(BUTTON) == HIGH) {
    takePicture(); 
    uploadAndSend(); 
  }
}

void takePicture() {
  Process p;
  p.begin("fswebcam");
  p.addParameter("/mnt/sda1/pic.jpg");
  p.addParameter("-r 640x480");
  p.run();
}

void uploadAndSend() {
  Process p; 
  p.begin("python");
  p.addParameter("/mnt/sda1/arduino/upload-and-send.py");
  p.run();
}

Сценарий Python использует SDK Dropbox и вспомогательную библиотеку Twilio для:

  • загрузки изображения на Dropbox
  • получения общедоступного URL для изображения
  • использования этого адреса для отправки MMS с помощью Twilio
import datetime
import dropbox
from twilio.rest import TwilioRestClient

dropbox_access_token = "YOURDROPBOXTOKEN"
twilio_phone_number = "YOURTWILIOPHONENUMBER"
twilio_account_sid = "YOURTWILIOACCOUNTSID"
twilio_auth_token = "YOURTWILIOAUTHTOKEN"
cellphone = 'YOURCELLPHONE'

timestamp = datetime.datetime.now().strftime("%h-%m-%S")
filename = "kaira-" + timestamp + ".jpg"

f = open("/mnt/sda1/pic.jpg")
dropbox_client = dropbox.client.DropboxClient(dropbox_access_token)
response = dropbox_client.put_file(filename, f)
url = dropbox_client.media(response['path'])['url']

twilio_client = TwilioRestClient(twilio_account_sid, twilio_auth_token)
twilio_client.messages.create(
  to = cellphone,
  from_ = twilio_phone_number,
  body = "Woof.",
  media_url = url)

Если вы хотите немного понятности, как мы сюда попали, мы документировали весь процесс от распаковки Arduino Yun до отправки MMS в этих трех учебных пособиях:

  • Начало работы с Arduino Yun
  • Получение снимка с веб-камеры и загрузка его на Dropbox из Yun
  • Отправка SMS и ММS с вашей Arduino Yun

Вперед!

Что самое интересное для меня в этом проекте – помимо новости о том, что моя собака отправляет селфи – как прост каждый компонент. Кнопка нажатия буквально Второй пример из статьи Massimo Banzi по началу работы с Arduino. Сценарий Python – практически копипаст из Dropbox и Twilio руководств по началу работы.

Взлом оборудования может быть пугающим, если вы никогда не делали это раньше, но помните, что самые впечатляющие хаки часто – это простые строительные блоки. Wifi на включенных устройствах, такие как Arduino Yun, резко снизизил барьер и развязал руки веб-разработчикам.

Скажем, у вас есть вещь, которая могли бы взаимодействовать как с физическим миром и любым веб-API с использованием языка программирования, вы уже знаете. Что вы могли бы сделать с этим? Делитесь своими мыслями!