Raspberry Pi でLEDを点滅させてみる [Raspberry Pi]
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
今回作成したソースコードです。
Arduino に比べると面倒ですね。その変わり柔軟性が高いということなんでしょう。
それでは実行してみましょう。
きちんと”Lチカ”しました。まずは基本的なところはクリアしたようです。これからいろいろなデバイスを試してみたいと思います。
(^_^)/~
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 <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チカ”しました。まずは基本的なところはクリアしたようです。これからいろいろなデバイスを試してみたいと思います。
(^_^)/~
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
Raspberry Piクックブック (Make:PROJECTS)
- 作者: Simon Monk
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/08/23
- メディア: 大型本
タグ:Raspberry Pi
コメント 0