2014年3月11日火曜日

Arduino互換機 chipKIT UNO32をMCU Gearで使ってみる


普通のArdunoの接続テストでは、一度に多くのデバイスを取り付けるとSRAMが足りなくなるという問題がありました。AVRの32bit版もあるのですが、少しコストが高いので安くてSRAMが大きな Arduino互換機chipKIT Uno32 (80Mhz, 32-bit MIPS, 128K Flash, 16K SRAM)をMCU Gear に使用してみようと思います。






Arduino互換機とは言われていますが、IDEはMPIDEという少し特殊な物を使用します。使い方は基本的に同じです。スケッチの書き方はI2Cのwriteをsendに、readをrecieveにするだけで、他の違いは今のところ違いは見当たりません。
正確にはArduinoではなく、Arduinoに似せた32bitPICマイコンボードです。もちろんブートローダーなども手に入るので自作できます。
chipKITには色々な種類が出ていますが、今回はchipKIT UNO32 Rev.Cという物を使いました。

参考サイト(http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,892,893&Prod=CHIPKIT-UNO32
今回の購入先(http://strawberry-linux.com/catalog/items?code=21208


操作手順

1、まず、電源を入れる前にchipKIT UNO32のジャンパーの設定を変更しておきます。
JP4 : RD4
JP6 : RG3
JP8 : RG2
にしてください、これでSPIマスターとI2Cが設定されます。




2、MPIDEをダウンロードしてください。 http://chipkit.net/started/
今回はmpide-0023-windows-20130715を使用しました。


3、各種モジュールごとのサンプルプログラムです。
サンプルプログラム(自動モード)のダウンロード
http://www.mcugear.org/download/KIT/A_SamplePrograms.zip
自動モードは一つのモジュールごとに配線をやり直して接続してくれます。

4、マイコンボードAでMCU Gearと接続します。
マイコンボードAのジャンパーの設定を
SCL : PTC1
SDA : PTC2
他は何も設定しないでください。


5、プログラムの書き込み
サンプルプログラムをMPIDEからUSBケーブルでchipKIT UNO32 Rev.Cに書き込みます。四角い枠に右矢印のボタンを押して書き込んでください。(MCU Gearのパワーモジュールを接続せずに行ってください。リセットボタンのチャタリング防止用のC5コンデンサの影響で書き込み時の自動リセットに失敗するためです。)



サンプルプログラムの使い方は次のサイトが参考になります。
http://mbed.org/users/Info/code/MCUGearA/ (英語版の下に日本語版があります)

6、使用したいモジュールを取り付けてから電源を入れる

電源は2系統から入れてください。
MCUGearのパワーモジュールを取り付け電源を入れます。
chipKIT UNO32のUSBコネクタから電源を入れると動きます。



その他、
chipKIT UNO32 Rev.CのI2Cの特徴をいくつか挙げておきます。


1、通信速度アップができる。
MPIDEのファイルを書き換えると、I2Cの周波数を変えることができます。
\mpide-0023-windows-20130715\hardware\pic32\libraries\Wire\utility
ディレクトリのtwi.h部分を以下のように変更すると400KHzで動作します。
(1MHzでも送信できますが、chipKITの受信がうまくいかないようでした。)

#ifndef TWI_FREQ
#define TWI_FREQ 400000
#endif


2、注意点

I2Cのアドレス0番から7番まではIDEの問題で使えないそうです。
サンプルプログラムのmasterwireで動作確認するときは、アドレスを4から10に変更する必要があります。今後MPIDEの細かなバグが消えることを願っています。



2014年2月24日月曜日

機能拡張基板の試作

MCU Gearは、モジュールまででは単純なIOです。
ここに機能基板をつけることで進化を発揮します。
機能拡張基板と、配線のプログラムデータ関数を他の人たちとシェアすれば、難しい回路でも簡単にシェアして使うことができるはずです。

今回はタミヤのタンクを動かすための、モータードライバボードを試作しました。
ユニバーサルモジュールが最もシンプルなモジュールなので、そちらに取り付けて使用します。
実際の動かしている所は、後日撮影したいと思います。

モジュールの外側に取り付ける機能拡張基板(今回の例ではモータードライバ回路)は、オープンハードにするなりそうでないなり、好きなように拡張してください。







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年2月7日金曜日

Raspberry Pi の超簡単設定2 C言語 wiringPi

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

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

                                      

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


ここでは、wiringPi というC言語で開発ができる環境を入れます。
プログラム用のテキストエディタはいくつかありますが、今回はgeanyという物を入れます。

まず、midoriというアプリケーションで、このブログの画面を開いてください。
青い文字の部分を順番にコピー&ペーストしてインストールしてください。(shellスクリプトにしてもよいのですが、GPIOの設定部分で失敗することがあるようです。注意してください。

デスクトップにある LXTerminal.exe を開いてください。
$マークの後に以下の青いコマンドを入れていきます。
まずgeanyを使いたい方は
sudo apt-get install geany
と入れます。

次にwiringpiを入れてみましょう。

sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

完了したら動作確認をします。

gpio -v
gpio readall

と入れ、以下のように表示されているかを見てください。



一旦終了します。
sudo halt


次に組み立てたMCUGearを取り付けます。
Raspberry Pi と接続するには以下のボードが最低限必要です。
TypeB board --- Raspberry Pi とベースボードを接続します。
Baseboard --- MCU Gear のコアです。
Power Module --- USBかアダプタ電源からMCU Gearに簡単に電源を供給でします。
他のモジュールはお好みで積層してください。
MCUGearの電源はハードウェア部分を再起動できるように別系統で取っています。

RaspberryPiに電源を入れます。
MCU Gearのサンプルプログラムを入れてみます。
cd /home/pi/Desktop/
wget http://www.mcugear.org/RPitest/MCUGearRPwp.tar
tar xvf MCUGearRPwp.tar

解凍されたフォルダに、それぞれモジュールごとにサンプルプログラムが入っています。
デスクトップにダウンロードされたサンプルプログラムを実行してみます。
(注意:ユニバーサルモジュールは0、1番がスイッチ入力2番はLEDを点滅させる、残りはLEDで出力を確認できます。)

gpio load i2c 1000
gpio load spi

cd MCUGearRPwp

g++ -Wall -o main main.c MCUGear.cpp MCUGearBase.cpp -lwiringPi

(wiringPi の LCDのライブラリ (#include <lcd.h>)等を使う時は、
g++ -Wall -o main main.c MCUGear.cpp MCUGearBase.cpp -lwiringPi -lwiringPiDev
としてください。)

コンパイルに成功したら。
MCU Gear側にも電源を入れて。

sudo ./main

で実行できます。



Raspberry Pi の超簡単設定1 起動とリモートデスクトップ編

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

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


                                      

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


Raspberry Piのセットアップから、リモートデスクトップについてです。
今回はWindows7 で実行しています。

1、初期設定
NOOBS (offline and network install)をダウンロードして、4GB 以上の空のSDカードに解凍してください。

TVにHDMIケーブル、USBキーボード、USBマウス、インターネット接続されたLANケーブルをRaspberry Pi を接続し、先ほどのSDカードを差し込みます。



2、OSのインストール
NOOBSを入れると、まずOSの選択画面と言語の選択ができるメニューが現れます。
ここではRaspbian を入れ、言語は日本語を選択しました。
右上のInstallを押すとインストールを開始します。



成功すると以下のように表示されます。



この後、初期設定をします。



特に気にしないのであれば、そのままFinishしてください。
その際の
ID:pi
pass:raspberry
です。


$マークの後ろに次のコマンド入れます。
まず、リモートデスクトップを入れます。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install xrdp

途中で[Y/N]と質問されるのでYを入力して次に進んでください。

sudo apt-get install avahi-daemon

を入れて、インストールが終わったら
sudo halt
と入れ赤いLEDのみの状態になったら電源を切ります。(デスクトップ画面を表示したい場合はstartxと入れると出ます)

USBキーボードやマウス、HDMIケーブルを外して、SDカードとLANだけの状態にしてください。

Windows側には以下のソフトをインストールすると、Windows搭載のリモートデスクトップから簡単にアクセスできます。
Bonjour Print Services for Windows

Windows付属のリモートデスクトップを起動します。
同じルーターにPCを接続し、raspberrypi.local というアドレスでリモートデスクトップが使えるようにします。





先ほどのID、パスワード
ID:pi
pass:raspberry
でログインできます。IPアドレスを調べる必要はありません。





※ログインできない場合
ルーターにすでに名前でアクセスできるデバイスがつながっている場合
IPアドレスを直接入力してログインしてください。割り当てられたIPアドレスを調べるには、ターミナルで
ifconfig
と入れると 192.168.***.*** という番号が見れます。

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