« Raspberry Pi チャタリング問題 | トップページ | WindowsでのボリュームのUUID取得方法 »

2020年9月 6日 (日)

Raspberry Pi 4 Model でWebIOPiを動かす

WebIOPiをインストールしてみた。

Googleとダウンロード先は見つかるけれども、結構古い。ここが曲者。
Blue Backsのラズパイの教科書ではpatchを当てるよとある。

で、以下を実行。

pi@raspberrypi:~/raspi/WebIOPi-0.7.1 $ wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
--2020-09-06 16:24:16-- https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
raw.githubusercontent.com (raw.githubusercontent.com) をDNSに問いあわせています... 151.101.108.133
raw.githubusercontent.com (raw.githubusercontent.com)|151.101.108.133|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 9308 (9.1K) [text/plain]
`webiopi-pi2bplus.patch' に保存中

webiopi-pi2bplus.patch 100%[=========================================>] 9.09K --.-KB/s 時間 0.004s

2020-09-06 16:24:16 (2.06 MB/s) - `webiopi-pi2bplus.patch' へ保存完了 [9308/9308]

pi@raspberrypi:~/raspi/WebIOPi-0.7.1 $ patch -p1 -i webiopi-pi2bplus.patch
patching file htdocs/webiopi.js
patching file python/native/cpuinfo.c
patching file python/native/gpio.c
patching file python/webiopi/utils/version.py
patching file python/webiopi/protocols/http.py
patching file python/webiopi/utils/thread.py

幾つかのファイルにパッチが当たったようだ。この状態でsetup.shを実行した。
その後、教科書に書いているように以下を実行。

wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service
sudo mv webiopi.service /etc/systemd/system

実際上記を実行していないと、webiopiは起動エラーになった。中身がよくわからないけれども、必須であることは理解した。で、webiopiの起動をおこなう。

$ sudo service webiopi start 

$ sudo systemctl status webiopi を見る限り、正常に起動はしているようだ。しかし、表示がおかしい。各GPIOのIN/OUTが四角い箱の中に表示されない。端子番号をクリックしても反応がない。

 

Webioping

Googleって先人の知恵に学ぼうとしたけれども、パッチを当てる前のファイルに対する処理方法しか見つけることができず、知恵に学ぶことができない。そもそも先人の知恵ではWebIOPiの0.7.1は24ピン対応で40ピン対応になっていないから、そこの部分からの対応処理になっているけれども、パッチは40ピン対応のもので、その部分は対応不要となっているようだ。で、CPUの判別の所に絞ってコードを見てみた。
どうやらハードコーディングされているCPUモデル以外はRevision=NULLになるようだ。以下を叩いてCPUモデルを取り出すと、、、
cat /proc/cpuinfo
BCM2711であることが分かる。Revisionはc03112だ。get_rpi_revision()的には結構すっとんでるRevisionのようだけれども、これってRaspberry Pi 4の4のことかもしれない。ということで、以下にコードを書き換えて setup.shを実行した。

ソースファイル WebIOPi-0.7.1/python/native/cpuinfo.c 

char *get_cpuinfo_revision(char *revision)
{
  FILE *fp;
  char buffer[1024];
  char hardware[1024];
  int rpi_found = 0;

  if ((fp = fopen("/proc/cpuinfo", "r")) == NULL)
    return 0;

  while(!feof(fp)) {
    fgets(buffer, sizeof(buffer) , fp);
    sscanf(buffer, "Hardware : %s", hardware);
    if (strcmp(hardware, "BCM2708") == 0)
      rpi_found = 1;
    else if (strcmp(hardware, "BCM2709") == 0)
      rpi_found = 1;
    else if (strcmp(hardware, "BCM2835") == 0)
      rpi_found = 1;
    else if (strcmp(hardware, "BCM2711") == 0) /* 追加部分 */
      rpi_found = 1;                                            /* 追加部分 */
    sscanf(buffer, "Revision : %s", revision);
  }
  fclose(fp);

  if (!rpi_found)
    revision = NULL;
  return revision;
}

int get_rpi_revision(void)
{
  char revision[1024] = {'\0'};

  if (get_cpuinfo_revision(revision) == NULL)
    return -1;

  if ((strcmp(revision, "0002") == 0) ||
      (strcmp(revision, "1000002") == 0 ) ||
      (strcmp(revision, "0003") == 0) ||
      (strcmp(revision, "1000003") == 0 ))
    return 1;
  else if ((strcmp(revision, "0004") == 0) ||
             (strcmp(revision, "1000004") == 0 ) ||
             (strcmp(revision, "0005") == 0) ||
             (strcmp(revision, "1000005") == 0 ) ||
             (strcmp(revision, "0006") == 0) ||
             (strcmp(revision, "1000006") == 0 ))
    return 2;
  else if ((strcmp(revision, "a01041") == 0) ||
             (strcmp(revision, "a21041") == 0 ))
    return 3;
  else // assume rev 4
    return 4;
}

変更は正解だったようで、WebIOPiは以下を表示してくれた。Pin 22であるGPIO 25に繋がっているLEDもピン番号をクリックすることでON/OFF出来ることを確認。

Webiopiok

まぁ、ハードウエアの状態を操作・表示するアプリな訳だから、ハードウエア・モデルの確認は必須だわな。ということで、分かってしまえば「当たり前だろ」って言われそうな結末とも言える。

なんだかんだで4時間くらいかかったかなぁ。。。。

« Raspberry Pi チャタリング問題 | トップページ | WindowsでのボリュームのUUID取得方法 »

ラズパイ日記」カテゴリの記事

コメント

自分もラズパイ4にwebiopiをインストールしようとしてますが、、 CPU判別をしている書き換えたコード、というのはどのファイルのことなのでしょうか?探しているのですが、見つからなくて、、。

すみません、自己解決しました。
WebIOPi-0.7.1/python/native/cpuinfo.c
ですね。


貴重なコメント、ありがとうございました。
大変遅ればせながら、ソースファイル名を追記いたしました。

まさにこの件で悩んでいたところでした.
すごく参考になりました.

本件で大変悩んでおりましたところ貴重な知見をいただき無事解決することができました。ありがとうございました。

サトルさん
お役に立てとのご連絡をを頂き、うれしい気持ちでいっぱいです。

ブログ更新の励みとなりました。
ありがとうございました。

こんにちは。

私も同じ症状が出て、この記事を見つけ解決できることができました。
ありがとうございます。

たくさん。コメントありがとうございました。お役に立てたようで、マジうれしいです。

コメントを書く

(ウェブ上には掲載しません)

« Raspberry Pi チャタリング問題 | トップページ | WindowsでのボリュームのUUID取得方法 »