Pi4にWebIOPiをインストールしたよってトラブルシューティング&備忘録
WebIOPiは、Pi上にWEBサーバーを立ててブラウザからGPIOを操作できるってソフト
同じPI上にDHCPサーバーも立てれば、外部AP不要でPiとクライアントだけで完結できるのでは?
0.参考
特に加筆する必要なかったわ
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
状況…変わらず
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
無事動いた(先駆者ありがてぇありがてぇ)
7.次回予告
次回はブラウザ側のコーディングとかする予定
8.参考
この記事が気に入ったらサポートをしてみませんか?