Author Archives: Hong Chen

RPi:カメラの利用

Published by:

USBカメラの利用

USBカメラ挿入、dmesgコマンドで、次のメッセージが追加されていることを確認。
[ 3290.950364] usb 1-1.5: new high-speed USB device number 5 using dwc_otg
[ 3291.100866] usb 1-1.5: New USB device found, idVendor=056e, idProduct=7009, bcdDevice= 1.00
[ 3291.100880] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3291.100889] usb 1-1.5: Product: UCAM-DLD200BA
[ 3291.100899] usb 1-1.5: Manufacturer: Novatek
[ 3291.175879] uvcvideo: Found UVC 1.00 device UCAM-DLD200BA (056e:7009)
[ 3291.241082] uvcvideo 1-1.5:1.0: Entity type for entity Extension 5 was not initialized!
[ 3291.241098] uvcvideo 1-1.5:1.0: Entity type for entity Processing 4 was not initialized!
[ 3291.241110] uvcvideo 1-1.5:1.0: Entity type for entity Selector 3 was not initialized!
[ 3291.241121] uvcvideo 1-1.5:1.0: Entity type for entity Camera 1 was not initialized!
[ 3291.241519] input: UCAM-DLD200BA: UCAM-DLD200BA as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/input/input6
[ 3291.241912] usbcore: registered new interface driver uvcvideo
[ 3291.241918] USB Video Class driver (1.1.1)
[ 3291.321345] usbcore: registered new interface driver snd-usb-audio
(env) pi@donkeypi3chen02:~ $

USB デバイス一覧からも確認

pi@raspberrypi:~ $ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 008: ID 056e:7009 Elecom Co., Ltd
Bus 001 Device 003: ID 046d:c534 Logitech, Inc. Unifying Receiver
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:~ $

デバイスのリストからも確認

(env) pi@donkeypi3chen02:~ $ ls /dev/video*
/dev/video0  /dev/video1  /dev/video10  /dev/video11  /dev/video12

ソフトでカメラの確認

guvcview

カメラの確認するソフトは色々ありますが、今回はguvcviewを使用してみました。

pi@raspberrypi:~ $ sudo apt-get install guvcview

VNCから、Piに接続し、メニューのからguvcviewを探して、起動してみてください。
起動するとエラーで何も表示しないからあせったが、再起動したら、見れるようになった。

fswebcam

raspberrypi公式サイトでは、fswebcamを利用している
pi@raspberrypi:~/hello_ghome $ sudo apt install fswebcam
pi@raspberrypi:~ $ cd Pictures/
こちらも
pi@raspberrypi:~/Pictures $ fswebcam image.jpg
— Opening /dev/video0…
Trying source module v4l2…
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384×288 to 352×288.
— Capturing frame…
Captured frame in 0.00 seconds.
— Processing captured image…
Writing JPEG image to ‘image.jpg’.
pi@raspberrypi:~/Pictures $

公式内蔵カメラの利用

続く

参考

  • https://www.raspberrypi.org/documentation/usage/webcams/
  • https://uepon.hatenadiary.com/entry/2017/01/22/170349 ーー RaspberryPiでUSB接続のWebカメラを使ってみる

RPi : AI Basic setup

Published by:

Raspberry Pi基本のセットアップ

Raspberry Pi基本のセットアップについて、Linux & Raspberry Piを参照してください。

次は機械学習に必要なセットアップ手順;

  • 「Hostname」に好きなホスト名
  • Change Passwordからパスワード変更
  • 「SSH」の「Enable」
  • 「Camera」の「Enable」
  • 「Set Locale」の「Japan」
  • 「Set Timezone」は「Japan」
  • 「Keyboard」は「Japanese」

OKをクリックすると「再起動」

次は、システムを最新状態に更新

 

1 sudo apt update
2 sudo apt upgrade

固定IPに

 

リモート作業がメインになるので、IPアドレスしょっちゅう変えじゃうと困りますね。

