ディスプレイなしでRaspberry piを操作する方法

この記事はMCC Advent Calendar 2017 - Adventarの5日目の記事です

 

昨日歯医者行ったら虫歯が3つ見つかった

一つは親知らずにできてるぽっくて

抜かなくてはならないらしい

悲しすぎてコーラを飲んでしまった

 

コカ・コーラ 缶 350ml×24本

コカ・コーラ 缶 350ml×24本

 

 

 

 

・はじめに

このまえRaspberry piをディスプレイなし

で使わないといけない時があって苦労したんで

まとめときます

 

・前提として

Raspberry piにはOSが

インストールされていること

OSはRaspbian            

ここではRaspberry pi 3 Model Bを使用した

またssh接続を有効に設定してあること

 

スマホssh接続

-用意するもの

Androidスマホ

 Termux 

Termux - Google Play の Android アプリ

ConectBot

ConnectBot - Google Play の Android アプリ

 の2つのアプリをインストール

 

まずはRaspberry piスマホ

usb接続する

 

次にテザリングを有効化する


f:id:shangtian:20171204095952j:image

usbテザリングを有効化


f:id:shangtian:20171204100027j:image

 

Termuxを起動して


f:id:shangtian:20171204100112j:image

$arp -a

を実行してRaspberry pi

ipアドレスを確認

raspberrypi {192.168.42.205} 

とかいてある

 

ConectBotを起動して

右下のプラスマークをタップして
f:id:shangtian:20171204100506j:image

 

さっき確認したraspberry piipアドレス

以下のように記入して右上の➕をタップ
f:id:shangtian:20171204100639j:image

 


f:id:shangtian:20171204100701j:image

 

ここでパスワードを入力すれば終了

f:id:shangtian:20171204212534p:plain

 

これでssh接続完了

f:id:shangtian:20171204212537p:plain

 

sshじゃなくてGUI操作するぞ

sshじゃ困るという場合VNC viewerという

アプリを使ってリーモートディスクトップ

環境を作る

 

まずはスマホ

VNC Viewer - Remote Desktop - Google Play の Android アプリ

をインストール

 

先ほど使ったConnectBotでssh接続して

ラズパイ側のセットアップをしていく

 

Raspberry pi側にもインストールする

必要がある為(ラズパイがネットに繋がってないと

インストールできないため有線しとくといい)

$ sudo apt-get install x11vnc

インストールし終わったら

$z11vnc -forever

vncを起動する

f:id:shangtian:20171204212549p:plain

 

上手くラズパイ側でVNCを起動できると

以下の写真にたいになる

f:id:shangtian:20171204212601p:plain

 

以上でRaspberry pi側のセットアップは終わり

あとはスマホVNC viewerを起動して

Addressに最初に調べたipアドレスを記入する

Nameの方は任意で大丈夫だ

f:id:shangtian:20171204213756p:plain

 

OKをタップする

f:id:shangtian:20171204213800p:plain

f:id:shangtian:20171204213805p:plain

 以上で完了

 

 

・有線してssh

パソコンとRaspberry piを有線LAN接続して

sshを確立する

 

(1)macの場合

mac mini (Late 2014)

macOS Sierra 10.12.6

 

まずRaspberry pimac miniとを有線接続

f:id:shangtian:20171204220034j:plain

ターミナルを開いて

$ssh pi@raspberrypi.local

 

で接続できる

 

 (2)windowsの場合

Let's note CF-SZ5

Windows10

まずインストールしなければならないものが

いくつかある

まずは

Tera Termをインストール

「Tera Term」定番のターミナルエミュレーター - 窓の杜ライブラリ

 

次に

Bonjour Print Servicesをインストール

ダウンロード - Bonjour Print Services (Windows)

 もしiTuesがインストールされていれば

Bonjour Print Servicesをインストールする必要はない

 

インストールし終わったら

ラズパイとPCを有線して

Tera Termを起動する

 

f:id:shangtian:20171204230024j:plain

ホスト(T):raspberrypi.local

と記入してokをクリック

f:id:shangtian:20171204222630p:plain

 ユーザー名とパスワードを入力すると

f:id:shangtian:20171204222642p:plain

接続できる

f:id:shangtian:20171204222652p:plain

 

(3)ubuntuの場合

ubuntuでは特に何かインストールが

必要なわけではない

f:id:shangtian:20171204230113j:plain

端末を開いて

