Vol.746 25.May.2018

カーアダプタでワクヨさんを自宅でテスト PHP(3)〜外部ファイル ラズパイ(10)〜LEDの点灯・スイッチ入力 ラズパイをWiFiアクセスポイントに

C 「カーアダプタ」で「ワクヨさん」を自宅でテスト

by fjk

車でドライブ中に熱いコーヒーを飲みたいことがある。自動販売機やコンビニで買えばと思うが、車中で熱いお湯があると便利と思い、カーショップで見つけた「ワクヨさん」(DC12V−110W、6,500円)を買った。ワクヨさんはDC12Vのシガーソケットから電気を得る構造なので、家庭で使うにはDC12Vを供給できるACアダプタが必要で、ネットで見つけたAC100Vでシガーソケット出力のカーアダプタ(YU1210、Vacplus製、12V/10A、2,360円)を購入した。
 ワクヨさんは9Aも必要なので、ソケットが熱くなるという報告もあるが、ソケットをしっかりと刺し込み、「沸騰」ボタンを押すと(【PH】と表示される)加熱が始まり、表示温度が上昇する。電流が大きいのでソケットが少し熱くはなるが触れないことは無い。
 ちなみに400mLの水(15℃)を入れてワクヨさんで沸かすと、60℃まで20分、80℃まで30分、90℃まで35分、沸騰まで43分程度(23℃の水からの場合は約30分)で、運転中に沸かせば何とか使えそう。なお、ワクヨさんには保温機能(沸騰後、「保温」ボタンを押す)も付いているので、お湯を一定の温度(保温設定後、▲or▼ボタンで変更可)で保持することも出来るのは便利。
 ワクヨさんには車の冷暖房吹き出し口に取り付けるアダプタが付属しているが、一部の車種(吹き出し口が斜めになっている車種など)にはこのアダプタが利用できない(だけ)。
 しかし、ワクヨさんでは沸騰までに時間がかかるので、「インバーター」+「家庭用のケトル」(1kw以上、2〜3分で沸騰)の方がよさそうかな・・
ワクヨさんで湯沸かし中
(AC100V→カーアダプタ→ワクヨさん)
湯沸かし時間ー温度


P PHPプログラミング(3) 〜外部ファイル〜

by fjk

 PHPでは、既に作成済みの定数や関数を、プログラムの実行前に読み込んで使うことが出来る。読み込む方法には、require(_once)とinclude(_once)の2つの方法がある。requireは実行前に読み込まれるが、includeは実行中に読み込まれるので、動的にファイルを扱うことが出来る。
 requreは「処理を読み込み利用したい時」、includeは「その場所に差し込みたい時」に使う。
 関数・定義は重複を避けるためrequire_onceで呼び出すこと!
<my_function.php><message.html>
<?php
  function average($x, $y) {
    return ($x + $y) / 2;
  }
  ?>
<a href="link.html"?>リンク先はここ</a?><br?>>/pre>
<test_require.php>実 行 例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>requireテスト</title>
</head>
<body>
<p><?php
require_once "my_function.php";
$number = average(2, 4);
echo "2と4の平均は{$number}です。";
?></p>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>includeテスト</title>
</head>
<body>
<p><?php
echo "最初のメッセージ<br />\n";
include "message.html"; 
echo "2回目のメッセージ<br />\n";
include "message.html";
?></p>
</body>



R ラズベリーパイ(10) 〜LEDの点灯・スイッチ入力〜

by fjk

ラズパイはpython等でIOポートを直接制御でき、Net接続も可能ななので、IoTの入門としてLEDの点灯とスイッチ入力の取り込みを行った。

ラズベリーパイのピン配置

【GPIO利用の基本】

GPIOライブラリーの読み込み
import RPi.GPIO as GPIO
GPIOの初期化(必要であれば)
GPIO.cleanup()・・・全て入力モードに
端子に指定モード
GPIO.setmode(GPIO.BCM)・・・ピン名称
GPIO.setmode(GPIO.BOARD)・・ピン番号
端子の入出力モードを指定(ポート番号が17の時)
GPIO.setup(17 , GPIO.OUT)
GPIO.setup(17 , GPIO.IN , pull_up_down = GPIO.PUD_UP) ・・又はPUD_DOWNPUD_OFF
データの出力(ポート番号が17の時)
GPIO.output(17 , GPIO.HIGH)
GPIO.output(17 , GPIO_LOW)
データの入力(ポート番号が23の時)
data = GPIO.input(GPIO.input(23))
タイマーの使用
import time・・・タイマーを使う場合
time.sleep(0.5)・・・0.5秒待つ
プログラムの実行 (rootでなくても実行できそう)
$ sudo python ledtest.py

