カテゴリー別アーカイブ: Python

Raspberry PI2 + Chainer


Raspberry PI2でAIを試すためChainerをインストールしました。
https://chainer.org/
Pythonは、raspbian9.1に初めからインストールされています。
バージョンは、Python 2.7.13 を使用しました。
以下の物をインストールしました。
sudo apt-get install python-dev
sudo pip install chainer
Chainerは、3.3.0がインストールされました。
テストのため デモプログラムtrain_mnist.pyを実行しました。
sudo python train_mnist.py
動作完了までに112091 秒かかりました。約31時間かかったことになります。
いろいろやってみようと思います。

Google AIY VOICE KIT ASSEMBLY

Google AIY VOICE KITを組み立てます。
カラー冊子のマニュアルに詳しい組立方法が記載されています。
またプロジェクトのホームページにも組立方法があります。
https://aiyprojects.withgoogle.com/voice#assembly-guide
樹脂の支柱を2本取り付けてVoice HATを取り付けます。支柱の取り付けは固いので破損させたり、怪我したりしないように注意してください。

付属品の他に、小さいプラスドライバと両面テープが必要です。プラスドライバは、スピーカ接続に使用します。

ケーブルでマイクボードを接続します。

ボタンケーブルを接続します。

次に箱ケースを組み立てます。

中箱を組み立てます

スピーカをはめ込みます。

中箱を箱ケースに収めます。

ボタンを上蓋にはめ込み配線します。配線ピンを間違えないように接続します。

両面テープは、マイクボードを貼り付けるに使用します。マイクはボードの左右にあり、箱の小さい穴にマイクが合うように貼り付けます。

蓋を閉じて完成です。

次にSDカードを焼き、起動確認します。

Google AIY VOICE KIT


Google AIY VOICE KITを購入しました。
Google AIY Voice Kit
http://akizukidenshi.com/catalog/g/gK-12835/
Raspberry PI3も必要なので同時に購入しました。
RaspberryPi3 Model B (ラズベリーパイスリーモデルビー) element14版
http://akizukidenshi.com/catalog/g/gM-11425
電源も同時に購入しています。
スイッチングACアダプター (USB ACアダプター) 5V3A
http://akizukidenshi.com/catalog/g/gM-12001/


KITには、カラー冊子のマニュアルが付属しており、詳しい説明があります。段ボールケース、拡張ボード、マイクボード、スピーカ、ケーブル、ボタンが付属しています。
SDカードは付属していません。OSイメージは、AIYのホームページからダウンロードできます。
https://aiyprojects.withgoogle.com/voice/#project-overview
まずは組み立てて行こうと思います。

Python De IoT

PythonでIoTを構築しようと思います。
XBeeでセンサーからデータを収集します。mqttを使用し、インターネットを介してデータベースへ上げる。

XStick ZB Japanを使用してシリアルでデータを集めます。
http://akizukidenshi.com/catalog/g/gM-09335/
Pythonの開発環境は、Winodws10にAnacondaを使用してインストールしました。
https://www.continuum.io/why-anaconda
IEDは、PyCharmを使用しました。
https://www.jetbrains.com/pycharm/
コマンドラインを使わずデバッグまでできて便利です。

MySQL ON RENTAL SERVER

IoTのサーバ側の準備をしています。
格安のロリポップのロリポプランを使用しています。
http://lolipop.jp/
今回はデータベースを使ってみます。ロリポップは、MySQLの使用が出来ます。

■テーブルの準備
レンタルサーバにテスト用のテーブルを作成しておきます。プランがロリポプランのためMySQLのデータベースは1個しかあリません。Wordpressに使っているデータベースにテーブルを追加しました。
3列のテーブルを作成し、2行レコードを追加しました。
Id、item、 value
1、 command、0
2、 status、 1

MySQLのドライバは、MySQL-pythonを使用しました。ちなみにMySQL公式のmysql-connector-pythonは使用できませんでした。
以下、データベースの読み込みサンプルです。
################################

#!/usr/bin/python2.7
# coding: UTF-8

import cgi
import os
import MySQLdb

def connect():
return MySQLdb.connect(host=”サーバ名”, db=”データベース名”,
user=”ユーザID”, passwd=”パスワード”, charset=”utf8″)

def get(form):
print “Content-Type: text/html; charset=utf-8”
print
print “<html><body>”

# 一覧表示
conn = connect()
curs = conn.cursor()

sql=”SELECT * FROM roomba_ctrl”
curs.execute(sql)
result = curs.fetchall()
for row in result:
print “<h2>”
print “id=”
print row[0]
print ” : item=”
print row[1].encode(‘utf-8’)
print ” : val=”
print row[2]
print “</h2>”

