2016年12月31日土曜日

2016年を振り返って

早いもので、2016年から2017年に突入しようとしている

いろいろなことがあった。

まずは「Amis!
これは、温湿度・デジタル入力変化をトリガーにメール通知(今はSlackに移行)するもの。
DD-Wrt化したBuffaloルーターに
・ARMクロスコンパイル環境の構築
・USB内臓PICの接続
・Node.jsを使ったメール通知
・iModelaにて基板切削
を行った。

次に「FON2405E拡張(シリアル通信)
まだ実験段階だけど。
・下準備のためにラズベリー・パイのカーネルコンパイルやGPIO操作、ドライバ作成
・RalinkSDKを使用して上記を移植
・OpenWrtのtftpboot
を行った。
OpenWrtを入れるためにSPIFlashの載せ替えをするところで、年末を迎えてしまっていた。

その他
・Electronを使う機会もあり、簡易的なGUI環境を作れるようになった。
 なんとなくJSを使う機会が増えたね。
・git(gogs)をいろいろ使い始めた
・親友が地元に戻り、実家を継いだ。 そして、結婚した。
・投資は目標クリア! 来年も頑張ろう
上半期は仕事が落ち着いていたので、安定的に時間をとれた気がする。
下半期は、忙しくて、なかなか時間が取れなかったかな。
でも、なんとか時間を確保して少しずつ前進できたと思う。

来年も引き続き家庭も仕事も充実するといいな。
ブログ的には
・目標探し
・楽しい教育
・投資を戦略的に行う
・「巨人の肩に乗る」
・「ググるよりもググられたい」
かな。

ちなみに年初の目標は
 ・Electon(NW.jsもか)を使った開発   → ×
 ・PICマイコンを使った開発をもっと行う → ○
・投資も頑張る             → ◎
といった感じ。

2016年12月25日日曜日

ラズベリー・パイでSST26VF032の読み書き

11月の末頃にFONのフラッシュ容量拡張のために
SST26VF032Bを入手した。 
microchipのオンラインストアから注文できるし、3日程度で到着した気がする。
しかし、そのまま交換してもフラッシュに書き込みができなかった。Orz

注意
 SST26VF032はSPIモードでの書き込みに対応していないので、「B」有りが必要。
http://www.microchip.co.jp/support/faq_sst-fm.html
このあたりをあまり気にせずに購入していた。危なかった。。。

基礎知識
をあまり持っていなかったので、他の型番の日本語のデータシートなどを読んで雰囲気を学習
http://www.onsemi.jp/pub_link/Collateral/ENA2097JP-D.PDF
http://japan.xilinx.com/xcell/xl55/jp55xcell_13.pdf


そしてSST26VF032Bについて
・データシート
http://ww1.microchip.com/downloads/jp/DeviceDoc/jp566514.pdf
 ・サンプルプログラム
http://www.microchip.com/wwwproducts/jp/SST26VF032B
 →末尾のソフトウェア

初期化
Quad I/Oとか特殊なものを使わないのであれば、初期化すべき項目は少ないと思う。
01H WRSRでIOCとWPENの設定くらい
JEDEC-IDを読んで対象のデバイスかどうかを確認しておく

読み込み方法
03H Readですんなりと読み出すことができる

書き込み方法
一番手こずった
PinのWriteProtectや06H WREN、そしてBlockProtectなんてものもあるOrz
最後のBlockProtectを失念していたために半月くらい悩んだ。
前述のサンプルプログラムを最初から見ておけばよかった。
こんな流れ
1.06H WREN WriteEnable
2.42H WBPR BlockProtection解除
3.02H PP PageProgram
4.05H RDSR BUSYチェック

こんな感じ。


2016年12月8日木曜日

FON2405E カスタムファーム用のドライバ開発

前回、準備としてなんちゃってドライバを作成して、insmodするところまでいけた。
次は自力シリアル通信ドライバを作成(ラズベリー・パイ用に作った奴の移植)をしてみる。



