SSブログ

Raspberry Pi でLEDを点滅させてみる [Raspberry Pi]

Arduino の基本であるLED点滅、通称”Lチカ”を Raspberry Pi で試してみたいと思います。GPIOの25番にLEDをつけてみました。


Raspberry pi with LED.JPG


Raspberry Pi でハードウェアのポートにアクセスする場合 root という特権ユーザーになっていたほうがいいので、最初に root のパスワードを設定をしておきます。

0 set root.png


NetBeansの設定も root の設定を追加しておきます。サービスタグの「C/C++ビルド・ホスト」を右クリックすると「新規ホストの追加」で追加できます。

1 add host.png


IPアドレスを設定します。

2 add new host.png


root をユーザーに設定します。

3 set user of new host.png


設定が完了しました。

4 complete new host.png


次に新しいプロジェクトを生成します。

5 create new project.png


プロジェクトの名前は「LedSample」という名前にしました。ビルド・ホストは設定した "root@192.168.0.22" にします。

6 ProjectSettings.png


ソース・ファイル main.cpp をプログラムします。

7 running LedSample.png


ソースコードを記述するにあたり、こちらのサイトを参考にさせていただきました。


こじ研(Raspberry Pi)
http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html


今回作成したソースコードです。

#include <cstdlib>
#include <cstdio>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>

using namespace std;

#define BLOCK_SIZE    4096
#define PERI_BASE     0x20000000
#define GPIO_BASE     (PERI_BASE + 0x200000)
#define GPIO_INPUT    0x0
#define GPIO_OUTPUT   0x1

static volatile unsigned int *Gpio = NULL;

void gpio_init() 
{
    if (Gpio != NULL) return;
    
    int fd;
    void *gpio_map;
    
    fd = open("/dev/mem", O_RDWR | O_SYNC);
    if (fd == -1) {
        fprintf(stderr, "cannot open /dev/mem (gpio_init)\n");
        exit(-1);
    }
    
    gpio_map = mmap(NULL, BLOCK_SIZE, 
            PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO_BASE);
    if ((int) gpio_map == -1) {
        fprintf(stderr, "cannot map /dev/mem on the memory (gpio_init)\n");
        exit(-1);
    }
    
    close(fd);
    Gpio = (unsigned int *) gpio_map;
}


void gpio_configure (int pin, int mode)
{
    if (pin < 0 || pin > 31) {
        fprintf(stderr, "pin number out of range (gpio_configure)\n");
        exit(-1);
    }

    int index = pin / 10;
    unsigned int mask = ~(0x7 << ((pin % 10) * 3));

    Gpio[index] = (Gpio[index] & mask) | ((mode & 0x7) << ((pin % 10) * 3));
}

void gpio_set (int pin)
{
    if (pin < 0 || pin > 31) {
        fprintf(stderr, "pin number out of range (gpio_set)\n");
        exit(-1);
    }
    
    Gpio[7] = 0x1 << pin;   //  GPSET0
}

void gpio_clear (int pin)
{
    if (pin < 0 || pin > 31) {
        fprintf(stderr, "pin number out of range (gpio_clear)\n");
        exit(-1);
    }
    
    Gpio[10] = 0x1 << pin;  //  GPCLR0
}

int main(int argc, char** argv) 
{  
    gpio_init();
    gpio_configure(25, GPIO_OUTPUT);    // GPIO25 sets OUTPUT
    
    for (int i = 0; i < 10; ++i) {
        gpio_set(25);             //  HIGH(3.3V)
        sleep(1);                 //  wait 1sec
        gpio_clear(25);           //  LOW (0V)
        sleep(1);                 //  wait 1sec
    }
    
    return 0;
}



Arduino に比べると面倒ですね。その変わり柔軟性が高いということなんでしょう。
それでは実行してみましょう。





きちんと”Lチカ”しました。まずは基本的なところはクリアしたようです。これからいろいろなデバイスを試してみたいと思います。
(^_^)/~






Raspberry Pi Model B+ (Plus)

Raspberry Pi Model B+ (Plus)

  • 出版社/メーカー: raspberrypi.org
  • メディア: エレクトロニクス



FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス



Raspberry Piクックブック (Make:PROJECTS)

Raspberry Piクックブック (Make:PROJECTS)

  • 作者: Simon Monk
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2014/08/23
  • メディア: 大型本




タグ:Raspberry Pi
nice!(30)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 30

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。