LoginSignup
2
3

More than 3 years have passed since last update.

電子工作ファン向けのRaspberry Pi・セットアップ(Ubuntu 18.04LTS編)

Last updated at Posted at 2020-02-19

はじめに

電子工作作品の制御によく使っているラズパイですが、似たような実験環境を頻繁に作っているので、設定内容やダウンロード先など、いつも繰り返し作業している、基本的な手順をまとめました。

過去の記事「電子工作ファン向けのRaspberry Pi・セットアップ(Raspbian編)」 の内容をベースに、Raspbianと所々設定方法が異なるUbuntu18.04環境に合わせた内容に直しています。

注意
GPIO周りでハマりどころがあるので、例えばどうしても18.04で「ROSを使いたい」縛りがなければ、19.10以降をお使いになる事をお勧めします・・・

ここで想定するラズパイの使い方

  • 手元のLAN環境に常時接続して、パソコン側からラズパイのssh/共有フォルダで開発
  • (極力)ヘッドレスで使う(Raspbianのような方法は分からず。その代わりシリアルコンソールが便利!)
  • GPIO、I2C、SPIなどで、電子工作作品の制御をする
  • ROS2を使う(Ubuntuで公開のイメージは64bitなので!)

概要

  1. Ubuntu18.04のインストールと基本設定
  2. NTP、sambaの設定
  3. ハードウェア制御に必要なパッケージのインストール

1. Ubuntu 18.04 のインストール

注意
本記事は、ubuntu-18.04.3をベースに書いてます。

ダウンロード先

こちらのリンク先のページから、ディスクイメージをダウンロードします。

image.png

