Raspberry Pi 3 Raspbian Jessie で Waveshare 3.5インチ タッチ液晶を動かす
4月 3, 2016 — 23:20

Raspberry Pi3のついでにWaveshare 3.5インチ タッチパネル付き液晶を購入したのですが動作させるのに結構苦戦したので手順を残すためにメモしておきます。

このタッチパネル付き液晶モデル(3.2インチ版も含む)の使用方法を紹介しているサイトの多くは
メーカー?が提供しているISOを使ったりLCD-show.tar.gzを使っていたりしますがPi3では起動しなくなるようです・・・

Raspbian JessieのインストールはNOOBSを使いました。
インストール後はLANへの接続と日本語フォントの追加とSSHが有効であるかの確認を行っています。

SPIの有効化とBOOT時のGUIの無効化(CUI+自動ログイン)に変更します。

$ raspi-config

必要なパッケージ群をインストール。

$ sudo apt-get install xinput evtest libts-bin
$ sudo apt-get install fbi

タッチパネル付き液晶への出力設定

何も設定していない場合はfb0しか無いはずです。

$ ls -al /dev/fb*
crw-rw---- 1 root video 29, 0  4月  2 12:41 /dev/fb0

FBTFT関連のカーネルモジュールをロードさせます。
以前は自力で導入する必要があったようですが、現在は標準で含まれているようです。

$ sudo modprobe flexfb width=320 height=480 regwidth=16 init=-1,0xb0,0x0,-1,0x11,-2,250,-1,0x3A,0x55,-1,0xC2,0x44,-1,0xC5,0x00,0x00,0x00,0x00,-1,0xE0,0x0F,0x1F,0x1C,0x0C,0x0F,0x08,0x48,0x98,0x37,0x0A,0x13,0x04,0x11,0x0D,0x00,-1,0xE1,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0xE2,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0x36,0x28,-1,0x11,-1,0x29,-3
$ sudo modprobe fbtft_device debug=3 rotate=90 name=flexfb speed=16000000 gpios=reset:25,dc:24

カーネルモジュールをロードするとデバイスファイルが増えるはずです。

$ ls -al /dev/fb*
crw-rw---- 1 root video 29, 0  4月  2 12:41 /dev/fb0
crw-rw---- 1 root video 29, 1  4月  2 12:41 /dev/fb1

後から追加されたfb1がタッチパネル付き液晶なので試しに画像を表示してみます。

$ wget https://kernel.org/theme/images/logos/tux.png
$ sudo fbi -d /dev/fb1 -T 1 -a tux.png

image3

起動時に自動でモジュールを読み込むように指定します。

$ sudo vi /etc/modules-load.d/waveshare.conf
spi-bcm2835
flexfb
fbtft_device

$ sudo vi /etc/modprobe.d/waveshare.conf
options flexfb width=320 height=480 regwidth=16 init=-1,0xb0,0x0,-1,0x11,-2,250,-1,0x3A,0x55,-1,0xC2,0x44,-1,0xC5,0x00,0x00,0x00,0x00,-1,0xE0,0x0F,0x1F,0x1C,0x0C,0x0F,0x08,0x48,0x98,0x37,0x0A,0x13,0x04,0x11,0x0D,0x00,-1,0xE1,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0xE2,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0x36,0x28,-1,0x11,-1,0x29,-3
options fbtft_device debug=3 rotate=90 name=flexfb speed=16000000 gpios=reset:25,dc:24

起動時からフォントを指定してfb1に出力させるように行末へ以下を追記します。
何だろうと少し調べてみましたが、このfbcon=map:1の役割はcon2fbmapコマンドと同じようですね。

$ sudo vi /boot/cmdline.txt
fbcon=map:1 fbcon=font:ProFont6x11 # 行末に追記します

image1

デスクトップをfb1に出力させながら起動するとタッチパネル付き液晶に表示されるはずです。

$ sudo FRAMEBUFFER=/dev/fb1 startx

image2

