ホーム » スタッフ » 斉藤徹 » Computer (ページ 8)

Computer」カテゴリーアーカイブ

2025年5月
 123
45678910
11121314151617
18192021222324
25262728293031

検索・リンク

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との接続速度増強のための工事と、 色々関係があるかもしれないけど、詳細は不明だそうな。 ま、その辺は、業者の方に「お・ま・か・せ!」

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー