Edraw Max

回路図用の無償(15日間限定)お絵かきソフトはmacではまともなものが無いから、Linuxで探すとこれが良さそう。

簡単な回路図作成だけならこれで十分のように思う。もちろん業務で使うときには別の解となりますが。

 

admin

SDカードイメージのバックアップについて

Raspberry piのイメージバックアップでMacのコンソールから行うやり方。ddコマンドが使えるのでlinuxと同じと言えばそれまでですが。

対象のsdカードを特定して、

$ diskutil list

〜〜部分〜〜

/dev/disk2 (external, physical):

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:     FDisk_partition_scheme                        *8.0 GB     disk2

   1:             Windows_FAT_32 ⁨boot⁩                    268.4 MB   disk2s1

   2:                      Linux ⁨⁩                        7.7 GB     disk2s2

アンマウントして、

$ diskutil umountDisk /dev/disk2

ddコマンドでバックアップします

$ sudo dd if=/dev/disk2 of=raspi-backup.img bs=1m

進捗は別の端末をcommand+nで開いて、

$ sudo killall -INFO dd

で、実行中のコンソールに、

1286+0 records in

1286+0 records out

1348468736 bytes transferred in 297.716017 secs (4529379 bytes/sec)

のように表示できます。ddもkillallもmacのパスワード要求されます。

転送速度は4MB/secぐらいだから、sdカードのサイズにもよりますが時間はたっぷりかかります。

進捗はFinderでimgファイルのサイズを見ても想像はつくのですが。

 

admin

pythonからシェルコマンドを起動

・pythonでshellコマンド使う(sw押されたらシャットダウン処理)

>> import subprocess

>> subprocess.call([“ls”, “-l”])

二行目は、

>> subprocess.call(‘ls -l’, shell=True)

shell=True指定でベタ書きできるけど、インジェクションリスクはある。

shutdownは、

>> subprocess.call(‘sudo shutdown -h now’, shell=True)

・起動時のスクリプト自動起動(co2センサーのログ取りとdio制御スクリプト)

/etc/rc.localのexit前に以下のように記述しますが、

/usr/bin/python /home/pi/gpio.py &

ルート権限実行なのでフルパスで記述することと、終了しないスクリプトの場合にはバックグランド動作とするために最後に”&”を付加します。

 

admin

co2 センサー(NDIRとは、Non Dispersive InfraRed(非分散型赤外))MH-Z19BをPythonから使う

・センサーの動作確認

$ sudo raspi-config

UARTで使うので初期状態では有効になっていないシリアルインタフェースを有効にする

特に設定なしでそのまま使えるmh-z19をインストール

https://test.pypi.org/project/mh-z19/

$ sudo pip3 install mh-z19

シリアルインターフェースはroot権限ないと動作しません。

$ sudo python -m mh_z19

{“co2”: 934}

キャリブレーション(最低値400ppm付近にするだけみたいです)

$ sudo python -m mh_z19 –zero_point_calibration

Call Calibration with ZERO point.

$ sudo python -m mh_z19

{“co2”: 404}

co2濃度以外の数値も吐き出せるから、このライブラリは値を辞書形式で出力しています、

パラメータに—all指定でco2濃度以外も測定できます

$ sudo python -m mh_z19 –all

{“co2”: 405, “temperature”: 31, “TT”: 71, “SS”: 0, “UhUl”: 0}

Python中ではこういう風に使います

>>> import mh_z19

>>> mh_z19.read()

{‘co2’: 572}

 

admin

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