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