回路図用の無償(15日間限定)お絵かきソフトはmacではまともなものが無いから、Linuxで探すとこれが良さそう。
簡単な回路図作成だけならこれで十分のように思う。もちろん業務で使うときには別の解となりますが。
admin
la vie libre
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で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
・センサーの動作確認
$ 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
GPIO用のライブラリRPi.GPIOは標準で組み込まれています
——————————————
# 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
動作確認用が主目的と思いますが
$ 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
パッケージの互換とか面倒になって来たので、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
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はデフォルトの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
ファイル共有的な使い方でも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の設定をいくつか
admin