IPアドレスを固定することができる。まず現在のIPを調べる。

$ ifconfig

 

そのIP範囲に固定のIPアドレスを設定。

$ sudo vi /etc/dhcpcd.conf

interface wlan0
static ip_address=192.168.0.70/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

RPi : Install Python

Published by:

既存Pythonの確認

最新版の「Raspberry Pi OS」でSDを作成した場合、比較的に新しいバージョンのPythonがすでにインストールしている場合がある。

pi@raspberrypi:~ $ python -V
Python 2.7.16
pi@raspberrypi:~ $ python3 -V
Python 3.7.3
pi@raspberrypi:~ $ pip -V
pip 18.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7)
pi@raspberrypi:~ $ pip3 -V
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
pi@raspberrypi:~ $

 

 

インストール

使いのSDに、Pythonがインストールしていない場合、次のコマンドでインストールしてください。

cd /home
sudo apt-get update
sudo apt-get install python-pip python-dev build-essential

関連記事

  • http://ups.edu2web.com/2018/11/13/pi-machine-learning-1-setup/
  • http://ups.edu2web.com/2018/10/21/scikit-learn1-install/
  • https://digilib.edu2web.com/2017/05/19/raspberry-pi-6-nokia-5110-lcd/
  • https://digilib.edu2web.com/2018/09/18/raspberry-pi-9-waveshare-2-13inch-e-paper-hat/

 

2.7 Pi RealVNC

Published by:

Raspberry Pi に毎回 HDMI・キーボ・マウスをつなぐのが面倒、SSHはまた慣れてない、MacとかからGUIで触れるようにしたい。その場合RealVNCを利用という選択肢があります。

Raspbian OSにはVNCサーバ(RealVNC)が組み込まれていますが、既定では無効になっています。

VNCを有効にする

これを有効化すればVNCクライアントから接続できるようになります。

Raspberry Pi を起動してデスクトップ画面が表示されたら、メニューバー左端のラズベリーアイコンをクリックします。
表示されたプルダウンメニューから [設定]-[Raspberry Piの設定]をクリックします。

「Raspberry Piの設定」画面で「インタフェース」タブをクリックし、[VNC]の「有効」を選択してから[OK]ボタンをクリックします。

VNCビューアのインストール

RealVNCと互換性のあるVNCクライアントアプリを用意してください。

(macOSの場合、VNCクライアントなくでも、Finderから利用できます。)

Download VNC Viewer to the device

使用しているPCがMacの場合は、上記サイトを開いてから [macOS] アイコンをクリックしてください。
その後、画面中央の [DOWNLOAD VNC VIEWER]をクリックしてインストールイメージ(dmgファイル)をダウンロードします。

MacのFinderからVNCで接続するには
  1. 起動方法は簡単です。 Finderを起動して、メニューバーの「移動」ー「サーバへ接続」を選択します。 …
  2. サーバアドレスには「vpn://220.99.0.xx:ポート番号」の書式で入力します。 …
  3. 認証画面が表示されますので、VNCサーバで指定しているパスワードを入力します。

VNCビューアの起動

インストールされた「VNC Viewer」を起動します。
初期起動画面が表示されるので、そのまま[GOT IT]ボタンをクリックします。

ビューア画面が表示されたら、アドレス入力欄に Raspberry Pi のIPアドレスを入力して [enter]キーを押下します。

ログインユーザ名とパスワードを入力して [OK]ボタンをクリックします。

 

RPi : 機械学習 (1)

Published by:

Raspberry Pi を利用した機械学習について試す。

OpenCV、TensorFlow、Kerasをインストール

3 wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.0-20180115.1_armhf.deb
4 sudo apt install -y ./libopencv3_3.4.0-20180115.1_armhf.deb
5 sudo ldconfig
6 pip3 install numpy==1.13
7 sudo apt-get install libblas-dev liblapack-dev python3-dev libatlas-base-dev gfortran python3-setuptools
8 sudo pip3 install https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.8.0/tensorflow-1.8.0-cp35-none-linux_armv7l.whl
10 sudo apt-get install python3-h5py
11 sudo pip3 install keras==2.1.6