デスクトップの出力先をfb1に変更すると再起動後もタッチパネル付き液晶に表示されるようになるのですが
この方法だと、画面が小さすぎて色々と辛いのとHDMIが表示されなくなるので変更しない方法を探しました。

$ sudo vi /usr/share/X11/xorg.conf.d/99-fbturbo.conf
# This is a minimal sample config file, which can be copied to
# /etc/X11/xorg.conf in order to make the Xorg server pick up
# and load xf86-video-fbturbo driver installed in the system.
#
# When troubleshooting, check /var/log/Xorg.0.log for the debugging
# output and error messages.
#
# Run "man fbturbo" to get additional information about the extra
# configuration options for tuning the driver.

Section "Device"
        Identifier      "Allwinner A10/A13 FBDEV"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb0" # <- fb0からfb1に変更する方法もあるけど今回はそのまま

        Option          "SwapbuffersWait" "true"
EndSection

色々と調べてみたんですが
フレームバッファをコピーするfbcpコマンドをインストールすることにより
fb0(HDMI)をfb1(タッチパネル付き液晶)に映せる事が分かったので利用することにしました。

これにより、HDMIに接続して起動しても画面が真っ暗って事もなく
ウインドウ幅が小さすぎて操作が困難という問題を解消できます。

$ sudo apt-get install cmake
$ git clone https://github.com/tasanakorn/rpi-fbcp
$ cd rpi-fbcp/
$ mkdir build
$ cd build/
$ cmake ..
$ make
$ sudo install fbcp /usr/local/bin/fbcp

起動時に実行させる方法で少し悩んだのですが
とりあえず安直にrc.localへ追記しておきます・・・

$ sudo vi /etc/rc.local
su -l pi -c fbcp &

最初で設定したのと逆にraspi-configでデスクトップに自動でログインするように設定を直すと
起動が完了するとタッチパネル付き液晶にデスクトップが映るようなります。

image2(1)

タッチパネルの有効化

このままだとタッチパネルが使えないので設定します。

マウスとキーボードをRaspberry Piに接続している場合は以下のようになっているはずです。

$ ls -al /dev/input/event*
crw-rw---- 1 root input 13, 64  4月  2 14:13 /dev/input/event0
crw-rw---- 1 root input 13, 65  4月  2 14:13 /dev/input/event1

以前はads7846_deviceだったらしいですがads7846に変わったようなので以下のように追記します。

$ sudo vi /boot/config.txt
# 末尾に追加
dtoverlay=ads7846,cs=1,penirq=17,penirq_pull=2,speed=1000000,keep_vref_on=1,swapxy=1,pmax=255,xohms=60,xmin=200,xmax=3900,ymin=200,ymax=3900

キャリブレーションの設定を行うついでに、画面長押しで右クリックになるように追記しておきます。

$ sudo vi /usr/share/X11/xorg.conf.d/99-calibration.conf
Section "InputClass"
    Identifier "calibration"
    MatchProduct "ADS7846 Touchscreen"
    Option "Calibration" "3873 272 236 3868"
    Option "SwapAxes"    "1"
    # Enable press and hold for right-clicking
    Option "EmulateThirdButton" "1"
    Option "EmulateThirdButtonTimeout" "750"
    Option "EmulateThirdButtonMoveThreshold" "30"
EndSection

ちなみに、waveshare35a-overlay.dtbというデバイスツリーを設置する方法も紹介されていたりいますが
特に設置せずとも動いているようなので私の環境では設置しておりません。

再起動するとタッチパネルを認識してデバイスファイルが増えており、タッチ操作が可能になっていると思います。

$ ls -al /dev/input/event*
crw-rw---- 1 root input 13, 64  4月  2 14:13 /dev/input/event0
crw-rw---- 1 root input 13, 65  4月  2 14:13 /dev/input/event1
crw-rw---- 1 root input 13, 66  4月  2 14:13 /dev/input/event2

image1(2)

その他、スクリーンキーボードのインストール等ありますが、そこら辺は割愛します。。。。