1.概要
ドライバ名はMy2nd(まだ名称が決まってないOrz)コードは末尾に記載。
Makefileは前回からドライバ名のみ変更した。


2.導入
nfsマウント
mount -o nolock 10.10.10.3:/var/lib/tftpboot /mnt
insmodしてみる

メッセージのメジャー番号が253 マイナー番号が0が重要で、コレがないと/dev/●●が作成できない。
カーネルのバージョンがアレなので、手動でスペシャルファイル?を作成する必要がある。
mknod /dev/My2nd0 c 253 0
とするとMy2nd0というデバイスファイルが作成できる。

3.テスト
 作成したMy2nd0に対してechoで文字列を送ってみる。
 echo -n HelloWorld!! > /dev/My2nd0

するとPIC側のコンソールに表示される。

やったーうまくいった!

4.コード
こんな感じ


2016年11月28日月曜日

FON2405Eのフラッシュメモリを交換→失敗

魔が差して、フラッシュメモリの交換をしてしまった。
MX25L8006EからSST26VF032へ。

しかし、書き込みで失敗してしまう。。。
Unlocking Kernel ...
Writing from /var/cgi9yh6g9 to Kernel ... [w]Post-Write check failed.

やっぱりよく調べてからじゃないといけないね。
せめて同じメーカーとかにしておけばよかった。
酩酊買いしたので、あと20個近くある!

不良在庫にしないためにも何とか解決したいものだ。
とりあえず、ロジアナ使って、SPIモードでJEDEC-ID は読めた。
さてこれからどうしようか・・。

2016年11月16日水曜日

FON2405E カスタムファーム用のドライバ開発(準備)

FON2405EのGPIOを使ってシリアル通信をさせるため、いろいろ回り道をしながら挑戦を続けてきた。
今回は、RalinkSDKで作った FON2405E用カスタムファームに向けたドライバ開発について。

1.カスタムファームの変更

まずは、カーネルコンフィングの変更
[make menuconfig]で、[Loadable module support]以降を適当に有効化しておく
Enable loadable module supportとか。
これを忘れていて、make時にprintkとかが定義されていないと怒られた。ハマった。
http://stackoverflow.com/questions/31195516/error-building-android-kernel-module-on-ubuntu-14-04

その他に、insmodとかlsmodとか必要に応じで、有効にしておく。

ファームができたら、FONに入れておく。

2.テスト用ドライバの作成

とりあえず、準備なので何でも良い。やっつけコードを、末尾に記載。

3.Makefileの準備

 ここがいろいろ試行錯誤した。

4.いざ、Make


一撃! うれしい!! 未使用変数の注意が出ているけど、知っているやつなので、放置。

これで、my1st.koができた。

5.NFSマウント

SDKのマニュアルどおり。
mount -o nolock 10.10.10.3:/var/lib/tftpboot /mnt
でOK

6.insmodしてみる

作成したmy1st.koをinsmodすると・・・。


よかったーーー。 ちゃんとprintkも動いている。
あきらめずに続けてよかった。
ラズベリー・パイで下準備しておいて本当によかった。

2016年11月14日月曜日

FON2405EにOpenwrt導入の挑戦

約2年ほど前、FON2405Eにカスタムファーム導入に挑戦した。
http://continue-to-challenge.blogspot.jp/2015/01/fon2405e.html

その時は、Openwrtはサイズが2MB以上になってしまい、
結局 RalinkSDK的なものを使ったカスタムファームを導入することにした。
http://continue-to-challenge.blogspot.jp/2015/01/fon2405e_24.html
http://continue-to-challenge.blogspot.jp/2015/01/fon2405e_27.html

でも、最近になって、FONのGPIOでシリアル通信をやらせたいと考えるなかで、
SDKのバージョンも古いし、FONのフラッシュ2MBしか無いのが不満に思えてきた。

