2017年11月3日金曜日

FON2405Eのフラッシュメモリを交換→成功→LEDE・Openwrt導入

約1年ほど前にFON2405Eのフラッシュメモリを交換して失敗した。
http://continue-to-challenge.blogspot.jp/2016/11/fon2405e_28.html
またまた魔が差して、 他の基板からMX25L6405D (8192 Kbytes)を引っぺがして交換してみた。
もともと乗っていたのがMX25L8006Eだから上位品?。
すんなりU-Bootでのファーム書き換えはできた。

せっかくなので、OpenwrtからスピンオフしたというLEDEを導入してみることにした。


手順0 フラッシュ交換メモ

忘れそうなので・・・。
0.u-boot他を旧フラッシュからバックアップ
cat /dev/mtdblock0 > /tmp/mtdblock0.img  <Uboot>
cat /dev/mtdblock1 > /tmp/mtdblock1.img  <Config>
cat /dev/mtdblock2 > /tmp/mtdblock2.img  <RF>
3と4はu-bootから書き込むからここではバックアップしない
 mtdblock0-2.imgはPCに退避させておく

1.u-bootの起動メニューで「2」入力しコンソール?に入る
2.通電状態でフラッシュ交換する(ハイリスク!)
3.ファーム書き換えを実行
  KernelとRootFSが書き換えられ、その後linuxのブートに入る
4.新フラッシュにu-boot他を書き込む
cp /tmp/mtdblock0.img /dev/mtdblock0
cp /tmp/mtdblock1.img /dev/mtdblock1
cp /tmp/mtdblock2.img /dev/mtdblock2
今思えばu-bootさえ書き込めれば、あとはLEDE書き込むから
別にやらなくても良かった。

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

基本的には以下の手順だけど
https://lede-project.org/docs/guide-developer/the-source-code
https://lede-project.org/docs/guide-developer/use-buildsystem

具体的な手順は次のような感じ。簡単だね。
git clone https://git.lede-project.org/source.git
./scripts/feeds update -a
./scripts/feeds install -a 

手順2 FON2405E用にカスタマイズ・Device Tree Source (dts)を作成

オリジナルのFON2405Eとは違うのでFON2405EKAI(改)とした。
変更点をpatchにしてみた。 
完成するまでは紆余曲折あって大変だったけど。 改めてみると変更点って大したこと無いね。
(実は9月末くらいから悩みながらやっていた)

手順3 カーネルイメージ作成

適宜、設定を行う
make menuconfig
make kernel_menuconfig
そして
make -j4 V=99

lede-ramips-rt305x-fon2405ekai-initramfs-kernel.bin
lede-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin
が作成される

手順4 ファームアップ

まずは、u-bootからファームアップを行う
 lede-ramips-rt305x-fon2405ekai-initramfs-kernel.bin
を使う。
これで起動すると・・・。
[    4.689131] m25p80 spi0.0: mx25l6405d (8192 Kbytes)
[    4.699191] 3 ofpart partitions found on MTD device spi0.0
[    4.710330] Creating 3 MTD partitions on "spi0.0":
[    4.720086] 0x000000000000-0x000000010000 : "u-boot"
[    4.733996] 0x000000010000-0x000000020000 : "devconf"
[    4.749129] 0x000000020000-0x0000007d0000 : "firmware"
と、rootfsがない状態になる。
設定変更しても反映されない悲しい状態。
どうやらsysupgradeにて再度ファームアップが必要みたい(たぶん)。
sysupgrade -v /tmp/lede-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin
このあと起動すると
[    0.614392] m25p80 spi0.0: mx25l6405d (8192 Kbytes)
[    0.624447] 3 ofpart partitions found on MTD device spi0.0
[    0.635587] Creating 3 MTD partitions on "spi0.0":
[    0.645343] 0x000000000000-0x000000010000 : "u-boot"
[    0.659229] 0x000000010000-0x000000020000 : "devconf"
[    0.674223] 0x000000020000-0x0000007d0000 : "firmware"
[    1.385424] 2 uimage-fw partitions found on MTD device firmware
[    1.397553] 0x000000020000-0x000000147454 : "kernel"
[    1.411314] 0x000000147454-0x0000007d0000 : "rootfs"
[    1.426108] mtd: device 4 (rootfs) set to be root filesystem
[    1.439008] 1 squashfs-split partitions found on MTD device rootfs
[    1.451676] 0x000000331000-0x0000007d0000 : "rootfs_data"
となった。やったー。
Luciも開けた!

