IchogoJam用シリアルキーボードアプリ
IchigoJam用のシリアルキーボードアプリ「IJKB for IchigoJam」を作ってみたので、紹介も兼ねてブログを書きます。
これはIchigoJamのシリアルポートにつなげて、Windows機をキーボードの代わりに使用するアプリです。
Mac版のシリアルツールはtitoi2さんがgithubにIchigoJamSerialConsoleを公開されています。
ダウンロード
githubにあるIJKB for IchigoJamをダウンロードしてください。
インストール
インストールは特にありません。 IJKB.exe を実行するだけです。
使い方
シリアルポートをIchigoJamを接続したポートに合わせて接続を押すだけです。IchigoJamは標準でボーレートは115200bpsです。
あとは、キーを打てばIchigoJamの画面に文字が出ます。このプログラムの文字表示はIchigoJamの画面を表示しているわけではありません。単純に入力文字のエコーバックとIchigoJamかせシリアルポートに出力する文字を表示しているだけです。
Windows上でのキーボード操作が全てIchigoJamに送信されのるので、それがいやなときには「切断」キーをクリックしてIchigoJamとの接続を切ってください。
ファンクションキー
画面の二段目にファンクションキーの内容が表示されています。これはIchigoJamの内部実装のものではなくて、IJKBの独自実装です。ファンクションキーの内容を書き換えることで自由に変更できます。改行文字は \n としてください。例えば、100行目までのリストを表示したいときには「list100\n」としてください。書き換えた内容は書換え位置からカーソルを逃がすことで入れ替わります。
BASファイルの送信
IJKBの文字表示画面にBASファイルをドラッグすることにより、IchigoJamにプログラムを送信できます。以下はBASファイルを読み込んでいる様子です。ファイルの送信を途中でやめたい場合は「切断」キーをクリックしてIchigoJamとの接続を切ってください。
プログラムの貼り付け
Windowsでコピーした文字をIchogoJamに貼り付けることができます。文字をコピーしたら、画面下にある「貼り付け」ボタンをクリックしてください。プログラムに貼り付けを途中でやめたい場合は「切断」キーをクリックしてIchigoJamとの接続を切ってください。
上書き/挿入の切り替え
文字の「上書き」と「挿入」切り替えは、画面下の挿入ボタンをクリックするか、キーボードの「Insert」キーを押してください。
実数の加減算
IchigoJamを一日触って、IchigoJamを体験するのとBASICのリハビリも兼ねて、プログラムを作ってみました。IchigoJamで実数計算をします。
とりあえず、一日かけて作成したプログラムを置いておきます。
たぷん、何をしているか、コメントも何も書いていないので、まったくわからないと思います。すいません。
IchigoJamプログラム
全てのプログラムを保存し終わった後、load 0してください。
そして、[99]=10としてください。
加減算を行いたい値を配列[0][1][2]と[3][4][5]に入力してください。
配列[0]→指数、[1][2]には4桁の数値をいれます。
2.3456789E1を入力したいときには、let [0],1,2345,6789 とします。
-2.3456789E1を入力したいときには、let [0],1,-2345,6789 です。
-2.3456789E-5は、let [0],-5,-2345,6789 です。
[3][4][5]も同様です。
下記は 100 - 10 = 90 を計算する例です。
[99]=10 OK let [0],2,1000,0000:let [3],1,-1000,0000 OK run (1.0000000E2)+(-1.0000000E1)= 9.0000000E1 OK
プログラム 0です。save 0して保存してください。
1 goto[99] 10 'let [0],2,1087,5420 20 'let [3],1,1234,5678 30 ?"(";:[94]=0:[100]=200:[99]=40:[98]=0:lrun 2 40 ?")+("; 50 [94]=3:[99]=60:lrun 2 60 ?")= "; 70 w=0:v=3:[86]=80:goto 200 80 [94]=0:[100]=200:[99]=90:[98]=0:lrun 2 90 ?:[99]=10:end 200 [100]=500:[99]=210:[98]=0:lrun 2 210 [85]=[w]-[v]:if [85]>8 else goto 250 220 if f<0 then [w+1]=-[w+1] 230 goto [86] 250 if(f=1)+(f=-2)else goto 430 260 if[85]<4 else goto 310 270 q=[85]:gosub 700 280 m=[w+2]+([v+1]%r)*(10000/r)+[v+2]/r 290 l=[v+1]/r 300 goto 340 310 q=[85]-4:gosub 700 320 m=[w+2]+[v+1]/r 330 l=0 340 [w+2]=m%10000 350 if m>9999 then m=1 else m=0 360 [w+1]=m+[w+1]+l 370 if [w+1]>9999 else goto 410 380 [w+2]=[w+2]/10+([w+1]%10)*1000 390 [w+1]=[w+1]/10 400 [w]=[w]+1 410 if f=-2 then [w+1]=-[w+1] 420 goto [86] 430 [100]=200:[99]=440:[98]=0:lrun 1 440 goto [86] 700 r=1:if q=0 then return else for p=1 to q:r=r*10:next:return
プログラム 1です。save 1して保存してください。
100 goto[100] 110 lrun[98] 200 [70]=[w+1]:[71]=[w+2]:[72]=0:[73]=0 210 if[85]<4 else goto 240 220 q=[85]:gosub 700 230 [74]=[v+1]/r:[75]=([v+1]%r)*(10000/r)+[v+2]/r:[76]=([v+2]%r)*(10000/r):[77]=0 240 goto 270 250 q=[85]-4:gosub 700 260 [74]=0:[75]=[v+1]/r:[76]=([v+1]%r)*(10000/r)+[v+2]/r:[77]=([v+2]%r)*(10000/r) 270 m=0:for z=3 to 0 step -1 280 [70+z]=[70+z]-[74+z]-m 290 if [70+z]<0 then [70+z]=10000-[70+z]:m=1 else m=0 300 next 310 n=0:for z=0 to 7 320 if [70]/1000>0 then z=7:goto 380 330 [70]=([70]%1000)*10+[71]/1000 340 [71]=([71]%1000)*10+[72]/1000 350 [72]=([72]%1000)*10+[73]/1000 360 [73]=([73]%1000)*10 370 n=n+1 380 next 390 if n=8 then [w]=0 else [w]=[w]-n 400 [w+1]=[70]:[w+2]=[71] 410 if f=-1 then [w+1]=-[w+1] 420 goto 110 700 r=1:if q=0 then return else for p=1 to q:r=r*10:next:return
プログラム 2です。save 2して保存してください。
100 gosub[100] 110 lrun[98] 200 for y=0 to 1 210 [93]=[y+[94]+1] 220 if[93]<0 then ?"-";:[93]=-[93] 230 for z=3 to 0 step -1 240 q=z:gosub 700 250 ?[93]/r; 260 [93]=[93]-([93]/r)*r 270 if(z=3)&(y=0)?"."; 280 next:next 290 if[[94]]<>0?"E";[[94]]; 300 return 400 [92]=0:if([90]>8)+([90]<=0)then return 410 if [90]<=4 then [92]=[[91]+2]:q=[90]-1 else [92]=[[91]+1]:q=[90]-5 420 gosub 700:[92]=([92]/r)%10 430 return 500 h=0:f=0 510 if[w+1]<0then h=h+1:[w+1]=-[w+1] 520 if[v+1]<0then h=h+10:[v+1]=-[v+1] 530 for g=0 to 2 540 if[w+g]>[v+g]else goto 580 550 if h=1 then f=-1 560 if h=10 then f=0 570 g=2:goto 630 580 if[w+g]<[v+g]else goto 630 590 for s=0 to 2:t=[w+s]:[w+s]=[v+s]:[v+s]=t:next 600 if h=10 then f=-1 610 if h=1 then f=0 620 g=2 630 next 640 if h=11 then f=-2 650 if h=0 then f=1 660 return 700 r=1:if q=0 then return else for p=1 to q:r=r*10:next:return
TeraTermからIchigoJamにプログラムを書き込む
IchigoJamを一日触って、直接プログラミングするよりも慣れたエディタでプログラムを書いて出来上がったプログラムをIchigoJamに送信したほうが楽だと思ったので、その方法を備忘録として書いておきたいと思います。方法はIchigoJamのシリアルポートからプログラムを書き込みます。シリアル接続にはTeraTermを用いました。IchigoJamとTeraTermの接続は以前のプログ(2015/4/1)に書いています。
IchigoJamのファームを書き換える
IchigoJamを買いました。いじっているうちに暴走させてしまい、動かなくなったので、ファームを焼きなおしました。その方法を備忘録として書いておきます。
IchigoJamの回路図はこのページに載っています。
USB-シリアル変換基板の用意
IchigoJamにファームを書き込むために、IchigoJamとPCをシリアル接続する必要があります。ちょうど手元にあった秋月電子で600円で売っている超小型USBシリアル変換モジュールを使うことにしました。
図のように、IchigoJamのスライドスイッチをOFFにしておいて、USBシリアル基板とIchigoJamを接続します。
USBシリアル IchigoJam TxD ----- RxD RxD ----- TxD GND ----- GND ISP ----- GND RESET --- GND
IchigoJamのISPもGNDにつなぎます。そして、IchigoJamのRESETもGNDにつないでおきます。RESETはスイッチオンした後にGNDから抜きます。
Flash Magicをダウンロードします
Flash Magicをダウンロードします。サイトはhttp://www.flashmagictool.com/です。画面右のDownloadからFlashMagic.exeをダウンロードします。
Flash MagicをインストールしたらFlash Magicを起動します。USBシリアルポートが割り当てられているCOM番号を調べてFlash Magicに設定します。COMポートを調べるにはTeraTermを立ち上げるのが一番早いかもしれません。ここではCOM4です。
Flash Magicの設定をします
図のように、LPC1114/102を選択し、COM4、ボーレートを115200にします。Verifyにもチェックを入れておきます。
IchigoJam起動
IchigoJamの電源スライドスイッチをオンにします。その後、GNDに接続したRESETのコードをはずします。この状態でIchigoJamがファームの読み書きができる状態になっています。
ファームの書き換え
現在のIchigoJamのファームを読み出してみます。Flash MagicのDisplay Flash Memoryを選択します。下図の虫眼鏡のアイコンです。
下図のようにメモリの内容がダンプされます。ダンプされれば接続が成功しています。
次に、ファームの書き換えを行います。Browseで最新ファームのhexを選びます。
Startボタンを押します。書き込みが開始され、Finishedが出れば終了です。
IchigoJamを起動してみる
スライドスイッチをオフにしてISPのコードを外します。
TeraTermを起動します。COM4を選択し、USBシリアルと接続します。次に、シリアルポートの設定を開いてボーレートを115200にします。
次に、端末を設定します。32×24にすると、IchigoJam画面サイズになりますがキャラクタが違うのであまり関係ないかな。
受信はAUTOにして送信はCR+LFにします。後、ローカルエコーにしないと入力文字がわかりません。
この状態で、IchigoJamのスライドスイッチをオンすると下のような画面になれば、ファームの書き換えが成功しています。
これで、新規ファームにアップデートしていけるようになりました。ファームをアップデートしても、SAVEしたプログラムは消えていませんでした。
WindowsでVagrant ec2を試してみる(1) 事前環境作り
最近、awsのec2を使い始めました。Vagrant ec2というVagrantでec2インスタンスをコントロールできるプラグインがあるので、Vagrantからec2インスタンスを作成してみるまでをまとめてみました。というか、このブログを書きながら試しています。
VagrantとVirtualBoxのインストール
すいません。VagrantとVirtualBoxはインストールされていて、WindowsでVagrantが動く環境ができているというところからスタートしたいと思います。
WindowsでVagrantを動かす方法などは、Windows7にVirtualBoxとVagrantをインストールしたメモサイトさん等を参考にしてください。
先ずは、事前準備です。WindowsのコマンドプロンプトからVagrantを使うよりも、linuxのシェルから使ったほうが個人的には好きなので、bashが使える環境を作ります。
とりあえずGitをインストールする
何故、Vagrantとは全然関係ないgitをインストールするかというと、gitは便利だし覚えた方がいいと思うからです。すいません、それだけです。でもgitのMSYSからVagrantを使うことになります。
Windows用のgitとしてGit for Windowsをインストールします。ダウンロードはGit for Windowsから、下記のDownloadボタンを押します。
GitBashのインストール
ダウンロードしたインストーラーを起動します。Nextを押します。
Nextを押します。
Nextを押します。
Git Bash Hereを選択して、Nextを押します。
Nextを押します。
Use Git from the Windows Command Promptを選択します。
Checkout as-is, Commit as-isを選択して、Nextを押します。
Finishを押します。チェックをつけているとリリースノートが開きます。
これでGitBashのインストール終了です。
GitBashのショートカット作成
GitBashのショートカットを作っておきましょう。たぶん、スタートメニュにあると思います。
リンク先は、"C:\Program Files (x86)\Git\bin\sh.exe" --login -i
作業フォルダは、%HOMEDRIVE%%HOMEPATH%
です。
マウスの右クリックでペーストしたいので、簡易編集モードにチェックを入れます。
最近、目が悪くなって、大きな文字でないと辛いので、フォントも大きくします。
ウィンドウの高さも大きめにします。
プロパティの設定は、こんなもんでしょうか。
日本語ファイル名を表示できるように
GitBashはそのままだと日本語ファイル名が化けます。気持ちが悪いので見えるようにします。
$ cd ~;ls -al
上のようにコマンドを打って、.bashrcファイルが無ければ作成します。
.bashrcファイルの作成
$ touch .bashrc
.bashrcファイルに下記の一行を追記します。
alias ls='ls --show-control-chars'
追記した後、GitBashを再起動するか、
$ source ~/.bashrc
すれば、日本語ファイル名が見えるようになります。
その他のGitBashに関する設定方法などは、WindowsのGitbashで、Githubをssh経由で操作できるようにセットアップしたなどのサイトを参照してください。
Windowsへの必要なもののインストールは終了しました。次に、awsで事前に設定しておかなければならないことが有るので、それらについて書いていきます。
WindowsでVagrant ec2を試してみる(7) vagrant up --provider=aws
いよいよ、vagrant upして、awsのEC2インスタンスをVagrantを用いて生成してみます。
起動は、--providerオプションをつけます。
GitBashを起動します。GitBashについては、WindowsでVagrant ec2を試してみる(1) 事前環境作りで説明しています。
vagrant up --provider=aws実行
実行するには、先ず、Vagrantを起動するフォルダを作成します。今回は ~/Documents/Vagrant/aws フォルダでVagrantを起動したいと思います。先ず、~/Documents/Vagrant/awsフォルダに先ほどのVagrantfileを置きます。そして、~/Documents/Vagrant/awsフォルダに移動します。
そして、vagrant up --provider=aws を 実行します。
$ cd ~/Documents/Vagrant/aws $ vagrant up --provider=aws
Bringing machine 'default' up with 'aws' provider... [fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded. ==> default: HandleBoxUrl middleware is deprecated. Use HandleBox instead. ==> default: This is a bug with the provider. Please contact the creator ==> default: of the provider you use to fix this. ==> default: Warning! The AWS provider doesn't support any of the Vagrant ==> default: high-level network configurations (`config.vm.network`). They ==> default: will be silently ignored. ==> default: Launching an instance with the following settings... ==> default: -- Type: t1.micro ==> default: -- AMI: ami-bddaa2bc ==> default: -- Region: ap-northeast-1 ==> default: -- Availability Zone: ap-northeast-1c ==> default: -- Keypair: VagrantEC2 ==> default: -- Security Groups: ["VagrantEC2SecurityGroup"] ==> default: -- Block Device Mapping: [] ==> default: -- Terminate On Shutdown: false ==> default: -- Monitoring: false ==> default: -- EBS optimized: false ==> default: Waiting for instance to become "ready"... ==> default: Waiting for SSH to become available... ==> default: Machine is booted and ready for use! ==> default: Warning! Folder sync disabled because the rsync binary is missing in the host. ==> default: Make sure rsync is installed and the binary can be found in the PATH.
これでインスタンスが生成されているはずです。vagrant sshしてみます。
$ vagrant ssh [fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded. Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Sat Jun 21 19:26:23 UTC 2014 System load: 0.81 Processes: 73 Usage of /: 9.6% of 7.75GB Users logged in: 0 Memory usage: 11% IP address for eth0: 172.31.23.210 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. ubuntu@ip-172-31-23-210:~$
TeraTermからログインしてみる
ここまで来ると、使い慣れたTeraTermからログインしたくなります。ということで、ログインしてみます。TeraTermのインストール方法は、TeraTermの最新版(4.82)をWindows7にインストールしてみました!サイトなどを参考にしてください。
TeraTermを起動します。EC2のIPアドレスは、awsのEC2インスタンスのConnectポタンを押して確認します。WindowsでVagrant ec2を試してみる(6) Vagrantfilesの作成のoverride.ssh.usernameのところで少し解説しています。
OKを押すと、セキュリティ警告がでるので、「続行」を押します。
User名に ubuntuを入れて、パスフレーズは無しでいいです。RSA/DSA鍵を使うを選択し VagrantEC2.pemファイルを選びます。
OKを押すと、TeraTermでEC2にログインできました。
WindowsでVagrant ec2を試してみる(6) Vagrantfilesの作成
vagrant-awsプラグインもインストールしたので、最期にVagrantfilesを作成したいと思います。
とりあえず、下記のような感じです。それぞれ説明していきたいと思います。
# vagrant up --provider=aws # Vagrant.configure("2") do |config| config.vm.box = "aws-dummy" config.vm.provider :aws do |aws, override| aws.access_key_id = "アクセスキー" aws.secret_access_key = "シークレットアクセスキー" aws.keypair_name = "VagrantEC2" aws.instance_type = "t1.micro" aws.region = "ap-northeast-1" aws.availability_zone = "ap-northeast-1c" aws.security_groups = "VagrantEC2SecurityGroup" aws.ami = "ami-bddaa2bc" override.ssh.username = "ubuntu" override.ssh.private_key_path = "~/.ssh/VagrantEC2.pem" aws.tags = { 'Name' => 'VagrantTest' } end end
config.vm.box
config.vm.boxは、vagrantのダミーボックスです。WindowsでVagrant ec2を試してみる(5) vagrant-awsプラグインインストールで作成したものです。
config.vm.box = "aws-dummy"
aws.access_key_id と aws.secret_access_key
aws.access_key_id と aws.secret_access_keyは、WindowsでVagrant ec2を試してみる(2) awsでのアクセスキー設定で取得したAccess Key Id と Secret Access Keyのことです。****は各自のコードになります。
aws.access_key_id = "********************" aws.secret_access_key = "****************************************"
aws.keypair_name
aws.keypair_nameは、WindowsでVagrant ec2を試してみる(3) awsでのKey Pairs設定で設定したKey pair nameになります。今回は「VagrantEC2」と設定しました。
aws.keypair_name = "VagrantEC2"
aws.instance_type
aws.instance_typeは、作成するインスタンスのタイプを設定します。「t1.micro」は最も小規模なインスタンスです。
aws.instance_type = "t1.micro"
aws.region と aws.availability_zone
aws.region と aws.availability_zoneは、インスタンスを生成する地域を指定します。WindowsでVagrant ec2を試してみる(3) awsでのKey Pairs設定で、「Tokyo」を選択しており、「Tokyo」のリージョンは「ap-northeast-1」となり、アベイラビリティゾーンは「ap-northeast-1c」となります。
aws.region = "ap-northeast-1" aws.availability_zone = "ap-northeast-1c"
aws.security_groups
aws.security_groupsは、WindowsでVagrant ec2を試してみる(4) awsでのSecurity Group設定で作成しています。今回は、「VagrantEC2SecurityGroup」というグループを作成しました。
aws.security_groups = "VagrantEC2SecurityGroup"
aws.ami
aws.amiは、生成するインスタンス上で動かすOSを指定します。今回はUbuntu Server 14.04 LTS 64bitのインスタンスを作成したいので、「ami-bddaa2bc」としました。
aws.ami = "ami-bddaa2bc"
override.ssh.username
override.ssh.usernameは、sshでログインするときのユーザー名です。選択したaws.amiによって決まっています。今回はUbuntu Server 14.04 LTS 64bitを選んだので、ユーザー名は「ubuntu」です。ユーザー名をインスタンスを作る前に調べる方法がわかりませんでした。一度、EC2でインスタンスを作れば、Running中にConnectボタンが押せるようになるので、Connectボタンを押せばユーザー名を確認することができます。
override.ssh.username = "ubuntu"
override.ssh.private_key_path
override.ssh.private_key_pathは、WindowsでVagrant ec2を試してみる(3) awsでのKey Pairs設定で保存したKey Pairsファイルのパスを指定するものです。今回は .sshフォルダにVagrantEC2.pemを保存しています。
override.ssh.private_key_path = "~/.ssh/VagrantEC2.pem"