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に一歩近づきました。

Raspberry Pi2 Model B

ラズパイ2です。ラズパイ1に比べてとにかくハイパワーです。
Jpeg
秋葉買出し物件です。千石電商で購入したRaspberry Pi2です。ケースも一緒に買いました。
https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4PPM
https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4PLB
購入したのは、RS版です。購入時特に指定していません。指定買いする人いるのかな?
https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4R3F
Jpeg
めちゃくちゃ進化しています。
CPUは、700 MHz/ARM1176JZF-S 1コアから900MHz/ARM Cortex-A7 4コア、メモリは512MBから1GBへ倍増。
Jpeg
裏側です。SDカードは、マイクロになりました。
Jpeg
LANポートとUSBポートです。USBは4口あります。
Jpeg
電源用のマイクロUSBとHDMIとコンポジット&音声です。
Jpeg

OSはDebianをベースにした「Raspbian」をチョイスしました。といっても、面倒を省いてインストーラである「NOOBS」をダウンロードしてmicroSDにコピーするだけです。
起動画面、CPUのクアッドコア化の証、ラズベリーが4個です。
Jpeg
デスクトップ画面には、でかいラズベリー。
Jpeg
ブラウザを開いたところです。余裕です。
処理能力が向上したのでデスクトップPCとして使用できます。
ラズパイ1のようなイライラはありません。
ちょっと前のスマホ並の性能があるので当然なのですが・・・・・。
Wifiは、ロジテックのLAN-W300N/U2Sを使用しました。特に認識に問題ありません。本当は、より小さいバッファローのWLI-UC-GNMを使いたかったのですが、熱くなりすぎて不安だったので交換しました。ラズパイ1よりラズパイ2の方がボード温度が高いような気がします。

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

MySQL on Beagleboard-xM

Jpeg
まずMySQL のインストールします。
sudo apt-get install mysql-server
これだけです。

MySQL の動作確認します。
sudo mysql
・・・・・管理プロンプトに入ります。
mysql> show databases;
mysql> quit
Jpeg

MySQL の初期設定
root ユーザーのパスワードが設定されていないので新たに設定します。
mysqladmin -u root password **********
パスワード設定後は、-pオプションをつけてログインすることになります。
~$ sudo mysql -u root -p

起動設定を行っておきます。
sudo update-rc.d mysql defaults

次にキャラクターセットの変更をします。
MySQL側のキャラクタセットをutf8に変更するため、/etc/mysql/my.cnf を編集します。
my.cnf において[mysqld]、[mysql]の各セクション中に文字セットとしてutf8を指定する以下の記述を追加します。

/etc/mysql/my.cnf
[mysqld]
character-set-server = utf8
skip-character-set-client-handshake
[mysql]
default-character-set = utf8

~$ sudo /etc/init.d/mysql restart
MySQLの再起動をし、設定の確認を行います。
~$ sudo mysql -u root -p
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)

データベースの作成を行います。
CREATE DATABASE testdata1 DEFAULT CHARACTER SET utf8;
testdata1と言うデータベースを作成します。

mysql> USE testdata1;
使用するデータベースを指定します。

mysql> CREATE TABLE table1 ( id int, name varchar(100) );
table1というテーブルを作成します。項目(フィールド)ごとに整数値か文字列かという指定をする必要があり、この場合は”idという整数値”と”nameという文字列”の2つの値から成るテーブルを作成しています。

mysql> SHOW TABLES;
テーブルのリストを表示します。新たに、table1というテーブルが加わっているはずです。

USE testdata1;
の実行前なら、SHOW TABLES FROM testdata1;という形でデータベース名を指定する必要があります。

レコードの追加をします。
mysql> insert into table1 (id, name) values(1,’John’);
table1テーブルへデータ(名前)を登録
レコードの追加の確認
mysql> select * from table1;
テーブルの一覧が表示されます。
Screenshot_from_2015-06-20 21:17:56