【応用例】

@LEDの点滅確認:
GPIO.cleanupは中止を含む全ての終了前に実行。
<ledtest.py>(ctl+Cで中断できる)
#! /usr/bin/env /usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
led_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT)

try:       # finallyと対で例外処理を認める
    while True:
        GPIO.output(led_pin, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(led_pin, GPIO.LOW)
        time.sleep(1)
finally:
    GPIO.cleanup()   # プログラムの終了前に実行

 電流制限用抵抗は470Ωを使用

Aスイッチが押されたらON/OFFを繰り返す:
while文は、スイッチが離される状態になるまで待っている(チャッタリング対策有り)。
<ledswtest.py>(ctl+Cで中断できる)
#! /usr/bin/env /usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
led_pin = 17
sw_pin = 23
GPIO.setmode( GPIO.BCM )
GPIO.setup(sw_pin, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(led_pin , GPIO.OUT)
led = GPIO.LOW

try:       # finallyと対で例外処理を認める
    while True:
        if ( GPIO.input(sw_pin) == GPIO.LOW ):
            time.sleep( 0.1 )       # チャタリング対策
            led = not led           # 出力を反転
            GPIO.output(led_pin , led)
            while ( GPIO.input(sw_pin) == GPIO.LOW ):
                time.sleep( 0.1 )  # SWが離れるまで待つ
finally:
    GPIO.cleanup()   # プログラムの終了前に実行

※以下の行を先頭に記述し、ファイルに実行権限を付与しておくと、ファイル名だけで実行できる。
#! /usr/bin/env /usr/bin/python
 (実行コマンド例: $ ./ledtest.py
※日本語コメントを使う場合は、ファイルの先頭に以下の行を記述すること。
# -*- coding: utf-8 -*-
※コマンドラインでGPIOを操作(jessie以降)
$ gpio readall ・・・GPIOの状態表示
$ gpio -g mode 17 out ・・出力指定
$ gpio -g write 17 1 ・・high(3.3V)出力
$ gpio -g mode 23 input ・・入力指定
$ gpio -g read 23 ・・・入力データ読込

gpio readallコマンド実行例



R ラズパイをWiFiアクセスポイントに(abc744追伸)

by fjk

eth0(イーサネット)とwlano(WiFi)間のルーティング(ファイヤーウォール)設定し、ラズパイをインターネットに接続するwifiアクセスポイントとして使えるようにする。

1.IPフォワーディングを有効にする(sysctl.confの修正)。
$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1 ・・・(28行目の文をコメントアウトする)
2.フォワード変更をアクティベート
$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
3.ルーティングテーブル(iptable)の編集
ラズパイをルーターとして使うために以下のコマンドを入力。
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
ルーティングテーブルを/etc/iptables.ipv4.natに保存。
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"・・(設定した現在のルールを保存)
4.再起動するとiptableのルールが消えるので、ラズパイがブート時にiptableを復元する。(8/24訂正)
/etc/network/if-pre-up.dフォルダにiptablesファイルを新規に作成
$ sudo nano /etc/network/if-pre-up.d/iptables
#! /bin/sh
iptables-restore < /etc/iptables.ipv4.nat
exit 0
さらに、実行権を付与
$ sudo chmod 755 /etc/network/if-pre-up.d/iptables
5.設定を適用させるために再起動
$ sudo reboot
6.動作の確認
$ cat /etc/iptables.ipv4.nat
$ sudo iptables -L

ラズパイ経由で
ネットアクセス中のスマホ
ルーティングの動作確認画面


カーアダプタでワクヨさんを自宅でテスト PHP(3)〜外部ファイル ラズパイ(10)〜LEDの点灯・スイッチ入力 ラズパイをWiFiアクセスポイントに