AzureEdge on Raspberry with GPIO
AzureIotでデバイス部分を担当するサービスであり、Dockerが動作するので自分で好きなコードを書き、データをAzureHubに送ることができます。
Iotなのでセンサーのデータを送りたいと思い、まずGPIOでタクトスイッチが押されたときにメッセージを投げるというプログラムを書いてみました。
現象
AzureEdgeのサンプルプログラムを作成しGPIOのコードを組み込んだところ、
wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.
Aborting your program because if it can not access the GPIO
hardware then it most certianly won't work
Try running with sudo?
というエラーが発生しました。
前回この現象が出ていたので、さっそくdeploment.template.jsonにあるcreateOptionsに
"HostConfig": {
"Privileged": true
}
を追加しましたが、エラーは解消せず。
対処
ネットを見回りしていたところこれが発見されました。
みたところDockerfile(ラズパイなのでDockerfile.arm32v7)に
RUN useradd -ms /bin/bash moduleuser
USER moduleuser
がいけないことが判明。これはmoduleuserという一般ユーザを作成し、そのユーザで動作させるといったようです。
この2行をコメントアウトしたら動作しました。
結果
- createOptionsにPrivilegedを記載
- moduleuserを無効にする
AzurwIorサイコー!!