raspberry piのgpioを使う

GPIO用のライブラリRPi.GPIOは標準で組み込まれています

  1. Pythonからのアクセス方法

——————————————

# BCM PIN ASSIGN

# ledは23:blue, 24:yellow, 25:red

BLUE = 23

YELLOW =24

RED = 25

# Shut down sw is assigned to 17

SHUTDOWN = 17

def init():

    # initialise Pins

    GPIO.setwarnings(False)

    GPIO.setmode(GPIO.BCM)

    GPIO.setup(BLUE, GPIO.OUT)

    GPIO.setup(YELLOW, GPIO.OUT)

    GPIO.setup(RED, GPIO.OUT)

    GPIO.output(BLUE, True)

    GPIO.output(YELLOW, False)

    GPIO.output(RED, False)

# switchの割り当てとイベント待ち

    GPIO.setup(SHUTDOWN, GPIO.IN)

    GPIO.setup(SHUTDOWN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

    return

def handle_sw_input():

    def switch_callback(gpio_pin):

        print(‘sw was pushed’)

    #

    GPIO.add_event_detect(SHUTDOWN, GPIO.FALLING,bouncetime=250)

    # when the sw was pushed, call the ‘call back routine’ 

    GPIO.add_event_callback(SHUTDOWN, switch_callback) 

    return

 

・イベント待ちのサンプルはこちらから

https://qiita.com/maoutokagura/items/9aef5e23167ce2bc1d10

 

  1. 個別プログラムgpioのインストール

動作確認用が主目的と思いますが

$ sudo su –

# wget https://project-downloads.drogon.net/wiringpi-latest.deb

# dpkg -i wiringpi-latest.deb

# exit

$ gpio -v

gpio version: 2.52

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.

こういう風に設定します。

$ gpio -g mode 23 out ; -g bcmモード指定の意味

$ gpio -g write 23 0 ; 

GPIOのピン指定にはBOARDとBCMあるので紛らわしいのですが、以下BCM指定時のピン名称です。BOARDはその名の通り物理ピン番号指定のようです。

 

admin

Python 3を使う@raspberry pi zero

パッケージの互換とか面倒になって来たので、python3を標準とするように変更。元々のイメージにはpython2とpython3はインストール済みです。

・シンボリックリンクの切り替え

$ cd /usr/bin

$ sudo unlink python

$ sudo ln -s python3 python

でpythonコマンドでpython2.7でなくpython3.7が呼び出されます。この先考えるとpython3の方が確実に便利になる筈。

・mysqlへの接続モジュール追加インストール

python3にしたらpythonスクリプトからはmysqlに接続できなくなって、python3用としてのmysqlcliantをインストール

$ sudo apt-get install python3-dev ; 事前準備でこのドライバー必要と

さらにpython3でpip使えないので、

$ sudo apt install curl ; curl入ってないのでインストール

$ curl “https://bootstrap.pypa.io/get-pip.py” -o “get-pip.py” ; ソースを持ってくる

$ sudo python get-pip.py ; pipインストール

ここまでが準備で、

pipがインストールできたのでmysqlclientをインストール

$ pip install mysqlclient

 

admin

phpからmysqlにアクセス

Mysql使うためのコネクタが必要なので、

$ sudo apt-get -y install php-mysql

インストールするとphpinfoでdriversがenableとなりました。

アクセスの仕方はphp7系はPDO(PHP Data Object)を使うのが標準のようです。読み出し関数はこんな感じで、

——————————————

    function db_read()

{

// データベースへの接続

try {

    $dbh = new PDO(“mysql:host=localhost; dbname=co2; charset=utf8”, “<user name>“, “<pass word>”);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//    echo ‘success’;

} catch (PDOException $e) {

    echo $e->getMessage();

    exit;

}

// DBから読み出して返却

    $stmt = $dbh->query(“SELECT * FROM `pythonco2`”);

    $stmt->execute();

    $results = $stmt->fetchAll();

// connection close

    $dbh = null;

    return $results;

}


 

admin

pythonからmysqlに接続

pythonはデフォルトの2.7を使用しています。実は3系もインストールはされているようでリンク変更すれば3系が使えるようになるようです。

python-devのインストール(mysqlclientインストール前準備だそうです)

$ sudo apt-get install python-dev default-libmysqlclient-dev

mysqlclientのインストール

$ pip install mysqlclient

Pythonからの接続確認(コネクションとテーブル作成してレコード挿入)

DB ‘co2’は事前にコマンドラインで作成、phpと比較するとレガシーな接続方法です

——————————————

import MySQLdb

import datetime

  

if __name__ == “__main__”:

    connector = MySQLdb.connect(host=”localhost”, db=”co2″, user=“<“user name”>, passwd=“<“pass word”>, charset=”utf8″)

    cursor = connector.cursor()

    sql=”create table pythonco2(id int, t datetime, density int);”

    cursor.execute(sql)

    now = datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S’)

    id = 10

    density = 800

    # insert(using python variables)

    cursor.execute(‘insert into pythonco2 (id, t, density) values (%s, %s, %s)’, (id, now, density))

    cursor.close()

    # without commit(), sql excute do not validate the table records handling.

    connector.commit()

    connector.close()

 