$ssh pi@raspberrypi.local

で完了

f:id:shangtian:20171204230133p:plain

 

<参考文献>

Raspberry Pi Zero に Android から USBテザリング で SSH接続 | Home Made Garbage

Raspberry PiとMac or Windows PCを有線で直接繋いでさくっとSSH接続する - Qiita

ATTiny13Aでシリアル通信を行う

・目的

ATTiny13Aのピン一つでシリアル通信を行う

 

・使用したもの

ATTiny13A

シリアル変換機

ダイオード

トランジスタ

10KΩ抵抗 1個

ブレッドボード

Arduino IDE

mac mini

 

・方法

 

(1)ライブラリのインポート

まずはシリアル通信を行うために

ライブラリを追加する

 

下のサイトにとんで

Nerd Ralph: AVR half-duplex software UART supporting single pin operation

 

赤で囲ってある部分をクリックすると

ライブラリをダウンロードできる

 

f:id:shangtian:20171116185859p:plain

 図1:ライブラリのダウンロード

出典:Nerd Ralph: AVR half-duplex software UART supporting single pin operation

 

ダウンロードし終わったら

zip形式のライブラリをインストールを

クリックしいて BasicSerial3を選択する

f:id:shangtian:20171116190247p:plain

 図2:ライブラリの追加

 

(2)回路を組み立てる

 

図3に回路図を示した

シリアル変換器につなげるときは

TX-RX RX-TX

とクロスして接続すること

f:id:shangtian:20171116185106p:plain

 図3:シリアル通信回路

 

(3)ライブラリの設定

 

使うピンの指定と通信速度はをスケッチ上では

指定できないのでライブラリを直接編集して

指定する。

 

まずは使用するピンの指定から

$vim Documents/Arduino/libraries/BasicSerial3
$vim BasicSerial3.S

 13,14行目にデフォルトで

#define UART_Tx 5
#define UART_Rx 5

とあるので5を2に変更

#define UART_Tx 2
#define UART_Rx 2

 

つぎに通信速度の指定

$vim BasicSerial3.h

7行目にある

#define BAUD_RATE 115200

がシリアル通信の速度を指定している

今回38400bpsに指定したいので

#define BAUD_RATE 38400

に変更して保存

 

以上でライブラリの設定は終わり

 

(4)スケッチの作成

スケッチを示した 

1を受け取ったら”CHIBA”を返し

それ以外は”jajaja”を返す 

#include <BasicSerial3.h> 

void setup() {

}

void serOut(const char* str) {
   while (*str) TxByte (*str++);
}

void loop(){
  byte c;
  c = RxByte();
  switch(c) {
    case '1': 
      for (uint8_t i=0;i<10;i++) serOut("CHIBA");
      serOut("\n\r");
      break;
    default:
      serOut("jajaja");
      break;
      
  }
}

図4:スケッチ

 

・結果

 

上手くいくとこんな感じ

f:id:shangtian:20171117212955p:plain

 図5:シリアルモニタ

 

追記

BasicSerial3.SのUART_Tx 、UART_Rx 

を違うピンを割り振れば

普通のシリアル通信が行える

回路図を図6に示した

$vim BasicSerial3.S

 13,14行目

#define UART_Tx 1
#define UART_Rx 0

f:id:shangtian:20171117220041p:plain

図6:回路図

 

<参考文献>

Nerd Ralph: AVR half-duplex software UART supporting single pin operation

ATtiny13Aでシリアル通信(UART)を行う: 猫にコ・ン・バ・ン・ワ

ATTiny13A ブートローダー書き込み

ATTiny13Aは秋月で50円ほどで

とにかく安い

ピンの数が少ないんでかなり制限

されて使いにくいかもしれないけど

とにかく安い

 

というわけで使ってみる

 

・目的

ATTiny13Aにブートローダーを書き込む

 

・使用したもの

 

ATTiny13A

Arduino UNO

Arduino IDE

ブレッドボード

ジャンパワイヤ

mac mini

 

 

・方法

 

(1)Arduino に ArduinoISPを書き込む

 

まずはArduino unoにArduinoISPを書き込む

 

f:id:shangtian:20170629230220p:plain

図1:ArduinoISP

 

(2)ボードマネージャに追加

 

まずは

Arduino IDE に ATtiny10/13 の開発環境を組み込む | Make | kosakalab

にアクセスして図2の赤四角の