いまさらだけど、フラッシュメモリを載せ替えたら幸せになれるんじゃないかと思えてきた。すでにやっている方もいるみたいだし。
https://awaitingstock.wordpress.com/2013/01/11/fon2405efonara-simpl-flsah%E8%BC%89%E3%81%9B%E6%9B%BF%E3%81%88/

そのための準備として、最新のOpenwrtはFON2405E でも動くのか?というのを確認した。


手順1 Openwrtのカーネルソース入手

基本的には、以下の手順だけど、 別にtrunkじゃなくて、安定版が欲しい時は、
https://wiki.openwrt.org/jp/doc/howto/buildroot.exigence
https://dev.openwrt.org/wiki/GetSource

svn co svn://svn.openwrt.org/openwrt/trunk/
git clone -b chaos_calmer git://github.com/openwrt/openwrt.git
にしたら幸せになれた。
 
 手順2 Make!

「make menuconfig」後の話
   Tartget System = Ralink RT288x/RT3xxx
  Subtarget           = RT3x5x/RT5350 based boards

ほかは必要に応じて変更
pppやusb関係が不要なら削除など。

手順3 FON2405Eにお試しインストール

先の手順で、bin/ramips/以下にバイナリイメージがたくさん作成される。
そのなかで、これを試してみる
2369793 bin/ramips/openwrt-ramips-rt305x-rt-g32-b1-initramfs-uImage.bin
なぜお試しかというと、イメージサイズが、2MB以上だからOrz
インストールできない!!

作成したイメージをTFTPサーバー上においておく、名前は適当に今回はuImage.bin。
このサーバーのIPは10.10.10.3とした(FONのU-Bootのデフォルトがそうだから) 。

FONはリセットボタンを押しながら電源ONして、U-Bootの起動オプションで3を選択!

その後、 コマンドラインから
tftpboot 80800000  uImage.bin
そして、
bootm
とすると、Openwrtが起動しました!



嬉しいけど、やっぱりインストールしたい!
フラッシュメモリを載せ替えるか!?



ラズベリー・パイのカーネルビルドとクロスコンパイル環境のメモ

時間がたつと忘れそうなので、メモ

 カーネルビルドとクロスコンパイル環境の作成
https://www.raspberrypi.org/documentation/linux/kernel/building.md

Raspiのバージョンによって手順が異なるので注意。
以下はRaspi1の場合
git clone --depth=1 https://github.com/raspberrypi/linux
cd linux
KERNEL=kernel
make bcmrpi_defconfig

2016年10月23日日曜日

ラズベリー・パイで自力シリアル通信(ドライバー編)

随分と時間がかかってしまったけど、ようやく動くものになってきた。

概要
カーネルモジュール(ドライバー?)を作成して、GPIOをパタパタさせる。
8月からやっているヤツのデバドラ版。

デバイスとして扱われるので、echoやcatで入出力ができたり、既存の通信プログラムでも使えると思う。
出力されるクロックはdelayを使っているので、安定していると思う。
データのポーリングはカーネルタイマーを使っているので、
ラズベリー・パイの場合は100Hzが(10ms)が限界。
性能評価はこれから。

cat /dev/zero > /dev/MySFR9km0

とやってみると、大体350 Char/Secくらい。意外と遅い。

PIC側の設計上は960Char/Secまで行けるのはずなのだが??



メモ
request_mem_regionが毎回失敗するのはなぜだろう
早速Amisでも移植してみるか?

2016年9月21日水曜日

PHPからslackに投稿する(WebPI)

最近ますます流行ってきているSlackを導入してみて2日経過した。
PHPからPOSTで投稿してみた。
rsyslogと連携して、sshdのログイン/ログアウトを通知するようにしてみた。


#attachmentsの入れ方がわからなくて、ものすごく苦労したOrz


2016年9月20日火曜日

Slackインストール