画像判別サンプル

12 git clone https://github.com/karaage0703/keras-pi
13 cd keras-pi

テスト用のカメラ画像を用いて判別(1)

14 python3 pred.py -l ./model/labels.txt -m ./model/mnist_deep_model.json -w ./model/weights.99.hdf5 -t ./data/test.jpg

次のエラーで撃沈

RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb

テスト用のカメラ画像を用いて判別(2)

numpyをアップデートして、再度試す。

15 python3 -c “import jupyter, matplotlib, numpy, scipy, sklearn
16 pip install -U numpy
17 python3 pred.py -l ./model/labels.txt -m ./model/mnist_deep_model.json -w ./model/weights.99.hdf5 -t ./data/test.jpg

同じエラーで撃沈

RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb

では、keras==2.1.6にしたら、どうでしょうか?

23 sudo pip3 install keras==2.1.6

結果は同じエラー。

テスト用のカメラ画像を用いて判別(3)

pi@raspberrypi:~ $
pi@raspberrypi:~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import keras
Using TensorFlow backend.
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “/usr/local/lib/python3.5/dist-packages/keras/__init__.py”,
line 3, in <module>
from . import utils
File “/usr/local/lib/python3.5/dist-packages/keras/utils/__init__.py”,
line 25, in <module>
from .multi_gpu_utils import multi_gpu_model
File “/usr/local/lib/python3.5/dist-packages/keras/utils/multi_gpu_utils.py”,
line 7, in <module>
from ..layers.merge import concatenate
File “/usr/local/lib/python3.5/dist-packages/keras/layers/__init__.py”,
line 4, in <module>
from ..engine import Layer
File “/usr/local/lib/python3.5/dist-packages/keras/engine/__init__.py”,
line 8, in <module>
from .training import Model
File “/usr/local/lib/python3.5/dist-packages/keras/engine/training.py”,
line 11, in <module>
from scipy.sparse import issparse
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/__init__.py”,
line 229, in <module>
from .csr import *
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/csr.py”,
line 15, in <module>
from ._sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \
ImportError: numpy.core.multiarray failed to import
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>>
pi@raspberrypi:~ $ sudo pip3 install keras==2.1.6
Requirement already satisfied: keras==2.1.6 in
/usr/local/lib/python3.5/dist-packages
Requirement already satisfied: pyyaml in
/usr/local/lib/python3.5/dist-packages (from keras==2.1.6)
Requirement already satisfied: scipy>=0.14 in
/usr/local/lib/python3.5/dist-packages (from keras==2.1.6)
Requirement already satisfied: numpy>=1.9.1 in
/usr/local/lib/python3.5/dist-packages (from keras==2.1.6)
Requirement already satisfied: six>=1.9.0 in
/usr/lib/python3/dist-packages (from keras==2.1.6)
Requirement already satisfied: h5py in /usr/lib/python3/dist-packages
(from keras==2.1.6)
pi@raspberrypi:~ $

すでにインストールされている。結果は同じ。

テスト用のカメラ画像を用いて判別(4)

numpy==1.13にしたら、どうでしょうか?