部分をクリックしてzipファイルを

ダウンロード

 

f:id:shangtian:20171116082103p:plain

図2:Arduino IDE に ATtiny10/13 の開発環境を組み込む | Make | kosakalab

 

ダウンロードしたファイルを解凍すると

以下のような構成になる

 

bitDuino_2017-2/

                        ┣ bitDuino10/

                        ┣ bitDuino13/  <---使うのはこのファイル

                        ┗bitDuino_Readme.txt

 

次に

  書籍/Arduino/

ディレクトリにHardwareという名前で

ディレクトリを作成しておく

 

先ほど解凍したファイルの中にある

   bitDuino13

をHardwareにコピー

 

うまく追加されるとツール->ボード

で以下の図のように表示される 

f:id:shangtian:20171116083820p:plain

 図3:ボードの選択

 

(3)配線

図4のように配線して

Arduino uno とATTiny13Aのピンの対応表

を表1に示した。

f:id:shangtian:20171115234008p:plain

図4:Arduino unoとATTiny13Aの繋げ方

 

 表1:対応表

 

Arduino uno

ATTiny13A

SDK

D13

7(PB2)

MISO

D12

6(PB1)

MOSI

D11

5(PB0)

RESET

D10

1(RESET)

 

(4)ブートローダーを書き込み

 

ツールを開いて図5のように書き込み装置

Arduino as ISP を選択して

ブートローダーを書き込むをクリック

 

f:id:shangtian:20171116083655p:plain

 

<参考文献>

Arduino IDE に ATtiny10/13 の開発環境を組み込む | Make | kosakalab

Arduinoで、小っちゃいIC(ATTiny)を使う方法 - Qiita

 

 

Ada入門:繰り返し構文

・目的

今回は繰り返し構文について

Adaの繰り返し構文はバリエーション

がけっこうあるきがする。

 

・方法

ここでは5種類の繰り返しかた

をやってみる

 

まずこれ

c言語でいうdo whileみたいなやつ

  i := 0;

   loop
      put("i =");
      put(i, 5);
      New_Line;
      i := i + 1;
      exit when i = 4; --iが4になったら終了
   end loop;

 

次は、条件文で繰り返しを抜けるパターン


      i := 0;
  loop
      Put("i =");
      Put(i,5);
      New_Line;
      i := i + 1;
      if i = 4 then exit; end if;
   end loop;

次はwhile文

  i := 0;

   while i < 5 loop
       Put("i =");
       Put(i,5);
       New_Line;
       i := i + 1;
   end loop;

つぎはfor文

iが1から4の間繰り返す

for i in 1..4 loop
      Put("Hello World");
      Put(i);
      New_Line;
   end loop;

今度は8〜5の間繰り返す

ただし8 7 6 5 4

という感じで処理される

 

for i in reverse 5..8 loop
      Put("Good morning");
      Put(i);
      New_Line;
   end loop;

 

Ada入門:Boolean型

・目的

 Boolean型を使えるようになること

 

・方法

Boolean型を使ったコードを図1に示した。 


with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;

procedure BOO is

   package Enum_IO is new Ada.Text_IO.Enumeration_IO(BOOLEAN);
   use Enum_IO;

   rat, cat, dog, bird    : INTEGER;
   question, truth, lies  : BOOLEAN;

begin

   rat  := 10;
   cat  := 10;
   dog  := 12;
   bird :=2;

   question := rat = cat;
   Put("question is ");
   Put(question);
   New_Line(2);

   question := rat = dog; --ratとdogが同値である
   Put("question is ");  -- 正しくないのでFALSE
   Put(question);
   New_Line(2);

   question := rat /= cat; --ratとcatが同値でない
   Put("question is ");    --正しくないんでFALSE
   Put(question);
   New_Line(2);

   question := rat < dog; --ratがdogより小さい
   Put("question is ");   --正しいのでTRUE
   Put(question);
   New_Line(2);

   question := bird > dog;  --birdがdogより大きい
   Put("question is ");     --正しくないのでFALSE
   Put(question);
   New_Line(2);

   question := rat <= cat;
   Put("question is ");
   Put(question);
   New_Line(2);

   question := rat >= cat;
   Put("question is ");
   Put(question);
   New_Line(2);

   truth := rat = cat; --truth は TRUE
   lies  := rat < cat; --lies  は FALSE

   question := truth or lies;
   Put("question is ");
   Put(question);
   New_Line(2);

   question := truth xor lies;
   Put("question is ");
   Put(question);
   New_Line(2);

