ラベル Python の投稿を表示しています。 すべての投稿を表示
ラベル Python の投稿を表示しています。 すべての投稿を表示

2014年2月11日火曜日

Raspberry Pi の超簡単設定4 遠隔操作ApacheサーバーとPHPから操作する

目次
Raspberry Pi Noobsで簡単リモートデスクトップ
WiringPiのセットアップ・・・C言語でGPIOを動かしてみる
Pythonのセットアップ・・・人気のPythonで動かしてみる

WebからPHPで簡単アクセス・・・PHP、Pythonで遠隔GPIO

                                      

update こちらのサイトに新型があります。
mille-feuille(ミルフィーユ)


前回までにPythonまでインストールしました。今回はwebからのアクセスです。
リモートデスクトップでも遠隔操作が可能ですが、HTMLやPHPなどを組み合わせて簡単にアクセスしたいときがあります。
今回のサンプルではタブレットから簡単にブラウザからアクセスできるように、PHPを使うことにしました。
(PHPからPythonのプログラムを叩きますが、C言語でも同じことができるはずです。)




そのためにはRaspberry Pi にサーバーを用意して動かします。
Pythonだけの簡易サーバーもありますが、ハードを動かすGPIOを動かすにはApacheとPHPを組み合わせて動かした方が簡単でストレスなく動かせます。

ブラウザが動作する端末でプログラムを動かすことができるので、利用価値は高いと思います。
他のwebアプリを組み合わせると使いやすくなると思います。
また、Pythonコード内のprintもHTMLに反映させることができるので、Pythonでwebページを記述することも簡単にできるはずです。

まずApatchとPHPをインストールします。


sudo apt-get update

sudo apt-get upgrade
sudo apt-get install apache2 php5
sudo chown pi -R /var/www
sudo update-rc.d apache2 defaults

この時点で/var/www/フォルダにHTMLファイルを入れると閲覧できます。

sudo nano /etc/sudoers

テキストエディタが起動するので、sudoersの最後の行に

www-data ALL=(root) NOPASSWD: ALL
と入れます。
ctrl + x で保存するか尋ねて来るので、Yを押し、最後にファイル名を確認してきますが上書き保存するのでそのままエンターを押して終了します。



これでWebでアクセスした人もsudoコマンドが必要なプログラムを使用できます。外部に公開するときはセキュリティ等に気を付けてください。(最低でもアクセスにパスワードで制限を付けるなどしてください)


sudo wget http://mcugear.org/RPitest/MCUGear.tar

tar xvf MCUGear.tar
sudo mv -f MCUGear /usr/lib/cgi-bin

一旦再起動します。

sudo reboot

基本的にcgi-binフォルダでroot権限は変えたくない場合は、/home/pi/フォルダ以下で編集してから

sudo mv [filename] /usr/lib/cgi-bin/[folder] と移動させてください。
削除するときは
sudo rm -rf /usr/lib/cgi-bin/[folder]/[filename]
とすると消せます。
権限を変えると簡単に編集ができます。

手持ちのパソコンやタブレットのブラウザに
http://raspberrypi.local/cgi-bin/MCUGear/index.php
または
http://[IPアドレス]/cgi-bin/MCUGear/index.php
と入れるとアクセスできるはずです。





操作方法

1、MCU Gearの電源を入れる。
2、Init Baseboardボタンを押して、ベースボードを初期化します。

以下のsystem関数を組み合わせてPHPを操作すると、ハードウェアをPHPから動かすことができます。PHPのfor やif 等と組み合わせることで複雑な連続動作ができるはずです。


・Read Input Pins はUniversal Moduleのすべての端子を読みます。


・Write Output Pins はSignal Hold Moduleから出力します。


・Read AD 2ch はAD2chモジュールから信号を受け取ります。(HTML5が対応しているブラウザから動かすとメーターが表示されます。)


・Read AD 8ch はAD8chモジュールから信号を受け取ります。・Read DA はDAモジュールから信号を受け取ります。(HTML5が対応しているブラウザから動かすとメーターが表示されます。)


・Move RC Servo はマルチファンクションモジュールにPWMモードのプログラムを書き込んで使用します。



仕組み等

一番下ではPythonがハードを動かしています。
PHP側からsysteコマンドでPythonファイルを動かす仕組みになっているので、Pythonの中でprint するとその内容もすべて表示されます。表示したくないときはprintをコメントアウトするか、PHPのsystem関数周辺をHTMLのコメントアウト<!--  -->で囲ってください。

PHPからはsystem関数で

sudo python ~.py [address] [command]
という順番で実行しています。
モジュールアドレスはモジュール基板裏面の設定と、ゲート開閉に利用しているPCA9674のデータシートを見てください。

オリジナルの基板などで複雑な処理が必要なときは、取り付ける場合はハードに合わせてPython側を書き換えてください。


2014年2月8日土曜日

Raspberry Pi の超簡単設定3 Python