ボードの下にSSDを配置しています。
Jpeg
OSがDebian、NAS機能とRDB機能があるサーバとなっています。

XBEE Wifi HTTP TEST

Jpeg
IoTの環境構築一環で組込機器のネットワーク接続にXBee Wifiを使用しようと考えています。
まず、XBeeの設定をします。X-CTUを起動してXBeeモジュールと接続します。
WifiのAPの設定は環境に合わせてください。
その他は、以下のようにします。
・Network Type → TCP
・Destination Port → 0x50 (80番ポート:HTTP)
・Source Port → 0x50(80番ポート:HTTP)
・Destination IP Address → 接続先のIP(google.co.jpの場合:74.125.203.94)

X-CTUのターミナル画面から次のようにgoogleにGETリクエストを投げます。
GET /search HTTP/1.1
Host: www.google.co.jp
Connection: close
(1行改行)

googleからの応答が返って来ました。
XCTU
XBee WifiでHTTPリクエストできる準備ができました。

Cloud9 IDE

IoTのサーバ側も勉強しようと思い、環境をNode.jsで考えていたのでCloud9に登録してみました。
https://c9.io/
上のURLにアクセスします。[Sign up]ボタンよりアカウントを登録します。無料のスタンダード版とプレミアム版がありますが、まずは、無料版で使ってみます。登録が済みサインインするとダッシュボード画面が表示されます。まず、左ペインの[Create a New Workspace]ボタンを押して,表示されたダイアログに任意の名前(Name your workspace)を入力します。Workspace Privacyには、[Private to the people I invite]を選んで,Hostingには[Hosted]を選択して [CREATE] ボタンを押します。
左ペインの作成したワークスペースが表示されます。「processing」状態となります。しばらく待ちます。「processing」が「1 workspace member」になったら完了です。
「START EDITING」ボタンを押してください。IDE画面の画面が別に起動しました。
Cloud9
Workspaceの下にTeminal画面が表示されていますので使ってみます。 node.jsのバージョンを調べたところv0.10.35でした。 npmのバージョンは、1.4.28でした。
すでにserver.jpというサンプルが入っています。 実行してみました。チャットアプリです。以下が実行場所となります。 https://ワークスペース-ユーザID.c9.io/ 2個ブラウザで開いて動きを見たところ無事チャットが動きました。
Chatapp

Blackfin DSP

Jpeg
http://www.kumikomi.net/interface/contents/blackfin_dsp.php
Analog DevicesのDSPを搭載したDSP基板と共に
「音遊び!Blackfin DSP基板でディジタル信号処理初体験」本も一緒に購入しました。さらに楽器用エフェクタ向きの開発プラットホーム「MADSP-BF592-BASE」ベース基板も同時購入しました
この商品を見たとき久しぶりにギターを弾いてみようと思いました。基板は用意できましたが、まずは、ギターの弦を張り替えなければなりません。ぼちぼち始めていきます。

Samba on BeagleBoad-xM

先日、Beagleboard-xMに入れたDebianに余っているSATA2のSSDを繋げてNAS化しました。
■ntfsでフォーマットしてあるのでntfs-3gをインストールします。
$ sudo apt-get install ntfs-3g
■続いてSambaをインストールします。
$ sudo apt-get install samba
■マウントフォルダを作成します。
$ mkdir /mnt/usb/ntfs
フォルダのアクセス権をフルアクセスにします。
$ chmod -R 777 /mnt/usb/ntfs
■デバイスをマウントします。
$ sudo mount /dev/sda1 /mnt/usb/ntfs
ドライブのアクセス権もフルアクセスにします。
$ sudo chmod -R 777 /dev/sda1
■fstabを変更します。
自動的にマウントするために/etc/fstab に追記します。
/dev/sdb1 /mnt/usb/ntfs ntfs-3g defaults,rw,umask=000 0 0
■sambaの設定ファイルを書き換えます。
/etc/samba/smb.confを編集します。
まずは、設定のバックアップをしておきます。
$ sudo cp -p /etc/samba/smb.conf /etc/samba/smb.conf.bk
vimで開きます。
$ sudo vim /etc/samba/smb.conf
以下/etc/samba/smb.confの編集内容です。
[global]
client code page = 932
coding system = cap
dos charset = CP932
unix charset = EUC-JP
display charset = EUC-JP

