WebIOPiをRaspbian Busterで動かす
知人がWebIOPiをRaspbian Busterで動かそうとして、Raspbian Stretch では動いたが、Raspbian Busterだと動かないと言っていたので、 興味本位でデバッグしてみた。
私はこれを使おうと思ってないので、「鳴かぬなら鳴かせてみせようホトトギス」なだけなので、詳しい使い方とかは調べてません。
そもそものインストール手順は、
WebIOPi のインストール
開発が終了したWebIOPiを最新のRaspbianで動作させよう。
あたりを参考にしてちょ。
で、まぁ結論から言うと、根本原因は、BusterのPython3がPython3.7にバージョンアップされたこと。
ちなみに、StretchのPython3はPython3.5 。
python/webiopi/utils/thread.py
内の 関数 runLoop()
の中でasync
を変数に使っていたため、SyntaxErrorが発生していた模様。
Pythom3.7では(正確にはPython3.6から)async
は予約語になっているため、エラーとなっていた。
で、変数名をasync
からそれ以外(例えばasync_Flag
)に変更すれば良い。
修正内容のpatchファイルがこちら。
ついでにCプログラムのコンパイルの際に出るワーニングも消すようにちょこっと修正しときました。(こっちの修正は、かなりヤッツケ…)
diff -upr WebIOPi-0.7.1.old/python/native/cpuinfo.c WebIOPi-0.7.1/python/native/cpuinfo.c
--- WebIOPi-0.7.1.old/python/native/cpuinfo.c 2019-09-03 00:04:59.959369913 +0900
+++ WebIOPi-0.7.1/python/native/cpuinfo.c 2019-09-02 23:55:16.207501342 +0900
@@ -35,7 +35,8 @@ char *get_cpuinfo_revision(char *revisio
return 0;
while(!feof(fp)) {
- fgets(buffer, sizeof(buffer) , fp);
+ char* aaa = fgets(buffer, sizeof(buffer) , fp);
+ aaa = aaa;
sscanf(buffer, "Hardware : %s", hardware);
if (strcmp(hardware, "BCM2708") == 0)
rpi_found = 1;
diff -upr WebIOPi-0.7.1.old/python/native/gpio.c WebIOPi-0.7.1/python/native/gpio.c
--- WebIOPi-0.7.1.old/python/native/gpio.c 2019-09-03 00:04:59.969368480 +0900
+++ WebIOPi-0.7.1/python/native/gpio.c 2019-09-02 23:58:58.757767098 +0900
@@ -23,6 +23,7 @@ SOFTWARE.
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
+#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/mman.h>
diff -upr WebIOPi-0.7.1.old/python/webiopi/utils/thread.py WebIOPi-0.7.1/python/webiopi/utils/thread.py
--- WebIOPi-0.7.1.old/python/webiopi/utils/thread.py 2019-09-03 00:04:44.520586361 +0900
+++ WebIOPi-0.7.1/python/webiopi/utils/thread.py 2019-09-02 23:54:10.087479478 +0900
@@ -33,14 +33,14 @@ def stop(signum=0, frame=None):
task.stop()
-def runLoop(func=None, async=False):
+def runLoop(func=None, async_Flag=False):
global RUNNING
RUNNING = True
signal.signal(signal.SIGINT, stop)
signal.signal(signal.SIGTERM, stop)
if func != None:
- if async:
+ if async_Flag:
TASKS.append(Task(func, True))
else:
while RUNNING:
これをwebiopi-buster.patch
として保存し、以下のコマンドを実行する。
patch -p1 -i webiopi-buster.patch
で後はsettup.sh
を実行して、その後は参照ページの通り進めれば良い。