ラベル Raspberry_Pi の投稿を表示しています。 すべての投稿を表示
ラベル Raspberry_Pi の投稿を表示しています。 すべての投稿を表示

2017年9月22日金曜日

[Rpi]PlantUMLServerをインストールする。

PlantUML公式ページにWEBで出力してくれるけど、やっぱ自前サーバーでやりたいって人向けの情報です。
設定は簡単だけど、どこにも載ってないので備忘録を残しておきます。

$ sudo apt-get install -y graphviz maven
$ git clone https://github.com/plantuml/plantuml-server
$ vim ~/.bashrc
---
$GRAPHVIZ_DOT="/usr/bin/dot"
---
最後の行に挿入

$ source ~/.bashrc
$ mvn jetty:run -Djetty.port=1001

http://address:1001/

最初エラー画面が出るけど、下のURLをクリックすると表示する。

2017年8月1日火曜日

[RaspberryPi]Tensorflowをインストールする

WindowsでTensorflowの環境構築がうまくいかなかったので、持て余しているラズパイにディープラーニング用フレームワークTensorflowをインストールすることにした。

ビルド済みのをインストールする方法もあるのですが、バージョンが古いのでソースからビルドします。

ちなみに2017年8月時点でJessie版RasbianのG++-4.9でビルドはできません。
参考URLにのっているのですが、threadpool.ccをビルドする時にエラーになります。

捕捉:試しにStretch版へアップグレードしてGCC-6、G++-6でビルドしてみたらこっちはOKでした。(スワップメモリを大きめに取っておく必要はありますが。)


以下を打ちこめばOK。
---
$ git clone https://github.com/tensorflow/tensorflow
$ sudo apt-get install -y autoconf automake libtool gcc-4.8 g++-4.8 libjpeg-dev
$ tensorflow/contrib/makefile/download_dependencies.sh
$ cd tensorflow/contrib/makefile/downloads/protobuf/
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig  # refresh shared library cache
$ cd ../../../../..

raspberry pi zero or 1ならこっち
$ make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI OPTFLAGS="-Os" CXX=g++-4.8

raspberry pi 2 or 3ならこっち(neon有効化?)
$ make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI \
OPTFLAGS="-Os -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize" CXX=g++-4.8
---

追記:Bazelを使う場合、
ビルドにbazelを使用すると「configure」が使えるので、調整が色々できるようになります。
Bazelはv0.4.5を使います。

$ wget https://github.com/bazelbuild/bazel/releases/download/0.4.5/bazel-0.4.5-dist.zip
$ unzip -d bazel bazel-0.4.5-dist.zip
$ cd bazel

ソースコードで編集2か所あります。

nano scripts/bootstrap/compile.sh
117行目 末尾に「-J-Xmx500M」を追加。


nano tools/cpp/cc_configure.bzl
133行目 関数の頭にreturn "arm" を追加。

$ sudo ./compile.sh
$ sudo cp output/bazel /usr/local/bin/bazel

これでBazelインストール完了。
次にTensorflowのビルド
$ cd ~/tensorflow
$ ./configure
$ bazel build -c opt --copt="-mfpu=neon-vfpv4" --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" --local_resources 1024,1.0,1.0 --verbose_failures tensorflow/tools/pip_package:build_pip_package

これでOK。

★ビルドエラーが出て先に進めない、手っ取り早くインストールしたい場合
ビルド済みのwhlがあるので活用する方法があります。

$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/blob/master/archive/tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl

これでOK。

-----------
〇動作チェック

動作確認で画像認識をやってみる場合、
---
curl https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015_stripped.zip \
-o /tmp/inception_dec_2015_stripped.zip
unzip /tmp/inception_dec_2015_stripped.zip \
-d tensorflow/contrib/pi_examples/label_image/data/
make -f tensorflow/contrib/pi_examples/label_image/Makefile
tensorflow/contrib/pi_examples/label_image/gen/bin/label_image
---

動作確認でカメラを使った動画認識をやってみる場合、
---
make -f tensorflow/contrib/pi_examples/camera/Makefile
tensorflow/contrib/pi_examples/camera/gen/bin/camera
---

ビルド時間がとても長いので気長にまちましょう。

2017年5月20日土曜日

人感センサーHC-SR501を使ってみる



Aliexpressで送料無料で1$切ってる人感センサーHC-SR501を購入してみた。

製品仕様



  • 電源電圧:DC5-20V
  • 待機時消費電流:65μA以下
  • 出力電圧:3.3V
  • 動作モード:L=リピートOFF、HはリピートON(デフォルト)
  • 遅延時間範囲:0.3秒から18秒
  • 待機時間:0.2秒
  • 基板サイズ:32mm*24mm
  • 検知角度:120度
  • 最大検知距離:7m(気温等の環境条件により変化あり)
  • 操作温度:-15~+70℃
  • ネジ穴:2mm、28mm間隔
  • レンズ:直径23mmドーム型

  • 回路図やピンアサインの情報は上記Amazonで並行輸入販売してる人や使い方Q&Aも載っていてぜひ覗いてみてください。

    データシートやサンプルプログラムなどはココにありました。
    上記製品仕様も引用させていただいております。

    簡単な使い方

    この人感センサーはシンプルで入力は5V300mA程度の電源に3.3V出力のピンの3つだけです。感度調整やON維持時間はトリマーで直接調整します。

    これを使って部屋の照明に人感センサーを取り付けてON/OFFさせたり、玄関で人が来た時に照明をつけたり、RaspberryPiを使えばIoTと称して人感センサーの反応をWEB上に通知したりカメラも取り付けて監視カメラにしたりできる事が増えて夢が広がりますね。

    もちろんArduinoでも使えます。
    使う場合は5VとGNDと入力ポート1つ使う程度のものなので、通信処理も書かずに簡単にできます。Lチカの入力ポート版と同じレベルですので是非実験に使ってみてはいかがでしょうか。

    参考サイト

    http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-hc-sr501-motion-sensor-tutorial/



    2016年12月18日日曜日

    [RaspberryPi]無線機能の付いていないラズパイをインターネットにつなぐ


    Raspberry Pi Zero には OTG機能があります。

    このOTG機能というのは、パソコンを介さずに通信することができるものですが、

    実際に使ってみるとUSBでLANと同じことができるようになります。

    もちろんIPアドレスが割り当ててインターネットの共有をすることも可能です。

    身近でよく耳にするものでスマホのテザリングがあります。

    テザリングはスマホでつなげているLTEや3G回線をパソコンで使えるようにする機能です。

    実はこのテザリングはOTG機能を使ってるんです。

    っていうことは、、

    PCとRPi ZeroをつなげてPCにつながっているインターネット回線をRaspberryPiに分け合うことも、

    スマホのテザリング機能を使ってRPi(Rpi3でも可能)にインターネット回線を使えるようにすることもできます。

    ちなみにChromebookでも可能でした。

    ポイントはOTG機能でUSBをLAN化するけど、DHCPが無いのでDHCPサーバーを建てなくては行けなかったり、IPが解決したらDNSでドメインネーム解決もしなくてはいけないので、これはRpiZero側のOTG機能を有効にしたとき、ホストPCでクライアントはZero側となるのでインターネット回線とDHCPサーバーはホストとクライアントがクロスするので注意です。


    sudo mount /dev/mmcblk1p1 /mnt/stateful_partition/chroots/
    sudo mount /dev/mmcblk1p1 /mnt/stateful_partition/chroots/sh
    sudo mount /dev/mmcblk1p1 /mnt/stateful_partition/chroots/


    参考サイト
     http://www.raspi.jp/2016/07/pizero-usb-otg/

    2016年12月11日日曜日

    [Rpi]RaspberryPiにGoLangをインストールしてHugoを使ってみる。

    Hugoを使ってみようと思います。


    まずはインストールから。

    $ sudo apt-get install golang -y

    $ sudo vim .profile
    一番下に追加
    ---
    export GOPATH=/usr/share/go/
    ---

    $ sudo go get github.com/spf13/hugo
    
    
    
    
    
    

    2016年11月19日土曜日

    [RaspberryPi]VisualStudioCodeをインストールする

    armhf版のVisualStudioCodeをインストールする


     VisualStudioCodeの公式サイトにはIntel版しか公開されていないので、RaspberryPiではそのままではインストールできません。
     この回避方法としてHeadmelted版?でビルドされたdebパッケージが用意しているサイトがあります。このパッケージを利用して、apt-getでインストールする方法を以下に記載します。


    1. 必要なパッケージをインストール$ sudo apt-get install apt-transport-https -y

    2. インストール用スクリプトをダウンロード$ wget https://code.headmelted.com/installers/apt.sh
      $ chmod +x apt.sh

    3. インストール$ sudo ./apt.sh

    4. 起動
      左上にあるラズメリーボタンを押して、プログラミング→Code-Oss

      コマンドライン上で起動する場合、
      $ code-oss


    これで起動できれば完了です。

    ちなみに自前でビルドインストールは2016.11.18時点でエラーが出てうまくいかないのでご注意ください。




    参考サイト
     https://code.headmelted.com/#chromebook-header


    2016年10月11日火曜日

    RaspberryPi Pixelにアップグレードしてみる

    2016/09/23より raspbian pixelというOSイメージが公開されました。

    pixelって画像ソフトでもなく、Googleの新しいスマホの製品名でもない
     PIXEL (Pi Improved Xwindow Environment, Lightweight')
     訳すと、PI向けに最適化した軽量XWindow環境 です。

    ではさっそく今ある環境にインストールしてみます。

    Raspbianの環境下で下記コマンドを実行する。
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-get install -y rpi-chromium-mods

    # sense HATを持ってる人
    sudo apt-get install -y python-sense-emu python3-sense-emu python-sense-emu-doc
    # リモートデスクトップでVNC を使う人
    sudo apt-get install -y realvnc-vnc-viewer
     or
    # リモートデスクトップでxrdpを使う人
    sudo apt-get install -y xrdp



    所感、XLDEのUIがマテリアル化された感じですかね。

    2016年6月24日金曜日

    [RaspberryPi]RpiをArduinoライターにする


    色々試行錯誤してようやくできたでまとめて置く。


    Step1.ソフトのインストール
    $ sudo apt-get install bison automake autoconf flex git gcc
    $ sudo apt-get install gcc-avr binutils-avr avr-libc
    $ wget http://download.savannah.gnu.org/releases/avrdude/avrdude-6.3.tar.gz
    $ ./configure --prefix=/opt/avrdude --enable-linuxgpio

    Step2.ソースの修正
     なせかprintf("%ud",gpio) という部分で 数字d となって 文字列が正しく出ない問題があるので
    linuxgpioのソース上にある  %ud を全て %d に書き換える。

    Step3. avrdude.confの修正
     下図のようなピン配置にした場合、
      まずソース内に入っているavrdude.confを開き、「linuxgpio」で検索して、以下の様に編集する。

    ------------------------------------------------------------
    programmer
      id    = "linuxgpio";
      desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
      type  = "linuxgpio";
      reset = 12;
      sck   = 16;
      mosi  = 20;
      miso  = 21;
    ;
    ------------------------------------------------------------



    avrマイコンを書き込む用のピンアサイン

    電源は3.3VとGNDを使う事。
    (5Vでも良いが、RPI自身が3.3V/5Vトレラントでないので注意しておくと良い)


    もしDigisparkを使う場合は最後の行に以下の内容も追記しておく。

    #------------------------------------------------------------
    # ATtiny87
    #------------------------------------------------------------
    # Changes against ATtiny167 (beside IDs)
    #    memory "flash"
    #        size            = 8192;
    #        num_pages       = 64;
    part
         id            = "t87";
         desc          = "ATtiny87";
         has_debugwire = yes;
         flash_instr   = 0xB6, 0x01, 0x11;
         eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4,
                   0x00, 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB,
                   0xBF, 0x99, 0xF9, 0xBB, 0xAF;
    ## no STK500 devcode in XML file, use the ATtiny45 one
         stk500_devcode   = 0x14;
    ##  avr910_devcode   = ?;
    ##  Try the AT90S2313 devcode:
         avr910_devcode   = 0x20;
         signature        = 0x1e 0x93 0x87;
         reset            = io;
         chip_erase_delay = 1000;
         pgm_enable       = "1 0 1 0  1 1 0 0    0 1 0 1  0 0 1 1",
                            "x x x x  x x x x    x x x x  x x x x";
         chip_erase       = "1 0 1 0  1 1 0 0    1 0 0 x  x x x x",
                            "x x x x  x x x x    x x x x  x x x x";
        timeout     = 200;
        stabdelay       = 100;
        cmdexedelay     = 25;
        synchloops      = 32;
        bytedelay       = 0;
        pollindex       = 3;
        pollvalue       = 0x53;
        predelay        = 1;
        postdelay       = 1;
        pollmethod      = 0;
        pp_controlstack     =
            0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
            0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
            0x06, 0x16, 0x46, 0x56, 0x0A, 0x1A, 0x4A, 0x5A,
            0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
        hventerstabdelay    = 100;
        progmodedelay       = 0;
        latchcycles         = 5;
        togglevtg           = 1;
        poweroffdelay       = 20;
        resetdelayms        = 1;
        resetdelayus        = 0;
        hvleavestabdelay    = 15;
        chiperasepulsewidth = 0;
        chiperasepolltimeout = 10;
        programfusepulsewidth = 0;
        programfusepolltimeout = 5;
        programlockpulsewidth = 0;
        programlockpolltimeout = 5;
        idr                 = 0x00;
        spmcr               = 0x57;
        allowfullpagebitstream = no;
         memory "eeprom"
             size            = 512;
            paged           = no;
            page_size       = 4;
             min_write_delay = 4000;
             max_write_delay = 4500;
             readback_p1     = 0xff;
             readback_p2     = 0xff;
             read            = "1  0  1  0   0  0  0  0    0 0 x x  x x x a8",
                               "a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
             write           = "1  1  0  0   0  0  0  0    0 0 x x  x x x a8",
                               "a8 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo   = "  1   1   0   0      0   0   0   1",
            "  0   0   0   0      0   0   0   0",
            "  0   0   0   0      0   0  a1  a0",
            "  i   i   i   i      i   i   i   i";
      writepage = "  1   1   0   0      0   0   1   0",
            "  0   0   x   x      x   x   x   x",
            "  0   0  a5  a4     a3  a2   0   0",
            "  x   x   x   x      x   x   x   x";
      mode      = 0x41;
      delay     = 10;
      blocksize = 4;
      readsize  = 256;
           ;
         memory "flash"
             paged           = yes;
             size            = 8192;
             page_size       = 128;
             num_pages       = 64;
             min_write_delay = 4500;
             max_write_delay = 4500;
             readback_p1     = 0xff;
             readback_p2     = 0xff;
             read_lo         = "  0   0   1   0    0   0   0   0",
                               "  0   0   0  a12  a11 a10  a9  a8",
                               " a7  a6  a5  a4   a3  a2   a1  a0",
                               "  o   o   o   o    o   o   o   o";
             read_hi         = "  0   0   1   0    1   0   0   0",
                               "  0   0   0  a12  a11 a10  a9  a8",
                               " a7  a6  a5  a4   a3  a2   a1  a0",
                               "  o   o   o   o    o   o   o   o";
             loadpage_lo     = "  0   1   0   0    0   0   0   0",
                               "  0   0   0   x    x   x   x   x",
                               "  x   x  a5  a4   a3  a2  a1  a0",
                               "  i   i   i   i    i   i   i   i";
             loadpage_hi     = "  0   1   0   0    1   0   0   0",
                               "  0   0   0   x    x   x   x   x",
                               "  x   x  a5  a4   a3  a2  a1  a0",
                               "  i   i   i   i    i   i   i   i";
             writepage       = "  0  1  0  0   1   1   0  0",
                               "  0  0  0  0  a11 a10 a9 a8",
                               " a7 a6 a5  x   x  x  x  x",
                               "  x  x  x  x   x  x  x  x";
      mode      = 0x41;
      delay     = 10;
      blocksize = 64;
      readsize  = 256;
           ;
    #   ATtiny87 has Signature Bytes: 0x1E 0x93 0x87.
         memory "signature"
             size            = 3;
             read            = "0  0  1  1   0  0  0  0   0  0  0  x   x  x  x  x",
                               "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
           ;
         memory "lock"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 1 1 x  x x x x",
                               "x x x x  x x x x  x x x x  x x i i";
             read            = "0 1 0 1  1 0 0 0  0 0 0 0  0 0 0 0",
                               "0 0 0 0  0 0 0 0  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
           ;
         memory "lfuse"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 0 0 0",
                               "x x x x  x x x x  i i i i  i i i i";
             read            = "0 1 0 1  0 0 0 0  0 0 0 0  0 0 0 0",
                               "x x x x  x x x x  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
           ;
         memory "hfuse"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 0 1 0  1 0 0 0",
                               "x x x x  x x x x  i i i i  i i i i";
             read            = "0 1 0 1  1 0 0 0  0 0 0 0  1 0 0 0",
                               "x x x x  x x x x  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
           ;
         memory "efuse"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 1 0 0",
                               "x x x x  x x x x  x x x x  x x x i";
             read            = "0 1 0 1  0 0 0 0  0 0 0 0  1 0 0 0",
                               "x x x x  x x x x  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
         ;
         memory "calibration"
             size            = 1;
             read            = "0  0  1  1   1  0  0  0    0 0 0 x  x x x x",
                               "0  0  0  0   0  0  0  a0   o o o o  o o o o";
         ;
      ;
    #------------------------------------------------------------
    # ATtiny167
    #------------------------------------------------------------
    part
         id            = "t167";
         desc          = "ATtiny167";
         has_debugwire = yes;
         flash_instr   = 0xB6, 0x01, 0x11;
         eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4,
                   0x00, 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB,
                   0xBF, 0x99, 0xF9, 0xBB, 0xAF;
    ## no STK500 devcode in XML file, use the ATtiny45 one
         stk500_devcode   = 0x14;
    ##  avr910_devcode   = ?;
    ##  Try the AT90S2313 devcode:
         avr910_devcode   = 0x20;
         signature        = 0x1e 0x94 0x87;
         reset            = io;
         chip_erase_delay = 1000;
         pgm_enable       = "1 0 1 0  1 1 0 0    0 1 0 1  0 0 1 1",
                            "x x x x  x x x x    x x x x  x x x x";
         chip_erase       = "1 0 1 0  1 1 0 0    1 0 0 x  x x x x",
                            "x x x x  x x x x    x x x x  x x x x";
        timeout     = 200;
        stabdelay       = 100;
        cmdexedelay     = 25;
        synchloops      = 32;
        bytedelay       = 0;
        pollindex       = 3;
        pollvalue       = 0x53;
        predelay        = 1;
        postdelay       = 1;
        pollmethod      = 0;
        pp_controlstack     =
            0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
            0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
            0x06, 0x16, 0x46, 0x56, 0x0A, 0x1A, 0x4A, 0x5A,
            0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
        hventerstabdelay    = 100;
        progmodedelay       = 0;
        latchcycles         = 5;
        togglevtg           = 1;
        poweroffdelay       = 20;
        resetdelayms        = 1;
        resetdelayus        = 0;
        hvleavestabdelay    = 15;
        chiperasepulsewidth = 0;
        chiperasepolltimeout = 10;
        programfusepulsewidth = 0;
        programfusepolltimeout = 5;
        programlockpulsewidth = 0;
        programlockpolltimeout = 5;
        idr                 = 0x00;
        spmcr               = 0x57;
        allowfullpagebitstream = no;
         memory "eeprom"
             size            = 512;
            paged           = no;
            page_size       = 4;
             min_write_delay = 4000;
             max_write_delay = 4500;
             readback_p1     = 0xff;
             readback_p2     = 0xff;
             read            = "1  0  1  0   0  0  0  0    0 0 x x  x x x a8",
                               "a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
             write           = "1  1  0  0   0  0  0  0    0 0 x x  x x x a8",
                               "a8 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo   = "  1   1   0   0      0   0   0   1",
            "  0   0   0   0      0   0   0   0",
            "  0   0   0   0      0   0  a1  a0",
            "  i   i   i   i      i   i   i   i";
      writepage = "  1   1   0   0      0   0   1   0",
            "  0   0   x   x      x   x   x   x",
            "  0   0  a5  a4     a3  a2   0   0",
            "  x   x   x   x      x   x   x   x";
      mode      = 0x41;
      delay     = 10;
      blocksize = 4;
      readsize  = 256;
           ;
         memory "flash"
             paged           = yes;
             size            = 16384;
             page_size       = 128;
             num_pages       = 128;
             min_write_delay = 4500;
             max_write_delay = 4500;
             readback_p1     = 0xff;
             readback_p2     = 0xff;
             read_lo         = "  0   0   1   0    0   0   0   0",
                               "  0   0   0  a12  a11 a10  a9  a8",
                               " a7  a6  a5  a4   a3  a2   a1  a0",
                               "  o   o   o   o    o   o   o   o";
             read_hi         = "  0   0   1   0    1   0   0   0",
                               "  0   0   0  a12  a11 a10  a9  a8",
                               " a7  a6  a5  a4   a3  a2   a1  a0",
                               "  o   o   o   o    o   o   o   o";
             loadpage_lo     = "  0   1   0   0    0   0   0   0",
                               "  0   0   0   x    x   x   x   x",
                               "  x   x  a5  a4   a3  a2  a1  a0",
                               "  i   i   i   i    i   i   i   i";
             loadpage_hi     = "  0   1   0   0    1   0   0   0",
                               "  0   0   0   x    x   x   x   x",
                               "  x   x  a5  a4   a3  a2  a1  a0",
                               "  i   i   i   i    i   i   i   i";
             writepage       = "  0  1  0  0   1   1   0  0",
                               "  0  0  0  0  a11 a10 a9 a8",
                               " a7 a6 a5  x   x  x  x  x",
                               "  x  x  x  x   x  x  x  x";
      mode      = 0x41;
      delay     = 10;
      blocksize = 64;
      readsize  = 256;
           ;
    #   ATtiny167 has Signature Bytes: 0x1E 0x94 0x87.
         memory "signature"
             size            = 3;
             read            = "0  0  1  1   0  0  0  0   0  0  0  x   x  x  x  x",
                               "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
           ;
         memory "lock"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 1 1 x  x x x x",
                               "x x x x  x x x x  x x x x  x x i i";
             read            = "0 1 0 1  1 0 0 0  0 0 0 0  0 0 0 0",
                               "0 0 0 0  0 0 0 0  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
           ;
         memory "lfuse"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 0 0 0",
                               "x x x x  x x x x  i i i i  i i i i";
             read            = "0 1 0 1  0 0 0 0  0 0 0 0  0 0 0 0",
                               "x x x x  x x x x  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
           ;
         memory "hfuse"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 0 1 0  1 0 0 0",
                               "x x x x  x x x x  i i i i  i i i i";
             read            = "0 1 0 1  1 0 0 0  0 0 0 0  1 0 0 0",
                               "x x x x  x x x x  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
           ;
         memory "efuse"
             size            = 1;
             write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 1 0 0",
                               "x x x x  x x x x  x x x x  x x x i";
             read            = "0 1 0 1  0 0 0 0  0 0 0 0  1 0 0 0",
                               "x x x x  x x x x  o o o o  o o o o";
            min_write_delay = 9000;
            max_write_delay = 9000;
         ;
         memory "calibration"
             size            = 1;
             read            = "0  0  1  1   1  0  0  0    0 0 0 x  x x x x",
                               "0  0  0  0   0  0  0  a0   o o o o  o o o o";
         ;
      ;


    Step4.ビルド&インストール
    $ make
    $ sudo make install



    Step5.配線


    Digispark ATTiny85の場合は、

    D0―MOSI
    D1―MISO
    D2―SCK
    D5―RESET


    Digispark pro ATTiny167の場合は、

    PA2―MISO
    PA4―MOSI
    PA5―SCK
    PB7―RESET


    接続する時の注意ですが、MISO/MOSIはクロス接続にすること。
    ストレート接続すると、TX-TX、RX-TXみたいな具合になって通信できません。


    Step6.動作確認結果

    $ sudo avrdude -c linuxgpio -pt167
    avrdude: AVR device initialized and ready to accept instructions
    Reading | ################################################## | 100% 0.00s
    avrdude: Device signature = 0x1e9487 (probably t167)
    avrdude: safemode: Fuses OK (E:FE, H:DD, L:DF)
    avrdude done.  Thank you.


    以上まとめでした。

    2016年6月4日土曜日

    [RaspberryPi]TS動画をインタレ保持リサイズしてDVDサイズで保存する方法

    2016.06.01時点で最新のffmpegはRPiのh264ハードウェアエンコに対応してます。

    ってことでlibfdk_aacを追加してffmpegをコンパイル。


    タイトルにある通り、インターレースを保持しつつリサイズしてMpeg2からMpeg4にトランスコードしたい。(Chromebookで動画を観たいため)

    ということでコマンドを色々調べて見つけた決定版はコレ↓

    ffmpeg -c:a libfdk_aac -i 動画名.ts -vf yadif=1,tinterlace=4 -c:v h264_omx -s 720x540 -c:a libfdk_
    aac -b:v 2500k -aspect 16:9 -q:a 128 -ar 44100 -vsync 1 -threads 0 -flags +ilme+ildct -y 保存名.mp4



    エンコ時間の目安ですが、RPi1だと0.7fps、RPi2だと1fps、RPi3だと5fpsくらいでした。
    24時間稼働させるから気にならないよね。。

    2016年4月20日水曜日

    [RaspberryPi]RpiでツイッターBotを作る

    [RaspberryPi]RpiでツイッターBotを作る



    【Bot用アカウント作成編】

    Step1.Twitterアカウントの作成
     https://twitter.com/

     ※電話認証は済ませておくこと。


    Step2.アプリ登録
     https://dev.twitter.com/apps/

     PermissionでAccessをRead and write にチェックを入れて、Update Settingsする。

    Step3.APIKeyとシークレットキーを取得する。
    Keys and Access Tokensタブを開くと、Application Settingsに記載してあるキーをメモしておく。



    【RPi環境構築編】

    Step1.環境構築
    $ sudo pip install twython requests requests_oauthlib

    Step2.Botアプリ用フォルダを作成
    $ mkdir twitterBot
    $ cd twitterBot
    $ vim TempBot.py

    ----
    #!/usr/bin/env python
    #coding:utf-8

    import os
    from twython import Twython

    #Twitterアカウントの認可情報
    CONSUMER_KEY = ‘Consumer key’
    CONSUMER_SECRET = ‘Consumer secret’
    ACCESS_KEY = ‘Access token’
    ACCESS_SECRET = ‘Access token secret’

    api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)

    #Raspbianの制御コマンド(vcgencmd)を実行
    cmd = ‘/opt/vc/bin/vcgencmd measure_temp’
    line = os.popen(cmd).readline().strip()
    temp = line.split(‘=’)[1].split(“‘”)[0]

    #取得したCPU温度を投稿
    api.update_status(status=’CPU no ondo ha ‘+temp+’do desu ‘)  
    ----

    $ sudo chmod +x TempBot.py


    Step3.実行する

    $ ./TempBot.py




    参考URL
    http://pettomo.azurewebsites.net/?p=4101

    2016年3月9日水曜日

    [RaspberryPi]日本語が文字化けした時の対処方法+Chromiumのインストール


    1.Raspi-configの設定
     「Innternnatiolisation Options」
       ↓
     Change Locale
       ↓
     ja_JP.UTF-8をチェックしてデフォルト言語に選択


    2.日本語化アプリのインストール
    $ sudo apt-get install -y ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname uim uim-anthy jfbterm


    3.Chromiumをインストール
    $ wget http://launchpadlibrarian.net/199573270/chromium-browser_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb
    $ wget http://launchpadlibrarian.net/199573282/chromium-codecs-ffmpeg-extra_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb
    $ wget http://launchpadlibrarian.net/199573279/chromium-codecs-ffmpeg_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb
    $ wget http://launchpadlibrarian.net/199549151/chromium-browser-l10n_41.0.2272.76-0ubuntu0.14.04.1.1076_all.deb

    $ sudo dpkg -i chromium-browser_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb chromium-codecs-ffmpeg_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb chromium-codecs-ffmpeg-extra_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb chromium-browser-l10n_41.0.2272.76-0ubuntu0.14.04.1.1076_all.deb




    参照URL
    http://start-now.link/100/archives/1930

    2016年3月8日火曜日

    [RaspberryPi]VPNServerを立てる

    VPNサーバーとは
     外部から安全に特定のネットワークへアクセスするサービスを提供するサーバーの事です。

    どういう時に導入するの?
     外から自宅のネットワークにアクセスしたい時などは直接複数のポートを開けば良いのだが
    セキュリティーホールは開いたポート先のサービス毎に存在することになるので管理が大変だが
    VPNサーバーを立てると、外から見えるのはVPNサーバーのポート1つだけになるので
    セキュリティーホールはVPNサーバー1つだけとなり、管理がしやすく安全になります。


    導入手順
     1.SoftEtherをダウンロードする。


     にアクセスして、

      SoftEhter VPN(Freeware)
       ↓
      SoftEhter VPN Server
       ↓
      Linux
       ↓
      ARM EABI(32bit)

      を選び、最新イメージのダウンロードURLをコピーする。

      $ wget http://jp.softether-download.com/files/softether/v4.19-9605-beta-2016.03.06-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.19-9605-beta-2016.03.06-linux-arm_eabi-32bit.tar.gz
        $ tar zxf softether-vpnserver-v4.19-9605-beta-2016.03.06-linux-arm_eabi-32bit.tar.gz
        $ cd vpnserver


     2.コンパイルする。
        $ sudo make

        ~ライセンスについて聞かれるので承諾する。~


     2.起動時に実行するように設定する。
      まずはvpnserverをシステム側に移動させる
        $ cd ..
        $ sudo mv vpnserver /usr/local/
        $ cd /usr/local/vpnserver
        $ sudo chmod 600 *
        $ sudo chmod 700 vpncmd
        $ sudo chmod 700 vpmserver

      次に起動に必要なファイルを作成
        $ sudo vim /etc/init.d/vpnserver
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:                     vpnserver
    # Required-Start:               $local_fs $network
    # Required-Stop:                $local_fs $network
    # Default-Start:                2 3 4 5
    # Default-Stop:                 0 1 6
    # Short-Description:            SoftEther VPN 1.0 RC2
    # Description:                  Start vpnserver daemon SoftEther VPN 1.0 Server
    ### END INIT INFO
    
    DAEMON=/usr/local/vpnserver/vpnserver
    LOCK=/var/lock/vpnserver
    
    . /lib/lsb/init-functions
    
    test -x $DAEMON || exit 0
    
    case "$1" in
    start)
    sleep 3
    log_daemon_msg "Starting SoftEther VPN 1.0 Server" "vpnserver"
    $DAEMON start >/dev/null 2>&1
    touch $LOCK
    log_end_msg 0
    sleep 3
    
    ;;
    
    stop)
    log_daemon_msg "Stopping SoftEther VPN 1.0 Server" "vpnserver"
    $DAEMON stop >/dev/null 2>&1
    rm $LOCK
    log_end_msg 0
    sleep 2
    
    ;;
    
    restart)
    $DAEMON stop
    sleep 2
    
    $DAEMON start
    sleep 5
    
    ;;
    
    status)
        if [ -e $LOCK ]
        then
            echo "vpnserver is running."
        else
            echo "vpnserver is not running."
        fi
    ;;
    *)
    
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    esac
    exit 0


        $ sudo vim /etc/systemd/system/vpnserver.service
    [Unit]
    Description=SoftEther VPN Server
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/vpnserver/vpnserver start
    ExecStop=/usr/local/vpnserver/vpnserver stop
    
    [Install]
    WantedBy=multi-user.target

        $ sudo chmod +x /etc/init.d/vpnserver
      $ sudo systemctl start vpnserver
      $ sudo systemctl enable vpnserver


     3.ブリッジする
      $ sudo apt-get install bridge-utils
        $ sudo vim /etc/network/interfaces
    # loopback
    auto lo
    iface lo inet loopback
    
    # Ethernet port
    auto eth0
    iface eth0 inet manual
    
    # Bridge interface
    auto br0
    iface br0 inet dhcp
    bridge_ports eth0
    
    #その他
    allow-hotplug wlan0
    iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    iface default inet dhcp


     4.再起動して自動起動しているか確認する。
        $ sudo reboot
        $ sudo service vpnserver status


     5.外からアクセスできるようルータ側の設定を行う
       SoftEhterは
              TCPの449と2222
              UDPの500と4500
       を使うのでポートを開けておく。


    参考URL


    2016年3月4日金曜日

    [RaspberryPi]Asteriskを使う(3)Systemdで起動設定編

    Jessieだとinitではなくsystemdになっていてインストール時にサービス登録されているのかな?って調べてみると登録されていなかった。。

    ということで起動時にasteriskが立ち上がるように設定する事にした。


    参考にしたサイトはここ。

    http://www.voip-info.jp/index.php/BeagleBone_Black_Asterisk


    $ cd /etc/systemd/system
    $ sudo vim asterisk.service
    ---
    [Unit]
    Description=Asterisk Open Source PBX
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/sbin/asterisk -U asterisk -G asterisk
    
    [Install]
    WantedBy=multi-user.target
    ---


    $ sudo ln -s /usr/lib/systemd/
    $ sudo ln -s /usr/lib/systemd/
    $ sudo ln -s /lib/systemd/system/asterisk.service /etc/systemd/system/multi-user.target.wants/asterisk.service
    $ sudo systemctl enable asterisk
    $ sudo systemctl start asterisk


    再起動して以下のコマンドで動作しているか確認。
    ps -ef|grep asterisk
    systemctl|grep asterisk
    

    [RaspberryPi]Asteriskを使う(2)G729インストール編


    音声コーデックG729をインストールする。


    参考にしたサイトは以下のところです。
    https://smallhacks.wordpress.com/2014/01/13/using-asterisk-g-729-with-asterisk-on-raspberry-pi-or-other-arm-device/
    http://www.adeleda.com/compiling-g729-codecs-for-arm-on-raspberry-pi-b-with-bcg729-en.html
    https://disqus.com/home/discussion/adeleda/compiling_g729_codecs_for_arm_on_raspberry_pi_b_with_bcg729/


    それらをまとめて一発でインストールできるようにした手順は以下の通り。


    sudo wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.1.tar.gz
    sudo ./configure --libdir=/lib
    sudo make
    sudo make install

    sudo wget http://asterisk.hosting.lv/src/asterisk-g72x-1.3.tar.bz2
    sudo bzip2 -dc asterisk-g72x-1.3.tar.bz2 | sudo tar xvf -
    sudo apt-get install autoconf automake libtool autoconf-doc libtool-doc
    cd asterisk-g72x-1.3
    sudo ./autogen.sh
    sudo ./configure --with-bcg729 --with-asterisk-includes=/usr/include --with-asterisk130
    sudo make
    sudo make install




    最後は動作確認
    asterisk -vvvvr
    # core restart gracefully

    これでG729の項目が表示されていればOK。

    [Raspberrypi]Asteriskを使う(1)インストール編

    asteriskを使う

    簡単にインストールする場合は

     apt-get install asterisk -y


    でインストールできるんだけど光電話パッチを入れたりしたかったので
    2016.03.03時点の最新ソースからビルドを行ってみた。

    http://www.voip-info.jp/index.php/Asterisk_13

    上記リンクを参考に進めようと思うが、
    記事の内容はredhat向けに書かれているで、本記事でdebian向けに書きなおした
    インストール手順を書いていく。

    (光電話パッチは2014年時点のものでも問題なくパッチ当てができました)


    sudo apt-get install -y subversion libncurses5-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev libbluetooth-dev
    sudo apt-get install -y libsqlite3-dev libncurses5-dev bison libssl-dev libnewt-dev zlib1g-dev procps gcc make binutils doxygen g++ libxml2-dev

    sudo groupadd -g 5060 asterisk
    sudo useradd -g 5060 -u 5060 -d /var/lib/asterisk -s /sbin/nologin asterisk
    cd /usr/local/src/
    sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
    sudo tar zxf asterisk-13.7.2.tar.gz
    cd asterisk-13.7.2/
    sudo wget http://ftp.voip-info.jp/asterisk/patch/local/13/chan_sip_hikarihgw.141202-01.patch
    sudo patch -p0 < chan_sip_hikarihgw.141202-01.patch
    sudo ./contrib/scripts/get_mp3_source.sh
    sudo ./contrib/scripts/get_swagger_ui.sh
    sudo ./configure

    日本語音声ファイルをインストールする
    sudo make menuselect


    sudo make
    sudo make install
    sudo make sample
    sudo make config


    自動起動になっているか確認
    sudo chkconfig asterisk --list


    この後はG.729コーデックのインストールとか初期設定編へと続く。


    2016年3月2日水曜日

    [RaspberryPi]有機液晶OLED SSD1331を使ってみる



    RaspberryPiで何かいい液晶がないか探してみたら
    SPI通信で表示できる有機液晶SSD1331というものを見つけた。
    値段は送料込みで11$くらいなので1300円くらい。



    製品仕様
    サイズ:0.96インチ
    解像度:96*64
    発色:65k
    ドライバIC:ssd1331

    ピン配置GND: Power ground
    VCC:2.8-5.5V power supply
    D0: CLK clock
    D1: MOSI data
    RST: Reset
    DC: data / command
    CS: chip-select signal


    誰かサンプルプログラムを書いていないか検索してみたら、やはりいました。
    https://www.raspberrypi.org/forums/viewtopic.php?t=126811&p=871760

    ここから行き着いた先はGithub



    【配線図】

    RaspberryPiのピンの始まりを間違えないように確認して、



    液晶とこんな感じに接続する。
    完全なSPI通信出ない気がするけど、今回は動作確認なので同じ配線にする。


    GithubにあるPythonのソースコードをダウンロードして

    $ python clock.py

    実行してみると、、、




    動いたー!





    初期不良じゃなくてよかった。
    しかも結構明るくて良い。
    あとなぜか電源ラインVCCを外してもそれなりに画面写ってました(笑)

    2016年2月29日月曜日

    ラズベリーパイ4周年記念にRaspberry Pi3 Model B debut!

    ラズベリーパイが4周年記念ということでRaspberryZero出て半年も立たずに次も出るのRaspberryPi3が出てきた。
    今回の目玉は、、、

    ・Wifi 2.4GHz搭載
     →今まで占有してたUSBポートが1つ空きます。

    ・Bluetooth4.1搭載
     →Bluetooth対応キーボードやマウスがそのまま流用できそう

    ・CPUがCortex-A7からCortex-A53へアップグレード
     単純に言えば64Bit対応になった事が一番大きい。
     どの程度の性能かというと初期のAtomより少し高く肩を並べるくらい。

     変化点を見ていくと、、、
     →Cortex-A53とは、2012年にbig.LITTLEコアで省エネと高パフォーマンスを両立しようと
       打ち出された省エネ側のCPUコアである。
     →SIMD命令のNEONに対応などがされている。
     →64Bit命令セットを対応することで、64Bitバイナリを実行するときは、
      32Bit命令セットの負債を捨ててよりシンプルな構成になるので若干の速度アップがあるかも。
     →アーキテクチャ側の変更でインオーダー処理している部分が今までは同時2発行が
       限定的だったが、限定的でなくなるので処理性能がアップする。(若干)

    ・消費電力がアップ
     →推奨が5V2.5Aなので、タブレット以上の電源が必要になりそう。


    性能も上がって無線機能も標準搭載して値段は据え置き。
    また5000円代で買えるのが嬉しい。

    販売はRSコンポーネントかPimoroniで行うのでZEROが入手出来ないけど
    手元にあるRPiのバージョンアップという名目で1つどうでしょうか。


    個人的には
    RaspberryPi3 もしくは
    RaspberryPi Zero + ESP6288(Wifi+GPIO) or ESP32(Wifi+BTLE) という
    メインCPUにRPI 、UI側を担当 
    サブCPUにESP5288で通信処理もお任せするような構成もいいかなと思う。

    2015年12月27日日曜日

    [RPi]AndroidSDKをインストールする

    以前、1からビルドする方法を紹介しました。
    今回はもっと楽にビルド済みのandroid-sdk-linuxを利用してセットアップを行います。

    SDKをダウンロードする
    https://developer.android.com/intl/ja/sdk/index.html#Other

    上記URLの中からLinux版のを探してwgetする。

    $ cd
    $ wget http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz



    格納ディレクトリを作成&android-sdk-linuxを格納する
    $ mkdir /opt/java/
    $ tar zxf android-sdk-linux.tgz
    $ sudo mv android-sdk-linux /opt/java/


    swt.jarの元をインストールしてショートカット作成

    1     sudo apt-get install libswt-gtk-3-java libswt-cairo-gtk-3-jni
    2     cd /opt/java/android-sdk-linux/tools/lib
    3     mkdir arm
    4     cd arm
    5     ln -s /usr/lib/java/swt-gtk-3.8.2.jar swt.jar
    PATH設定
    $ vim ~/.profile

    最後の行に追記する
    ---
    export PATH=/opt/java/android-sdk-linux/tools:$PATH
    export PATH=/opt/java/android-sdk-linux/platform-tools:$PATH
    export ANDROID_HOME=/opt/java/android-sdk-linux
    ---

    アップデート実行
    /opt/java/android-sdk-linux/tools/android --no-ui


    これでSDKのインストールは完了です。


    参考URL
    http://www.timelesssky.com/blog/develop-app-on-android-with-android-sdk

    2015年12月10日木曜日

    [RPi]SQLiteをWEBブラウザ上で編集したい


    SQLiteManager
     http://sourceforge.net/projects/sqlitemanager/

    これをインストールすればよい。

    文字化けする場合は「./lang/japanese.inc.php」ファイルの10行目当たりにある文字コードを、
    【変更前】$charset = 'euc-jp';
    $langSuffix = 'ja-euc';
    【変更後】$charset = 'utf-8';
    $langSuffix = 'ja-utf-8';


    参考URL:
     http://taitan916.info/blog/?p=1907

    [RPi]ネットワークのIP更新を行う

    固定IPアドレスを更新したい時がある。

    毎回再起動するのも時間かかるので、特定のLANアダプタだけ更新する方法があったのでメモ。


    $ sudo /sbin/ifdown eth0

    $ sudo /sbin/ifup eth0


    Androider