pi@raspberrypi:~ $ sudo pip3 install numpy==1.13
Collecting numpy==1.13
Downloading https://www.piwheels.org/simple/numpy/numpy-1.13.0-cp35-cp35m-linux_armv7l.whl (6.1MB)
100% |████████████████████████████████| 6.1MB 23kB/s
Installing collected packages: numpy
Found existing installation: numpy 1.15.4
Uninstalling numpy-1.15.4:
Successfully uninstalled numpy-1.15.4
Successfully installed numpy-1.13.0
pi@raspberrypi:~ $ cd keras-pi
pi@raspberrypi:~/keras-pi $ python3 pred.py -l ./model/labels.txt -m ./model/mnist_deep_model.json -w ./model/weights.99.hdf5 -t ./data/test.jpg
Using TensorFlow backend.
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
Traceback (most recent call last):
File “pred.py”, line 6, in <module>
from keras.preprocessing.image import array_to_img, img_to_array, load_img
File “/usr/local/lib/python3.5/dist-packages/keras/__init__.py”, line 3, in <module>
from . import utils
File “/usr/local/lib/python3.5/dist-packages/keras/utils/__init__.py”, line 25, in <module>
from .multi_gpu_utils import multi_gpu_model
File “/usr/local/lib/python3.5/dist-packages/keras/utils/multi_gpu_utils.py”, line 7, in <module>
from ..layers.merge import concatenate
File “/usr/local/lib/python3.5/dist-packages/keras/layers/__init__.py”, line 4, in <module>
from ..engine import Layer
File “/usr/local/lib/python3.5/dist-packages/keras/engine/__init__.py”, line 8, in <module>
from .training import Model
File “/usr/local/lib/python3.5/dist-packages/keras/engine/training.py”, line 11, in <module>
from scipy.sparse import issparse
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/__init__.py”, line 229, in <module>
from .csr import *
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/csr.py”, line 15, in <module>
from ._sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \
ImportError: numpy.core.multiarray failed to import
pi@raspberrypi:~/keras-pi $

結果も同じだ!

 

scikit-learn(2) 線形サポートベクトルマシン

Published by:

下記のBB本の続きだが、

カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで

Google Colaboratory環境は、Piとほぼ同じとわかったので、これからの実験はGoogle Colaboratoryで行う。

線形サポートベクトルマシンのコードがよくわからないので、そのままコピペ

# -*- coding: utf-8 -*-
from sklearn import datasets, svm
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# アヤメのデータをロードし、変数irisに格納
iris = datasets.load_iris()

# 特徴量のセットを変数Xに、ターゲットを変数yに格納
X = iris.data
y = iris.target

# 特徴量を外花被片の長さ(sepal length)と幅(sepal width)の
# 2つのみに制限(2次元で考えるため)
X = X[:,:2]

# ターゲットは2 (iris virginica) でないもの, 
# つまり iris setosa (0) と iris versicolor (1) のみを対象とする
# (領域の2分割)
X = X[y!=2]
y = y[y!=2]

# 分類用にサポートベクトルマシン (Support Vector Classifier) を用意
clf = svm.SVC(C=1.0, kernel='linear')
# データに最適化
clf.fit(X, y)

##### 分類結果を背景の色分けにより表示

# 外花被片の長さ(sepal length)と幅(sepal width)の
# 最小値と最大値からそれぞれ1ずつ広げた領域を
# グラフ表示エリアとする
x_min = min(X[:,0]) - 1
x_max = max(X[:,0]) + 1
y_min = min(X[:,1]) - 1
y_max = max(X[:,1]) + 1

# グラフ表示エリアを縦横500ずつのグリッドに区切る
# (分類クラスに応じて背景に色を塗るため)
XX, YY = np.mgrid[x_min:x_max:500j, y_min:y_max:500j]

# グリッドの点をscikit-learn用の入力に並べなおす
Xg = np.c_[XX.ravel(), YY.ravel()]

# 各グリッドの点が属するクラス(0か1)の予測をZに格納
Z = clf.predict(Xg)

# Zをグリッド上に並べなおす
Z = Z.reshape(XX.shape)

# クラス0 (iris setosa) が薄オレンジ (1, 0.93, 0.5, 1)
# クラス1 (iris versicolor) が薄青 (0.5, 1, 1, 1)
cmap01 = ListedColormap([(0.5, 1, 1, 1), (1, 0.93, 0.5, 1)])

# 背景の色を表示
plt.pcolormesh(XX, YY, Z==0, cmap=cmap01)

# 軸ラベルを設定
plt.xlabel('sepal length')
plt.ylabel('sepal width')

