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
- メディア: 大型本