見出し画像

Pi4にWebIOPiをインストールしたよってトラブルシューティング&備忘録

WebIOPiは、Pi上にWEBサーバーを立ててブラウザからGPIOを操作できるってソフト
同じPI上にDHCPサーバーも立てれば、外部AP不要でPiとクライアントだけで完結できるのでは?

0.参考

特に加筆する必要なかったわ

1.うまく動かないぞっ!

画像1

こんな感じでIN/OUTが表示されなかった
SSHでgpio readallすると

$ gpio readall
Oops  ‐  unable to determine board type…  model:  17

とのこと

そういえば、zeroに挿してたSDカードをそのまま使ってるのでWiringPiのアップデートをしていなかったので更新する

2.WiringPiの更新

apt-getで更新できないので、公式の通りに手動更新します。

$ sudo apt-get update
$ sudo apt-get upgrade

$ cd /hoge #任意のディレクトリ
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb
$ sudo dpkg -i wiringpi-latest.deb

$ gpio -v
gpio version: 2.52

バージョンが 2.50 から 2.52 に上がり、Pi4でもgpio readallできるようになりました。

3.WebIOPiの再起動

$ sudo systemctl restart webiopi

状況…変わらず

画像2

4.システムの再起動

Pi自体を再起動します。

$ reboot

変わらず

5.ブラウザを変えてみる

WindowsPC版Chrome, Microsoft Edge, モバイル版Chromeも試したが変化なし

6.同じ症状の先駆者を発見

つまり、セットアップ元のコードにPi4のボード情報を追記する必要があるとのこと

$ nano /WebIOPiをインストールしたディレクトリ/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;
}

保存の後、setup.shを再実行の後、WebIOPiを再起動

$ sudo systemctl stop webiopi
$ sudo  /.../WebIOPi-0.7.1/setup.sh
$ sudo systemctl start webiopi

画像3

無事動いた(先駆者ありがてぇありがてぇ)

7.次回予告

次回はブラウザ側のコーディングとかする予定

8.参考


この記事が気に入ったらサポートをしてみませんか?