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





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




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




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




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




設定が完了しました。




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




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




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




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


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


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


#include &ltcstdlib>
#include &ltcstdio>
#include &ltfcntl.h>
#include &ltsys/mman.h>
#include &ltunistd.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)

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



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

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



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

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