2014年2月27日木曜日

raspberry piのLANの無線化 その2

前回無線接続が上手くいかなかったので
もう一度設定見直し

無線LANに接続するための設定ファイルは2つ

/etc/wpa_supplicant/wpa_supplicant.conf

/etc/network/interfaces


まずは
/etc/network/interfaces
から

以下の記述が追加されていることを確認

#Wireless lanの0番目に対する設定の追加
auto wlan0
allow-hotplug wlan0

#マニュアル設定からDHCPへ変更
#iface wlan0 inet manual
iface wlan0 inet dhcp

#無線LAN設定の参照先?
#もともと有るのはコメントアウト
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

次に
/etc/wpa_supplicant/wpa_supplicant.conf

以下赤字の部分が今回設定した部分

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP
scan_ssid=1
ssid="SSID名"
psk="暗号キー"
}

うまくいかないと思っていたら・・・・無線AP側の設定がWPA2になってた
最終的にファイルを以下のように修正したら無事接続完了

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    proto=WPA WPA2
    key_mgmt=WPA-PSK
    pairwise=CCMP TKIP  scan_ssid=1
ssid="SSID名"
psk="暗号キー"
}


2014年2月25日火曜日

raspberry piのLANの無線化 その1

今日はraspberry piのLANの無線化に挑戦
手元に余っていたUSBの無線LANデバイスGW-US54Mini2を使う

raspberry pi 起動中にすとraspberry pi の再起動が起きる
挿してからきどうするととりあえず安定

$ lsusb
で認識を確認






正常に認識しているようだ。

$ ifconfig
でネットワーク識別状態を確認





すでにwlan0として認識している

あとはアクセスポイントと通信出来るようにすればOK・・・のはずだがうまくいかない。
明日もうちょいがんばろう



2014年2月20日木曜日

raspberry piでPUSH SWのセンスをやってみる

本日はraspberry piでPUSH SWのセンスをやってみる


【ソフト】
raspberry piのGPIO17を入力にして
1s周期でセンス
ターミナルの標準出力へ結果を出力

【ハード】
SW押下時に GPIO17にLが入力されるように
3.3VにPullUpしておき、SW押下時にGNDとつながるように構成

【結果】
 思い通りにできました。 SWを検知してHALTが実行できるようにしたいなぁ。












test.c
------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include "BCM2835-ARM-SFR.h"

/* pin番号の定義 */
#define SW_PORT_NO   17

//  gpio[n]: GPIO 関連レジスタ (volatile=最適化によって消滅させない→必ず実メモリにアクセスさせる)
static volatile unsigned int *gpio;

//  gpio_init: GPIO 初期化(最初に1度だけ呼び出すこと)
void gpio_init ()
{
    int fd;
    void *gpio_map;
    //  /dev/mem(物理メモリデバイス)を開く(sudo が必要)
    fd = open("/dev/mem", O_RDWR | O_SYNC);
    if (fd == -1) {
        printf("error: cannot open /dev/mem (gpio_setup)\n");
        exit(-1);
    }
    //  mmap で GPIO(物理メモリ)を gpio_map(仮想メモリ)に対応づける
    gpio_map = mmap(NULL, BLOCK_SIZE,
                    PROT_READ | PROT_WRITE, MAP_SHARED,
                    fd, GPIO_BASE );
    if ((int) gpio_map == -1) {
        printf("error: cannot map /dev/mem on the memory (gpio_setup)\n");
        exit(-1);
    }
    //  mmap 後は不要な fd をクローズ
    close(fd);
    //  gpio[index]: 整数 uint32 の配列としてレジスタへのアクセスを確立
    gpio = (unsigned int *) gpio_map;
}
//  gpio_configure: ピン機能を設定する(ピンを使用する前に必ず設定)
//      pin : (P1) 2,3,4,7,8,9,10,11,14,15,17,18,22,23,24,25,27
//            (P5) 28,29,30,31
//      mode: GPIO_INPUT, _OUTPUT, _ALT0, _ALT1, _ALT2, _ALT3, _ALT4, _ALT5
void gpio_configure (int pin, int mode)
{
    int index;
    unsigned int mask;

    //  ピン番号チェック
    if ((0 <= pin) && ( pin <= 31 )) {
   //  レジスタ番号(index)と3ビットマスクを生成
   index = pin / 10;
   mask = ~(0x7 << ((pin % 10) * 3));
   //  GPFSEL0/1 の該当する FSEL (3bit) のみを書き換え
   gpio[index] = (gpio[index] & mask) | ((mode & 0x7) << ((pin % 10) * 3));
    }
else{
        printf("error: pin number out of range (gpio_configure)\n");
        exit(-1);
    }
}
int gpio_get (int pin)
{
int tmp;
int result;

    //  ピン番号チェック(スピードを追求するなら省略してもよい)
    if ((0 <= pin) && ( pin <= 31 )) {
    result = ( gpio[SFR_INDEX_GPLEV0] >> pin)& 0x00000001;
    }
else{
result = GPIO_LEVEL_L;
        printf("error: pin number out of range (gpio_set)\n");
        exit(-1);
    }

return result;
}
int main ()
{
    unsigned long int level;

    gpio_init();  /* アドレス空間を周辺ペリフェラルのアドレスにマッピング */

    gpio_configure(SW_PORT_NO, GPIO_INPUT); /* ポート動作モードを設定 */

    while (1) {
    level = gpio_get(SW_PORT_NO);
    printf("Level:%1d\n",level);
    usleep(1000*1000);
    }
    return 0;
}
------------------------------------------------------------------------------

2014年2月19日水曜日

raspberry pi に webカメラを繋いでみる

今日はrasberry piにwebカメラを繋いでみる

つなぐカメラは普段Skype用につけている
ELECOM UCAM-DLE300T

とりあえず指して認識しているか確認
pi@raspberrypi ~ $ lsusb







ちゃんと認識しているようです。

webでググると監視カメラとして使うためのMotionというソフトウェアがリポジトリにあるようなのでインストール

pi@raspberrypi ~ $ sudo aptitude install motion

インストールしたら動かすための
設定ファイルを編集

pi@raspberrypi ~ $ sudo vi /etc/motion/motion.conf

# Start in daemon (background) mode and release terminal (default: off)
daemon off
daemon on

# Restrict webcam connections to localhost only (default: on)
webcam_localhost on
webcam_localhost off

pi@raspberrypi ~ $ sudo vi /etc/default/motion
# set to 'yes' to enable the motion daemon
start_motion_daemon=no
→start_motion_daemon=yes

これで準備完了。
起動
pi@raspberrypi ~ $ sudo service motion start

さて、Webブラウザから見えるらしいので、やってみる
http://(raspberry piのIP):8081/

あれあれ、何も映らない・・・・。

・・・ぐぐってみる・・・

どうやら動画の形式がmotion JPEGで、
chromeでURLじか指定してもは見れないようです。

しかたがないので下のように
htmlファイルを作成してその中のimgタグで指定

picamera.html
---------------------------------
<html>
<body>
<img src="http://raspberrypi.local:8081">
</body>
</html>

---------------------------------

見れました!!






2014年2月17日月曜日

raspberry pi 始めました

とりあえず お約束のLチカ(LED点滅)から。




ココを参考にC言語でプログラムを作成。

単に点滅させてもおもしろくないので、一捻り。
PWMを使ってふわっと点滅させてみたかったけど、
データシートにPWMのレジスタの説明があまりなかったので
GPIOをソフトウェア的にPWM制御