Mega644版Arduino(Sanguino)・・・準備編

手元にグラフィック液晶があるのですが、これをArduino(28pin ATmega)で制御しようとすると、グラフィック液晶は4bit制御モードがないために最低でも10pinは必要になってしまいます。

なので、ピン数の多い手持ちのATmega644Pを使いたいのですが、ArduinoのIDE(統合環境)に慣れてしまうと「できればArduino(の統合環境)」で使いたい、と思ってしまいます。さらにArduinoの場合、bootloaderを書き込んでおけば、AVRISP mkIIなども必要なくなるというのも魅力です(むしろこっちの魅力の方が大きい。コマンドラインでブートローダを使う方法はないだろうか?)。

で、大抵の場合はこういうのは先人がいるので、Googleさんで調べてみると、Sanguino.ccが該当することがわかりました。しかし、こちらのサイトはArduinoの0018を対象にしているようなのでちょっと古そうだと思ってがっかりしたのですが、ダウンロードページをよく見ると、「For arduino-0018 and newer:」となっています。記載されているインストール方法をみると、既存のArduinoのディレクトリにまるごと追加のディレクトリをコピーするようなので、試してみることにしました。実際に試したインストール手順は以下の通りです。

  1. ダウンロードのページからリンクを辿っていって、Sanguino-0018r2_1_4.zipをダウンロードします。
  2. ダウンロードしたzipファイルを展開します。
  3. ダウンロードしたSanguinoというフォルダを 「~/arduino-0022/hardware/」 の下に「sanguino」という名前でコピーします。
  4. arduino IDE を起動して、「Tools」→「Borads」の下に、sanguinoが追加されるのを確認します。
  5. 何かサンプルをコンパイルしてみます。

これでとりあえずコンパイルできる所までは確認できました。

JDのコンパイル/インストール

いろんな事件などでも登場する2ch(2ちゃんねる)ですが、その一方で書き込まれている内容が本当のことかどうかを常識やその他の情報源に基づいて判断する力は必要ですが、その代わりに役に立つ情報も少なくありません。また、逆に困っている人がいれば助けてあげたいと思う気持ちもあります。
で、SynapticでインストールできるJDという2chビューアを使っているのですが、現在SynapticでインストールされるJDは2.6.0というバージョンです。このバージョンだと、荒らし防止のために導入された忍法帖という仕組みに対応できないらしく、書き込みを行うためには2.8.1以降でなければならないようです。
なので、ソースからコンパイルしてみることにしました。

Ubuntu11.04が対象ですがコンパイルの方法自体はこちらに載っています。自分は10.04LTSなので同じ手順で試してみました。・・・結果は、そのままやればうまく行きました。一応、手順をメモしておきます。

$ sudo apt-get install subversion autoconf libtool libgtkmm-2.4-dev libgnutls-dev ttf-ipamonafont
$ mkdir jd4linux
$ cd jd4linux
$ svn checkout http://svn.sourceforge.jp/svnroot/jd4linux/jd/trunk
$ cd trunk
$ autoreconf -i
$ ./configure –with-native
$ make
$ cd src
$ ./jd

最後の行が起動コマンドです。

LinuxでPDFファイルを編集する

今、Pythonで仕事で使うスクリプトを書いているのですが、そのために色々調べごとをしました。世の中、いろんな役に立つ情報をまとめて提供してくれている方がいて、非常に参考になります。しかしながら、その場で全部は理解できない/必要できないことも多いので、後でじっくり読みたいと思うものも少なくありません。
しかし、それらの情報はほとんどがWebサイトという形をとっていて、永続的に存在することが保証されてもいませんので、ぜひとも手元に残したいと思うものです。(もちろん、著作権は元々作成された方にある場合がほとんどですので、他の目的に使うことはできませんが)

で、一番お手頃なのがChromeブラウザで印刷してPDFに変換してしまうことなのですが、それだとページ毎にバラバラのファイルになってしまいます。自分はAcrobat7とAcrobat9のStandard版は持っているので、そちらで結合してもいいのですが、わざわざWindowsを立ち上げなければなりません。
そこでそのPDFファイルを編集(といっても結合だけでいいのですが)するツールがないか調べてみました。

