Vol.744 20.Apr.2018

PHPプログラミング(1)〜配列と検索 ラズベリーパイ(8)〜WiFiサーバー 両面刺しできるUSBケーブル

P PHPプログラミング(1) 〜配列と検索〜

by fjk

PHPプログラミングの基礎として、「配列」と[検索」を利用した代表的な実行例

@<連想配列>(sample4.php)
PHPでは文字をキーとして配列の値を指定する連想配列が使える。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<title>連想配列</title>
</head>
<body>
<p>
<?php
  $fruit = array("apple"  => "リンゴ",
		"orange" => "ミカン",
		"grape"  => "ブドウ" );
  foreach( $fruit as $key => $value ){
    echo "$key ・・・ $value <br>";
  }
?>
</p>
</body>
A<ランダムメッセージ>(sample5.php)
毎回、表示内容を変えることができる。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<title>ランダムメッセージ</title>
</head>
<body>
<p>
今日のあなたの運勢は「
<?php
  $fortune = array("大吉","中吉","小吉","吉","末吉","凶","大凶" );
  $count  = count( $fortune );
  $random = rand( 0 , $count -1 );
  echo $fortune[ $random ];
?>」です。
</p>
</body>
</html> 
B<正規表現による検索>(sample6.php)
検索パターンを指定して検索が出来る。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<title>正規表現による検索</title>
</head>
<body>
<p>
<?php
  $proname = array("PHPプログラム","Pythonプログラム");
  foreach( $proname as $string){
    echo "「".$string."」には";
    if( preg_match("/PHP/",$string) ) {
      echo "「PHP」が含まれています。";
    }else{
      echo "「PHP」が含まれていません。";
    }
    echo "<br>";
  }
?>
</body>
</html> 



R ラズベリーパイ(8) 〜WiFiサーバー〜

by fjk

 ラズパイの標準ではDHCPサーバーによりIPアドレスを割り付けられてネットに接続できるが、これではサーバやルーターが無いとネットに接続できないことになる。そこで、これらを使わずにパソコンやスマホからラズパイにアドホッフ接続(互いに直接通信するモードで、ネットワークには接続しない)でスマホやパソコンからラズパイにアクセス出来るようにすることにした。
 HDMI3.5インチ800x480LCD付きラズパイ-3Bでwifiを使おうとしたところ、何故か「WiFiが無い」と表示される。最初はディスプレィの問題かと思ったが、ラズパイ単独でもWiFiが使えず、使えないラズパイ(Made in the UK)を新品(Made in Japan)に交換すると正常に動作した。
 ここでは有線LANでインターネットに既に接続している環境で作業している。なお、ヨンマルキューさんのページ、および、new_western_elecさんのページを参考にさせていただいた。

1hostapdのインストール
ホストとして使えるようにhostapdをインストールする。ただし、hostapdのver2.3では動作しなかったが、後でバージョンアップすればよいので、とりあえずインストールする。
sudo apt-get update
sudo apt-get install hostapd

2.wlan0のIPアドレスを固定(interfaces)
wlan0をmanualからstaticに変更し、 無線LANのIPアドレスを固定する。
(赤字は追加、紫字は省略しても良い)
sudo nano /etc/network/interfaces
    ・・・
allo-hotplug wlan0
#iface wlan0 inet manual
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface wlano inet static
address 192.168.123.1
netmask 255.255.255.0
network 192.168.123.0 
broadcast 192.168.123.255
    ・・・
addressはeth0など他で使われていない番号を指定する(192.168.xx.xx・が良い)。
netmaskは記述のとおりとする。
networkの最後の数値は0
broadcastの最後の数値は255

3.hostapd.confの編集
以下のコマンドで、hostapd.confの雛形を/etc/hompad/にコピー後、解凍し、編集する。
cd /etc/hostapd/
sudo cp /usr/share/doc/hostapd/examples/hostapd.conf.gz ./
sudo gzip -d hostapd.conf.gz
leafpadエディッタ等でhostapd.confの赤字のところを変更(緑字は行番号)
sudo leafpad hostapd.conf
     ・・・
   6 interface=wlan0
      ・・・
  25 driver=nl80211
      ・・・
  83 ssid=rspi3-ap
      ・・・
 129 hw_mode=g
      ・・・
 139 channel=6
      ・・・
 228 macadder_ac1=0
      ・・・
 242 auth_algs=1
      ・・・
 252 ignore_broadcast_ssid=0
      ・・・
1018 wpa=2
      ・・・
1027 wpa_passphrase=raspberry

ssid(AP名)とwpa_passphrase(パスワード)は任意に・・。

4.hostapdのバージョンアップ
hostapd最新版(例えばv2.6)をゲットしmake後、インストール
cd ・・・作業場所として/home/pi/に移動
wget https://w1.fi/releases/hostapd-2.6.tar.gz
tar zxvf hostapd-2.6.tar.gz
sudo apt-get install libnl-genl-3-dev libssl-dev
cd hostapd-2.6/hostapd
cp defconfig .config
echo CONFIG_LIBNL32=y >> .config ・・optionを追加
make ・・・ hostapdを作成
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd_v2.3
sudo cp hostapd /usr/sbin/ ・・作成したhostapdをコピー
これで、SSIDが立ち上がるはずなので、以下のコマンドで起動、確認する。
sudo ifdown wlan0 ・・・・いったん、ネットをoffにする
sudo ifup wlan0 ・・・・再びネットをOnにし、変更を有効化する
sudo hostapd /etc/hostapd/hostapd.conf & ・・・バックグラウンドでhostapdを起動する
sudo service hostapd status ・・・・active(runing)と表示されれば起動している。

5.DHCPサーバー(dnsmasq)をインストール
DHCPサーバーとして、簡易的なDNSサーバー機能も持つdnsmasqを利用する。
sudo apt-get install dnsmasq

6.dnsmasq.confファイルの変更
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.org.conf
sudo nano /etc/dnsmasq.conf ・・・・新規に作成

interface=wlan0
listen-address 192.168.123.1
bind-interfaces
server=8.8.8.8      ・・・googleを指定
domain-needed
bogus-priv
dhcp-range=192.168.123.50,192.168.123.99,12h

割り当てるアドレス(range)は192.168.123.50から192.168.123.99まで50個指定しているが変更可能。

7.自動起動の設定
/etc/default/hostapdの10行目を以下に変更
DAEMON_CONF="/etc/hostapd/hostapd.conf"

8.サービスの開始
sudo service hostapd start
sudo service dnsmasq start
これでサービスが開始されるが、念のために
sudo reboot

9.サービスの確認
sudo service hostapd status
sudo service dnsmasq status
共に active(running) と表示があれば設定成功

パソコンからラズパイに接続 スマホからラズパイに接続

※eth0とwlan0を通信するには 更にforword設定等が必要(abc746参照)。
※DHCPサーバーとして”isc-dhcp-server”もよく利用されている
※3.5インチHDMIディスプレィドライバーのインストール
@osoyooのページからドライバーを/home/piにダウンロードする
cd ・・・./home/pi/ へ移動
wget http://osoyoo.com/driver/LCD_show_35hdmi.tar.gz
Aファイルを解凍する
tar -xzvf LCD_show_35hdmi.tar.gz
Bドライバーの実行
sudo ./LCD_show_35hdmi/LCD35_720*480 ・・・・720x480解像度の場合
※800x480LCDの場合、ダウンロードファイル名を”LCD_show_35hdmi_vertical.tar.gz”にすること。
※WiFiが使えないラズパイにUSB接続WiFiアダプター(WN-G150UMK、IO-data、\1,100)を準備し、USBに着装するだけでwlan0も使え、WiFi_AP機能も使える状態になった(以後updateは行わないこと)。ElecomのWDC-150SU2MBKでも刺すだけでWiFiが使え、クライアントとしてホストに接続も出来たが、APにするとラズパイのDHCP機能が自動で動作しなかった(要確認)。



U 両面刺しできるUSBケーブル

by fjk

 USBケーブルを装置の背面や横に指す場合、コネクタの上下の形状が合わず、差し込めないことがよくあります。そこで、この様な時に便利なのが「両面刺しできるUSBケーブル」です。Aポートのみのものと、(マイクロ)Bポートも両面刺し出来るものがある。  コネクタの上下の確認が不要で便利だが、マイクロBコネクタでは接触が緩くケーブルが抜けやすい。また、マイクロBコネクタ内の電極の強度が不足して破損するという報告もあるので、A側は両面刺しでB側は標準のものがよさそうである。
両方のコネクタが両面刺ケーブル 拡大


PHPプログラミング(1)〜配列と検索 ラズパイ(8)〜WiFiサーバー 両面刺しできるUSBケーブル