##### ターゲットに応じた色付きでデータ点を表示

# iris setosa (y=0) のデータのみを取り出す
Xc0 = X[y==0]
# iris versicolor (y=1) のデータのみを取り出す
Xc1 = X[y==1]

# iris setosa のデータXc0をプロット
plt.scatter(Xc0[:,0], Xc0[:,1], c='#E69F00', linewidths=0.5, edgecolors='black')
# iris versicolor のデータXc1をプロット
plt.scatter(Xc1[:,0], Xc1[:,1], c='#56B4E9', linewidths=0.5, edgecolors='black')

# サポートベクトルを取得
SV = clf.support_vectors_
# サポートベクトルの点に対し、赤い枠線を表示
plt.scatter(SV[:,0], SV[:,1], c=(0,0,0,0), linewidths=1.0, edgecolors='red')

# 描画したグラフを表示
plt.show()

結果の出力

scikit-learn(1) Install

Published by:

機械学習入門に、環境構築は手間がとるので、下記の本を参考に、Raspberry Piではじめる。

【カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで】

 

カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで (ブルーバックス)

新品価格
¥1,760から
(2020/7/17 13:56時点)

scikit-learn のインストール

分類や予測のためのモデルが詰まった機械学習用パッケージです。
Pythonでのデータ分析ではほぼデファクトと言っても良い地位を得ています。

$ sudo apt update

$ sudo apt install python-sklearn

 

機械学習関連バージョン確認

プログラムは、下記の書籍付録サイトからダウンロードしてください。

http://bluebacks.kodansha.co.jp/special/ml.html

次のコマンドを実行する

$ python ml-03-01-version.py

Raspberry Pi3の結果

???

 

Ubuntu 16.04環境下の出力、Piより古いとわかった。

# python ml-03-01-version.py
scikit-learnのバージョンは0.17です
numpyのバージョンは1.11.0です
scipyのバージョンは0.17.0です
matplotlibのバージョンは1.5.1です
PIL(Pillow)のバージョンは3.1.2です
kerasがインストールされていないか、まだ設定が済んでいません
theanoはインストールされていません
root@jupiter:~/mlbb# ^C
root@jupiter:~/mlbb#

Google Colaboratory環境下の出力、Piより新しいとわかった。

Using TensorFlow backend.
scikit-learnのバージョンは0.19.2です
numpyのバージョンは1.14.6です
scipyのバージョンは0.19.1です
matplotlibのバージョンは2.1.2です
PIL(Pillow)のバージョンは4.0.0です
kerasのバージョンは2.1.6です
theanoのバージョンは1.0.3です

 

参考

 

4.9 Pi e-Paper HAT

Published by:

経緯

低消耗電力、停電でも表示する e-Paperが興味があり、そのRaspberry Pi HATを手に入れた。

ハードウェア

このRaspberry Pi Waveshare 2.13inch e-Paper HATは、Raspberry Pi 2/3/Zero対応する。

ソフトウェア

wiringpiのインストール

root@raspberrypizero004:/home/pi# pip3 search wiringpi
wiringpi (2.46.0) – A python interface to WiringPi 2.0 library which allows for easily
interfacing with the GPIO pins of the Raspberry Pi. Also supports i2c and
SPI.
wiringpi2 (2.32.3) – A python interface to WiringPi 2.0 library which allows for easily
interfacing with the GPIO pins of the Raspberry Pi. Also supports i2c
and SPI
root@raspberrypizero004:/home/pi# pip3 install wiringpi
root@raspberrypizero004:/home/pi# gpio -v
gpio version: 2.46
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
動作確認する
Raspberry Pi Details:
Type: Pi Zero-W, Revision: 01, Memory: 512MB, Maker: Sony
* Device tree is enabled.
*–> Raspberry Pi Zero W Rev 1.1
* This Raspberry Pi supports user-level GPIO access.
root@raspberrypizero004:/home/pi#

