まとめindex

  • CentOSでホームサーバー


  • 最新のトピック 

  • miix2 で初windows8.1
  • とうとうNexus7でemobile解禁
  • RK3188搭載 T428を購入
  • STREAM X (GL07S)でお化けタップの不具合
  • カード情報流出と履歴管理
  • MP410とスマホは相性悪い
  • プロジェクタ MP410購入
  • RATOC REX-WIFISD1
  • STREAM Xに機種変更。emoblie LTEの実力は?
  • Nexus7を3G版に買い換えた
  • PLCを買ってみた
  • Nexus7をカーナビとして使う
  • simスロットにmicrosimアダプタが引っ掛かった!
  • F-11Dをemobileで使う
  • 旅行中のパケット通信量


  • KEYWORDS

  • Amazon (1)
  • Android (27)
  • ARM (1)
  • duzzle (4)
  • emobile (10)
  • F-11D (1)
  • F-12C (11)
  • ffmpeg (4)
  • GL07s (3)
  • GPS (3)
  • IIJmio (6)
  • iOS (1)
  • iPad (1)
  • Ivy Bridge (7)
  • KICK STARTER (1)
  • kobo (3)
  • L-01D (4)
  • Linux (16)
  • LTE (2)
  • miix2 (1)
  • Nexus7 (4)
  • PLC (1)
  • PS VITA (2)
  • Raspberry PI (9)
  • RK3188 (1)
  • RTL8111 (2)
  • S31HT (3)
  • S51SE (4)
  • STREAM X (2)
  • T428 (1)
  • TS録画 (11)
  • vmware (1)
  • VPS (1)
  • windows8.1 (1)
  • Xi (1)
  • さくらインターネット (1)
  • その他 (1)
  • まとめ (1)
  • クラウド (1)
  • ジョルテ (1)
  • スマートフォン (11)
  • プロジェクタ (2)
  • ホームサーバー (15)
  • レビュー (1)
  • 充電 (2)
  • 家庭内LAN (5)
  • 海外 (4)
  • 電子工作 (3)
  • 電子書籍 (3)
  • Raspberry PI と GPIOで7セグ

    2012/07/25
    Raspberry PI には、GPIO端子が付いています。面白そうなので折角だから使ってみましょう。

    Raspberry PI のGPIOのピン配置とプログラムサンプルは以下に情報があります。
    http://elinux.org/RPi_Low-level_peripherals

    Perl使いなので、Perlで動かすべくセットアップを始めましたが、ちょっとハマったことがありました。セットアップしたRaspbian "wheezy"のgccのバージョンは4.6。しかし、インストールされているperlは4.7でクロスコンパイルされているようです。従いまして、そのままドライバインストール&Perlのモジュールインストールと進むと失敗します。まずは apt-get install gcc-4.7 で、gccをバージョンアップすることから。
    次にドライバをインストールし、Perlモジュールのインストール。ドライバはここ。
    http://www.open.com.au/mikem/bcm2835/

    Perlのモジュールは以下にあります。
    http://search.cpan.org/~mikem/Device-BCM2835-1.0/lib/Device/BCM2835.pm

    さて、サンプルプログラムを参考にして適当なLEDを点灯させてみると、何も問題なく光る光る。
    回路を組んで7セグを光らせてみました。

    Raspberry PI x 7segment LED
    Raspberry PI x 7segment LED

    数字全パターン光らせた動画はこちら。ダイナミック点灯させたので、動画にするとチラチラしますが・・・。


    回路図は以下。フォトカプラを使ってスイッチしています。アノードコモンでダイナミック点灯しているので抵抗1個しか付けてないですが、全点灯なら抵抗は全LEDつけましょう。

    7セグ回路図
    7セグ回路図


    プログラムは以下。
    #!/usr/bin/perl
    
    use Device::BCM2835;
    use strict;
    
    Device::BCM2835::init();
    
    set_output(3);
    set_output(5);
    set_output(7);
    set_output(11);
    set_output(13);
    set_output(15);
    set_output(19);
    set_output(21);
    
    segment(0, 1000);
    segment(1, 1000);
    segment(2, 1000);
    segment(3, 1000);
    segment(4, 1000);
    segment(5, 1000);
    segment(6, 1000);
    segment(7, 1000);
    segment(8, 1000);
    segment(9, 1000);
    
    exit;
    
    sub set_output
    {
        my $pin = shift;
    
        my $device_name = sprintf("RPI_GPIO_P1_%02d", $pin);
    
        Device::BCM2835::gpio_fsel(eval("&Device::BCM2835::$device_name"),
             &Device::BCM2835::BCM2835_GPIO_FSEL_OUTP);
    
        return 1;
    }
    
    
    sub gpio_write
    {
        my $pin = shift;
        my $onoff = shift;
        my $delay = shift;
    
        my $device_name = sprintf("RPI_GPIO_P1_%02d", $pin);
        Device::BCM2835::gpio_write(eval("&Device::BCM2835::$device_name"), $onoff);
    
        if($delay)
        {
            Device::BCM2835::delay($delay); 
        }
    
        return 1;
    }
    
    sub segment
    {
        my $seg = shift;
        my $delay = shift;
    
        if($seg == 0)
        {
            dynamic_led($delay, 3, "13,15,19,11,7,3");
        }
        if($seg == 1)
        {
            dynamic_led($delay, 10, "15,19");
        }
        if($seg == 2)
        {        
            dynamic_led($delay, 4, "13,15,5,7,11");
        }
        if($seg == 3)
        {       
            dynamic_led($delay, 4, "13,15,5,19,11");
        }
        if($seg == 4)
        {        
            dynamic_led($delay, 5, "3,5,15,19");
        }
        if($seg == 5)
        {        
            dynamic_led($delay, 4, "13,3,5,19,11");
        }
        if($seg == 6)
        {        
            dynamic_led($delay, 3, "13,3,5,7,11,19");
        }
        if($seg == 7)
        {        
            dynamic_led($delay, 5, "3,13,15,19");
        }
        if($seg == 8)
        {        
            dynamic_led($delay, 3, "13,3,5,7,11,19,15");
        }
        if($seg == 9)
        {        
            dynamic_led($delay, 3, "13,3,5,11,19,15");
        }
    }
    
    sub dynamic_led
    {
        my $delay = shift;
        my $dynamic = shift;
        my $data    = shift;
    
        my @led = split(/,/, $data);
        my $max_times = $delay / ($dynamic * @led);
    
        for(my $i=0; $i<$max_times; $i++)
        {
            foreach my $target(@led)
            {
                gpio_write($target, 1, $dynamic);
                gpio_write($target, 0, 0);
            }
        }
    }
    




    ★Profile

    名前: sai
    性別: 男
    生年: 1976年
    自己紹介:
    さすらいのガジェット好き。小さくて高性能なもの大好き。思いついたらやってみるのが大事。

    お問い合わせ