Help us understand the problem. What is going on with this article?

Node.jsでラズパイに接続したLEDを点灯、消灯させる(Lチカ)

More than 3 years have passed since last update.

とりあえず、HelloWorld的なLチカ(LEDの点灯・消灯)をNode.jsでやってみたのでメモ

参考

環境

  • ラズパイ3
  • LED。順電圧2V〜2.6V、順電流20mA
  • 100Ωの抵抗
  • オスメスのジャンパー線x2

配線などは本やブログなどに色々書かれていると思うのでそちらを参照ください。

bashでLEDのON/OFFをしてみる

GPIO4を使ってON/OFFする場合は以下で実施できることを事前に確認します。
やってることは以下です。

  • GPIO4の仮想ファイル作成
  • 作成されたGPIO4の仮想ファイルにGPIO4は出力信号として利用することを宣言(スイッチなどの入力を受け取る場合には入力信号)
  • GPIO4に1(ON)、0(OFF)の信号を流す
  • GPIO4の仮想ファイルを削除
$sudo su

#最初の状態
$ls -la /sys/class/gpio/
合計 0
drwxrwx---  2 root gpio    0  4月  1 22:17 .
drwxr-xr-x 50 root root    0  4月  2 07:41 ..
-rwxrwx---  1 root gpio 4096  4月  1 22:17 export
lrwxrwxrwx  1 root gpio    0  4月  1 22:17 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
lrwxrwxrwx  1 root gpio    0  4月  1 22:17 gpiochip100 -> ../../devices/platform/soc/soc:virtgpio/gpio/gpiochip100
-rwxrwx---  1 root gpio 4096  4月  1 22:17 unexportを確認

# GPIO4を使うようにする
$echo 4 > /sys/class/gpio/export

# GPIO4の制御ができる仮想ファイルが作成される
$ls -la /sys/class/gpio/
合計 0
drwxrwx---  2 root gpio    0  4月  2 07:44 .
drwxr-xr-x 50 root root    0  4月  2 07:41 ..
-rwxrwx---  1 root gpio 4096  4月  2 07:44 export
lrwxrwxrwx  1 root gpio    0  4月  2 07:44 gpio4 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpio4
lrwxrwxrwx  1 root gpio    0  4月  1 22:17 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
lrwxrwxrwx  1 root gpio    0  4月  1 22:17 gpiochip100 -> ../../devices/platform/soc/soc:virtgpio/gpio/gpiochip100
-rwxrwx---  1 root gpio 4096  4月  1 22:17 unexport

# GPIO4を出力信号として利用することを書き込む
$echo out > /sys/class/gpio/gpio4/direction

# ONさせる
$echo 1 > /sys/class/gpio/gpio4/value

# OFFさせる
$echo 0 > /sys/class/gpio/gpio4/value

# GPIO4の仮想ファイルを削除
$echo 4 > /sys/class/gpio/unexport

# 仮想ファイルが消える
$ls -la /sys/class/gpio/
合計 0
drwxrwx---  2 root gpio    0  4月  2 08:29 .
drwxr-xr-x 50 root root    0  4月  2 07:41 ..
-rwxrwx---  1 root gpio 4096  4月  2 07:44 export
lrwxrwxrwx  1 root gpio    0  4月  1 22:17 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
lrwxrwxrwx  1 root gpio    0  4月  1 22:17 gpiochip100 -> ../../devices/platform/soc/soc:virtgpio/gpio/gpiochip100
-rwxrwx---  1 root gpio 4096  4月  2 08:29 unexportァイルが消える

Nodebewを使ってnodeとnpmをインストールする

Nodeは最初からインストールされていましたが、古いしnpmもないので別途nodeberwを使ってnodeとnpmをインストールします。

$curl -L git.io/nodebrew | perl - setup
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
100 24322  100 24322    0     0   8629      0  0:00:02  0:00:02 --:--:--  8629
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

# export文を追記
$vi ~/.bashrc

# 反映
$source ~/.bashrc

# 確認
$nodebrew help

# stableをインストール
$nodebrew install-binary stable

# デフォルトを設定
$nodebrew alias default v5.10.0

# デフォルトを利用
$nodebrew use default

# 確認
$node -v
v5.10.0

$npm -v
3.8.3

Node.jsを使ってやってみる

sleep処理は以下を使います。なお、こちらはデバッグ用でevent loopを停止させているらしいのでプロダクションとかでこれを使うのはダメっぽいので注意です。

erikdubbelboer/node-sleep

sleepを使うためにインストールします。

$npm install sleep

終わったら以下のようなコードを書いて確認してみます。

led.js
var fs = require('fs');
var sleep = require('sleep');
var pin = 4;

// setup
console.log("setup");
fs.writeFileSync('/sys/class/gpio/export', pin);
fs.writeFileSync('/sys/class/gpio/gpio' + pin + '/direction', 'out');

// on
fs.writeFileSync('/sys/class/gpio/gpio' + pin + '/value', 1);
sleep.sleep(5);

// off
fs.writeFileSync('/sys/class/gpio/gpio' + pin + '/value', 0);

// teardown
console.log("teardown");
fs.writeFileSync('/sys/class/gpio/unexport', pin);

実行してみます。
/sys/class/gpio/gpio4/配下への書き込み権限がpiユーザーはなかったのでsudoで実行しています。

$sudo node led.js

成功すればLEDが5秒間点灯後、消灯できます。

toshihirock
こちらは個人の意見で会社とは関係ありません。お約束です。
http://toshihirock.blogspot.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした