2017年12月5日火曜日

Windows 10 IoT を Raspberry Pi 3 にインストール

1.用意するもの


1-1).母艦(Windows 10) が動くPC
 (インターネットに接続されていること)

1-2).microSDカード(今回は16GByte のものを使用)

1-3).Raspberry Pi 3

  本体、Raspberry Pi 3 用電源、LANケーブル、モニター、キーボード、マウス等


2.Windows 10 IoT Core Dashboard をダウンロードします。




 Get Windows 10 IoT Core Dashboard をクリックしてダウンロードします。ダウンロードするのは setup.exe ファイルでダウンロードが完了したら、ダブルクリックしてインストールします。


2.インストール


 setup.exe を実行すると Windows 10 IoT Core Dashboard が、メニューに現れます。


  クリックすると IoT Dashboard が動きます。SDカードを挿入しメニューの新しいデバイスのセットアップを選択し、パスワードを入力後に右下のダウンロードとインストールをクリックすると OS がインストールされます。

パスワードは後で使用しますので記録してください。


書き込み直後のSDカードの状態









動作後のSDカード の状態

未割当の領域が Data(P:) に含まれている
 (ドライブ名は動作中のPCの状態に依存します。)

3.起動

 Raspberry Pi 3 LAN ケーブルを接続し、SDカードをに挿入して電源ON 、しばらくすると Windows IoT Core が起動します。

 画面は単一のみとなります。


 日本語に設定します。 IP アドレスは DHCP で設定されています。


起動画面

 母艦のPC Windows 10 IoT Core Dashboardを実行すると自分のデバイスに接続中のRaspberry Pi 3 が表示されます。

 右クリックするとプルダウンメニューが表示されます。



メニューよりDevice Portal を選択すると以下の画面となります。

 ユーザー名とパスワードを入力します。

 パスワードはOSをインストールした時のものです。

次に下の画面が現れます。


端末の画面をキャプチャし、ホストPCに保存することもできます。(画面右下)


2017年7月10日月曜日

Visual Studio Code - 2 ( キ―マップ)

 Visual Studio Code はキー操作でほとんどの操作ができるようになっています(昔の Word Star 見たい) キーボードより手を動かさないで操作できるよう!

標準操作
[C] : Ctrl  キー
[A] : Alt   キー
[S] : Shift キー

