これまでさくらのVPSではUbuntu10.04LTSをリモートデスクトップとして動かしてきたのですが、やはりサービスを何かさせてくなってきました。・・・となると、やはりCentOSか・・・というわけで、CentOSに入れ替えてみました。
注意:以下の記述は試行錯誤の上で、「こういう順番でインストールすべきだったのだろう」という記述順序になっています。実際に奮闘した順序とは異なります。
趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
これまでさくらのVPSではUbuntu10.04LTSをリモートデスクトップとして動かしてきたのですが、やはりサービスを何かさせてくなってきました。・・・となると、やはりCentOSか・・・というわけで、CentOSに入れ替えてみました。
注意:以下の記述は試行錯誤の上で、「こういう順番でインストールすべきだったのだろう」という記述順序になっています。実際に奮闘した順序とは異なります。
ずいぶん前にRaspberry Piについてニュースが流れたときにRSオンラインのメールでのお知らせに登録しておいたら、「受注できるよ」ってメールが来たのですが、その夜にはSoldOutだったのでがっかりしていまいた。
・・・・で、さっき、なにげなく Hack a Day を眺めていたら Raspberry Pi を使った記事が出ていました。そこから RS Components へのリンクが張られていて、辿ってみるとなんと受注可能っぽい表示に変わっているではありませんか。
ひょっとして、日本でも買えるのか?と思って、早速、RSオンラインの方から辿ってみると、「注文受付を開始しました」に変わっています。
今回は専用ケースも追加されたようで、ケースとセットで速攻で2台注文してみました。
Raspberry Pi TypeB 本体が27.40ユーロ、ブラックのケースが5.06ユーロ、HDMIケーブルが4.30ユーロ、送料が6.28ユーロでPayPalで支払い。為替レートは1ユーロ=99.58円でした。
しかしながら、予想配送期間は18週間….orz
気長に待つことにします。
普通のメディアでもニュースになっているみたいです。→読売の記事(1時間前)
追伸:ひょっとして、結構前から注文可能だった??
Pinguino(PICマイコンでArduinoのようなことをするもの)について調べていたら、
http://wiki.pinguino.cc/index.php/Interfacing_with_Python
にUSBのパイプをPythonで扱う方法が出ていた。
PinguinoではUSBでホストとのデータ送受信ができるようであり、そのための例として載っている。
(ちなみにPinguinoは秋月で売っている PIC32MX220F032BのQFP44ピンバージョンであるPIC32MX220F032Dを搭載したバージョンがOLIMEXから販売されている)
ここによれば、
#!/usr/bin/env python # import usb busses = usb.busses() # Search pinguino between all the usb devices for bus in busses: devices = bus.devices for dev in devices: if dev.idVendor==0x04d8 and dev.idProduct==0xfeaa: pingu = dev # Get a device handler for th usb device dh = pingu.open() # Set configuration 3 an interface 0 dh.setConfiguration(3) dh.claimInterface(0) # Read 5 bytes in Bulk mode, convert them to # a string and print it while 1 == 1: cadena = "" for i in dh.bulkRead(0x82, 5, 10000): cadena += chr(i) print cadena
という簡単な記述で扱えるらしい。
CHDK/Luaを使いこなすための情報収集をしました。
IXY210FにせっかくいれたCHDK、インターバル撮影ができなければ意味がありません。
で、ググってみたら、こちらのページ。
基本的にはコピペのようですが、とにかく追試して実際に動作することを確認できました。(感謝)
で、ここで使われているスクリプトが、Luaというスクリプトです。
この説明は
http://chdk.wikia.com/wiki/Lua
にあって、最初に参考にさせていただいたスクリプトもここに記載されているものでした。
uBASICというスクリプトに比べてかなり強力なことができそうなので、調べてみたいと思います。
Hack a Day をみていたら パラレルリンク機構を使った3Dプリンタの動画がアップされていました。
XYZ座標を使う機構に比べて、シンプルで大きなものを作れそうです。しかも、デモ動画のリンク機構は非常に高速かつ安定感があります。(パラレルリンクロボットの特徴ですが)
3Dプリンタにパラレルリンクを使うアイデアは面白いなと思いました。
Web散策中に見つけたもの:
CHDKを入れてTimeLapse撮影をするために購入したIXY210Fですが、なかなかCHDKの導入の方法が分からずそのままにしていました。・・・・が、今回CHDKの導入方法がわかりましたので、試してみました。
インストール(というか導入)
参考:CHDK Installation Guide.pdf
使い方は他のページにゆずりますが、いまのところInterval撮影に必要なスクリプトがうまく動作しません・・・・。
ベータ版だからでしょうか・・・・?
最近、仕事でリバースエンジニアリングっぽいことをやっています。相手がUARTなのでFT232Rベースのシリアルコンバータを接続してごにょごにょやっているのですが、Linuxでマイコン開発をしていると結構困るのがシリアルターミナルプログラムです。Windows環境だとTeraTermという鉄板ターミナルプログラムがあるのですが、Linuxではこれまでいいターミナルプログラムが見つけられず、screen コマンドの引数で /dev/ttyUSB0 などを指定して使っていました。しかしながら、なにぶん通信条件の設定等が面倒です。・・・で、調べていたら見つかったのが commi というQtベースのGUIのシリアルターミナルプログラムです。
オリジナルのプロジェクトページは http://commi.berlios.de/ のようです。で、ページを覗いてみると、CuteComというプロジェクトから fork したようなのですが、画面イメージを見ると、 commi の方が自分の好みに合いそうです。
早速ソースを http://sourceforge.jp/projects/freshmeat_commi/ から取ってきて、LinuxMint11(64bit)環境で展開、
$ ./configure $ make $ sudo make install
であっさりインストールできました。起動は /dev/ttyUSB0 のアクセス権の関係から、
$ sudo commi
で自分は起動してます。
設定のしかたがTeratermに比較的近いので気に入っています。
続いて、PIC32MXで7segLEDを点灯してみました。
使用したのは4桁のカソードコモンの7セグメントLEDです。
回路は各桁のSEGMENTのA~G、DPをポートBのbit4~10、bit11に100Ωの抵抗を介して接続、各桁をデジタルトランジスタDTC123ESAを介してポートBのbit2,bit3、ポートAのbit2,bit3で駆動しています。
ダイナミック点灯の処理は割込みを1ms周期でかけて、1msごとに点灯する桁を変更しています。
表示している内容は0.1秒単位のストップウォッチ風の何かです。(単にカウントアップしているだけ)
さすがに28pinのDIPマイコンだとこれだけでポートを12本も使ってしまいます。PIC32MX120F032B(PIC32MX120F016BやPIC32MX220F032Bも同じ)は電源・GND関係だけで6本、さらにデバッガで3本の端子を使ってしまいますので、ちょっと苦しいかもしれません。
なお、デフォルトではJTAGやセカンダリオシレータがイネーブルになっているようで、使えない端子があります。それを解決するために、15行目に
#pragma config JTAGEN = OFF, FSOSCEN = OFF
という記述を入れて、JTAGやセカンダリオシレータを禁止しています。
なお、例によって役に立たないソースを置いておきます。→7seg駆動のソース
あ~、コメントは直し忘れていますので、無視してください。^^;
待ちループ、割り込みで点滅するLチカを紹介しましたが、MIPS CPUの場合には別の方法の時間待ちも可能です。
MIPS CPUの場合にはCPUの中のCP0(CoProcessor 0)というのがあって、その中にCOUNTレジスタというレジスタがあります。このレジスタはCPUコアの周波数の1/2の周波数でカウントアップしていきますので、CPUコアの周波数がわかっていれば、時間待ちに使うことが可能です。
#define SYS_FREQ (40000000L)void foo(int index) { register int i,j; i=_CP0_GET_COUNT(); j=index; while(_CP0_GET_COUNT()-i<j); }int main(void) { <途中略> while(1){foo(SYS_FREQ/20); mPORTAToggleBits(BIT_0); }return 0; }
本来、CP0のレジスタ読み出しには専用命令(mfc)が必要なのですが、コンパイラにはじめからマクロ定義が用意されているのでこんな感じで使えます。この例は100ms待ってLEDを反転させます。このレジスタには書き込みもできますが、基本的に読み出し専用で使います。読み出し専用で使えば複数のタスクでも共有できるからです。ただし、40MHz動作の場合には200秒程度でカウンタが1周しますし、上記の使い方だとその半分で正常に動作しなくなりますので要注意です。
ソースリストはこんな感じです→CountレジスタでLチカ
このレジスタは特定の区間のCPUの処理時間などの計測にも使えるので結構便利です。デバッガでCPUを停止させるとこのレジスタも停止するので、ブレークポイントを2箇所設定してそれぞれでこのレジスタを見れば処理時間がわかります。