Python関連のインストール

28 sudo apt-get install python-dev
29 sudo apt install python-rpi.gpio
30 sudo apt install python-smbus
31 sudo apt install python-serial
32 sudo apt install python-spidev
33 sudo apt install python-imaging
34 sudo raspi-config
35 sudo vi /etc/modules
下記の2行を追加する
i2c-bcm2708
i2c-dev

検証

demo codeのダウンロードと解凍
36 wget https://www.waveshare.com/w/upload/3/3f/2.13inch-e-paper-hat-b-code.7z
39 sudo apt install p7zip-full
62 mkdir 2.13inch-e-paper-hat-b-code
63 cd 2.13inch-e-paper-hat-b-code/
64 7z x ../2.13inch-e-paper-hat-b-code.7z
65 ls

pythonで試す

66 python raspberrypi/python/main.py
71 cd raspberrypi/
73 cd python/
75 python main.py

wiringpiで試す

76 cd ..
79 cd wiringpi/
81 make
85 ./epd

 

参考

  1. http://www.waveshare.net/wiki/2.13inch_e-Paper_HAT_(B)
  2. https://relativelayout.hatenablog.com/entry/2018/02/17/234348 — Waveshare 2.13inch e-Paper HAT (B)を買って3色電子ペーパーを楽しむ(環境構築編)

2.6 Pi USB to PC (2)

Published by:

USB を通して、 PCに接続する 2nd実験。

USBアダプターの購入

RaspberryのUSB Connector Expansion Boardが安く売っているので、導入することに。

「ラズパイzero w usb」の画像検索結果

接続実験

SB を通して、 PCに接続する 実験は、以前できたことで、ハードウェア繋ぐだけで動くはずだが、苦労した。

ラズパイZeroまたはZero WをUSBケーブル1本でPCやMacに接続する方法は、いつの間にうまくいかなくなった。

つまり、ssh pi@raspberrypi.local がうまく繋がらない。

4.8 Pi Nokia 5110 LCD2

Published by:

一年前にNokia 5110 LCDの表示が出来たが、今回はそれをRaspberry Pi に組み込み、されにボタンを追加する。

ボタンは短押し検知すると、LCDのバックライトのon/offで、さらに長押しすると、Raspberry Piシャットダウン機能も持たせる。

GPIOへのスイッチオン・オフ検知回路。

sw1

Pythonプログラム

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import os

# LEDのGPIOピンの番号、センサーのGPIOピンの番号
let_pin = 18
sw1_pin = 16
sleeptime = 1
led_01 = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup(sw1_pin, GPIO.IN)
GPIO.setup(let_pin, GPIO.OUT)
GPIO.output(let_pin, GPIO.LOW)
def switch_detected(sw1_pin):
  global led_01
  led_01 = 1 - led_01
  if led_01 == 1:
    # 点灯
    GPIO.output(let_pin, GPIO.HIGH)
  else:
    # 消灯
    GPIO.output(let_pin, GPIO.LOW)

  sw_counter = 0
  while True:
      sw_status = GPIO.input(sw1_pin)
      if sw_status == 0:
          sw_counter = sw_counter + 1
          if sw_counter >= 50:
              print("長押し検知!")
              os.system("sudo shutdown -h now")
              break
      else:
          print("短押し検知")
          break

      time.sleep(0.01)
  time.sleep(sleeptime)

# コールバック登録
GPIO.add_event_detect(sw1_pin, GPIO.FALLING, callback=switch_detected)
try:
  print "ctrl+c  :  if you want to stop app"
  print "App Start"
  while True:
    time.sleep(sleeptime)
except KeyboardInterrupt:
  print "Quit"
finally:
  print "clean up"
  GPIO.cleanup()

これを起動時自動的に作動する必要がある。

参考:

  • https://qiita.com/clses/items/e701c1cb6490751a6040 – ラズパイでシャットダウンボタンを付ける(ついでに起動ボタン)