〇〇botとか作ってみたくて、でもLineは私用なので、分けてみたいと思っていたら、slackというものを発見した。

これなら今までメール通知でやっていたものを置き換えできそう!!

メール通知
http://webos-goodies.jp/archives/50645131.html


<参考>
http://toach.click/slack-botkit/
http://lab.aratana.jp/entry/2014/12/04/185053
http://tech.machiiro.jp/entry/2016/05/13/090000
https://elstreet.style/?p=1124
https://elstreet.style/?p=1099

2016年9月3日土曜日

MPLABXをLINUXで使ったら文字化け

バージョンアップの度にはまるので、備忘録として

日本語が表示できるいい感じのフォントをfonts/fallbackにぶち込んでおく

/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipag.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipamp.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipam.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipagp.ttf

これだけ。毎回忘れる。Orz

2016年8月31日水曜日

ラズペリーパイで自力シリアル通信

ひょんなことから、過去にFONのGPIOを使ったなんちゃってシリアル通信を実装したのを思い出した。過去の投稿
 当時は、ラズベリーパイが注目されていて、いいな−と思いつつ、ちょっと高いなと感じており、中古で@500円程度で入手できるFONを何とか拡張できなかと思っていた。
結局受信エラーが抑えきれなくて、途中興味を失ってしまった。

最近になって、
1.2014年7月 トランジスタ技術
2.LINUXデバイスドライバ
3.RaspberryPiで学ぶARMデバイスドライバープログラミング
 を読む機会があって、FONでやりたかったことを再度挑戦してみようと思った。

そのまえに、情報が豊富なラズベリーパイで準備運動をしてみた記録。



 概要
ユーザーランドでGPIOをパタパタさせて、同期型シリアル通信を行い、
PICマイコンにて、UARTに変換する。

ラズピでuname -aを実行してPIC経由のURATで受信した結果。


ラズピ側
ユーザーランドでGPIOをパタパタさせるプログラム
ほとんど前述の 「3」のとおり
GPIO7 - CLK OUT
GPIO8 - DATA OUT
PIC側
RB0 - CLK IN (割り込み)
RB5 - DATA IN
RB2 - TX
なんとなく達成感があるね。
次はPICからラズピ側に送信する機能を作ってみよう。

2016年8月22日月曜日

2つ同時に初期不良品をつかんでしまった

こんなこともあるのかと・・・。

Amazonで購入した3TBの外付けHDDと近所のハードオフで購入した光BOX3が見事に初期不良品だった。

・HDD MAL33000EX3 3TB @9,890

安さに惹かれてついつい買ってしまい、レビューを見て愕然。
リフレッシュ品とか初期不良の文字が目立つ。
実際HDDとして認識しないし、フォーマットかけてもエラーになるし・・・。

・光BOX3 @1,500
HDMI出力されない。TVにつないでもパソコンモニターにつないでもだめ。


まぁついていないことは重なるものだね。。。
返品できるかなぁ。Orz


2016年7月12日火曜日

でんき家計簿のデータをMySQLに保存する(phantom.jsを使う)

先日、selenium+firefoxを使用したでんき家計簿のスクレイピング をやってみた。
次はphantom.jsを使ってcronで実行できるようにしたいと思った。

といっても、driverの部分を変えるだけ。
最初は、

var driver = new webdriver.Builder().forBrowser('phantomjs',phantomjs.path).build();

と書いていたんだけど、cronで実行するとphantom.jsのパスが見つからないと怒られてしまった。
調べてみると、適切な書き方があった。
var driver = new webdriver.Builder()
       .withCapabilities({"phantomjs.binary.path":phantomjs.path})
       .forBrowser('phantomjs')
       .build();
これでOK!

これを定期的に呼べばいい感じに電力使用量が入手できる。

2016年7月3日日曜日

でんき家計簿のデータをMySQLに保存する

でんき家計簿
 というサービスがある。

