Arduinoイーサネットシールドを使ってみた
創造工学演習でハードウェア系を作るネタの導入として、 Ethernet シールド付き Arduino を動かしてみた。単なるメモなので…
// 雛形のスケッチは、 // ..PATH../Arduino.app/Contents/Resources/Java // /hardware/libraries/Ethernet/examples/WebServer/WebServer.pde #include <ethernet.h> byte mac[] = { 0x02 , 0x11 , 0x22 , 0x33 , 0x44 , 0x55 } ; byte ip[] = { 192 , 168 , 2 , 88 } ; // byte gateway[] = { 192 , 168 , 2 , 1 } ; // byte subnet[] = { 255 , 255 , 255 , 0 } ; // Class-C Server server = Server( 80 ) ; void setup() { Ethernet.begin( mac , ip , gateway , subnet ) ; server.begin() ; Serial.begin( 9600 ) ; // 動作確認用に受信データを表示 } void loop() { Client client = server.available() ; if ( client ) { // an http request ends with a blank line boolean current_line_is_blank = true; while( client.connected() ) { if ( client.available() ) { char c = client.read(); Serial.write( c ) ; // 動作確認用に、受信データを表示 // if we've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so we can send a reply if ( c == '\n' && current_line_is_blank ) { // send a standard http response header client.println( "HTTP/1.1 200 OK" ) ; client.println( "Content-Type: text/html" ) ; client.println(); // output the value of each analog input pin for (int i = 0; i < 6; i++) { client.print("analog input "); client.print(i); client.print(" is "); client.print(analogRead(i)); client.println("<br />"); } break; } if (c == '\n') { // we're starting a new line current_line_is_blank = true; } else if (c != '\r') { // we've gotten a character on the current line current_line_is_blank = false; } } } // give the web browser time to receive the data delay(1); client.stop(); } }
上記プログラムを検証&書き込みの後、ブラウザで http://192.168.2.88/ にてアクセスする。すると、シリアルモニタには下記の出力が得られた。 後半は、ブラウザがfavicon.icoを取得しようとしたアクセスが行われている。 しかし上記のプログラムは、何をGETしようとしたのか判別せずに、リクエスト末尾の 『空行』を見つけたら、アナログ値を出力しようとするだけ。 このため、Reload する度に、2回アナログ値サンプリングが行われる。
GET / HTTP/1.1 Host: 192.168.2.88 Connection: keep-alive User-Agent: Mozilla/5.0 ...Safari/532.5 Cache-Control: max-age=0 Accept: application/xml,application/xhtml+xml,text/html;... Accept-Encoding: gzip,deflate,sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Accept-Charset: UTF-8,*;q=0.5 GET /favicon.ico HTTP/1.1 Host: 192.168.2.88 Connection: keep-alive User-Agent: Mozilla/5.0 ...Safari/532.5 Accept: */* Accept-Encoding: gzip,deflate,sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Accept-Charset: UTF-8,*;q=0.5
ブラウザで、http://192.168.2.88/ で表示された結果は、下記の通り。 ちなみにアナログポートは、実験だし開放のまんまで、ゴミデータ。
analog input 0 is 393 analog input 1 is 331 analog input 2 is 282 analog input 3 is 286 analog input 4 is 269 analog input 5 is 284
Arduinoのloop()の外
卒研テーマにArduino+Ethernetシールドで何か作れないかと、個人的&指導的に Arduinoの中身を確認中。
Arduinoって、setup()とloop()を書けば動き出すんだけど、 Ethernetシールドのサンプルプログラムで、setup()の中に 様々な処理が書いてある。確認する前は、main()って、以下のような物だと思ってた。
int main() { ArduinoのCPUの違いに応じたinit() ; init() ; ArduinoのCPUの違いに応じたsetup() ; setup() ; for(;;) { 周辺IO関連関数に伴なう処理() ; loop() ; } return 0 ; }
みたいなもんだと思ってた。だから setup() の中身に、何でも処理を書くと、 IOに絡む関数で動かなくなるものが出てくるだろう…と思っていたが、 /PATH/java/hardware/core/arduino/main.cxx を見ると、 順次必要な処理が並んでいるだけ。
int main( void ) { init() ; setup() ; for(;;) loop() ; return 0 ; }
これなら、IO系のシールドのライブラリ書く人は大変かもしれんが、 訳の分からない処理の制約はないな…
TeraStationにAppleTalkを入れて文字化け対策
TeraStation を使っているが、Windowsファイル共有のファームウェアが、samba 2.x 系 であるため、Mac,Linuxからマウントすると漢字ファイル名が文字化けしてしまう。 "mount -t cifs …. iocharset=xxx,codepage=xxx" などを色々試すが、やっぱり無理。
ひとまずMac側からは、TeraStation 側で AppleTalk を動かし afp で接続したら、 文字化け問題はなくなった。 相変わらず、Linux 側からは文字化け。"mount -t afp" のネタを探すけど、 見つからない。
管理サーバのアップデート(2009/6/18)
管理しているサーバのアップデート作業を行う。
UNIX、40才
OSにおけるLinuxなどの基本であるunixが、今年で40才になったそうな。 このおかげで、時間が1970年からの経過秒数なんていう話も、 ここが発端。途中には、経過秒数が2^31を超えてトラブルがおこったりと、 色々あるわけだが….
ちなみに私は44才。ほぼ同年齢なのね。 ちなみに、どうでもいい話だけど、今日は6月9日「ロックの日」だそうな。 でもビートルズだって、1962年デビュー。 unixだって、ロックだって、文化という意味では、まだまだ若い。
LinuxでTimeMachineサーバ構築
Macを使い始めたけど、簡単なバックアップ環境でTimeMachineが便利らしい。 だけど、外付けのハードなり、TimeCapsule のようなものを購入するのはもったいない。 しらべてみると、やっぱりそーゆーネットワークサービスは、Linuxマシンで代用できるらしい。
追記:うーん、うまくいかない…ディスクイメージをコピーした先をTimeMachineが うまく参照していない様子。
追記:ようやくうまくいった。ディスクイメージを移動しディスクイメージサイズを変更した後、 パーティションの情報も広げてやらないとダメ。
追記(2009/5/18):TimeMachineの最初ということで、バックアップを開始するが、 いつも使っているWi-Fiで動かして、半日放置でも20GBのうちの2GBほどしか 保存されていない。まあ、Wi-Fiなんだからそんなもんか…
ということで、初回バックアップくらい有線に切り替えてやり直し。
unixなんだけど、Mac OS Xは癖が強い
今まで、ずーっと避けていたMac OS/X だけど、 MacBookを使い始めて、いろいろと試している。 手始めとしてWebアプリ開発の実験環境とするために、 MAMP(Mac+Apache+MySQL+PHP)によるWebサーバ環境を動かす。
しかし、Linux環境で動かしていたスクリプトとのPATHの違いを 吸収するために、設定を色々と変更するが unix とはいえ、 サーバ設定の定番がことごとく違う。
/homeがautomounterに?
/homeの配下が空っぽだったので、"ln -sf /Users/username /home/username"を しようとすると、拒否される。"df"で確認すると、automounter に 使われている。 モバイル的に使うノートパソコンじゃ NIS やらを使う予定もないので、 /etc/auto_master の "/home"の設定をコメントアウト。
/etc/init.dが無い…
automounterの設定を触ったので、"/etc/init.d/autofs restart" らしきことを やろうと思ったが、init.d も rc.local も無い。 うーむ、/System/Library/StartupItems or /Library/StartupItems あたりを 記述するらしいのだが、"ちょっとくらいPOSIXといった普通を取り入れてよ…"と ぼやきたくなる…
福井高専ネットワーク対外接続トラブル(3/31 22:00~4/1 11:00)
対外接続のFirewallのトラブルで、対外接続が 3/31 PM10:00頃から現在(4/1 AM10:00)まで、接続できない状態です。
# エープリルフールネタではありませんよぉ…
追記: 4/1 AM11:00 頃より、ようやく復旧しました。
サーバモニタ(nagios)から、学内の接続断の警告メールが、 復旧とともに遅ればせながら「大量」に流れ込んできます….
学内で昨日行われたSINETとの接続速度増強のための工事と、 色々関係があるかもしれないけど、詳細は不明だそうな。 ま、その辺は、業者の方に「お・ま・か・せ!」