Эта статья расширяет мою предыдущую тему Настройка веб-сервера Raspberry Pi с помощью Node & Express и предполагает, что ваш Raspberry Pi настроен таким или подобным образом.

  • (1) плата Arduino Uno
  • (1) Raspberry Pi (модель B)
  • (1) Красный светодиод
  • (1) Диод
  • (1) МОП-транзистор
  • (1) Резистор 10 кОм
  • (1) резистор 220 Ом
  • Перемычки

Если вы уже завершили процесс настройки Raspberry Pi в качестве веб-сервера, то на самом деле заставить Arduino общаться с внешним миром довольно просто.

Настройка схемы

Прежде всего, нам нужно построить цепь. Ниже я включил рисунок своей схемы, не стесняйтесь изменять или расширять его любым удобным для вас способом. У меня все просто, я питаю двигатель от 9В батареи, чтобы не нагружать плату Arduino. Я также включил простую кнопку, которая позволяет вам запускать двигатель в любое время и гарантировать, что схема по-прежнему работает правильно. Это особенно полезно, когда вы пытаетесь отладить проблему в схеме или в вашем коде.

[Изображение потеряно в песках времени.]

После того, как вы построили свою схему, вы должны проверить ее, нажав кнопку и посмотрев, вращается ли ваш двигатель. Если это так, мы в деле.

Настройка Джонни Пятого

Прежде чем ваш Arduino будет готов начать связь с Raspberry Pi, мы хотим настроить его для использования с Johnny-Five, фреймворком JavaScript Arduino на основе Firmata. Мы будем следовать шагам, перечисленным на странице GitHub, чтобы начать работу с Arduino. Эти шаги:

  • Подключите микроконтроллер, совместимый с Arduino или Arduino, к компьютеру через USB.
  • Откройте среду разработки Arduino.
  • Выберите: Файл › Примеры › Firmata › StandardFirmata
  • Нажмите кнопку «Загрузить»

Если загрузка прошла успешно, плата готова, и вы можете закрыть Arduino IDE. Теперь ваш Arduino готов к запуску кода Johnny-Five. Вам не нужно выполнять этот следующий шаг сейчас, так как мы собираемся снова установить Johnny-Five на свой Raspberry Pi. Чтобы установить Johnny-Five, мы будем использовать NPM:

# If you don't have socket.io installed already,
# you may need to install it.
npm install socket.io

# Then we can go ahead and install Johnny-Five
npm install johnny-five

Тем не менее, вы можете нервничать, отказываясь от Arduino IDE. Не надо, мы будем запускать наши приложения так же, как сейчас запускаем наши обычные приложения Node.js, используя команду терминала node. Но вы можете сами убедиться, и есть очень простой пример здесь. Создайте новый файл app.js, скопируйте исходный код и, когда будете готовы, запустите node app.js в новом файле. Возможно, вы не захотите этого делать, если только что потратили много времени на настройку схемы. Если это так, вы можете отключить Arduino от компьютера прямо сейчас.

Доступ к API Твиттера

Потрясающий.

Теперь мы запускаем JavaScript на нашем Arduino. Пришло время перейти на сайт разработчиков Twitter и создать себе учетную запись. Как только он у вас появится, посетите свои приложения.

[Изображение потеряно в песках времени.]

Выберите приложение, которое вы хотели бы использовать, в моем случае это приложение называется «Feed Albert». Возможно, вам придется сначала создать приложение, чтобы сделать это, идите вперед и сделайте это.

[Изображение потеряно в песках времени.]

Выбрав приложение, вы должны увидеть группу вкладок в верхней части страницы. Мы хотим оставить вкладку Details открытой.

[Изображение потеряно в песках времени.]

Прокрутите страницу вниз, чтобы найти ключ пользователя, секрет пользователя, ключ доступа и секрет доступа. Нам нужно все это для того, чтобы наше приложение работало, поэтому либо запишите их, либо пока оставьте эту информацию открытой на вкладке.

[Изображение потеряно в песках времени.]

Подключение к Raspberry Pi

Теперь, когда у нас есть рабочая схема и наши коды доступа к Twitter API, мы можем начать работу над Raspberry Pi.

Через SSH

В этой части я действительно рекомендую вам прочитать мою предыдущую статью Настройка веб-сервера Raspberry Pi с использованием Node & Express. Он проведет вас через этапы настройки вашего Pi для доступа по SSH либо по беспроводной сети (если у вас есть ключ Wi-Fi для Raspberry Pi), либо по проводному соединению. Это позволяет вам разрабатывать на своем Pi с обычной рабочей станции.