以下、参考サイト
raspberry pi LCDシールド(3.5) [RPiLCD035TP] [3.5inch RPi LCD (A)] 導入 waveshare – Qiita
3.5inch RPi LCD (A) – Waveshare Wiki
Home · notro/fbtft Wiki · GitHub
Raspberry Pi2 3.5inchタッチスクリーンディスプレイの設定 | 猫から星まで
Waveshare3.2インチLCDのセットアップ
Raspberry Piの小さな液晶のPiTFTを仮想画面スクロールで広く使いたかったけど挫折 | matoken’s meme
Raspberry Pi 2にディスプレイをつないでみた! | TONGARISM.COM
千石の4inchタッチディスプレイをRaspberryPi 2 につなぐ – yuki-sato.com
I am getting "FATAL: Module ads7846_device not found." · Issue #260 · notro/fbtft · GitHub
Adafruit customer service forums • View topic – [SOLVED ! ] 3.5" PiTFT resistive Touchscreen – Right-click a

ESXi5.1 APC Smart UPS 連携 メモ
5月 28, 2013 — 13:32

前回のアップデートESXi5.1を623860から914609へアップデートするにより、”vmware-autohalt.sh”を使用しなくてもゲストOSを自動でシャットダウンできるようになったため連携の仕方が若干変わった。

USP連携についてはあまり触れているところは少ないため大まかながらメモしておく。

無料版ESXi5.1のホスト方ではUSP連携に対応していないためゲストを利用してUPSと連携する。
※ 方法は色々あるようで”VMware vSphere Management Assistant”と呼ばれる物を導入する方法もあるようだが今回はゲストにCentOS5を使用して実現する。

使用するゲストにシリアルポートを認識させる。
WS000043

ゲストにApcupsdをインストールする。
インストールの方法は色々と紹介されているので他サイトを参照。

シリアルポートのディバイスファイルの設定が正しいか確認する。
# cat /etc/apcupsd/apcupsd.conf | grep “DEVICE”

# You must also specify a DEVICE, sometimes referred to as a port.
# For USB UPSes, please leave the DEVICE directive blank. For
# UPSTYPE   DEVICE           Description
# usb       <BLANK>          Most new UPSes are USB. A blank DEVICE
DEVICE /dev/ttyS0

Apcupsdを起動する。
# service apcupsd start

ゲスト側でUPSが認識されているか確認するために下記のコマンドを実行する。
# apcaccess

APC      : 001,051,1246
DATE     : 2013-05-28 13:06:07 +0900
HOSTNAME : UPS-SERVER
VERSION  : 3.14.10 (13 September 2011) redhat
UPSNAME  : UPS_IDEN
CABLE    : Custom Cable Smart
DRIVER   : APC Smart UPS (any)
UPSMODE  : Stand Alone
STARTTIME: 2013-05-28 12:33:37 +0900
MODEL    : SMART-UPS 1000
STATUS   : ONLINE
LINEV    : 101.4 Volts
LOADPCT  :  15.6 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :  93.0 Minutes
MBATTCHG : 30 Percent
MINTIMEL : 10 Minutes
MAXTIME  : 1200 Seconds
MAXLINEV : 102.0 Volts
MINLINEV : 099.4 Volts
OUTPUTV  : 101.4 Volts
SENSE    : High
DWAKE    : 000 Seconds
DSHUTD   : 180 Seconds
DLOWBATT : 02 Minutes
LOTRANS  : 090.0 Volts
HITRANS  : 110.0 Volts
RETPCT   : 000.0 Percent
ITEMP    : 40.0 C Internal
ALARMDEL : 5 seconds
BATTV    : 28.3 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Line voltage notch or spike
NUMXFERS : 0
TONBATT  : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI   : 336
STATFLAG : 0x07000008 Status Flag
DIPSW    : 0x00 Dip Switch
REG1     : 0x00 Register 1
REG2     : 0x00 Register 2
REG3     : 0x00 Register 3
MANDATE  : 02/04/99
SERIALNO : WS9906012897
BATTDATE : 02/04/99
NOMOUTV  : 100 Volts
NOMBATTV :  24.0 Volts
EXTBATTS : 0
FIRMWARE : 60.12S.A
END APC  : 2013-05-28 13:06:46 +0900

ESi5.1ホストマシンでシェルの使用とSSHでの接続を有効にする。
WS000044

※これらを有効にするとサマリで警告が表示されるが特に問題は無いので気にしない。

SSHを鍵を使い、パスワードなしでログインできるようにする。
SSHの鍵作成については過去記事ESXi5 SSH 公開鍵暗号化方式 作製を参照。

ゲストに秘密鍵を下記のパスになるようにコピーする。
/root/.ssh/esxi_id_rsa.pub

ESXi5.1ホストマシンに鍵を使ったSSHでパスワードなしでログインできることを確認する。
# ssh -i /root/.ssh/esxi_id_rsa.pub root@<ESXi5.1ホストマシンのIPアドレス>

ゲストでESXi5.1ホストマシンをシャットダウンするシェルスクリプトを作成する。
# vi /usr/local/bin/esxi_shutdown.sh

#!/bin/sh
ssh -i /root/.ssh/esxi_id_rsa.pub root@<ESXi5.1ホストマシンのIPアドレス> "/bin/halt"

実行権を与える。
# chmod 700 /usr/local/bin/esxi_shutdown.sh

実際に実行してESXi5.1ホストマシンがゲストからシャットダウンできるか確認する。
# /usr/local/bin/esxi_shutdown.sh

Apcupsdがシャットダウン時に実行するコマンドを書き換える
# vi /etc/apcupsd/apccontrol

#SHUTDOWN=/sbin/shutdown
SHUTDOWN=/root/bin/esxi_shutdown.sh

Apcupsdを再起動する。
# service apcupsd restart

最後にUPSの電源を引きぬいてESXi5.1ホストマシンが自動でシャットダウンされるか確認する。

参考サイト
ESXi 4.1 から ESXi 5.0 へアップグレード | SS-NET サポート
VMware ESXi 5.0 + vMA 5.0で電源管理 (3) – apcupsdの導入 « RootLinks Co., Ltd.
自宅サーバ構築じぶんめも SSH設定編 | ken39rajima

ArduinoでRELET(FeliCa電子マネー残高照会機)モドキを作ろう
11月 22, 2012 — 20:25

作ろうと考えるようになったいきさつ

以前、家電量販店を歩いてるとSuicaやEdyなどの電子マネーの残高を確認できる電子マネービュアー「リレット」EV10 | KING JIMが販売されており思わず『買いたい』と思いましたが、値札を見たらお値段が・・・・。度々家電量販店に行くも今度買おうと自分に言い聞かせてたらいつの間にか生産中止になってしまたようで・・・・・。仕方ないから自分で自由に機能を拡張できるFeliCa電子マネー残高照会機を作ろうと思い立ちました。

初代残高照会機(Arduino UNO + PaSoRi)

実は、以前にも同様の目的でFeliCaの残高照会機を作った事があったのですが、想像よしていたものより大きく据え置きにするしかなかったため今回これよりも遥かに小さい物を作成しようと考えました。

道具の準備

・ハンダ線
・ハンダ吸い取り線
・フラックス
・熱収縮チューブ
・ハンダこて
・こて台
・こて拭き
・精密ピンセット
・カッターナイフ

電子工作をする上でとくに特別な物はないですが、結構細かい部品をハンダ付けするため精密ピンセットとフラックスがあるといいかもしれません。

部品の準備

・FeliCa リーダー・ライター RC-S620S
・FeliCa RC-S620S ピッチ変換基板のセット(フラットケーブル付き)
・Arduino Pro mini 5V
・SB0802GN
・AS1322A/V2
・Polymer Lithium Ion Battery – 110mAh
・JST-PHオスコネクター
・タクトスイッチ
・1μF積層セラミックチップコンデンサ 2個
・1μF積層セラミックコンデンサ 1個
・10kΩチップ抵抗 2個
・ビニール線

・FT232RL搭載小型USB-シリアルアダプタ 5V
・LiPo Charger Basic – Micro-USB

 今回手軽に持ち運べるよう小型化するために、Arduino Pro miniを選択しましたが、通常8Mhzな3.3V版では115200bpsの転送レートに対応していないためRC-S620/Sと通信することが出来ないので5V版を準備してください。
 なお、同じく軽量化小型化のためにLCD液晶にStrawberryLinux製のミニI2C液晶モジュールを使用しました。このパーツを使用すると一部チップ部品のハンダ付けが必要となりますが、I2C通信を利用する事により使用するピンを劇的に減らすことが可能になります。

ハードウェアの作成

Arduinoにシリアル通信用の足をハンダ付けし、裏面にプルアップ抵抗用にチップ抵抗(10kΩ)を2個ハンダ付けします。

StrawberryLinux製のミニI2C液晶モジュールはコンデンサを3個ハンダ付けしなければならないので、表面にチップコンデンサ(1μF)を2個、裏にコンデンサ(1μF)を1個ハンダ付けします。

StrawberryLinux製の昇圧型DC-DCコンバータモジュールは5V引き出す場合ハンダジャンパーが必要になるのでハンダでショートさせます。

最後にこのような配線になるように各種パーツをハンダ付けしていきます。バッテリーは使い切ると外して充電器に接続し充電します。
※ 当初、CR2032で動かす予定でしたが大電流放電が苦手なようでうまく動きませんでした。
※ RC-S620/Sは配線を間違うと一瞬で壊れます。私は試作の時にうっかり2台も壊してしまいまいした・・・・
※ 今回何となく不安でRAWに昇圧モジュールのOUTを繋いでいますが電圧を5Vに調整しているのでVCCに繋いでも一応動いたりします。

これでハードは完成です。

ライブラリの準備

Arduino向けRC-S620/S制御ライブラリ
I2C液晶ライブラリ – Okiraku Programming

それぞれのライブラリをダウンロードしlibrariesフォルダーに入れ、RC-S620/S制御ライブラリ“RCS620S.cpp”を開き#include “WProgram.h”を#include “Arduino.h”に書き換えて上書き保存します。I2C液晶ライブラリも“LCD_I2C.h”の中身を下記から次のように通り書き換えます。
※ 実は、“LCD_I2C.h”の書き換えは#include “Arduino.h”じゃなくて#include <wiring_private.h>でもよかったり?

書き換え前

#ifndef LCD_I2C_h
#define LCD_I2C_h
extern "C" {
#include <math.h>
#include <wiring.h>
}
#include <Wire.h>

書き換え後

#ifndef LCD_I2C_h
#define LCD_I2C_h
#include <math.h>
#include "Arduino.h"
#include <Wire.h>

ソフトウエアの作成

アトリエのどか様の公開されているスケッチを参考に実際にSuica、PASMO、Edy、nanaco、waonなどのFeliCa電子マネーの残高を表示させるように記述しました。

※ Arduino Pro miniではRC-S620/Sを接続しているとスケッチをArduinoに書き込めないという問題が発生しました。スケッチを書き込む場合は一度ArduinoとRC-S620/Sを繋ぐフレキケーブルを外しておく必要があります。

#include <Wire.h>
#include <LCD_I2C.h>
#include <RCS620S.h>

// Circuit
// RESET    - 1 RST
// Analog 5 - 2 SCL (internally pulled up)
// Analog 4 - 3 SDA (internally pulled up)
// GND      - 4 VSS
// 5V       - 5 VDD

// RCS620S
#define COMMAND_TIMEOUT               400
#define POLLING_INTERVAL              500
#define RCS620S_MAX_CARD_RESPONSE_LEN 30

// FeliCa Service/System Code
#define CYBERNE_SYSTEM_CODE           0x0003
#define COMMON_SYSTEM_CODE            0xFE00
#define PASSNET_SERVICE_CODE          0x090F
#define EDY_SERVICE_CODE              0x170F
#define NANACO_SERVICE_CODE           0x564F
#define WAON_SERVICE_CODE             0x680B

