Raspberry pi 3B+を買いました。 その2

前回の続きです。
今回は Raspberry pi 3B+上で、Node.js を動作させます。

目次

ログイン

前回Raspberry pi 3B+を買いました。にあるように、
SSH でラズパイにログインします。

アップデート

sudo apt-get updateを実行して、パッケージリストを更新

sudo apt-get upgradeを実行して、インストール済みパッケージを更新
応答確認されたらyで答えましょう。

node.js のインストール

sudo apt-get install -y node.jsを実行

node -vを実行
バージョンが表示されれば OK です。
私は v8.11.1 がインストールされました。

npm も入れておきましょう
sudo apt-get install -y npmを実行

npm -vを実行
こちらもバージョンが表示されれば OK です。
1.4.21 がインストールされました。

パッケージマネージャを利用した Node.js のインストールいわく

1
2
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

でインストールしてくださいと書いてある。
これでやらないと古いバージョンの npm がインストールされるので、あとでだいぶ苦労した。
node -vを実行
v10.10.0 がインストールされたことが確認できる。

npm -vを実行
6.4.1 がインストールされました。
sudo apt-get install -y npmでインストールすると 1.4.21 がインストールされるので
雲泥の差になる。

実行

動作確認なので、とりあえず Hello World します。

hello.js として以下を保存しましょう

1
2
console.log('Hello World!')

node Hello.jsを実行します。
Hello World! が表示されれば OK です。

ここからは js の開発になります。
gpio を使うのはまた今度にします。

とりあえず音を鳴らしてみるだけなら、圧電ブザーがなくてもできます。
標準の音声ジャックから音を鳴らしてみましょう。

音を鳴らそう

ラズパイの/usr/share/sounds/alsa/ディレクトリには、wav ファイルがいくつか入っています。
Noise.wav以外は女性の声のデータです。

Noise.wavを再生するには、
aplay /usr/share/sounds/alsa/Noise.wavを実行します。
イヤホンジャックに、スピーカを指しておくことをお忘れなく。
ザーって音が聞こえたと思います。

音をもっと鳴らそう

Noise.wavは 1 秒くらいの音声データで、いまいち動かした感じがしません。
Node.js を使用して、一定間隔で鳴らすものを作ってみましょう。

Soundrepeat.js として以下を作成してみましょう。

1
2
3
4
5
6
7
8
9
const cp = require(`child_process`)

//音声再生を関数として定義
const sound = ()=>{cp.execSync('aplay /usr/share/sounds/alsa/Noise.wav')}

//繰り返し再生
for(let i=0;i<10;i++){
sound()
}

連続して音声再生されたと思います。
しかし、これはただの連続再生。インターバルがあるわけではない・・・。
以下のように書き換えます。

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
const cp = require('child_process')

//音声再生を関数として定義
const sound = ()=>{cp.execSync('aplay /usr/share/sounds/alsa/Noise.wav')}

//待機処理関数を定義
function wait (time){
return new Promise((resolve,reject) => {
console.log(`${time}ミリ秒待機`);
setTimeout(() => {
resolve('timeout!');
},time)}
)
}

//繰り返し再生を実行を関数定義
const soundrepeat = async (times) => {
//繰り返し再生
for( let time of times ){
sound();
await wait(time);
}
}

//繰り返し再生を実行、引数は待機時間(ms)の配列
soundrepeat([1000,2000,3000,4500,5000])

どうでしょうか?
これで、1,2,3,4.5,5 秒と待機して、再生を繰り返すようになったはずです。

次回

次こそは GPIO を使って、L チカ(LED チカチカ)をしてみます。

ではでは。