諦めずにやってよかったー。
//SST26VF032bもどうにかしないと
<参考>
https://wiki.openwrt.org/doc/devel/add.new.platform
https://wiki.openwrt.org/doc/devel/add.new.device
https://wiki.openwrt.org/doc/howto/build
https://wiki.openwrt.org/doc/techref/flash.layout
https://lede-project.org/docs/user-guide/extroot_configuration
http://rainbowdevil.jp/?p=1247

http://www.srchack.org/article.php?story=20150829103857687

2017年9月5日火曜日

ZoneMinderの検知画像と動画をSlackに投稿する

ZoneMinderでは動体検出時等にメール通知する機能があるみたい。
それをなんとか使えないかと思ったけど、面倒くさいと思ってしまった。

すごく邪道な方法で検出時の画像と動画をSlackに投稿する方法を考えた。
それは、zmの吐き出すログをイベントトリガーとするもの。

ついでに検出時に音を鳴らすようにした。

1.インストール
  sudo apt-get install ffmpeg

2.ZoneMinderの画像保存先を漁るスクリプト
  /usr/local/bin/Victrola4ZM.sh
  sudo chown syslog Victrola4ZM.sh
  これは、NanoPIの/etc/rsyslog.conf内の"$FileOwner syslog"のため
  /usr/local/Gillie/Post2slack.js
  これはSlackAPIのトークンが含まれるためowner(=syslog)以外参照させないchmod 700
 
3.ZoneMinderのログを漁るスクリプト
  /etc/rsyslog.d/Victrola4ZM.conf
  sudo systemctl restart rsyslog
4.音を鳴らすために
  usermod -aG audio syslog

5.実行結果



2017年8月20日日曜日

NanoPi NEOを監視カメラに(ZoneMinder+nginxで動体検出)

先日入手した「NanoPi NEO」で監視カメラ(動体検出)を構築してみた。

動体検出としてはmotion一番有名だと思っているが、
今回は外部トリガー(例えば、焦電センサーとかSlackからの要求とか)に対応したく
ZoneMinderを使用してみた。

motion
 導入事例が多い、外部トリガーには対応していない?
ZoneMinder (github)
 導入事例がmotionに比べて少ない、設定項目が多く、プログラム自体も巨大?
 外部トリガーが出来るっぽい

ただし、ZoneMinderはwebサーバーにapacheが必要みたい。
なんとなく軽量にしてみたく、nginxを使用するように変更。

1.インストール
  sudo apt-get install zoneminder
  sudo apt-get install nginx-extras fcgiwrap php7.0-fpm
  sudo apt-get install mariadb-server

2.セットアップ
  (1) nginx
   /etc/nginx/sites-available/default の変更
    ・cgi-binとfastcgi_paramsのところ
  アクセス権付与し、再起動
  chown www-data:www-data /etc/zm/zm.conf
  systemctl restart nginx

 (2)mariadb
  ※ユーザー・パスワードは適宜変更、 /etc/zm/zm.confと合わせる
  create user 'zmuser'@'localhost' identified by 'zmpass';
  grant all on zm .* to zmuser;
  create database zm;
  mysql -u zmuser -p zm < /usr/share/zoneminder/db/zm_create.sql

 (3)php
  /etc/php/7.0/fpm/php.ini の変更
  「date.timezone = "Asia/Tokyo"」
  再起動
  /etc/init.d/php7.0-fpm restart

 (4)カメラへのアクセス権付与
  usermod -aG video www-data
  ※要再起動
  
 (5)その他
  /etc/sysctl.confを変更
  kernel.shmall = 268435456
  kernel.shmmax = 268435456
  sysctl -p
  ※本当に必要かわからない。 Orz
  8/30 追記
  ここに設定方法があった。
  使用しているNanoPi NEOは256MBだから半分の128MBにした
  
  kernel.shmall = 32768
  kernel.shmmax = 134217728


   ipcs -l 実行結果は以下の通り

------ Messages Limits --------
max queues system wide = 989
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 131072 = 128MB
max total shared memory (kbytes) = 131072 = 128MB
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

 (6)webページにアクセス
  http://[NanoPiNeoのIPアドレス]/zoneminder/index.php

  設定 > Paths > PATH_ZMSを変更
  /zoneminder/cgi-bin/nph-zms

3.映像確認
こんな感じ




手順まとめると大したことなかったけど、
もろもろ1週間位かかっているOrz

最後に自動起動するようにしておく
systemctl enable zoneminder
systemctl start zoneminder

あと、ディスク容量が逼迫した場合に古い記録から消す設定
How can I stop ZoneMinder filling up my disk?
http://zoneminder.readthedocs.io/en/latest/faq.html

