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

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")

2013年10月19日土曜日

Raspberry Pi で多くのモジュールを接続してみる(LCDモジュールは対象外)

RSコンポーネンツさん等で市販されている Raspberry Pi がMCU Gearと接続できましたので報告です。

今回は2013年10月19日に用意できているモジュール類を複数個
接続して見ようと思います。
・12bit 2ch ADモジュール(距離センサー)
・12bit 8ch ADモジュール(ボリューム抵抗)
・12bit DAモジュール(黄色LED出力)
・ユニバーサルモジュール(スイッチ入力と赤LED出力)
・出力信号保持モジュール(モジュールを切り替えても出力信号を保持できます)
・マルチファンクションモジュール(PWMモード)

SPIのモジュールを複数接続していますが、CE0番ピンは一つしか使っていないのが特徴です。


サンプルプログラムはこちら


プログラムの基本動作はこちらの説明を参考にしてください。










2013年10月16日水曜日

Raspberry Pi でC言語 ADコンバーター(ADC) と DAコンバーター(DAC) を簡単に使ってみる

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

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

                                        

以下、昔の記事です。

RaspberryPiで簡単にADC、DACを使ってみたいと思います。

MCU Gearを使うと、例えば8chADモジュールを10個積めば80chのAD変換基板になるお化けな拡張ボードです。

RaspberryPi用接続ボードとMCU Gearを使用します。

MCU Gear にはSPI通信による 12bit ADC、12bit DACを簡単に複数構成することができるモジュールが存在します。

サンプルプログラムではCE0 1つで、複数のSPIデバイスを動かしています





サンプルプログラムの説明です。
12bit 2ch ADの0chから距離センサーの信号を読み取り、それを12bit DAから出力しています。
またユニバーサルモジュールからスイッチの読み取り、LEDの出力(LOWでLEDがONになる)を行っています。

main.cファイルを見てください。
まず、wiringPiをセットアップしたりSPI通信のセットアップなどを行います。

1、initBase(); はMCU Gear の丸い基板、ベースボードを初期化しています。

2、拡張モジュール基板(扇形の基板)の設定をします。
MCUGear AD2chM = MCUGear(N_SCL_SCL_SCL, 4);

 AD2chM :モジュールに好みの名前を付けます
 N_SCL_SCL_SCL : 拡張モジュール裏面にあるアドレス設定回路の任意設定値を入れます。
 (AD2、AD1、AD0の順番に並んでいます。)
 4:はADモジュールの場合はSPIの4ピンを使いますという予告です。(MISO,MOSI,SCK,CE0)

3、IOSimpleSPI(&AD2chM);
 好みの名前を付けたADモジュールにSPIの端子を割り振ります。IOSimpleSPI関数はmain関数の下に記述しておきました。

中身は
unsigned char fio[12];
detect_module(fio);
これはモジュールの位置情報を取ってこいという命令です。
この情報により、モジュールをどの位置に取り付けても自動的に探し出すことができます。

savePinSetting(0, IO_13, IO_REG_IN_DIR, fio[0]);

これはwiringpi の設定で拡張モジュールの0番端子に、IOの13番をRaspberry Pi 側に入力する方向に割り振れ という命令を記録しています。

BOOST_MODE は追々説明しますが、配線の切り替え処理を高速化するためのものです。

4、main関数のwhile(1)ループ内では、拡張モジュールにアクセスするには

AD2chM.connectModule();
とすると回路が再構築されます。

AD2chM.disconnectModule();
とすると、回路が切断されます。

これを連続的に繰り返して、様々なデバイスを少ピンでもたくさん取り付けることができるようになります。

サンプルプログラムを動かすにはターミナルで
gpio load i2c 1000
gpio load spi
を事前に実行する必要があります。

コンパイルは作業ディレクトリに移動して

g++ Wall -o main main.c MCUGear.cpp MCUGearBase.cpp -lwiringPi
 コンパイルに成功したら

sudo ./main

で実行できます。


2013年9月16日月曜日

Raspberry Pi 入門 3:C言語でLED点滅編

最新情報の目次はこれで、最終的に動画のような物も作れます。
Raspberry Pi Noobsで簡単リモートデスクトップ
WiringPiのセットアップ・・・C言語でGPIOを動かしてみる
Pythonのセットアップ・・・人気のPythonで動かしてみる

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


                                        

以下、昔の記事です。

前回は普通のC言語の使い方を試してみました。

今回はLEDを点滅させるプログラムを作ってみたいと思います。Rasberry Pi はマイコンのように端子が出ています。その端子をC言語で制御してみたいと思います。

LEDの点滅は知ってるから、一気に飛ばしてAD変換、DA変換を知りたい方はこちら

Raspberry Pi の端子(GPIO)を動かすには、いくつか方法があります。
Python
shellスクリプト

C言語だと
bcm2835 ・・・初心者にはちょっとややこしいかもしれませんが、中上級者には良さそうです。(参考:http://www.airspayce.com/mikem/bcm2835/

wiringPi・・・初心者向けに簡単な記述で動かせるようにした物のようです。
(参考:https://projects.drogon.net/raspberry-pi/wiringpi/

今回はwiringPiを使います。これはRasberry Pi を簡単なC言語で動かすというコンセプトの物のようです。

IOの番号はそれぞれ使うものによって違います。詳しくはこちらに掲載されている写真からwiringpi の IOの位置を確認してみてください。

まずはgitをインストールして、
sudo apt-get install git

wiringPiのコピーをビルドします。
git clone git://git.drogon.net/wiringPi
cd wiringPi
 ./build

次に前回helloworld.cを作ったように、blink.cを作ります。
中身をこのサイトにあるサンプルのようにします。

ピンアサインはターミナルでwiringpi readall と打ち込むと、ピン配置とプログラムの番号との対応が分かります。




最後に前回のようにターミナルから/Desktop/C_test/にls cdコマンドを使って移動し、
gcc -Wall -o blink blink.c -lwiringPi
sudo ./blink

とやれば動画のように動きます。動画は見やすいように、動きを1秒おきに改造しました。
止める時は [ctrl] + [c] をキーボードで押せば止まります。





最後にこのサイトのmakefileを使い、Geany側にwiringPiのリンクを貼ります。
Geanyの「ビルドコマンドの設定」をします。




クリックして「ビルド」と「実行」の部分に以下の青い文字を書き加えます。

ビルド gcc -Wall -o "%e" "%f"  -lwiringPi
実行   sudo "./%e"

ワンクリックでビルド、実行ができるようになります。

次回はI2C通信設定をします。