RCS620S rcs620s;

void setup(){
  LCD.begin(5);
  Serial.begin(115200);
}

void loop(){
  uint32_t balance;
  uint8_t buf[RCS620S_MAX_CARD_RESPONSE_LEN];
  
  rcs620s.timeout = COMMAND_TIMEOUT;
  
  // サイバネ領域
  if(rcs620s.polling(CYBERNE_SYSTEM_CODE)){
    // Suica PASMO
    if(requestService(PASSNET_SERVICE_CODE)){
      if(readEncryption(PASSNET_SERVICE_CODE, 0, buf)){
        // Little Endianで入っているPASSNETの残高を取り出す
        balance = buf[23];                  // 11 byte目
        balance = (balance << 8) + buf[22]; // 10 byte目
        // 残高表示
        printBalanceLCD("PASSNET", &balance);
      }
    }
  }
  
  // 共通領域
  else if(rcs620s.polling(COMMON_SYSTEM_CODE)){
    // Edy
    if(requestService(EDY_SERVICE_CODE)){
      if(readEncryption(EDY_SERVICE_CODE, 0, buf)){
        // Big Endianで入っているEdyの残高を取り出す
        balance = buf[26];                  // 14 byte目
        balance = (balance << 8) + buf[27]; // 15 byte目
        // 残高表示
        printBalanceLCD("Edy", &balance);
      }
    }
    
    // nanaco
    if(requestService(NANACO_SERVICE_CODE)){
      if(readEncryption(NANACO_SERVICE_CODE, 0, buf)){
        // Big Endianで入っているNanacoの残高を取り出す
        balance = buf[17];                  // 5 byte目
        balance = (balance << 8) + buf[18]; // 6 byte目
        balance = (balance << 8) + buf[19]; // 7 byte目
        balance = (balance << 8) + buf[20]; // 8 byte目
        // 残高表示
        printBalanceLCD("nanaco", &balance);
      }
    }
    
    // waon
    if(requestService(WAON_SERVICE_CODE)){
      if(readEncryption(WAON_SERVICE_CODE, 1, buf)){
        // Big Endianで入っているWaonの残高を取り出す
        balance = buf[17];                  // 21 byte目
        balance = (balance << 8) + buf[18]; // 22 byte目
        balance = (balance << 8) + buf[19]; // 23 byte目
        balance = balance & 0x7FFFE0;       // 残高18bit分のみ論理積で取り出す
        balance = balance >> 5;             // 5bit分ビットシフト
        // 残高表示
        printBalanceLCD("waon", &balance);
      }
    }
  }
  
  // デフォルト表示
  else{
    LCD.clear();
    LCD.move(0);
    LCD.print("Touch");
    LCD.move(0x44);
    LCD.print("Card");
  }
  
  rcs620s.rfOff();
  delay(POLLING_INTERVAL);
}

// request service
int requestService(uint16_t serviceCode){
  int ret;
  uint8_t buf[RCS620S_MAX_CARD_RESPONSE_LEN];
  uint8_t responseLen = 0;
  
  buf[0] = 0x02;
  memcpy(buf + 1, rcs620s.idm, 8);
  buf[9] = 0x01;
  buf[10] = (uint8_t)((serviceCode >> 0) & 0xff);
  buf[11] = (uint8_t)((serviceCode >> 8) & 0xff);

  ret = rcs620s.cardCommand(buf, 12, buf, &responseLen);
  
  if(!ret || (responseLen != 12) || (buf[0] != 0x03) ||
      (memcmp(buf + 1, rcs620s.idm, 8) != 0) || ((buf[10] == 0xff) && (buf[11] == 0xff))) {
    return 0;
  }

  return 1;
}