Synapticで「PDF」で見て、pdfeditとpdftkをなんとなくインストールしてみました。

  1. pdfedit
    「アプリケーション」→「グラフィックス」→「PDF Editor」で起動します。
    ファイルを開くと、PDFファイル中のテキストやオブジェクトなどをあれこれできそうな表示はされるのですが、残念ながら今回の目的の複数のPDFファイルの結合は容易にはできそうにありませんでした。(こうすればできるよ、という情報があれば教えてもらえると嬉しいです)
  2. pdftk
    こちらはコマンドラインツールですので、目的のディレクトリにファイルに通し番号をつけた上で、シェルを開いて目的のディレクトリで、
    $ pdftk *.pdf cat output outfile.pdf
    とすることで、 瞬時のうちに結合したファイルが得られました。

ということで、ChromeのPDF出力とpdftkの組み合わせで個人用Web情報コレクションができそうです。

wxPythonをインストールする

PythonでGUIアプリケーションを作るためにwxPythonをインストールします。

wxPyWikiのページにしたがってインストールしていきます。

$ sudo apt-get install curl
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
linux-headers-2.6.32-21 linux-headers-2.6.32-21-generic
これらを削除するには ‘apt-get autoremove’ を利用してください。
以下のパッケージが新たにインストールされます:
curl
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 6 個。
209kB のアーカイブを取得する必要があります。
この操作後に追加で 328kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu/ lucid-updates/main curl 7.19.7-1ubuntu1.1 [209kB]
209kB を 0s で取得しました (347kB/s)
未選択パッケージ curl を選択しています。
(データベースを読み込んでいます … 現在 184857 個のファイルとディレクトリがインストールされています。)
(…/curl_7.19.7-1ubuntu1.1_i386.deb から) curl を展開しています…
man-db のトリガを処理しています …
curl (7.19.7-1ubuntu1.1) を設定しています …

$ curl http://apt.wxwidgets.org/key.asc | sudo apt-key add –
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
104 1678 104 1678 0 0 937 0 0:00:01 0:00:01 –:–:– 1700
OK

として、次に、/etc/apt/sources.listに以下の内容を書き加えます。(10.04LTSの場合)

# wxWidgets/wxPython repository at apt.wxwidgets.org
deb http://apt.wxwidgets.org/ lucid-wx main
deb-src http://apt.wxwidgets.org/ lucid-wx main

その後、以下のコマンドを実行します。(結果は省略)

$ sudo apt-get update
$ sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-i18n
$ sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-i18n libwxgtk2.8-dev libgtk2.0-dev

コマンドラインから「xrced」と入力するとGUIを設計するためのツール XRCed が起動することを確認できました。

Python2.5のインストール

Ubuntu10.04LTSに標準でインストールされるPythonは2.6なのですが、Google App Engine で使うPythonは2.5だったりします。なので、2.5をインストールします。

googleさんで調べてみると、以下の方法が簡単でした。

$ sudo add-apt-repository ppa:fkrull/deadsnakes
Executing: gpg –ignore-time-conflict –no-options –no-default-keyring –secret-keyring /etc/apt/secring.gpg –trustdb-name /etc/apt/trustdb.gpg –keyring /etc/apt/trusted.gpg –primary-keyring /etc/apt/trusted.gpg –keyserver keyserver.ubuntu.com –recv FF3997E83CD969B409FB24BC5BB92C09DB82666C
gpg: 鍵DB82666Cをhkpからサーバーkeyserver.ubuntu.comに要求
gpg: 鍵DB82666C: 公開鍵“Launchpad Old Python Versions”を読み込みました
gpg: 処理数の合計: 1
gpg: 読込み: 1 (RSA: 1)
$ sudo apt-get update
ヒット http://archive.ubuntulinux.jp lucid Release.gpg
無視 http://archive.ubuntulinux.jp/ubuntu/ lucid/main Translation-ja
(途中省略)
ヒット http://ppa.launchpad.net lucid/main Sources
取得:6 http://dl.google.com stable/main Packages [1,183B]
24.2kB を 5s で取得しました (4,460B/s)
パッケージリストを読み込んでいます… 完了
$ sudo apt-get install python2.5
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
linux-headers-2.6.32-21 linux-headers-2.6.32-21-generic
これらを削除するには ‘apt-get autoremove’ を利用してください。
以下の特別パッケージがインストールされます:
python2.5-minimal
提案パッケージ:
python2.5-doc python2.5-profiler
以下のパッケージが新たにインストールされます:
python2.5 python2.5-minimal
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 6 個。
4,114kB のアーカイブを取得する必要があります。
この操作後に追加で 14.9MB のディスク容量が消費されます。
続行しますか [Y/n]?
取得:1 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu/ lucid/main python2.5-minimal 2.5.5-8~ppa2~lucid1 [1,220kB]
取得:2 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu/ lucid/main python2.5 2.5.5-8~ppa2~lucid1 [2,893kB]
4,114kB を 15s で取得しました (264kB/s)
未選択パッケージ python2.5-minimal を選択しています。
(データベースを読み込んでいます … 現在 184153 個のファイルとディレクトリがインストールされています。)
(…/python2.5-minimal_2.5.5-8~ppa2~lucid1_i386.deb から) python2.5-minimal を展開しています…
未選択パッケージ python2.5 を選択しています。
(…/python2.5_2.5.5-8~ppa2~lucid1_i386.deb から) python2.5 を展開しています…
man-db のトリガを処理しています …
desktop-file-utils のトリガを処理しています …
python-gmenu のトリガを処理しています …
Rebuilding /usr/share/applications/desktop.ja_JP.utf8.cache…
menu のトリガを処理しています …
python-support のトリガを処理しています …
python2.5-minimal (2.5.5-8~ppa2~lucid1) を設定しています …