目次
Raspberry Pi Noobsで簡単リモートデスクトップ
WiringPiのセットアップ・・・C言語でGPIOを動かしてみる
Pythonのセットアップ・・・人気のPythonで動かしてみる

WebからPHPで簡単アクセス・・・PHP、Pythonで遠隔GPIO

                                      


update こちらのサイトに新型があります。
mille-feuille(ミルフィーユ)


今回はロボットや画像処理など、多くの分野で人気が高まっているPython、importを使って豊富なライブラリを気軽に利用することができ非常に便利なスクリプト言語を利用してみましょう。
ます、Pythonでハードウェアが扱えるようにしましょう。

ターミナルを開いて

sudo nano /etc/modprobe.d/raspi-blacklist.conf

blacklistに#を付けてコメントアウトします。

ctrl + x で保存するか尋ねて来るので、Yを押し、最後にファイル名を確認してきますが上書き保存するのでそのままエンターを押して終了します。




次にnanoを実行します。

sudo nano /etc/modules



最後に i2c-dev と追記します。

同じく ctrl + x で保存するか尋ねて来るので、Yを押し、最後にファイル名を確認してきますが上書き保存するのでそのままエンターを押して終了します。

sudo apt-get update

sudo apt-get upgrade
sudo apt-get install python-smbus
sudo adduser pi i2c
sudo reboot

と入れて再起動します。


MCU Gear の電源を入れてI2Cのテストをします。

何か数字が表示されればI2Cが動いていることがわかります。

i2cdetect -y 0

といれます。RaspberryPiのVerによっては i2cdetect -y 1 と入れてください。






次にSPIを設定します。


sudo apt-get install python-dev

sudo reboot
再起動したら

lsmod


で spi-bcm2708 の表示があることを確認します。







次にPythonのspidevを準備します。


mkdir python-spi 

cd python-spi 
wget https://raw.github.com/doceme/py-spidev/master/setup.py 
wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c 
sudo python setup.py install 

$ cd
$ git clone git://github.com/doceme/py-spidev 
$ cd py-spidev
$ sudo python setup.py install
...

Writing /usr/local/lib/python2.7/dist-packages/spidev-3.0.egg-info


cd /home/pi/Desktop/
wget http://mcugear.org/RPitest/MGPyVer1_1.tar
tar xvf MGPyVer1_1.tar

※追記(中級者向け)
二つのモジュールを同時に開く場合のサンプルはwget http://mcugear.org/RPitest/SampleProgramsVer1_1_0.tar
を使用してください。サンプルではモータードライバとエンコーダをつないだユニバーサルモジュールを同時につなぐという事を想定しいています。MCUGearModule.py の割り当て端子数を増やしています。sample.pyで、配線情報はコネクタの若い番号順に並べて2つのモジュール(16端子分)を同時につなぐことが出来ます。


MGPyVer1_1というフォルダがデスクトップにダウンロードされ、ダブルクリックするとモジュールごとにサンプルプログラムが入ったフォルダが入っています。


それぞれのプログラムは cd コマンドを使って移動し

sudo python sample.py

で実行できます。

サンプルプログラムはsample.pyに動作や配線方法が記述されています。

例)LEDblinkフォルダ
ユニバーサルモジュールが対象です。

N_VDD_VDD_VDD
モジュール裏面のアドレスを AD2 = VDD(+3V3) AD1 = VDD(+3V3) AD0 = VDD(+3V3) に設定しているという意味です。詳しくはモジュールのゲート開閉に利用しているPCA9674のデータシートを見てください。




ユニバーサルモジュールの2番端子が点滅するように設定されています。

サンプルプログラムのp.NC は何も接続しないという意味です。(もちろん入力も出力も割り当てられますが、今回はサンプルで用意しました。)

p.outpin[ ]は出力端子 [0]~[5]まであり、Raspberry Pi のGPIOがどれかを考える必要が無いようにプログラムで抽象化してます。(p.pyで実際のピン配置を参照できます)

p.inpin[ ]は入力端子 [0]、[1]

ベースボードのコネクタ1つごとに、4つの信号端子が来ているので、ユニバーサルモジュールでは8端子まで接続することができます。

下はLED接続時の参考図です。必ず抵抗を取り付けてください。



他にSPIはMISO MOSI SCK CE0

UART はTX RX などと記載します。

プログラムの端子配置を変えれば、簡単に配線しなおすことができます。



2014年1月13日月曜日

Raspberry Pi Python でシリアル(UART)を動かしてみる


次はシリアル(UART)を Python で動作させてみます。
参考:http://blog.oscarliang.net/raspberry-pi-and-arduino-connected-serial-gpio/
http://tomono.eleho.net/2012/09/15/3140/


sudo apt-get install python-serial
でインストールする。

pythonUART.py

#! /usr/bin/python
import serial

uart = serial.serial('/dev/ttyAMA0', 9600, timeout=1)
uart.open()
uart.write("U")

print("UART test")