次は検知時の映像をslackに投稿するぞー!

参考
 ・https://chiralsoftware.com/idea/nginx-ubuntu-and-zoneminder


NanoPi NEOを使ってみる(導入)

たまたま安価なlinuxボードを求めてさまよっていたら秋月電子で「Nano Pi NEO」 が売られているのを発見した。 しかも@1,680で。
ヒートシンク(@400)とSDカード、電源があれば動いてしまう!

世の中的には、Raspberry Pi Zero Wなんだろうけど、入手できないし・・・。
 こっちはUSBポートが3つあるので、いろいろ繋げられそう。
ただし、HDMI出力とかないので、セットアップ時は、シリアルコンソール必須だと思う。

 この手のlinuxボードはパット見安いけど、結局SDカードやら、電源やらで高くなるのがネックだ。
お金ないし。その点、FONはSDカードいらないけど、出来ること限られるしUSBがあるこっちの方がどうしても使い勝手は良いよね・・・。

そんな感じで、試しに使ってみることにした
合計:3,600円
 結構かかった。SDカード買っていたらもっと高くなってる!!
 ACアダプターなんだけど、トラッキング対策されていないOrz。 いいのかこれ。

組み立て


ちっこくてかわいい


OSの選択
公式?のnanopiOSは8GB以上のSDカードが必要っぽいので、
armbianを使ってみることにした。こっちだと1.8GBだし。
nanopi OS
armbian

簡単3ステップでOK
 1.SDカードにOSを入れて
 2.デバック用の端子にUSBシリアルケーブル接続
   接続先はURAT0で115,200-8-N-1

 3.電源ON!  -  armbian-configで環境設定



2017年5月27日土曜日

3Dプリンターの発熱対策

X軸のステッピングモーターの発熱が気になる・・・。

 効果は未知数
用意したものは
・ヒートシンク(http://akizukidenshi.com/catalog/g/gP-05051/)×2個
・ 熱伝導シート(http://akizukidenshi.com/catalog/g/gP-08256/)×2枚
・ヒートシンク抑え:3Dプリンターで作った


よくよく考えたらY軸も発熱がやばいかねぇ・・・。



2017年5月14日日曜日

3Dプリンターの導入(HICTOP Reprap Prusa i3 3dp-08bk)

ついにというか、ようやくというか、念願?の3Dプリンターを導入した。
これ「HICTOP Reprap Prusa i3 3dp-08bk」

https://www.hic3dprinter.com/collections/3d-printers/products/hictop-prusa-i3-3d-desktop-printer-diy-high-accuracy-cnc-self-assembly-tridimensional

■雑感
 GWからポツポツと組み立てを始めた。
・同梱されていたCDはなぜか空のCDRとして認識されてしまい。中身が見れなかった
 ・電源ケーブルは先駆者が指摘しているとおり、非常に細く心許ないものだった
→手持ちの太めのケーブルに変更した。
  

 ・amazonレビューの情報もとても参考になった。
  →といってもそこまでひどい状態ではなかったけど。

■組み立て
 取説もおそらくCDに入っているのだろうけど、中身が見れなかったので、HPから入手した。
  →リンク先
 組み立て手順は以下が参考になった
  ・息子と一緒に Makers
  ・ すけログ 
  ・HICTOP 3Dプリンター3DP08 配線の説明 日本語  
 ちょっと奮発して「プラットフォームシート」なるものも入手した
  ・3M 3Dプリンタープラットフォームシート(3枚入) ABS/PLA対応 3099AB

■ソフトインストール
組み立てはまぁ情報がいろいろあるのでなんとかなったけど、
出力ソフトはOSがLinuxなので選択肢が少ない(知らないだけかもしれないけど)
・Cura(くーら?) ・・・ プリンターを認識してくれなかった
・Repetier-Host(レペティア)・・・認識してくれた 日本語もOK

設定はHPから入手

設定の説明は以下が詳しかった
Cura プリンター制御設定編

■設定メモ
・プリンター設定
<Printer Settings → Connection>
 ・Connector:シリアル接続
 ・Port:/dev/ttyACM0
<Printer Settings → Printer>
 ・Default Extruder Temperature:210℃
 ・Default Heated Bed Temperature:50℃
<Printer Settings → PrinterShape>
 ・XMax:220mm YMax:270mm  ZMaxが無い?200mm


・材質が「PLA」の場合
<CuraEngine Settings -> print>
 <Speed and Quality>
 ・Travel:40mm/s - 70mm/s
 ・Outer Perimeter 30mm/s - 60mm/s
 ・Outer Perimeter 30mm/s - 60mm/s
 ・Layer height:0.2mm
 <Structures>
 ・Shell Thickness:0.8mm
 <Extrusion>
 ・Retraction Speed:40mm/s
 ・Retraction Distance:4mm

■プリント開始
■完成例



2017年2月27日月曜日

ラズベリー・パイでSST26VF032Bの読み書き(node.js)その4

前回1/前回2/前回3からの続き

アドレス範囲指定もJpGridにしてみた。
読み込み時の進捗表示も追加。

データをファイルに保存したり、ファイルから書き込めるように機能追加中
丁度今、ファイルダウンロード機能が作り終わったところ。
 ファイルから書き込みができれば、ようやく本題に戻れるわけだ・・・。

なかなかまとまった時間が取れないけど、コツコツ頑張ろう。

2017年2月11日土曜日

ラズベリー・パイでSST26VF032Bの読み書き(node.js)その3

前回1/前回2からの続き

DataViewを手作りしていたけど、思うところがあって、jqgridに変更中


スタイルが崩れているのは、fundationと干渉しているから。
別途、調整する。 まずは『巨人の肩に乗る』
右側にACSIIビューつけた。こちらももろもろ別途調整する。

まずはデータ操作がそれなりにできるようにして、早くファイルから読み書きができるようにする。
やりたいことはたくさんある。時間は有限だ!

2017年2月5日日曜日

ラズベリー・パイでSST26VF032bの読み書き(node.js)その2

前回からの続き

ようやくデータの読み書きができるようになった。
ファイルが多すぎて公開するのが少し面倒。なにかよい方法が無いか検討中。

あとは、ファイルに書き出す、ファイルから書き込みができれば、
当初の目的?だった、FONのFlash交換の実験ができそう!
どんだけ遠回りしてるんだOrz

2月に入ってまとまった時間がなかなか取れない。

その他
しばらくは「頑張らないことを頑張りたい」と思う


2017年1月30日月曜日

ラズベリー・パイでSST26VF032bの読み書き(node.js)

昨年12月からFON2405EのSPIフラッシュメモリを交換すべくコツコツと作業をしている。
最近あまり更新できなかったけど、少し進展があった。

経緯
前回 c++でSPI制御プログラムを作成した。簡易的な動作確認はできたけど、
いろいろ機能を試したりとなると作るのも操作するのも大変なことに気づいた。

CUIで対話式もめんどいし、electron使うのも大げさだし・・・。
かといってwebサーバー建てるのもな・・・と思っていたけど、
一念発起してnode.jsを使ってwebアプリで行こうと思った。

まだソース貼れるほどできていないけど、こんな感じ。

自分の想像力の無さなのかもしれないけど、GUIの方がわかりやすい。


構成は
・node.js + express
・CSSフレームワークはfundation
・SPI通信はrpi-spi
と、おんぶに抱っこ いや『巨人の肩に乗る』状態

その他
公私ともに忙しいけど、ガンバロー

2017年1月5日木曜日

ラズベリー・パイのクロス開発環境(Eclipse)構築メモ

昨年から、少しづつクロス環境でのプログラムを行っている。
小規模なものはテキストエディタやVScodeでなんとかなるレベルだったけど、
ちょっと規模が大きくなると途端に面倒になってしまい、筆が進まなくなってしまう。
2017年の1発目・・・開発環境の見直し!

Eclipse使ってエレガントにラズベリー・パイのプログラミンを行う

前提
・クロスコンパイル環境→ここ
・Eclipse
・ ラズベリー・パイとSSH接続可能

手順<要点のみ抜粋>

1.ツールチェーンは「Cross GCC」を選択
2.クロスGCCコマンド
   接頭部:arm-linux-gnueabihf-
   パス:/var/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
   ※環境に合わせる


3.Eclipseからラズベリー・パイにSSH接続
  「ウィンドウ」→「 ビューの表示」→「その他」
  「リモート・システム」→「リモート・システム」でタブが追加される
  右クリで新規接続
   「SSHのみ」を選択しその後は良きに計らう
   「Sshシェル」を右クリし「シェルの起動」で接続できればOK

4.リモートデバッグ準備
  「デバッグ の構成」にて各種設定
   メイン
   ・接続を「ローカル」→3で作成した接続先に変更
   ・リモート絶対ファイルパス
   ・Commands to execute before application

   デバッガ−
    GDBデバッガ−:arm-linux-gnueabihf-gdb

5.リモートデバッグ開始
   こんな感じでステップ実行!

 参考
先人に感謝!!ありがとうございます。
http://qiita.com/atchy@github/items/fb9df9e5865d8c7f7a72