python2.5 (2.5.5-8~ppa2~lucid1) を設定しています …

libc-bin のトリガを処理しています …
ldconfig deferred processing now taking place
menu のトリガを処理しています …

これで以下のように2つのpythonが使えます。

$ python2.5 -V
Python 2.5.5
$ python2.6 -V
Python 2.6.5
$ python -V
Python 2.6.5

USBストレージとデバイスファイルの対応付け

ちょっと必要があって、USBストレージとデバイスファイル(/dev/sd*)の対応付けを知る方法を調べています。挿入された特定のモデルのUSBストレージデバイスをフォーマットするプログラム(スクリプト)を作りたいのです。

で、調べた結果のメモです。

(1)hdparmコマンド

USBデバイスには使えない感じ?

(2)sdparmコマンド

今のシステムには入ってない

(3) /dev/disk/by-id

ここに、デバイス名とデバイスファイルの対応付けがシンボリックリンクの形で格納されているようです。シンボリックリンクなので、直接ファイル名をデバイスファイルの代わりに使えそうな感じです。

/dev/disk/by-id$ ls -la
合計 0
drwxr-xr-x 2 root root 180 2011-08-04 04:07 .
drwxr-xr-x 6 root root 120 2011-08-04 04:07 ..
lrwxrwxrwx 1 root root 9 2011-08-04 03:45 usb-Hitachi_HTS541660J9AT00-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 9 2011-08-04 03:38 usb-Initio_WD1600AB-00DYA0_0000000000000000W-0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 2011-08-04 03:38 usb-Initio_WD1600AB-00DYA0_0000000000000000W-0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 2011-08-04 03:38 usb-Initio_WD1600AB-00DYA0_0000000000000000W-0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 2011-08-04 03:38 usb-Initio_WD1600AB-00DYA0_0000000000000000W-0:0-part5 -> ../../sda5
lrwxrwxrwx 1 root root 9 2011-08-04 04:07 usb-Kingmax_USB2.0_FlashDisk_200801250000000000003DD6-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 2011-08-04 04:07 usb-Kingmax_USB2.0_FlashDisk_200801250000000000003DD6-0:0-part1 -> ../../sdc1
/dev/disk/by-id$

/dev/disk の下には上記の「by-id」の他に「by-label」「by-path」「by-uuid」などのフォルダもあり、それぞれパーティションラベルや接続別(PCIの下のUSBコントローラの下の・・・という感じ)、UUID別のリンクもあるので、色々使えそうです。

RemastersysでカスタムライブDVDを作ってみた

いつか試してみようと思っていたライブCD(DVD)作成を試してみました。

今回試してみたのはRemastersysで、特にカスタム環境を作るのではなく、現在のUbuntu環境をそのままライブDVDにしてみることにしました。

で、手順は「箕面市役所Edubuntu日記」さんの「Remastersysの近況」に丁寧に書かれているので、そのまんまでバッチリいけます。非常に簡単です。こんなに簡単でいいのでしょうか、というくらい簡単です。

あえて補足するとしたらこんなところでしょうか。

  1. Ubuntuのバージョン(コードネーム)の確認方法
    Remastersysを配布元からダウンロードするためにRemastersysのリポジトリを対象システムに追加しなければならないのですが、その際にUbuntuのバージョン(コードネーム)を確認しなければなりません。
    これは /etc/lsb-release というファイルをみると確認できます。
  2. 生成するファイルの選択
    CD/DVDを作る場合にはISOだけあればよさそうなので「Distiso」を選んでみたのですが、なぜかうまくいきませんでした。「Dist」を選択すればうまくISOファイルが生成されました。
  3. Distributionの名前などの設定
    Option選択の画面で「Modify」を選ぶと変えられるみたいです。