Если вы знаете, как это сделать, или уже настроили Pi для SSH, вы можете пропустить эту статью.

Подключите Raspberry Pi к источнику питания и подождите несколько секунд (около 20), пока он загружается. После загрузки вы сможете подключиться к машине по SSH, используя [email protected], где вы замените XXX на свой IP-адрес. После того, как вы вошли в систему, давайте настроим место, где мы собираемся построить наш проект.

Через клавиатуру и монитор

С подключенными клавиатурой и монитором вы можете просто войти в систему как обычно и начать разработку своего проекта.

Запускаем наш проект

Теперь, когда мы работаем на Raspberry Pi, мы готовы развивать наш проект.

# Create a directory for us to work in...
mkdir twitter-trigger

# Enter the new directory you created...
cd twitter-trigger

# And create a file that we will write our code in..
neildahlke$ touch app.js

# Install
neildahlke$ npm install util && npm install socket-io && npm install johnny-five && npm install twitter-api

Создав файл, вы можете открыть его в выбранном вами редакторе. В этом уроке я буду использовать vi, но вы можете заменить его на nano, emacs и т. д. Откройте файл.

vi app.js

И скопируйте следующее в свой файл. Следите за комментариями.

// Require the libraries we installed
var util = require('util'),
    client = require('twitter-api').createClient();
    j5 = require("johnny-five"),

    // Initialize a Johnny-Five board
    board = new j5.Board(),

    // Set the pins to their corresponding numbers.
    // This assumes you've used the circuit above.
    BTNPIN = 7,
    LEDPIN = 8,
    MOTORPIN = 9,
    ledOn = false;

board.on("ready", function() {

  // Create Johnny-Five instances
  // of all the components we'll be using.
  var led = new j5.Led(LEDPIN),
      motor = new j5.Motor(MOTORPIN),
      btn = new j5.Button(BTNPIN);

  // Bind the motor on start, and set the time
  // the motor will spin.
  motor.on("start", function(err, timestamp) {
    board.wait(2000, function() {
      motor.stop();
    });
  });

  // Bind on the motor stop, log the time.
  motor.on("stop", function( err, timestamp ) {
    console.log("stop", timestamp);
  });

  // Remember those keys we wrote down earlier?
  // This is where you'll need those.
  client.setAuth (
    'CONSUMER_KEY',
    'CONSUMER_SECRET',
    'ACCESS_KEY',
    'ACCESS_SECRET'
  );

  // Set a max number of times we'll let this run.
  var num = 0,
      max = 10;

    // From the Twitter client we can stream in
    // statuses, and filter on them as needed.
    // I filter on "#FeedAl", which is the trigger
    // word to start the motor.

    client.stream('statuses/filter', {
      track: '#FeedAl'
    }, function(json) {

      var tweet = JSON.parse( json );

      if (tweet.text && tweet.user) {

        // @FeedAlbert is the only Twitter account that
        // will work with the trigger hashtag.
        if (tweet.user.screen_name === 'FeedAlbert') {
          led.on();
          motor.start();

          setTimeout(function() {
            led.off();
          }, 4000);

          if(++num === max){
            console.log('----');
            client.abort();
          }
        }
      }

    });

  btn.on("hit", function(){
    led.on();
    motor.start();
  });

  btn.on("release", function(){
    led.off();
  });

});

Как только у нас будет написан код, мы готовы развернуть его на Arduino. Подключите Arduino к вашему Raspberry Pi через USB. Как только вы увидите, что Arduino завершил короткую загрузку, вы готовы запустить свой JavaScript. Бегать:

node app.js

Вы должны увидеть некоторые выходные данные запуска, и тогда вы готовы к работе! Войдите в систему как учетная запись, с которой вы хотите иметь возможность запускать (у меня @FeedAlbert), и попробуйте свое триггерное слово! Как только ваш твит будет успешно отправлен, вы должны увидеть, как ваш двигатель оживает так же, как при нажатии кнопки.

Ура! Вы запускаете свой двигатель по беспроводной сети, используя Twitter, Raspberry Pi и Arduino!

Смело смотрите видеопример и берите себе исходник. Если у вас есть какие-либо вопросы или проблемы, пожалуйста, свяжитесь со мной по адресу @neildahlke.