2017-12-28 13:49 | カテゴリ:コンピュータ

旅行の「始末記」に追われて、ラズパイの記事が少し遅れていましたので、ちょっとアップデートしておきたいと思います。

前回までに、再度インストールして、ラズパイでプログラム開発が行える環境になりました。


(RP0301)
RP0301.jpg

加えて、WIN10のPCからRasPiにリモートログインして、開発も出来るようになりました。

(RP0302)
RP0302.jpg


言語は、今回はPythonに改めて取り組みたいと意気込んでいます。
前回はC言語と比較して、あまりに作法が異なり、挫折してしまいましたが、今回は「教科書」を奮発して、一から勉強する事にしました。

購入した本は、「Pythonの教科書」です。
これ、わかりやすくてよかったです。

(RP0303)
RP0303.jpg

続きは、、、、



文法は勿論ですが、本当の初歩の動作(printやinputなど)から変数や配列(Pythonではlistといいます)、さらには実用のプログラム作成まで解説してあり、時代に慣れてきました。
しかし、C言語の様に、for文などでは{や}で区切りをつけるのではなく、インデントで示しますので、ちょっと混乱します。
また、各文の終わりには、何も記述しません(C言語だと;を付けますが)。
しかし、for文やwhile文などには、:を付けます。
この辺りも混乱します。(バグの元)(笑)


初めは、教科書に従って、数行のプログラムを打ち込んで作法と動作を確認していましたが、次第に慣れて、簡単な物を作ってみました。

プログラムの例1)

# サンプル1
# format文には直接定数(数字、文字)を与えても変数でもOK

print("私は{name}です。".format(name = "Vivid"))

fmt = "年齢は、{age}才です。{job}をしています。"
nage = 20
njob = "Everyday Sunday"
s = fmt.format(age = nage, job = njob)
print(s)


(コンソールIDEのShellからの実行結果)


Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
============ RESTART: X:\Python_Prog\PythonProg_TRNG\SampleP49.py ============
私はVividです。
年齢は、20才です。Everyday Sundayをしています。
>>>




プログラムの例2)

# サンプル2
#名前をプロンプト付きで入力
name = input("What is your name ?")
#名前を表示
print("My name is " + name)

age_moji = input("How old are you ? ")
age = 2017 - int(age_moji)
msg = "You were boarn in {0}".format(age)
print(msg)



(コンソールIDEのShellからの実行結果)


Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
============ RESTART: X:\Python_Prog\PythonProg_TRNG\SampleP50.py ============
What is your name ?Vivid
My name is Vivid
How old are you ? 20
You were boarn in 1997
>>>



(コンソールからリアルタイムに順次実行)

>>> a=10
>>> b=20
>>> a+b
30
>>> a="ABCDEF"
>>> b="GHIJK"
>>> a+b
'ABCDEFGHIJK'
>>>


なんだか解ってきた感じです。(の、つもり)
こうなってくると、次のステップに。

まずは、先日までPICのXPLABで製作していたC言語の「マトリクスLEDをSPI通信で制御」するプログラムを、このRasPiに置き換えてみることにチェレンジします。

XC8で製作したプログラムの関数を一つ一つPythonに置き換えてやれば、一つずつ動作確認も出来るし、勉強にもなるし、一石二鳥です。

(配列の定義)
XC8の場合


unsigned char seg_buff[16] = {

0, 1, 2, 3, 4, 5, 6, 7, 8}; // セグメントモードでのデータバッファ




Pythonの場合(注:#はコメント行です)

# 文字変換用文字

Buff
Chr_Buff = [

0x00, 0x7f, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00# Fのドットパターン(例題)

]





{と[の違いで、よく似ています。
でも、Pythonでは、

XC8の様に

unsigned char buff_data[8] = 0;

とか

unsigned long mtx_data[9][4] = 0;

の様に定義できません。

arr = [[0 for i in range(3)] for j in range(5)]

こんな風にfor文で設定します。(これには結構まいりました)

幾つかのサイトを参考にさせて頂いて、これまでの関数を置き換えていきました。


(LEDのテストモード)

XC8

int j;

Load_data = 0;
for (j = 0; j <= units * 4 - 1; j++) {
SPI1_Exchange8bit(0x0f); // テストモードコマンドのアドレスを送出(Bit8-15)
SPI1_Exchange8bit(1); // テスト点灯=1 を送出
}

Load_data = 1; // 立ち上がりでデータをロードする
Load_data = 0;



Pyhton



GPIO.output(24,GPIO.LOW) #CSをLOW


for i in range(16):

resp = spi.xfer([0x0F])

resp = spi.xfer([sw])



GPIO.output(24,GPIO.HIGH) #CSをHIGH

GPIO.output(24,GPIO.LOW) #CSをLOW


なんか似てますよね?

for文などは、range()関数で繰り返しの回数が直接設定できて簡単です。
range()関数は、多様な設定ができるようですが、簡単な使い方としては、

range(4)

として、簡単に4回繰り返すという設定が出来ます。


さて、これからRasPiでどうするか??
色々な参考書やWEBを参考にして、ネットから天気予報データを取り込んで音声でアナウンスする様な事に挑戦していきたいと思います。

よろしければ、またお付き合いいただければ幸いです。

関連記事

管理者のみに表示する