int readEncryption(uint16_t serviceCode, uint8_t blockNumber, uint8_t *buf){
  int ret;
  uint8_t responseLen = 0;
  
  buf[0] = 0x06;
  memcpy(buf + 1, rcs620s.idm, 8);
  buf[9] = 0x01; // サービス数
  buf[10] = (uint8_t)((serviceCode >> 0) & 0xff);
  buf[11] = (uint8_t)((serviceCode >> 8) & 0xff);
  buf[12] = 0x01; // ブロック数
  buf[13] = 0x80;
  buf[14] = blockNumber;

  ret = rcs620s.cardCommand(buf, 15, buf, &responseLen);

  if (!ret || (responseLen != 28) || (buf[0] != 0x07) ||
      (memcmp(buf + 1, rcs620s.idm, 8) != 0)) {
    return 0;
  }

  return 1;
}

void printBalanceLCD(char *card_name, uint32_t *balance){
  char result[8];
  sprintf(result, "%u", *balance);
  LCD.clear();
  LCD.move(0);
  LCD.print(card_name);
  LCD.move(0x40);
  LCD.print(0xE6);
  LCD.print(0x20);
  LCD.print(result);
  return;
}

作成過程

Arduino Pro miniとチップ抵抗のハンダ付けが終わった写真

ミニI2C液晶モジュールとチップコンデンサのハンダ付けが終わった写真

ミニI2C液晶モジュールとコンデンサのハンダ付けが終わった写真

全ての組立終わり、スケッチの書き込みの準備中の写真

作成例

作成したハードにスケッチを書き込み、調度よさそうな大きさのケースに格納してみました。



機能拡張のヒント

地方の各種交通機関のFeliCaカードに対応させても良いかもしれません。
残高と一緒に経由駅を表示させたり購入履歴を表示できるようにしても良いかもしれません。
おさいふケータイなどの三者間通信に対応しても面白いかもしれません。

各種パーツの図の配布

今回Arduino Pro miniやミニI2C液晶モジュールなどの図を作成しましたのでpng形式で提供させて頂きます。
FeliCa残高照会機 パーツ一覧

参考

かお(・v・)もじ SF Checker – アトリエのどか
第四章 低電圧I2C液晶ディスプレイ
felicalib プロジェクト Wiki
ICカードのフォーマット解析
I2C液晶ライブラリ – Okiraku Programming

ぴくぴくダウンローダ for Java(仮) 正式公開
6月 16, 2012 — 21:05

計画していた全ての機能を実装したので正式版として公開します。

新しい機能
・コマンドベースで詳細な条件(日付の指定など)を指定し操作が可能になりました。

推奨環境:Core2Duo以降のデュアルコアCPU搭載のパソコン
動作環境:Windows MacOSX Linux でJavaが動作する環境

Windows 7 での実行の様子

コマンドモードでの実行の様子

Download
こちらのダウンロードページよりダウンロードをお願い致します。

RT58iでVPN接続し外部からWOLを行う
6月 9, 2012 — 19:29

RT58iはデフォルトではLAN外からのMagic Packetを通さないためWOLできない。
調べていたら下記のサイトにて設定が紹介されていたので参考にさせていただいた。

WOL(Wake On Lan)のMagic Packetをルーター越えさせる方法。

下記のコマンドを実行することでMagic Packetを通過できるようになる。
ip lan1 wol relay broadcast

VPNは下記の記事を参考にしてください。
今更ながらRT58iでVPN設定を行なってみた

IDC-BB延長フラットケーブルの自作
6月 8, 2012 — 10:51

マザーボード上のCOMポートをブラケット上にRS-232で提供できるようにするケーブルが裏配線したところ微妙に足りない事が判明したため困っていたところ、下記のサイトで延長ケーブルの自作を行っているサイトがあったのでそれを参考に延長ケーブルの作製を行った。

インテルマザーシリアル延長

すでにIDC-BBは二本手元にあったので一本をぶった切って延長ケーブルに使う事にした。

使用したソケットはF3BD10PD254RMCと呼ばれるヒロセ電機の製品で、秋葉原のマルツパーツ館にて取り扱いがある。

圧着機が手元に無かったため、LANケーブル用の圧着機の柄に挟み圧着した。

完成

接続時の様子

仕様・組み立てマニュアル
中継タイプリボンケーブル用コネクタ(HIF3B中継タイプ)