[usb]
comment = USB HDD
path = /mnt/usb/ntfs
public = yes
guest ok = yes
browseable = yes
read only = no
writable = yes
force user = debian
mangled names = yes
mangle case = no
default case = lower
preserve case = yes
short preserve case = yes

■Sambaの再起動を行います。
$ sudo service smbd restart

■WindowsからLinuxのファイルシステムにアクセスしてみます。
Windows のexploreでパスを”¥¥hostname¥username”と直打すると、USB接続したSSD HDDににアクセスアクセスで来ました。ファイルのコピー、削除、編集も出来ましたが、日本語ファイル名には対応で来ませんでした。日本語ファイル名は、 この目的で使用しないのでこのままとします。
当然LINUXからもアクセス出来ます。
Screenshot_from_2015-06-02 00:16:20

Debian on BeagleBoad-xM

秋葉買出しでボードが増えたので整理しています。最近あまり使っていないBeagleboard-xMをサーバとて使用できないか思案中。とりあえずDebianを入れてみました。
バイナリイメージをダウンロードして使用します。以下サイトからダウンロードします。
BeagleBoardDebian
http://elinux.org/BeagleBoardDebian
Debian (jessie) Image Updated:2015-05-08
Beagle xM: v4.0.2-armv7-x2 kernel
イメージを取得します。
$ wget https://rcn-ee.com/rootfs/2015-05-08/microsd/bbxm-debian-8.0-console-armhf-2015-05-08-2gb.img.xz

圧縮ファイルを解凍します。
$ unxz bbxm-debian-8.0-console-armhf-2015-05-08-2gb.img.xz

SDカードに焼きます。
$ sudo dd if=./bbxm-debian-8.0-console-armhf-2015-05-08-2gb.img of=/dev/sdb

SDカードをBeagleboard-xMに挿して起動します。
ユーザ名: debian
初期パスワード: temppwd

最初の起動後SDカードのパーティションをリサイズします。
$ cd /opt/scripts/tools
$ git pull
$ ./grow_partition.sh
$ sudo reboot

Screenshot_from_2015-05-22 22:41:36

再起動後にシステムを更新します。
$ sudo apt-get update
$ sudo apt-get upgrade

今回はCUIで使用する予定です。Ethernetは、eth0でDHCPでそのまま認識します。
設定ファイルのの編集用にvimを入れておきます。
$ sudo apt-get install vim

タイムゾーンの変更をTokyoにしておきます。
$ dpkg-reconfigure tzdata
これで設定画面が立ち上がります。

最後にパスワードを変更してとりあえず終了します。
$ sudo passwd

LPC810 ACGUY LED MONO-EYE

ガンプラにLEDをつけてみました。小さい8PIN DIPのLPC810を使用しました。駆動は、CR2032のボタン電池で3Vで駆動します。
Jpeg

モノアイだけでなく頭部バルカンにもLEDを内蔵しましたが穴が小さく点滅がほとんどわかりません。
モノアイは、単純なON/OFFではなくPWMでゆっくり明るさを変化させて点滅させました。LPC810のタイマは、SCT(State Configurable Timer)というちょっと複雑な動作が組めるタイマが入っています。Red Stateという特別なエディタで機能を設定します。
sct_LPC810

基板を内蔵するほど小さくできなかったので抱えた状態です。
Jpeg

© 2014 Spineedge Corporation.

組込み技術向上のため、エンベデッドに関する話題中心のブログです。