で、できた1.1GBくらいのISOファイルをBraseroでDVDに書き込むと、無事にライブDVDが作成できました。それをPCで起動するとライブDVDとして動作し、さらに、そこから別のHDDへインストールも可能でした。

続・最小限のArduino

最小限のArduinoの続きです。

昨日なぜか書き込みの際にDTR信号でリセットがかからなかったのですが、一夜明けて冷静に見てみたら当たり前でした。

原因は「ブレッドボード上でDTR信号がつながってない」ということでした。(笑)

これで外付け部品は「パスコン+10kΩ抵抗+0.1uFコンデンサだけ」のArduinoが動くようになり、『基板がなくてもArduino』ができるようになりました!

最小限のArduino

実験するのに段々基板を準備するのが面倒くさくなってきました(おい)。

で、よくよく考えてみると、8MHzのArduino(つまり、3.3V版)としてブートローダを焼いて、その後ヒューズビットを内蔵8MHzオシレータ利用、分周なしに設定すればリセット周りの外付け部品(10kΩの抵抗と0.1uFのコンデンサ)とパスコンだけで動作するのではないかと考えました。

  1. ボードの準備
    ブレッドボードにATmega328pをセットし、電源とAVRISP mkIIを接続します。クリスタルの端子には8MHzのセラミック発振子をつないでおきます。
  2. ブートローダの書き込み
    Arduino IDEを起動して「Board」で「Arduino Pro or Pro mini (3.3V,8MHz) w/ ATmega328」を選択し、「Burn Bootloader」で、「AVRISP mkII」を選択します。すぐにブートローダの書き込みが終わります。
  3. 動作確認
    19pinにLEDを接続して、ExampleのBLINKを選択し、コンパイル&書き込みを行います。LEDがチカチカすればOK。
  4. avrdudeでヒューズビットを確認
    「# sudo avrdude -c avrisp2 -p m328p -P usb -t」としてターミナルモードを起動
    EFUSE=0x05、HFUSE=0xda、LFUSE=0xffとなっていました。LFUSEの値から、8~16MHzのクリスタル設定になっています。
  5. 発振回路設定の変更
    内蔵RC発振回路とするため、CKSEL=0010、SUT=10に変更します。つまり LHUSE=0xe2 に変更します。
    「>>> w lfuse 0 0xe2」としてヒューズビットを書き込みます。
  6. セラミック発振子を外す
    セラミック発振子を外した状態でプログラムのダウンロード・実行ができればOK・・・のところですが、DTR信号でのリセットがかからないようです・・・(涙)

もう少し調べてみる必要がありそうです。

Arduino用LANインタフェース(ソフト編)

イーサネットシールドライブラリ(Ethernet Shield Library)はこちらのページにあるものを使用しました。ArduinoとENC28J60の接続も同じページにあるものを参考に接続しています。(ただし、3.3Vロジック→5Vロジックのレベル変換は通常実力的には問題ないので省略しています。)

このページ(ページの一番下の「6. Links & Downloads」)でダウンロードできるライブラリとサンプルプログラムはArduinoのバージョン0010用のものですが、ライブラリ内の #include で指定しているファイル名の大文字/小文字が間違っていてそのままではコンパイルエラーを出す(対策は当然 #include の中のファイル名修正)以外は問題なく0022でもサンプルプログラムはコンパイル/動作し、デジタル4pinに接続してあるLEDをブラウザから点灯/消灯させることもできました。

次に、linuxからpingでパケットロスのテストをしてみましたが、0.2秒周期、データ長456バイト(受信バッファが500バイトに設定されているのでこれより長いパケットは受けられない)で一晩連続テストしたり、多数のpingを起動したりしましたが、特にパケットロスが起きることもありませんでした。

このライブラリとサンプルプログラムはこちらの「HTTP/TCP with an atmega88 microcontroller (AVR web server)」が元になっていて、そちらに使い方が書いてあります。このプロトコルスタックは少ないメモリでTCP/IPを何とか扱うためにTCPでも1パケットの範囲に収まるデータを扱うことに限定しています。(趣味の範囲の)通常の遠隔操作やリモートセンシングではWebベースでも1パケット分のHTMLデータに収まる、という考え方です。

今後、もうちょっと掘り下げてみたいと思います。