今更ながらRT58iでVPN設定を行なってみた
1月 25, 2012 — 1:21

まずは普通に下記の通りに簡単設定画面のリンクをクリックして設定する。
「詳細設定と情報」> 「VPN接続の設定」> 「PPTPを使用したパスワード認証のリモートアクセスVPNサーバ(Anonymous)」
※ 基本的には適当に設定して問題ないが”PPTP暗号鍵生成の認証方式”は”MS-CHAP v2で認証する”としておくこと。

ただこのままではなぜかVPNに繋げられないので次のような処理を行う。

次は、下記の簡単設定画面のリンクをクリックしてコマンドを実行する。
「詳細設定と情報」> 「コマンドの実行」

実行するコマンド
pp select anonymous
ppp ipcp msext on
nat descriptor masquerade static 1 1 192.168.100.1 tcp 1723
nat descriptor masquerade static 1 2 192.168.100.1 gre

上二行は名前解決に関するコマンド
下二行はNATの設定に関するコマンド

パラメータは各自自分の環境に合わせてください。
そんな感じで多分接続出来るようになると思います。

参考
iPhone4→RT58i VPN(PPTP)接続のコツ
リモートアクセス(PPTP)で社外から社内LANにアクセスしたい

ぴくぴくダウンローダについてのお知らせ
1月 21, 2012 — 15:18

ぴくぴくダウンローダの開発についてなのですが・・・突然ですが、そろそろ開発を終了しようかと考えております。
最初の頃とは違い他の方々も活発に開発を行なっているようなので何か特別な事や私の気まぐれが無い限りバージョンアップは行わない予定です。

※ 著作権に関しては今後も破棄、譲渡する予定はございません。

今までご利用ありがとうございました。

WordPress広告自動挿入
10月 17, 2011 — 13:20

今までAdmanというプラグインを利用していましたが、最近下記のようなエラーが出ているのを発見したので調べました。

Warning: stripcslashes() expects parameter 1 to be string, array given in /var/www/html/wp-content/plugins/adman/adman.php on line 143

Admanの他に新しくNew Admanというプラグインを同じ開発者が公開していたのでインストールしてみたところエラーも出ず正常に動いているようです。

iOS5紐なし脱獄(完全脱獄) iPhone3GS 6.15.00 redsn0w 0.9.9 b5
10月 17, 2011 — 7:47

結論から述べます。まだiOS5で脱獄するべきではありません。まだ、脱獄アプリは非対応なものが多く、その上Cydiaは日本語に対応していないためキーボードを起動すると見事に落ちます。SHSHに関してもiOS5からは異なる認証方式を使用しているようでSHSHを保存することができません。

redsn0w 0.9.9 b5 の使い方は色々な場所で紹介されているため割愛します。そんなわけで今回は簡単な作業の流れと、注意事項のみまとめます。
※ 基本的な手順や注意事項をすでに理解しているものとして説明を行います。
※ 旧ベースバンドのiPhone3GSのみこの記事が利用できます。

まずBB維持のためCFWを作成します。
NO_BB_iPhone2,1_5.0_9A334_Restore.ipsw
とかいう名前で作成されると思います。

これを利用しiTunesで復元します。
※私の環境の場合DUFモードに入るリズムが通常とは若干違いました。うまくいかない場合はいろいろ試して見てください。

復元するとiPhone3GS上でBBが維持された状態でiOS5が起動できるようになります。しかしこの状態だとまだ脱獄できておらず、Cydiaはインストールされていません。

そこで、再びredsn0w 0.9.9 b5を起動し脱獄し、Cydiaをインストールします。

これで一応脱獄完了なのですが、日本語環境でCydiaを起動し検索やリポジトリを追加しようとした段階で落ちると思います。

とりあえず、Cydiaを利用したいときはiPhoneを英語環境に戻して利用してください。現在、最新のultrasn0wにてSIMロック解除ができることを確認できております。

SHSHに関しては今後の解析を待つしかなさそうです。