admin

3Dプリンターで保護ケース

ラズパイzeroの保護ケースをネットの3Dプリンタ用stlファイルから造形。地べたに置くのは部品を破壊する可能性があるからケースは必需品。

本体とのハメ合いは、ピンが太めにできているから本体側の穴をドリルで揉んで拡大して保持力あるようにしてあります。見た目ぴったりの設計ですね。

サブボード側は自分でデザインするしかない。

 

admin

Raspberry pi mysql

ファイル共有的な使い方でもdbは必須だからmysql(実はMariaDB)をインストール。

参考は、

https://www.raspberrypirulo.net/entry/mariadb-install

$ sudo apt-get install mariadb-server

しかしデスクに空き容量ないと言われてインストールできず、確かに$ dfでほぼ100%表示、だけどたった1.5GBしか割り当てないの?

–> パーテションを拡張すれば良いらしい。

$ sudo raspi-config

から設定でAdvanced Optionsを選択した後にExpand Filesystemを選択。その後リブートで8GBをフルに使うようになった。

$ df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/root        7364536 1433316   5598880  21% /

devtmpfs          187228       0    187228   0% /dev

tmpfs             220204       0    220204   0% /dev/shm

tmpfs             220204    3104    217100   2% /run

tmpfs               5120       4      5116   1% /run/lock

tmpfs             220204       0    220204   0% /sys/fs/cgroup

/dev/mmcblk0p1    258095   49814    208282  20% /boot

tmpfs              44040       0     44040   0% /run/user/1000

/dev/rootが100%から21%まで回復した。

インストール後にmysqlの設定をいくつか

  1. unix_socketプラグインの無効化
  1. rootパスワードの変更

 

admin

Raspberry pi zero webアプリ環境

デスクトップ版はラズパイ0ではまともに動かないからリソース無駄遣いなので、デスクトップの無い軽量版を再インストール。追加ではミニマム機能と思われるApacheとPHPをインストール。Pythonは2.7系がデフォルトでインストール済み。

軽量版(440MBぐらい)のイメージを焼き込み。以下再インストールで対応したこと。

 

・sshアクセスできない(再インストール後の最初の接続要求で)

対応方法:以前のキーを削除します。

$ ssh-keygen -R raspberrypi.local

 

・Apache2 

ドキュメントディレクトリ:/var/www/html

起動と停止:sudo service apache2 restart/stop/start

configtestでのエラー(AH00558)対処

$ sudo apache2ctl configtest

AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message

これはfqdnの記述がないことが問題なので追加する

$ hostname

raspberrypi

で名前を求めて、

$ sudo vi /etc/apache2/conf-available/fqdn.conf

を作成して、

ServerName raspberrypi

を追加して以下で設定を有効化してapacheを再起動すれば良い

$ sudo a2enconf fqdn

 