2020/2/20: 新しいページが出来ていたので書き換え。
(旧:https://wiki.ubuntu.com/ARM/RaspberryPi ARM64のところから、ディスクイメージをダウンロードします。

ディスクイメージの書き込み

こちらの手順を参照してください。

2.インストール後の基本設定

今のところraspi-configコマンドはありませんので、Ubuntu Linuxの定石に従って各種設定を進めます。

シリアルコンソールは、デフォルトで有効になっています。
ネットワーク環境やディスプレイがなくても、RaspberryPiのTX/RXピン経由でシリアル通信が出来ます。
(例:秋月電子「USBシリアル変換ケーブル(3.3V)」

■注意■
イメージを書き込んだ直後の初回起動の時は、シリアルコンソールは通信できません。
(20年2月頃のイメージを使用した場合)
・・・と言うわけで、初回だけはヘッドレスでは立ち上げられません。
(sshは使えるので、ネットワーク経由で初期設定することは出来ます)

コマンドライン
#アップデート
ubuntu@ubuntu:~$ sudo apt update && sudo apt upgrade -y

#ホスト名の変更
#「raspi3u」の所を好きに変えてください。
ubuntu@ubuntu:~$ hostnamectl set-hostname raspi3u 
ubuntu@ubuntu:~$ hostname
raspi3u
ubuntu@ubuntu:~$ sudo reboot

#タイムゾーンの設定
ubuntu@raspi3u:~$ timedatectl list-timezones | grep -i tokyo
Asia/Tokyo
ubuntu@raspi3u:~$ sudo timedatectl set-timezone Asia/Tokyo
ubuntu@raspi3u:~$ date
Mon Sep 30 14:38:00 JST 2019
# ↑ここで、日本時間になっていればOK

<注意>
インストール直後、ネットワークに繋がっていると、自動的にアップデートが始まっています。アップデート中は、sudo apt updateを実行するとエラーがでますので、そのまま放置してください。

3.その他の環境整備

(1)NTP

設定の前に、設定ファイルをバックアップ。

コマンドライン
ubuntu@raspi3u:~$ cd /etc/systemd/
ubuntu@raspi3u:/etc/systemd$ sudo cp -p timesyncd.conf timesyncd.conf.org
ubuntu@raspi3u:/etc/systemd$ sudo nano timesyncd.conf
ubuntu@raspi3u:/etc/systemd$ cat timesyncd.conf

timesyncd.confの設定

Raspbianと同じです。1

timesyncd.conf
[Time]
NTP=ntp.nict.jp
FallbackNTP=ntp.jst.mfeed.ad.jp ntp.ring.gr.jp ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

設定変更を反映する前の状態を確認します。

コマンドライン
#systemd-timesyncdデーモンの状態確認
ubuntu@raspi3u:/etc/systemd$ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendo
  Drop-In: /usr/lib/systemd/system/systemd-timesyncd.service.d
           mqdisable-with-time-daemon.conf
   Active: active (running) since Mon 2019-09-30 14:24:26 JST; 18min ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 2768 (systemd-timesyn)
   Status: "Synchronized to time server for the first time 91.189.89.199:123 (nt
    Tasks: 2 (limit: 1043)
   CGroup: /system.slice/systemd-timesyncd.service
           mq2768 /lib/systemd/systemd-timesyncd

Sep 30 14:24:24 ubuntu systemd[1]: Starting Network Time Synchronization...
Sep 30 14:24:26 ubuntu systemd[1]: Started Network Time Synchronization.
Sep 30 14:24:26 ubuntu systemd-timesyncd[2768]: Synchronized to time server for

設定変更を反映します。

コマンドライン
#systemdデーモン設定の再読込
ubuntu@raspi3u:/etc/systemd$ sudo systemctl daemon-reload
#systemd-timesyncdデーモンを再起動
ubuntu@raspi3u:/etc/systemd$ sudo systemctl restart systemd-timesyncd
ubuntu@raspi3u:/etc/systemd$ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendo
  Drop-In: /usr/lib/systemd/system/systemd-timesyncd.service.d
           mqdisable-with-time-daemon.conf
   Active: active (running) since Mon 2019-09-30 14:43:52 JST; 3s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 11918 (systemd-timesyn)
   Status: "Synchronized to time server for the first time 133.243.238.243:123 (
    Tasks: 2 (limit: 1043)
   CGroup: /system.slice/systemd-timesyncd.service
           mq11918 /lib/systemd/systemd-timesyncd

Sep 30 14:43:50 ubuntu systemd[1]: Starting Network Time Synchronization...
Sep 30 14:43:52 ubuntu systemd[1]: Started Network Time Synchronization.
Sep 30 14:43:52 ubuntu systemd-timesyncd[11918]: Synchronized to time server for

(2)Samba

インストール

コマンドライン
ubuntu@raspi3u:$ sudo apt install samba -y
ubuntu@raspi3u:$ cd /etc/samba
ubuntu@raspi3u:/etc/samba $ sudo cp -p smb.conf smb.conf.org
ubuntu@raspi3u:/etc/samba $ sudo nano smb.conf

smb.confの設定は、こちらを参考にしてください

注意
[homes]の行もコメントアウトされてる場合があるので、忘れずコメントアウトの#を消して下さい。

ユーザの作成

コマンドライン
ubuntu@raspi3u:/etc/samba$ sudo pdbedit -a ubuntu
new password:
retype new password:
Unix username:        ubuntu
NT username:
Account Flags:        [U          ]
User SID:             ****
Primary Group SID:    ****
Full Name:            Ubuntu
Home Directory:       \\ubuntu\ubuntu
HomeDir Drive:
Logon Script:
Profile Path:         \\ubuntu\ubuntu\profile
Domain:               UBUNTU
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          Thu, 07 Feb 2036 00:06:39 JST
Kickoff time:         Thu, 07 Feb 2036 00:06:39 JST
Password last set:    Mon, 30 Sep 2019 15:13:18 JST
Password can change:  Mon, 30 Sep 2019 15:13:18 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

設定変更を反映します。

コマンドライン
#systemdデーモン設定の再読込
ubuntu@raspi3u:/etc/systemd$ sudo systemctl daemon-reload
#sambaデーモンを再起動
ubuntu@raspi3u:/etc/systemd$ sudo systemctl restart smbd
ubuntu@raspi3u:/etc/systemd$ systemctl status smbd
● smbd.service - Samba SMB Daemon
   Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-01 08:53:52 JST; 9h ago
     Docs: man:smbd(8)
           man:samba(7)
           man:smb.conf(5)
 Main PID: 1538 (smbd)
   Status: "smbd: ready to serve connections..."
    Tasks: 5 (limit: 1056)
   CGroup: /system.slice/smbd.service
           ├─1538 /usr/sbin/smbd --foreground --no-process-group
           ├─1567 /usr/sbin/smbd --foreground --no-process-group
           ├─1568 /usr/sbin/smbd --foreground --no-process-group
           ├─1570 /usr/sbin/smbd --foreground --no-process-group
           └─4840 /usr/sbin/smbd --foreground --no-process-group

4.ハードウェア制御に必要なパッケージのインストール

Raspbianと概ね同じです。2

(1)I2C

コマンドライン
#インストール
ubuntu@raspi3u:~$ sudo apt install i2c-tools -y
ubuntu@raspi3u:~$ sudo apt install python3-smbus -y
#自分をi2cグループに追加
ubuntu@raspi3u:~$ sudo adduser ubuntu i2c
#動作確認
ubuntu@raspi3u:~$ i2cdetect -r -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

(2)GPIO

Raspbianと比べてハマリどころがあるので、インストール手順は、こちらを参照してください。

Ubuntu 19.10以降ではWiringPiパッケージが存在して、上記の問題他を解決するパッチが適用されています。「ROSを使いたい」という縛りがなければ、19.10以降をお使いになる事をお勧めします。

以下に、個別の考察を書きました。

WiringPi

Raspbianと比べてハマリどころがあるので、インストール手順は、こちらを参照してください。

RPi.GPIO

エラーが出て動かない・・・。

pigpio

不具合が1点。
GPIO入力のアップ・ダウントリガだけは検出できる(callbackは取得できる)が、ON状態/OFF状態を読み取れない(pinの状態をreadするといつも"0")
(GPIO出力は問題無いです)

この点の考察については、こちらを参考ください。

コマンドライン
#unzipをインストール
~$ sudo apt install zip unzip -y

#ソースのダウンロードと展開
~$ mkdir gitwork
~$ cd gitwork
~/gitwork$ wget abyz.me.uk/rpi/pigpio/pigpio.zip
~/gitwork$ unzip pigpio.zip
~/gitwork$ cd PIGPIO/

#ビルド
~/gitwork$ make

#porgで簡易パッケージ管理でインストール
~/gitwork$ sudo porg -lp pigpio make install
~/gitwork$ porg -a
pigpio

#pigpiodデーモン起動
~/gitwork$ sudo pigpiod

起動時にデーモンとして自動起動する場合は、こちらを参考に、systemdに登録してください。

(3)ROS 2

これはあっさりと入ります。
インストール手順は、こちらのUbuntu LinuxでROS 2のインストールを参照してください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3