Raspberry PiのケースはPibow Coupe(パイボークーペ)が可愛い
娘可愛い話を書きたいけど将来恨まれる可能性があるので、最近買ったRaspberry Piのケースが可愛い話をします。
続きを読むRaspberry Piで監視カメラを作る
遠隔地に生後間も無い娘がおるのですが、なかなか嫁が写真を送ってくれません。 娘の写真が欲しければ自動的に撮影する方法を考えれば良いのです。
続きを読むPostgreSQLのテーブルに他テーブルを結合する(行として加える)
例えばTable1とTable2があって、カラムは同じだとする。各々300行あって、いまんところ300行×2テーブルあるのだけど、これを600行の1テーブルにまとめたい。こういう場合にはINSERT INTOを使うと良い。
INSERT INTO Table1 SELECT * FROM Table2
あんまりよくわかってないのがPostgresにおけるシングルクオートとダブルクオートの違い。単純な文字列の場合はシングルクオート使う。カラム名なんかはダブルクオート使うでいいのかな。
SELECT文の書き方で、テーブル中の必要要素だけを取り出して加えることができる。
INSERT INTO Table1 SELECT "UserId" FROM Table2
とか。
PostgreSQLにテキストデータ(CSVやTSVファイル)を格納する
PostgreSQLはCSVやTSVなどのテキストファイルを読み込んで、テーブル上に格納することができます。ここで使うのはPostgreSQLのCOPYコマンドです。
事前準備
取り込むもとになるテキストデータが存在する場所のアクセス権設定しだいでエラーが出る場合があります。 雑なやり方ですが、Windows環境の場合ではProgram Files¥PostgreSQL以下にデータインポート用のフォルダをつくってしまい、ユーザ名postgresにアクセス権を全付与してやると良いです。
やり方が環境に依存しますので(Win7の場合はPostgresにアクセス権付与した気がするし、Win8はデフォルトUserにアクセス権付与でOKなような気が)、一律にやり方を書きだせません。なんかエラーが出たらコメントで教えてもらえると助かります。
ファイルを格納する前にデータを取り込むDB&テーブルを作成しておきます。当然ですが、投入するテキストデータのデータ形式に合わせないといけません。
CREATE TABLE 'UserList' ( 'UserId' integer, 'UserName' text )
数値のデータを入れるカラムは数値型(intとか)。文字列を入れるのなら文字列型(textやvar charとか)を指定しましょう。
DBの作成方法は省略していますが、pgAdminでサーバを右クリックして「新規DB作成」ですぐに作成できます。
今回入力するテキストデータはユーザID(UserId)、ユーザ名(UserName)の二種類が入ってると仮定しています。テーブル名はUserList。PostgreSQKのCREATE TABLEを使ってテーブルを作成しました。pgAdminでSQLエディタを起動してから、上述のクエリを流し込むとテーブルができると思います。
TSVファイルの格納
Postgresのデフォルトはタブ区切り(TSV)なので、まずタブ区切りのファイルを読み込ませる方法から。PostgreSQLの配下にImportという名前のフォルダを作ってアクセス権を付与したとして、ファイルUserList01.tsvを読み込むためには
COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList01.tsv';
こんな感じでSQLを書きます。複数ファイルがあっても大丈夫。
COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList01.tsv'; COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList02.tsv'; COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList03.tsv';
下の書き方をするとデータがテーブルに追加されていきます。いわゆる追加(Append)のような挙動です。
CSVファイルの格納
CSVファイルの場合は引数をつける必要があります。
COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList01.tsv' USING DELIMITER '.';
USING DELIMITER以下の文字を変えることで、他の形式にも対応できるので、変な区切り文字でも大丈夫。
ArduinoとAM2302を使って温湿度センサを作る
以前satzzさんから教えて貰った内容の忘備録。同じものを作ろうと試みたら結構時間がかかってしまったので。
使用するのはArduino Uno と温湿度センサAM2302。
両方とも秋葉原で買える。AM2302はeBayなんかを使うと半額程度で調達できるみたいです。
配線
データシートを見たら書いてあるけど、せっかくなのでFritzingを使って配線図をおこしてみました。 使うのはArduino、AM2302、ジャンパーピン、10Kオーム抵抗などなど。
プログラム
参考にしたのは以下。
今回使っているAM2302は専用のライブラリがあるのでダウンロードしてArduinoのライブラリフォルダに叩き込みます。これを知らなかったので、センサが謎の3を吐き出す装置に成り下がっていました。
ダウンロードのやり方はgitから
$ git clone https://github.com/adafruit/DHT-sensor-library /Applications/Arduino.app//Contents/Resources/Java/libraries/DHT
Arduinoのライブラリフォルダは環境に依存するので調べてください。ここらへんで言ってるArduinoは機器名称じゃなくてArduino IDE。これを指してる。
コードはとりあえずsatzzさん作のものをそのまま使う。
#include <DHT.h> #define DHTTYPE DHT22 #define DHT22_PIN 7 DHT dht(DHT22_PIN, DHTTYPE); void setup() { pinMode(DHT22_PIN, INPUT); Serial.begin(9600); } char ch[10]; char ct[10]; void loop() { float h = dht.readHumidity() ; float t = 5.0/9.0*(dht.readTemperature(true)-32.0); // fahrenheit -> celsius dtostrf(h, 6, 2, ch); dtostrf(t, 6, 2, ct); String postData = "{humidity:"; postData.concat(ch); postData.concat(",temperture:"); postData.concat(ct); postData.concat("}"); // Serial.print("POST /api/measurements HTTP/1.1\r\n"); // Serial.print("Content-Length: " + String(postData.length()) + "\r\n\r\n"); Serial.println(postData); delay(1000); }
これでArduinoから書き込んで、シリアルポートを読みだしてやると温度湿度がとれるはず。
RaspberryPiでBluetooth通信(デバイス認証)
自宅内にBluetoothネットワーク網を作りたい。 各種センサーデータをBluetoothで飛ばして未来の家を作るのだ。
センサーデータ集約のための子機はArduino(互換)+BLEで構築したいのでBlend Microを使う予定。まだ買ってない。
親機は自宅のUbuntu Serverを使う予定。テストとしてRaspberry PiとMacbookでBluetooth通信を試す。
BlueZのインストール
BluezはLinuxベースのOS上で動くBluetoothプロトコルスタック。
Bluetoothのはなし(4)|Wireless・のおと|サイレックス・テクノロジー株式会社
こまかな仕様は上記リンク先を参考に。内容が重たいっす。。
インストール自体はパッケージマネージャから簡単にできた。
pi@raspberrypi ~ $ sudo apt-get install bluez
ドングルを差し込んでhciconfigで確認する。
pi@raspberrypi ~ $ hciconfig hci0: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:09:A5:BD ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:3043 acl:0 sco:0 events:83 errors:0 TX bytes:1292 acl:0 sco:0 commands:75 errors:0
UP RUNNING PSCANになっているので動いてる。 iPhoneやAndroid端末のBluetooth設定画面から、ペアリングモードにしてhcitoolを使う。
pi@raspberrypi ~ $ hcitool scan Scanning ... AC:22:0B:9C:CC:61 Nexus 7
ペアリングモードに入ってたNexus 7が見えた。
Macbook AirのBluetooth設定開いた状態で同じくコマンドを打つと。
pi@raspberrypi ~ $ hcitool scan Scanning ... AC:22:0B:9C:CC:61 Nexus 7 B8:8D:12:19:03:03 MacbookAir
これも見えた!