キー 機能
[C]+X Cut(行削除)
[C]+C Copy(選択範囲をコピー)
[C]+[S]+K カーソル行を削除
[C]+[Enter] カーソルのある行の下に行を挿入
[C]+[S]+Enter カーソルのある行の上に行を挿入
[A]+[↓] カーソルのある行を下に移動
[A]+[↑] カーソルのある行を上に移動
[S]+[A]+[↓]カーソルのある行を下にコピー
[S]+[A]+[↑]カーソルのある行を上にコピー
[C]+D カーソル上の単語を選択 (2回目、次も選択)
[C]+K [C]+Dカーソル上の単語を選択 (2回目、次に移動)
[C]+U カーソル のUndo (変更を元に戻す場合は[C]+Z)
[S]+[A]+I カーソルを行末に挿入
[C]+[S]+L カーソルのある単語をすべて選択する。(すべてを同時に変更可能)
[C]+F2 カーソルのある単語をすべて選択する。(すべてを同時に変更可能)
[C]+I カーソルのある行を選択する。
[C]+[A]+[↓]カーソルを下の行に追加。(続いて入力すると2行同時に追加)
[C]+[A]+[↑]カーソルを上の行に追加。(続いて入力すると2行同時に追加)
[C]+[S]+] 対応するカッコまでを展開する。
[C]+[S]+[ 対応するカッコまでを隠す。
[C]+[S]+\ 対応するカッコに移動
[C]+] カーソル行にインデントを追加 (自動保存では最適化される。)
[C]+[ カーソル行のインデントを削除 (自動保存では最適化される。)
Home カーソル行の先頭に移動
End カーソル行の末尾に移動
[C]+Home ファイルの先頭に移動
[C]+End ファイルの末尾に移動
[C]+K [C]+C カーソル行をコメント行にする。    (行頭に // を追加)
[C]+K [C]+U カーソル行のコメントマークを削除する。(行頭の // を削除)
[C]+/ カーソル行のコメントマークを反転する。(なければ追加、あれば削除する。)
[C]+[A]+A 選択範囲をコメントにする。(/* ... */ で囲む。)
[C]+F 検索開始
[C]+H 置換開始
F3 次検索
[S]+F3 逆順検索
[A]+Enter 選択した全てに対応する。
[A]+C 大文字/小文字を区別する。
[A]+R 正規表現を使用する。
[A]+W 単語の検索は全単語/あるいは一部
[C]+M TAB キーによるフォーカス移動の開始/停止
[A]+Z 行末の折り返し方法の変更

Visual Studio Code - 1

 Go 言語の開発には Visual Studio Code の利用を計画していますが、なかなか慣れず苦戦しています。

 利用にあたり気づいた点をその都度、忘れない内にあげておきます。

まず、メニューの表示


 メニュー表示メニューバーの切り替え(B)をクリックすると画面から消えます。そしてAlt(左) をクリックすると メニューバーがON/OFF します。
 常時 ON にする場合は、再度、メニューバーの切り替え(B)をクリックしてください。

 慣れてくるとメニューバーはあまり意識しないですが、どうしても必要な時は画面に出してアクセスしてください。


2017年5月29日月曜日

Go Lang エラー

1 package main
2 
3 import "fmt"
4 
5 var (
6  // j   int8
7  str string
8 )
9 
10 func main() {
11  var j int8.......................jが全角(の小文字)になっている。
12  str = "初めての Go 言語 2 !!"
13  for j = 1; j < 10; j++ {
14    fmt.Println(j, str)
15  }
16 }

# command-line-arguments
./hello.go:13: undefined: j
./hello.go:14: undefined: j
コンパイル失敗

"j"が全角になっているのに暫く気づかなっかた!?
おかげでエラーの原因がわからず無駄に時間を過ごすことになった。

Go 言語に限った話ではないが、なかなか気づかずに時間をとられてしまった。

2017年4月16日日曜日

キーボード ( Ctrl と caps の入れ替え)

 Linux は最近、GUI でのアクセスがメインとなっているが、プログラムの作成、メンテナンスは相変わらずキーボードからの入力となる。その時、[Ctrl] + [C], [Ctrl] + [V]と Ctrl キーを押す機会が多いが、私は昔から [A] の左が [Ctrl] と想定しているので左手がそのように動いてしまう。
 Linux Mint Cinnamon では設定で簡単に変更できるので実行している。


メニューより
  設定
    キーボートと選択し
      レイアウトを選択する。
        右下のオプションをクリックする。


        Ctrl キーの位置を選択し
        Ctrl と Caps Lock を入れ替える にチェックをONとする。


        これだけでキーが入れ替わる。

Ubuntu ではメニューよりの選択方法はよくわからない。昔は簡単に設定できたんだけど!

 CentOS 7 ではアプリケーション ⇒ ユーティリティ ⇒ Tweak Tool  ⇒ タイピング ⇒ Ctrl キーの位置 で Ctrl とCaps Lock を入れ替える にチェックを入れれば変更可能)

 Windows では昔から Remapkey.exe を使用して変更していた。


2017年4月8日土曜日

引っ越し

 久しぶりにブログを更新、2月末に引っ越し(同じ東京小平市内)をしたのでバタバタして更新する暇がなかった。 
 大きな変化はなかったのですがパソコン周辺はではデスクトップPC にデュアルブートでWindows 10 と Linux を使用可能としていたのですが。Linux を CentOS から Mint Cinnamon (18.1)に変更しました。
 理由は最新版の Linux を使って見たかったからです。CentOS ではアプリケーションを最新版にするためにはソースをダウンロードしてビルドすれば可能ですが、 タマに失敗してあれが無い、これが無いと探しまわることがある。
 (これは、これで勉強になるのだが、年寄りはイライラする羽目になる。)
 また、Cinnamon は見た目が私の好みにあっていたので、暫く使って見ることにした。
(見た目、これって重要な要素だと思う)

 気に入ったソフトがあれば紹介していきます。 
とりあえず使用しているソフト

  • テキストエディター........Geany(簡易IDEとしてもOK)、Visual Studio Code ( Golang 用 )
  • メールクライアント........Thunderbird, (はじめから入っていた)
  • FTP クライアント............FileZilla
  • ブラウザー.....................Chromium 
  • バージョン管理.............Git ( version 2.7.4 )


2017年2月9日木曜日

Visual Studio で Raspberry Pi のリモートデバッグ

 Visual Studio Community 2015 で Raspberry Pi 用 の C ソフト(ARM用)を作って、リモート・デバッグを行って見ます。

0.事前準備
 Raspberry Pi と PC は SSHによる通信を行いますので通信ができることを確認して下さい。(鍵の作成は必要ありません。)
 本ブログを参照してください。

1.Raspberry Pi 側の準備

1-1.GCC と GDB のインストール。
 $sudo apt-get install g++ gdb gdbserverとして
 (g++ gdb gdbserver は既にインストール済みとなっているかもしれません?)

1-2.WiringPi のダウンロード
 GitHub より、ダウンロードします。

 $ git clone git://git.drogon.net/wiringPi

Cloning into 'wiringPi'...
remote: Counting objects: 1059, done.
remote: Compressing objects: 100% (877/877), done.
remote: Total 1059 (delta 752), reused 212 (delta 142)
Receiving objects: 100% (1059/1059), 329.48 KiB | 243.00 KiB/s, done.
Resolving deltas: 100% (752/752), done.
Checking connectivity... done.

1-3.WiringPi のビルド&インストール
 $ cd wiringPi
 $ ./build

  ・
  ・
  ・
  ・
 All Done.

NOTE: To compile programs with wiringPi, you need to add:
    -lwiringPi
  to your compile line(s) To use the Gertboard, MaxDetect, etc.
  code (the devLib), you need to also add:
    -lwiringPiDev
  to your compile line(s).

2.PC 側(Visual Studio )準備
2-1.Visual C++ for Linux Development
 Visual Studio で ツール(T) 拡張機能と更新プログラム(U)  を選択し、オンライン --> Visual Studio ギャラリーを指定し、Linux を検索する。
  Visual C++ for Linux Development が表示されるのでクリックしてダウンロードする。  ( VC_Linux.exe を適当なフォルダーにダウンロードする。)

 Visual Studio を一旦終了し、VC_Linux.exe を実行する。

2-2.VC_Linux のインストール


 インストールが終了したら Visual Studio を再起動する。

3-1.新しいプロジェクト... を選択する。

3-2.Blink(Raspberry) を選択する。

3-3.ソースが表示される。

3-4.デバッグ開始(F5) を選択

3-5.Connect to Linux
 必要事項を入力し、 Connect をクリックするとリモートデバッグが可能となります。



3-6.ブレークポイントで停止
  ( delay の時間は上図の様に変更可能です。)
 デバッグ開始(F5)で20行目で停止します。

 逆アセンブルを表示したところ

保存したソリューションの bin --> ARM --> Debug フォルダーに Blink1.out が出来上がっています。適当な転送ソフト( WinSCP 等)でRaspberry Pi に転送し、chmod +x Blink1.out で実行権を与えば LED の点滅が可能になります。

0x0001072C の行が2行表示されている!?(ご愛敬か?)

/home/pi ディレクトリに projects ディレクトリが出来ており

projects --- Blink1 --+-- bin -- ARM -- Debug -- Blink1.out
                      +-- obj -- ARM -- Debug -- main.o
                      +-- main.cpp

Blink1.out を実行しても LED の点滅は始まる。

2017年2月2日木曜日

Raspberry Pi GUI で Lチカ

1.はじめに
 Raspbian JESSIE は GUI ( Graphical User Interface の略 ) で動作します。HDMI ケーブルで LCD を接続し、マウス、キーボードを接続すれば Windows に比べても遜色のない画面で楽しめます。折角のマウスやキーボードをつないだので、GUI で動作するアプリケーションを作って見ましょう さらに、GUI から GPIO 経由で接続した LED をON/OFF してみます。


 Windows では有名な Visual Basic がありました、実は Delphi もあったんですが Visual Basic 程普及はしませんでした。Basic ( インタープリター )に比べ Delphi ( Pascal のコンパイラー ) は実行速度では有利だったんですけど?Delphi の親戚と言うか従妹みたいなものに Lazarus と言うPascal を利用した 開発環境があります。Windows , Linux , Mac用がそれぞれ無償でリリースされています。

2.Raspbian のインストール
 本ブログでも何回かとりあげていますが、簡単に手順を紹介します。( Raspbian インストールを参照 )

 Raspberry Pi 3 に Raspbian にアクセスし、DOWNLOADS ページよりRASPBIAN JESSIE WITH PIXEL をダウンロードします。

 DD for Windows を使用してSDカードに書き込みます。

3.Lazarus ( Free Pascal IDE ) のインストール

$ sudo apt-get update
$ sudo apt-get install lazarus

以上でインストールされます。
(時間がかかるので余裕のある時に実行してください。)

4.Lazarus の起動
 注意点、Lazarus でプログラムをテストする場合、画面の制御は問題なくできるのですが GPIO ファイル経由で直接に入出力を行う場合、開発環境も root で起動しないと制御できないです。(詳細はチェック中)
メニューより Lazarus を起動するのではなく、一旦 Terminal より

$ sudo lazarus-ide として起動します。

5.プログラム作成

 uses 節にGPIOへのアクセスの為、 Unix, BaseUnix を追加しておく。

5-1.Sharpeの追加

Form に Sharpe (緑の〇)そのままでは四角なので丸に変更します。Shape1 のプロパティ Shape が stRectangle (四角) となっているのを stEllipse (楕円) に変更します。楕円は縦横の比率を同じにすれば円となります。

5-2.Button の追加


 LED ON/OFF 用のボタンを追加します。

5-3.Button1イベント:(OnClick)の追加

 gpio ファイルへは FpOpen, FpClose を使ってアクセスします。

Button1のイベントに OnClik 欄がありイベントが未登録なので右の空欄をダブルクリックすればイベントが追加されます。
Button1Click が追加されます。中身は空なので Pascal で動作を記述していきます。
LED が OFF(0) ならば
  GPIO に '1' を書き込んで点灯させます。
  画面上の〇は緑色に設定する。
  点灯させたので Led 変数は 1 として記憶し次回に備える。
LED が OFF(0) でないならば
  GPIO に '0' を書き込んで消灯させます。
  画面上の〇は白色に設定する。
  消灯させたので Led 変数は 0 として記憶し次回に備える。

5-4.Formイベント:(OnActive)の追加

 フォームのイベントには、フォームが画面に表示された時(FormActivate:イベント)には初期設定の処理を登録しておきます。
Led 変数を 0 ( LED Off )とします。

5-5.Formイベント:(OnClose)の追加

 終了時(FormClose:イベント)には gpio の終了宣言を行います。(後始末)


イベントは発生するごとに上記の登録されたいずかの処理が行われます。
今回の例では
1.procedure TForm1.FormActivate(Sender: TObject);
  ( 初期設定でプログラム開始時に 1 回実行される。 )
2.procedure TForm1.Button1Click(Sender: TObject); 複数回実行される。
  ( LED の ON / OFF ボタンをクリックした回数回実行される。)
3.procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  ( フォームの終了(プログラムの終了時)に 1 回実行される。)
の順に実行されます。

プログラム
01: unit Unit1;
02: 
03: {$mode objfpc}{$H+}
04: 
05: interface
06: 
07: uses
08:   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
09:   ExtCtrls ,
10:   Unix, BaseUnix ;
11: 
12: type
13: 
14:   { TForm1 }
15: 
16:   TForm1 = class(TForm)
17:     Button1: TButton;
18:     Shape1: TShape;
19:     procedure Button1Click(Sender: TObject);
20:     procedure FormActivate(Sender: TObject);
21:     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
22:   private
23:     { private declarations }
24:   public
25:     { public declarations }
26:   end;
27: 
28: var
29:   Form1: TForm1;
30:   Led:   Integer ;
31:   gReturnCode: longint;
32: 
33: implementation
34: 
35: {$R *.lfm}
36: 
37: const
38:   PIN_17: PChar = '17';
39:   PIN_ON: PChar = '1';
40:   PIN_OFF: PChar = '0';
41:   OUT_DIRECTION: PChar = 'out';
42: 
43: { TForm1 }
44: 
45: procedure TForm1.Button1Click(Sender: TObject);
46: var
47:   fileDesc: integer;
48: begin
49:    if Led = 0 then
50:    begin
51:      fileDesc := FpOpen('/sys/class/gpio/gpio17/value', O_WrOnly);
52:      gReturnCode := FpWrite(fileDesc, PIN_ON[0], 1);
53:      Shape1.Brush.Color := clLime ;
54:      Led := 1 ;
55:    end
56:    else
57:    begin
58:      fileDesc := FpOpen('/sys/class/gpio/gpio17/value', O_WrOnly);
59:      gReturnCode := FpWrite(fileDesc, PIN_OFF[0], 1);
60:      Shape1.Brush.Color := clWhite ;
61:      Led := 0 ;
62:    end ;
63: end;
64: 
65: procedure TForm1.FormActivate(Sender: TObject);
66: var
67:   fileDesc: integer;
68: begin
69:    Led := 0 ;
70:    fileDesc := FpOpen('/sys/class/gpio/export', O_WrOnly);
71:    gReturnCode := FpWrite(fileDesc, PIN_17[0], 2);
72: 
73:    fileDesc := FpOpen('/sys/class/gpio/gpio17/direction', O_WrOnly);
74:    gReturnCode := FpWrite(fileDesc, OUT_DIRECTION[0], 3);
75: end;
76: 
77: procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
78: var
79:   fileDesc: integer;
80: begin
81:   fileDesc := FpOpen('/sys/class/gpio/unexport', O_WrOnly);
82:   gReturnCode := FpWrite(fileDesc, PIN_17[0], 2);
83: end;
84: 
85: end.


保存

保存はプロジェクトより名前を付けてプロジェクト保存を実行してください。
今回は led プロジェクトとして保存しました。



実行

/usr/local/bin/ にコピーし、実行権( sudo chmod +x led とすると) 与えておくとどこからでも以下で実行できる

$ sudo ./led として実行して下さい。



2017年1月29日日曜日

Raspberry Pi GPIO

 Raspberry Pi で GPIO (汎用入出力)にアクセスする場合はデバイスドライバー経由でおこなうのが通常ですが、以前に紹介した WiringPi (Shell でLチカ) を使ってShell から直接アクセス, または C言語で関数を作ってアクセスする方法があります。(WiringPi ライブラリが一種のデバイスドライバーになります。)  
 そのほかに特殊なファイルを経由して簡単にアクセスすることもできます。

/sys/class/gpio ディレクトリに特殊なファイルがあります。 cd コマンドで移動して ls コマンドで中を覗いてみると


pi@raspberrypi:/sys/class/gpio $ ls
export  gpiochip0  gpiochip100  unexport


 見慣れないファイルがあります。この export ファイルに echo コマンドで指示を送ると GPIO へのアクセスファイルが出来ます。そして、入力とするか出力とするか等を設定できます。

GPIO17 ( Pin #11 ) を出力に設定して、LEDをON/OFFするには


echo コマンドで 17 を使いますよと宣言を行います。


pi@raspberrypi:/sys/class/gpio $ echo 17 > export


これで、gpio17 ができる。


pi@raspberrypi:/sys/class/gpio $ ls -l
合計 0
-rwxrwx--- 1 root gpio 4096  1月 29 13:57 export
lrwxrwxrwx 1 root gpio    0  1月 29 13:57 gpio17 -> ../../devices/platform........
lrwxrwxrwx 1 root gpio    0  1月 29 12:01 gpiochip0 -> ../../devices/platform.....
lrwxrwxrwx 1 root gpio    0  1月 29 12:01 gpiochip100 -> ../../devices/platform...
-rwxrwx--- 1 root gpio 4096  1月 29 12:01 unexport


その後に出力として使いますよ!と 宣言する。


pi@raspberrypi:/sys/class/gpio $ echo out > gpio17/direction


echo コマンドで 1 の指示を与えると GPIO17 が Hi  出力となり 3.3 v が出ます。
echo コマンドで 0 の指示を与えると GPIO17 が Low 出力となり 0v となります。

すなわち、これで LED の ON/OFF が出来ます。



pi@raspberrypi:/sys/class/gpio $ echo 1 > gpio17/value LED点灯

pi@raspberrypi:/sys/class/gpio $ echo 0 > gpio17/value LED消灯


使い終わったら、後始末して終了します。


pi@raspberrypi:/sys/class/gpio $ echo 17 > unexport


2017年1月20日金曜日

Raspberry Pi mruby (はじめの一歩)

Raspberry Pi に mruby を導入したので C言語 と連携(と言えるかはまだ不明)、最近の組込みソフトの作成はかなり手抜きで始められます。いきなり、IDE の main() の画面が現れてコードを書き込んで下さいとなる。チョット待って「スタックの設定」はどうなっているのと気になって調べるとデフォルト値が設定されている。これが正しい値でCPUのデータシートを読んだのは何だったのかとなる。  でも、原理は知っておいたほうが役立つ(以前、昨日までは開始で main() から動作していたのに、なにをいじったのか電源ON でmain() から走らない現象に出くわし慌てたことがあった?)  自動で作られるものに Makefile もある。以前は エディターでシコシコ書き込んだけど新しいIDEではファイルを新規追加すると勝手にMakefile に登録してくれる。mruby & C でも IDE があるのかな~?、何年ぶりかで vim でコードを書き、Makefile を作ってみた。タダタダオロオロするばかり

 wiringPi のサンプルを参照して作ってみた。


01: #include <stdio.h>
02: #include <stdlib.h>
03: #include <mruby.h>
04: #include <mruby/compile.h>
05: #include <wiringPi.h>
06: 
07: #define LED 0
08: 
09: int main( void )
10: {
11:  int i ;
12:  char s[32];
13: 
14:  wiringPiSetup() ;
15:  pinMode( LED, OUTPUT ) ;
16: 
17:  mrb_state *mrb ;
18:  mrb = mrb_open() ;
19: 
20:  for ( i = 0 ; i < 10 ; i++ ) {
21:   sprintf( s, "puts \'Hello No.%d\'\n", i );
22: //  printf( s ) ;
23:   mrb_load_string(mrb, s ) ;
24: 
25:   digitalWrite( LED, HIGH ) ; // LED ON
26:   delay (500) ;
27:   digitalWrite( LED, LOW ) ; // LED OFF
28:   delay( 500 ) ;
29:  }
30: 
31:  mrb_close(mrb) ;
32: }

 プログラムはそれなりにすぐ書けたけど、コンパイルが通らず、一苦労、コンパイル時にライブラリをリンクする必要があり、それが何処にあるのか分からずネットを探しまわった。それらしいのを見つけたけど、コンパイル時のエラーメッセージが良く分からず遠まわりしてしまった。

Makiefile を晒します。(ジーッと見つめないで)
01: CC = gcc
02: INCLUDES = -I/home/pi/mruby/include
03: DEBUS =
04: CFLAGS = $(DEBUG) $(INCLUDES)
05: LIBS = /home/pi/mruby/build/host/lib/libmruby.a
06: 
07: LDFLAGS = -L/usr/local/lib
08: LDLIBS = -lwiringPi -lwiringPiDev -lpthread
09: 
10: SRC = mrLED.c
11: 
12: OBJ = $(SRC:.c=.o)
13: BINS = $(SRC:.c=)
14: 
15: mrLED: mrLED.o
16:  $Q echo "Start LED build"
17:  $Q $(CC) $(CFLAGS) -o $@ mrLED.o $(LIBS) $(LDFLAGS)  $(LDLIBS) -lm
18: 
19: clean:
20:  $Q echo "[Clean]"
21:  $Q rm -f $(OBJ) *~ tags $(BINS)


配線は shell でLチカと同様です。



コンパイルと実行の様子。



2017年1月19日木曜日

Raspberry Pi ( C言語でビルド & 実行 )

Raspberry Pi で Shell より Lチカを実行しましたが、exsample には C で書かれたソースもあり、また、makefile までありますので、コンパイルして実行してみます。(私はこの方が慣れている。)

まず、C は GCC 使用しますので、導入されてるかの確認をします。


pi@raspberrypi:~/wiringPi/examples $ gcc --version
gcc (Raspbian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



バージョン 4.9.2 が入っています。
Makefile の中身を見ると、個別(ファイル毎)にコンパイル設定があるので、 blink.c のみ
コンパイルしてみます。
make の後に blink と入力すれば、blink.c のみコンパイルされ実行ファイルが出来上がります。

pi@raspberrypi:~/wiringPi/examples $ make blink
[CC] blink.c
[link]

pi@raspberrypi:~/wiringPi/examples $ ls -l
合計 180
-rw-r--r-- 1 pi pi 7651  1月 18 22:25 COPYING.LESSER
drwxr-xr-x 2 pi pi 4096  1月 18 22:25 Gertboard
-rw-r--r-- 1 pi pi 3946  1月 18 22:25 Makefile
drwxr-xr-x 2 pi pi 4096  1月 18 22:25 PiFace
drwxr-xr-x 2 pi pi 4096  1月 18 22:25 PiGlow
-rw-r--r-- 1 pi pi  353  1月 18 22:25 README.TXT
-rwxr-xr-x 1 pi pi 6600  1月 19 16:18 blink
-rw-r--r-- 1 pi pi 1459  1月 18 23:42 blink.c
-rw-r--r-- 1 pi pi 1304  1月 19 16:18 blink.o


blink (実行ファイル)と blink.o (オブジェクト)が出来上がっています。

配線はShell で Lチカ と同じです。

./blink と入力すれば LED が点滅を始めます。
ソースプログラムは以下の通りです。

/*
 * blink.c:
 * Standard "blink" program in wiringPi. Blinks an LED connected
 * to the first GPIO pin.
 *
 * Copyright (c) 2012-2013 Gordon Henderson. 
 ***********************************************************************
 * This file is part of wiringPi:
 * https://projects.drogon.net/raspberry-pi/wiringpi/
 *
 *    wiringPi is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU Lesser General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    wiringPi is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public License
 *    along with wiringPi.  If not, see .
 ***********************************************************************
 */

#include <stdio.h>
#include <wiringpi.h>

// LED Pin - wiringPi pin 0 is BCM_GPIO 17.

#define LED 0

int main (void)
{
  printf ("Raspberry Pi blink\n") ;

  wiringPiSetup () ;
  pinMode (LED, OUTPUT) ;

  for (;;)
  {
    digitalWrite (LED, HIGH) ; // On
    delay (500) ;  // mS
    digitalWrite (LED, LOW) ; // Off
    delay (500) ;
  }
  return 0 ;
}

wiringPiSetup() 、pinMode() 関数はそれぞれ wiringPi / wiringPi.c の中で定義され、呼び出されています。基板の種別毎に設定が行われ、pinMode ではピンの動作(入力、出力、PWM ) 等が設定されています。(詳細はチェック中......)

Raspberry Pi ( Shell で Lチカ )

 Raspberry Pi  にLED を接続して ON/OFF を行います。但し、C言語でプログラムを作ってビルドするのでは無く、もっと簡単に Raspbian ( Linux ) の Shell を実行して点滅させます。

ソフトウエアの準備

 wiringPi と言うソフトをインストールします。これは apt-get ではインストール出来ません。GitHub にソースがありますのでダウンロードし、ビルドします。


$ git clone git://git.drogon.net/wiringPi

Cloning into 'wiringPi'...
remote: Counting objects: 1059, done.
remote: Compressing objects: 100% (877/877), done.
remote: Total 1059 (delta 752), reused 212 (delta 142)
Receiving objects: 100% (1059/1059), 329.48 KiB | 243.00 KiB/s, done.
Resolving deltas: 100% (752/752), done.
Checking connectivity... done.


ダウンロードが成功したら wiringPi ディレクトリに移って ./build と入力します。 作成が始まります。
$ cd wiringPi
$ ./build

 ・
 ・
 ・
 ・
All Done.

NOTE: To compile programs with wiringPi, you need to add:
    -lwiringPi
  to your compile line(s) To use the Gertboard, MaxDetect, etc.
  code (the devLib), you need to also add:
    -lwiringPiDev
  to your compile line(s).


warning が数個でましたが、無事、インストールできました。
ビルドが成功するとバージョンを確認します。

$ gpio -v
gpio version: 2.36
Copyright (c) 2012-2015 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 3, Revision: 02, Memory: 1024MB, Maker: Sony
  * Device tree is enabled.
  *--> Raspberry Pi 3 Model B Rev 1.2
  * This Raspberry Pi supports user-level GPIO access.


これでソフトの準備はできました。

LEDの接続

ブレッドボードにLED と抵抗(200Ω)を載せて接続します。






写真では、わかりずらいので実体配線図(?)を掲載します。


LED点滅の実行

ダウンロードした wiringPi にサンプリングがありますのでそれを実行します。
examples ディレクトリに blink.sh の実行可能なスクリプトがあります。
pi ユーザーでも実行可能です。( root になる必要はありません。)

pi@raspberrypi:~ $ cd wiringPi/examples/
pi@raspberrypi:~/wiringPi/examples $ ls -l
合計 168
-rw-r--r-- 1 pi pi 7651  1月 18 22:25 COPYING.LESSER
drwxr-xr-x 2 pi pi 4096  1月 18 22:25 Gertboard
-rw-r--r-- 1 pi pi 3946  1月 18 22:25 Makefile
drwxr-xr-x 2 pi pi 4096  1月 18 22:25 PiFace
drwxr-xr-x 2 pi pi 4096  1月 18 22:25 PiGlow
-rw-r--r-- 1 pi pi  353  1月 18 22:25 README.TXT
-rw-r--r-- 1 pi pi 1459  1月 18 23:42 blink.c
-rw-r--r-- 1 pi pi 1190  1月 18 22:25 blink.rtb
-rwxr-xr-x 1 pi pi 1245  1月 18 23:45 blink.sh
-rw-r--r-- 1 pi pi 2622  1月 18 22:25 blink12.c
-rw-r--r-- 1 pi pi 3134  1月 18 22:25 blink12drcs.c


$ ./blink.sh と入力して実行すれば LED の点滅が始まります。
停止は Ctrl + C と入力すれば中断されます。

チョット気になる!
 ポートの設定(入力/出力、機能)等はどこでおこなわれたのか!?。 こんな簡単に出来てよいものか?

2017年1月17日火曜日

Raspberry Pi 鍵認証で接続

Raspberry Pi には SSH で接続しましたので 鍵(公開鍵、秘密鍵)を使って簡単にかつセキュアな接続を行ってみます。

PC(Windows) と Raspberry Pi との接続なので、PC側はPuTTYを使用します。

鍵の生成

鍵は 公開鍵 と 秘密鍵 の2つを作る必要があります。Windows に PuTTY をインストールするとPuTTYgen も一緒にインストールされていますので簡単に生成できます。


起動すると以下の画面となりますので、鍵ペアの生成を行います。

画面の赤枠あたりでマウスを動かすとより乱数が生成されるみたい!


鍵は2種類できあがっているのでそれぞれ保存してください。

公開鍵は id_rsa.pub とします。( この鍵は Raspberry Pi に転送します。)

秘密鍵は id_rsa.ppk として保存します。( この鍵は PuTTY で使用します。)
パスフレーズは必須ではないので省きました。

公開鍵と言ってもわざわざ部外者に見せる必要はないので、目立たないようにコピーします。SSH 通信ができていれば WinSCP が適切だと思われます。


Raspberry Pi に転送後は ホームディレクトリに .ssh ディレクトリ を作りそこに移動します。

その後、公開鍵は OpenSSH 形式に変換します。そして authorized_keys に追加します。
authorized_keys ファイルには複数の鍵が登録可能です。

pi@raspberrypi:~/.ssh $ ssh-keygen -i -f id_rsa.pub > mykey-ssh.pub
pi@raspberrypi:~/.ssh $ cat mykey-ssh.pub >> authorized_keys

authorized_keys ファイル以外 ( id_rsa.pub、mykey-ssh.pub ) は不要ですので削除してもOKです。

/etc/ssh/sshd_config はデフォルトのままでOKです。

PuTTY の設定

Raspberry Pi の IP アドレスの設定


秘密鍵の指定
 
作成した秘密鍵を保存したパスを指定します。


ログインユーザーの指定


SSHで接続するユーザー名を登録します。

あとは「開く(O)」をクリックするだけで接続できます。





2017年1月15日日曜日

Raspberry Pi に SSH (PuTTY) で接続

Raspberry Pi に SSH で接続します。

Raspberry Pi で SSH を有効にします。

$ sudo raspi-config と入力し

7 Advanced Option を選択


A4 SSH を選択


<Yes> を選択


<Ok> とする。

以上でSSH による通信は可能となります。

次に Raspberry Pi の IP アドレスを調べます。

 Pi に Ethernet ケーブルを接続し、DHCP ( アドレスを割り当てて貰って接続します。)では頻繁に IP アドレスの割り当てが変化しないはハズです。

それでは Raspberry Pi に割り当てられた IP アドレスを調べます。

CUI で動作している場合は ip addr と入力すれば、現在の状態が表示されます。

真ん中あたりにアドレスが表示されています。(黄色枠)

inet 192.168.100.178 が IP アドレスです。


Windows であれば、TeraTerm や PuTTY が使用できます。今回は PuTTY を使って見ます。

ホスト名(または IP アドレス)(N) 欄に上記で調べた IP アドレスをセットします。

セッションには覚えやすい名前を付けて保存して下さい。次回、利用時に使用します。

2017年1月14日土曜日

Raspberry Pi ( vim 設定 )

ディレクトリの表示変更

Raspberry Pi を CUI で使っている場合、ディレクトリの表示に不満があります。青色表示はどう見ても見ずらい。そこで表示色を変更してみます。
ホームディレクトリに .profile があります。ここに色設定を追加します。

drwxr-xr-x  4 pi   pi   4096  1月 14 22:29 .
drwxr-xr-x  3 root root 4096 11月 26 02:24 ..
-rw-------  1 pi   pi   1588  1月 14 22:00 .bash_history
-rw-r--r--  1 pi   pi    220 11月 26 02:24 .bash_logout
-rw-r--r--  1 pi   pi   3512  1月 14 21:53 .bashrc
-rw-r--r--  1 pi   pi    716  1月 14 22:00 .profile <---- これ
drwxr-xr-x  2 pi   pi   4096  1月 14 22:29 .vim
-rw-------  1 pi   pi   3312  1月 14 22:29 .viminfo
-rw-r--r--  1 pi   pi    122  1月 14 22:28 .vimrc
-rw-r--r--  1 pi   pi      0  1月  1 17:41 git.txt
drwxr-xr-x 15 pi   pi   4096  1月 14 21:03 mruby


最後に
export LS_COLOR="${LS_COLOR}:di=01;36" 
の1行を追加します。


これでディレクトリの表示は水色(シアン)になり、見やすくなります。




エディターは vi あるいは nano になると思いますが、私はどのLinux でも間違いなく起動する vim を利用しています。

vim のインストール

sudo apt-get install vim でインストールできます。

vim の設定

デフォルトの状態で使ってもいいのですが、Shell で折角、ディレクトリの表示処理を変更したのにvim . とファイラーを起動してファイル、ディレクトリを表示しても、ディレクトリが青色では見ずらいので色変更に挑戦してみます。
 他のLinux ではホームディレクトリに .vimrc を作り、その中に設定を書き込んでいくのですが、Raspbian ではまず、おおもとで設定をする必要があります。

/etc/vimrc ファイルの 19行目に "syntax on となっているので " を外して syntax を有効とします。


(画面は :se nu として行番号を表示しています。)

.vimrc の設定内容( TAB を4桁、行番号表示、コメント表示色は緑、ディレクトリ表示は水色)



これで ディレクトリの表示色は Shell と同じになります。
vim . でファイラーを起動した時の表示は以下の様になります。