Raspberry PiとNode.jsでWebからGPIO操作

Control your Raspberry PI GPIO in Real Time via the Browser using NodeJS, Socket.IO and pi-gpio – Grosan Flaviu Gheorghe

jsからRaspiのGPIOを操作する

jsGPIO を使う。

github.com

READMEにある通り準備をする。

Node.jsのインストール

よしなに。

quick2wire-gpio-admin のインストール

github.com

これもREADME通りに入れればいいが、少し説明が古いので追記。

make
sudo make install

gpioグループを追加する。
サンプルではsudo adduser $USER gpioとなっているが動かなかったので、usermodで。

sudo usermod -aG gpio $USER

debian系であるraspbianならadduser使えるはずなんですけどね。
Linuxでユーザーをグループに追加する - Qiita

次に22pinを例に以下のような操作があるものの、Permission Deniedばかりで全然うまくいかない。

% gpio-admin export 22
% cat /sys/devices/virtual/gpio/gpio22/value
0
% echo out > /sys/devices/virtual/gpio/gpio22/direction
% echo 1 > /sys/devices/virtual/gpio/gpio22/value

gpioのパスが変わってるんだそうな。 プルリクは飛んでるのにマージされてないらしい。

github.com

ということでプルリクの通りに src/gpio-admin.cを直す。28行目くらい。

static void allow_access_by_user(unsigned int pin, const char *filename) {
  struct stat info;
  char *sys_path = "/sys/class/gpio/gpio%u/%s";
  if (stat("/sys/class/gpio", &info) != 0)
    sys_path = "/sys/devices/virtual/gpio/gpio%u/%s";

  char path[PATH_MAX];
  int size = snprintf(path, PATH_MAX, sys_path, pin, filename);

これで % gpio-admin export 22 が叩けるようになる。


あとは

npm start

なり、

nodejs example-server.js

なりを実行。localhost:8000で動作を確認。

忘備録

テストしまくってたらポートが被ってnode.jsが起動しなかった qiita.com