<参考:apache2の設定ファイル構造>

$ ls -l /etc/apache2

total 80

-rw-r–r– 1 root root  7224 Jun 10 11:13 apache2.conf

drwxr-xr-x 2 root root  4096 Sep 13 06:23 conf-available

drwxr-xr-x 2 root root  4096 Sep 13 06:18 conf-enabled

-rw-r–r– 1 root root  1782 Aug  8  2020 envvars

-rw-r–r– 1 root root 31063 Aug  8  2020 magic

drwxr-xr-x 2 root root 12288 Sep 13 06:07 mods-available

drwxr-xr-x 2 root root  4096 Sep 13 06:07 mods-enabled

-rw-r–r– 1 root root   320 Aug  8  2020 ports.conf

drwxr-xr-x 2 root root  4096 Sep 13 05:58 sites-available

drwxr-xr-x 2 root root  4096 Sep 13 05:58 sites-enabled

 

・OSのパッケージアンインストール

$ sudo apt-get autoremove <パッケージ名>

 

・sdカード使用状況

$ df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/root        1507280 1315944     96720  94% /

devtmpfs          187228       0    187228   0% /dev

tmpfs             220204       0    220204   0% /dev/shm

tmpfs             220204    5860    214344   3% /run

tmpfs               5120       0      5120   0% /run/lock

tmpfs             220204       0    220204   0% /sys/fs/cgroup

/dev/mmcblk0p1    258095   49814    208282  20% /boot

tmpfs              44040       0     44040   0% /run/user/1000

全体でも2GB程度しか使用していないからデスクトップ使わないと軽量。

 

・Macとのファイル共有(netatalkを使う)

$ sudo apt install netatalk

/etc/netatalk/afp.conf」 を編集して共有するフォルダを指定(当然ユーザ権限は意識して)

;[Homes]

;basedir regex = /xxxx

とコメントアウトされている部分を有効化して指定する

例えば、

 [Homes]

 basedir regex = /home

のようにして。

Macファインダー接続から、

afp://raspberrypi.local

で接続されて、IDとパスワード要求(sshユーザーログオンと同じ)されるので入力・保存すれば次回以降は簡単。ファイル転送はドラッグアンドドロップするだけです。

 

admin

Raspberry pi zeroにosインストールとremote desktop設定

遊休状態のraspberry pi zeroにosインストール。何しろメモリが512MBしかないからそれほどキビキビは動かないだろうけどIoT的な使い方ではデスクトップ不要だから問題ないでしょう。セットアップから物理的なモニターとかキーボードは接続したくない(持ってない)から全てリモートで使えるようにします。

sdカードへの書き込みツールはraspberry pi imagerを使って、おすすめのトップのデスクトップありのイメージを選択して8GBカードへ書き込み。

ただしこのままの状態だとsshが使えないから、

・sshの空ファイルとwi-fi接続情報confファイルを作ってsdカードのboot(トップ)ディレクトリに入れると良いとあったので対応。

https://qiita.com/rhene/items/828858afae699c5ac0ab

(追記:2021/9/26)

raspberry pi imagerの初期設定でもsshとwi-fiの設定機能があります。control + shift + xで以下のメニューが現れるので設定できます。

 

 

・さらにvncをインストール(upgradeは時間かかりました、多分30分以上か)

https://darmus.net/raspberry-pi-mac-vnc/

 

接続は、

vnc://192.168.x.xx:5901のような感じでデスクトップ画面をリモートで開くことができます。動きはトロトロで一応動くというレベル。

やりたいことはIoT的な使い方なので、デスクトップはあればマシぐらいの感覚でしたが、これでは要らないね。

 

admin

Raspberry PI micro登場

raspberry pi picoというのが出てきました。さすがにLinuxは使えないようで、”対応言語はC、C++、MicroPythonで、マイクロコントローラーの用途”だそうです。制御系で使い道ありそうですね。

値段が売値で550円だそうですから、ふんだんに使えます。電池駆動もいけそうなのですね。

 

admin