end BOO;

図1:BOO.adb

 

実行結果

question is FALSE

question is FALSE

question is TRUE

question is TRUE

question is TRUE

question is TRUE

question is TRUE

question is TRUE 

 

 procedure内で

Enumeration_IO();

インスタンスすることでboolean型を使うことが

出来るようになる

 

or と xor について

 

まずorから

question := truth or lies; --TRUE

question := lies or lies;     --FALSE

question := truth or truth; --TRUE

を実行するとわかるが

少なくとも片方がTRUEであれば

questionはTRUEを返す

 

次にxor

 

question := truth xor lies; --TRUE

question := lies xor lies;     --FALSE

question := truth xor truth; --FALSE

question := truth xor lies; --TRUE

 

つまり A xor B としたとき

AとBが同じ値であればFALSE

AとBが異なる値であればTRUEを返す

 

実験用電源の作成記録その3

・目的

その1で組んだ回路を元に

ユニバーサル基板にはんだ付け

していく

 

・使用したもの

ユニバーサル基板

XHコネクタ2pinオス,メス

 はんだ

 はんだごて

 

・方法

 

はんだ付け

図1の回路図のように

ユニバーサル基板に配線していく。

f:id:shangtian:20171022221157p:plain

 図1:電源回路

 

スイッチやコネクタは直接

配線せずXHコネクタを用いて

取り外し出来るようにした。

 取り外しができるので基板を

ケースに入れる時かなり楽になる

 

図みたいに先にユニバーサル基板に

パーツをつける位置をマジックで

印しておくと配線がだいぶ

楽になった。
f:id:shangtian:20171017074633j:image

 

すべての配線が終わりちゃんと動作するか

確認をする。 

f:id:shangtian:20171016163145j:image

 

ちなみに基板の裏側はこんな感じ
f:id:shangtian:20171016163212j:image

 

・完成

下の写真が完成品
f:id:shangtian:20171028003451j:image

実験用電源の作成記録その2

・目的

プラスチックケースを加工して

スイッチやコネクタを取り付ける

 

・使用したもの

ドリル

ヤスリ(ダイソーで売ってた金属のヤスリ)

木片(ホームセンターで購入)

プラスドライバー

プラスチックケース

f:id:shangtian:20171016095127j:image

可変抵抗(B10k)

トルグスイッチ

DCコネクタ(外径5.5mm,内径2.1mm)

絶縁ターミナル

サトーパーツ(SATOPARTS) T-3025-B

サトーパーツ(SATOPARTS) T-3025-B

 

ヒートシンク秋月電子の店頭で売られていた)
f:id:shangtian:20171016100525j:image

 

・方法

 

(1)ケースに印をつける

 

まずはケースにコネクタや

スイッチを取り付ける

位置をマジックペンで

印をつけていく

 

トルグスイッチ
f:id:shangtian:20171016095754j:image

 

ボリューム

f:id:shangtian:20171016095827j:plain

 

コネクタ赤黒
f:id:shangtian:20171016100012j:image

 

DCコネクタ
f:id:shangtian:20171016100038j:image

 

ヒートシンク
f:id:shangtian:20171016100133j:image

(2)ドリルで穴開け

先ほど印をつけたところを

ドリルで穴を空けていく

空け終わったら部品を通して

みる。もし入らなかったら

ヤスリで削って行くとよい。
f:id:shangtian:20171016100206j:image

 

こういう大きな部分

を切り出す時は印の

周りを、間隔を詰めて穴を

空けていき、最後はニッパー

で切り取ると空けられる

f:id:shangtian:20171016100133j:image

 

切り出したのが下の写真
f:id:shangtian:20171016100301j:image

 

こちらが完成品
f:id:shangtian:20171016100322j:image

 (3)コネクタの配線

 

 次はコネクタに配線をしていく


f:id:shangtian:20171016101525j:image


f:id:shangtian:20171016162743j:image

 

レギュレーターへの配線
f:id:shangtian:20171016162855j:image

 

レギュレーターに配線し終わったら

レギュレーターの裏側に

CPUグリスを塗って

ネジで固定した
f:id:shangtian:20171016162933j:image

固定したのが図
f:id:shangtian:20171016162946j:image

 

その3へ続く

 

shangtian.hatenablog.com