スマートメーターが設置されていれば、30分間隔の電力使用量が表示できる。
https://www.kakeibo.tepco.co.jp/dk/syo/electricUsage30MinGraph/

これをなんとかMySQLに保存したいと思った。
wgetでもごもごできるかなと思ったけど、認証があるしメンドクセー。
と思って数日経過し、ネットサーフィンしていたら、
すでに実現している人がいた。スゲー。
http://sirrow.info/archives/578

いろいろな技術を使っているのね。
  • minimist・・・コマンド引数パーサー
  • selenium-webdriver・・・Web自動テストツールらしい
  • phantomjs・・・ブラウザ画面のないQtWebKit ベースのブラウザらしい
 selenium-webdriver
 スクレイピングするツール?
https://www.npmjs.com/package/selenium-webdriver
http://www.seleniumhq.org/docs/03_webdriver.jsp#selenium-webdriver-api-commands-and-operations

PhantomJS
http://tips.hecomi.com/entry/20121229/1356785834
http://phantomjs.org/download.html
ふーん。キャプチャできた!

まずは
selenium-webdriver + firefoxででんき家計簿にアクセスしてみる
ほぼ前述の方と同じだ。 Orz
こんな感じ。
得られたデータはこんな感じ。

ひさしぶりにすごいなと思った。

2016年6月25日土曜日

iij mioひかりが遅いのかと思ったら違った

インターネットが遅い!
夜、スマホを家のwifiに接続していると、ネット接続が遅すぎてイライラする。
普通にLTE接続したほうが早いくらい。

スピードテストを行ってもタイムアウトが発生することもしばしば。

なんでかなーと思って、家のネット速度を図ってみることにした。
使用したのは、speedtest-cilってやつ
 https://github.com/sivel/speedtest-cli.git

これをcron様で1時間おきに実行してみた。
期間:2016/6/21 8:51~2016/6/25 13:15

結果

平均値
Ping     :28.4ms
ダウンロード:56.9Mbps
アップロード:74.9Mbps
あれ?
あんまり遅くない!?

グラフにするとこんな感じ