というファイルを作る。

sudo python pythonUART.py
で実行する。

結果をロジックアナライザで見てみました。
文字 U は数値で表すと 0x55(1010101)です






参考:http://www.raspberry-projects.com/pi/pi-operating-systems/raspbian/io-pins-raspbian/uart-pins

まず設定ファイルのバックアップを保存しておきます。
sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt

ファイルを
sudo nano /boot/cmdline.txt

中身を以下のように書き換えてください。
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait



[ctr] + [x] でexit 保存で [y] ファイル名はそのままなので [enter]


sudo nano /etc/inittab

を以下の部分に#を付けてコメントアウトする

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

MCU Gear をRaspberry Pi とPythonで使ってみる。

MCU Gear用の初心者向けPython サンプルプログラムを作りました。

Pythonを使うことで、Raspberry Pi の GPIOのピンアサインを見なくともモジュールに信号線を割り当てることができるようになりました。


インストール方法はこちら


ホームページからダウンロードしたファイルを解凍し、

点滅プログラムを見てみましょう。

BlinkLEDフォルダにあるsample.pyの解説です。



基本的な流れ

1、初期化部分(コピーアンドペーストして使ってください。)
2、モジュールの初設定 ピンはモジュール定義のカッコ内に追加すればモジュール端子の0番、1番、2番…と増やせます。
例えば
,p.outpin[0], p.outpin[1], p.inpin[0]....)など 1モジュールあたり最大8端子割り当てられます。 


出力ピンの最大値は6つ
p.outpin[0]、p.outpin[1]、p.outpin[2]、p.outpin[3]、p.outpin[4]、p.outpin[5]
入力ピンの最大値は2つ(何もつなげないと入力がLOWとなるので、スイッチなどを使う場合はHigh信号を与えてください)
p.inpin[0]、p.inpin[1]

SPIバスは import spidev を追加して

p.MISO、p.MOSI、p.SCLK、p.CE0


I2Cバスはモジュールには配線せずに、コネクタから出ているSDA SCLに直接接続してください。

ただしアドレスが競合しないように注意してください。
また、競合する場合はマルチファンクションモジュールで別系統のI2Cバスを増設できます。

UART端子は動作させるサンプルを用意していませんが、p.TX、p.RX で割り当てることができます。

設定、動作に関してはこちらを参考に設定できます。http://mcugear.blogspot.jp/2014/01/raspberry-pipython-uart.html


3、モジュールとの接続connect()と切断disconnect()で動作中に配線切替ができます。




#!/usr/bin/python このファイルがPythonの物と明示してください

import MCUGear MCU Gear のベースボードに関するプログラムが入っています
import MCUGearModule モジュールへの配線に関するプログラムが入っています
import p GPIOピン設定に関するプログラムが入っています

import RPi.GPIO as GPIO Raspberry Pi のGPIOを動かすプログラムが入っています

import time 時間に関するプログラムが入っています

if __name__=='__main__': メイン関数

#Start--------
try: とりあえず試しに以下のプログラムを動かしてみて、[ctrl]+ [C]を押して終了する
print("If you want to finish, press [ctrl]+ [C] \n")
#setup IOs-----
GPIO.setmode(GPIO.BCM) GPIOを使います
for var in range(0,len(p.inpin)-1): GPIOの入力を設定(通常このままコピペ)
GPIO.setup(p.inpin[var], GPIO.IN) 
for var in range(0,len(p.outpin)-1): GPIOの出力を設定(通常このままコピペ)
GPIO.setup(p.outpin[var], GPIO.OUT) #set outpin as a output
MCUGear.initBase() ベースボードの初期化

#Universal Module address & IO Setting-------------
UNI = MCUGearModule.MCUGearModule(MCUGear.N_VDD_VDD_VDD,p.outpin[0])
 1、好きな名前(ここではUNI)という名前でユニバーサル基板を定義します。
 2、ユニバーサルモジュール基板裏面のアドレス設定 (AD2=3.3V AD1=3.3V AD0=3.3V) N_VDD_VDD_VDD
 3、「モジュールの0番端子にp.out[0]出力を割り当てる。」という処理をしています。

#loop-----

while True: ループ

UNI.connect() Raspberry Piの端子 とモジュール端子とを接続
GPIO.output(p.outpin[0], True) 先ほど設定したp.out[0]を HIGH にします
time.sleep(0.5) 0.5秒待ちます
GPIO.output(p.outpin[0], False) 先ほど設定したp.out[0]を LOW にします
time.sleep(0.5) 0.5秒待ちます
UNI.disconnect() Raspberry Piの端子 とモジュール端子とを切断

except KeyboardInterrupt: tryから続いています[ctrl]+ [C]を押したら以下を実行して終了します。
print("detect key interrupt [ctrl]+ [C] \n")
UNI.disconnect() 念のためもう一度切断
GPIO.cleanup() Raspberry PiからGPIOの制御を一時無効にする
print("Program exit\n")