curs.close()
conn.close()
print “</body></html>”

def err():
print “Content-Type: text/html; charset=utf-8”
print
print “<html><body>”
print “<p>ERROR!!</p>”
print “</body></html>”

def main():
form = cgi.FieldStorage()
if os.getenv(“REQUEST_METHOD”) != “GET”:
err()
else:
get(form)

if __name__ == “__main__”:
main()

################################

以下、サンプルURLです。
http://spineedge.com/CGI/dbget.py

このテーブルにXBee WiFiでDBに読み書きしたいので
spineedge.comのIPアドレスを調べます。pingを投げて確認します。
203.189.109.118
と判明しました。
XCTUで設定&テストを行いました。

テーブルからのGETを行いました。
STATUSが読み出せました。
get

テーブルへのPOSTを行います。
COMMANDが書き込めました。
post

データベースからテーブルを読み出したところCOMMANDのvalに3が設定されているのが確認出来ました。
dbase

これでXBee WiFiでインターネット上のサーバのデータベースの読み書きが出きるようになりました。マイコンを使ったIoTに一歩近づきました。

Python CGI

IoTのサーバ側の準備をしようと思います。
このブログは、レンタルサーバを利用しています。格安のロリポップのロリポプランを使用しています。
http://lolipop.jp/
CGIが使えるのでサーバアプリを構築します。
言語としてはPerl 、Ruby、Pythonが利用できます。本当は、node.jsが使いたかったのですが対応していないので、一番使用者が多そうなPythonを利用します。Pythonは、2.5と2.7が用意されていますが、2.7でCGIを作成します。

test.pyの例
http://spineedge.com/CGI/test.py
###############################
#!/usr/bin/python2.7
# coding: UTF-8

print “Content-Type: text/plain”
print
print “Hello World! Python CGI!”
################################

1行目がpythonのインストールパスです。
#!/usr/bin/python2.7
2行目がファイルの文字コードの指定です。ここではutf-8 を指定しています。ファイルに保存するときは UTF-8 で保存してください。
print “Content-TypContent-Typeは送信されたデータの内容がどのようなものかを示します。
出力する内容はテキスト(text/plain)であることを示しています。
HTML文書の時は text/html を指定します。
print7行目はヘッダと本体(ブラウザに表示される部分)を分ける空行です。
print “Hello World!Python CGI!”
8行目はブラウザに出力する文字ダブルクオーテーション3つ(“””)で囲むと、複数行にわたる文字列を記述できます。
Pythonでは、ソースコードのうち#から文末がコメントと見なされます。 また、ソースコードの先頭にある「#!」で始まる文はLinux等で動かす時のPythonのパス、「#coding:」で始まる文はソースコードに用いる文字コードの指定に使います。

HTTPでのデータのやり取りを行ってみます。
GET/POSTの例
###############################
#!/usr/bin/python2.7
# coding: UTF-8
# ゲット、ポストテスト
import cgi
import os
print “Content-Type: text/html¥n”
print “<html>”
print “<head><title>SETTING TEST</title> </head>”
print “<body>”
html=”””<h1>Setting Form</h1>
<hr>
<form name=”Form” method=”GET” action=”./settest.py”>
name: <input type=”text” size=”30″ name=”name”>
mail: <input type=”text” size=”30″ name=”e-mail”>
<input type=”submit” value=”GET submit” name=”button”></form>
<form name=”Form” method=”POST” action=”./settest.py”>
name: <input type=”text” size=”30″ name=”name”>
e-mail: <input type=”text” size=”30″ name=”e-mail”>
<input type=”submit” value=”POST submit” name=”button”></form>
“””
print html
form = cgi.FieldStorage()
form_check = 0
if form.has_key(“name”) and form.has_key(“e-mail”) :
form_check = 1
if form_check == 0 :
print “<h2></h2>”
else :
if os.environ[‘REQUEST_METHOD’] == “GET” :
print “<h2>GET METHOD</h2>”
elif os.environ[‘REQUEST_METHOD’] == “POST” :
print “<h2>POST METHOD</h2>”

print “<b>name: </b>”, form[“name”].value
print “<b>e-mail: </b>”, form[“e-mail”].value
print “</body></html>”
################################

GETメソッドでもPOSTメソッドでもほとんどコードに違いはありません。
サンプルを以下URLに入れました。
http://spineedge.com/CGI/settest.py
CGI

© 2014 Spineedge Corporation.