生データもおいておきます。
date Ping Download Upload
2016/6/21 8:51 17.662 62.01 69.94
2016/6/21 8:52 13.458 74.54 102.25
2016/6/21 12:05 14.979 74.38 95.86
2016/6/21 12:23 13.296 66.93 73.06
2016/6/21 13:15 15.49 59.18 91.25
2016/6/21 14:15 119.306 41.96 98.37
2016/6/21 15:15 14.424 68.73 101.59
2016/6/21 16:15 57.403 28.06 73.57
2016/6/21 17:15 91.326 33.83 87.29
2016/6/21 18:15 18.206 35.91 63.8
2016/6/21 19:15 14.564 67.08 73.96
2016/6/21 20:15 16.082 64.41 83.83
2016/6/21 21:15 19.249 42.51 81.1
2016/6/21 22:15 32.393 55.25 49.22
2016/6/21 23:15 13.366 40.37 41.44
2016/6/22 0:15 14.862 60.54 69.99
2016/6/22 1:15 102.954 40.24 57.04
2016/6/22 2:15 14.314 68.08 85.78
2016/6/22 3:15 13.443 67.54 77.57
2016/6/22 4:15 13.521 67.16 81.69
2016/6/22 5:15 13.341 72.3 91.09
2016/6/22 6:15 14.252 69.19 24.39
2016/6/22 7:15 14.673 61.21 76.46
2016/6/22 8:15 18.76 37.04 91.31
2016/6/22 9:15 15.605 65.62 86.9
2016/6/22 10:15 14.654 59.9 77.27
2016/6/22 11:15 13.789 62.59 97.88
2016/6/22 12:15 17.035 44.92 98.17
2016/6/22 13:15 14.65 66.59 92.65
2016/6/22 14:15 57.149 30.3 68.24
2016/6/22 15:15 92.062 51.79 78.39
2016/6/22 16:15 14.691 56 53.31
2016/6/22 17:15 14.642 59.72 79.08
2016/6/22 18:15 89.277 30.02 68.7
2016/6/22 19:15 16.216 58.69 73.02
2016/6/22 20:15 48.201 38.4 38.21
2016/6/22 21:15 13.836 57.57 53.37
2016/6/22 22:15 48.478 47.26 34.01
2016/6/22 23:15 35.806 67.19 91.51
2016/6/23 0:15 72.176 24.71 45.62
2016/6/23 1:15 14.773 64.93 90.78
2016/6/23 2:15 41.096 43.38 43.99
2016/6/23 3:15 13.806 75.47 96.75
2016/6/23 4:15 14.745 65.45 93.72
2016/6/23 5:15 13.512 67.49 96.9
2016/6/23 6:15 14.597 70.07 98.11
2016/6/23 7:15 14.6 68.68 88.51
2016/6/23 8:15 13.641 75.12 90.88
2016/6/23 9:15 14.722 37.77 66.79
2016/6/23 10:15 13.974 72.87 99.66
2016/6/23 11:15 13.943 69.71 92.54
2016/6/23 13:15 14.196 72.69 100.79
2016/6/23 14:15 26.158 62.51 63.66
2016/6/23 15:15 14.817 49.36 34.87
2016/6/23 16:15 27.039 37.48 78.16
2016/6/23 17:15 16.061 47.53 81.91
2016/6/23 18:15 48.259 70.33 94.46
2016/6/23 19:15 21.64 33.72 52.55
2016/6/23 20:15 16.272 69.22 56.84
2016/6/23 21:15 41.007 37.62 44
2016/6/23 22:15 15.332 42.81 49.14
2016/6/23 23:15 22.458 57.33 38.63
2016/6/24 0:15 24.918 68.38 92.45
2016/6/24 1:15 14.115 53.59 22.11
2016/6/24 2:15 52.254 71.84 88.83
2016/6/24 3:15 15.287 59.09 84.3
2016/6/24 4:15 15.106 67.96 85.41
2016/6/24 5:15 15.563 73.71 93.67
2016/6/24 6:15 13.599 67.76 90.71
2016/6/24 7:15 14.032 60 87.25
2016/6/24 8:15 13.662 66.54 84.29
2016/6/24 9:15 14.192 60.12 95.02
2016/6/24 10:15 134.58 31.99 62.5
2016/6/24 11:15 13.768 60.08 59.94
2016/6/24 12:15 13.934 65 85.13
2016/6/24 13:15 13.959 65.34 83.09
2016/6/24 15:15 14.748 56.74 58.4
2016/6/24 16:15 16.261 42.16 96.2
2016/6/24 17:15 13.818 60.69 95.49
2016/6/24 18:15 13.922 61.76 75.35
2016/6/24 19:15 16.095 51.09 72.14
2016/6/24 20:15 14.162 66.01 66.65
2016/6/24 21:15 15.049 54.15 69.63
2016/6/24 22:15 14.417 56.3 53.04
2016/6/24 23:15 13.8 38.39 39.68
2016/6/25 0:15 74.175 13.08 20.96
2016/6/25 1:15 14.759 55.81 58.15
2016/6/25 2:15 14.84 62.29 53.59
2016/6/25 3:15 14.871 50.66 83.97
2016/6/25 4:15 13.858 67.08 86.4
2016/6/25 5:15 14.373 65.79 87.27
2016/6/25 6:15 181.924 59.77 84.69
2016/6/25 7:15 14.276 62.22 82
2016/6/25 8:15 13.959 65.01 87.42
2016/6/25 9:15 18.152 51.83 84.71
2016/6/25 10:15 13.731 54.33 73.85
2016/6/25 11:15 16.152 66.96 91.25
2016/6/25 12:15 180.747 63.24 58.08
2016/6/25 13:15 13.96 64.15 86.51