#はじめに
電子工作作品の制御によく使っているラズパイですが、似たような実験環境を頻繁に作っているので、設定内容やダウンロード先など、いつも繰り返し作業している、基本的な手順をまとめました。
過去の記事「電子工作ファン向けのRaspberry Pi・セットアップ(Raspbian編)」 の内容をベースに、Raspbianと所々設定方法が異なるUbuntu18.04環境に合わせた内容に直しています。
注意
GPIO周りでハマりどころがあるので、例えばどうしても18.04で「ROSを使いたい」縛りがなければ、19.10以降をお使いになる事をお勧めします・・・
##ここで想定するラズパイの使い方
- 手元のLAN環境に常時接続して、パソコン側からラズパイのssh/共有フォルダで開発
-
(極力)ヘッドレスで使う(Raspbianのような方法は分からず。その代わりシリアルコンソールが便利!) - GPIO、I2C、SPIなどで、電子工作作品の制御をする
- ROS2を使う(Ubuntuで公開のイメージは64bitなので!)
##概要
- Ubuntu18.04のインストールと基本設定
- NTP、sambaの設定
- ハードウェア制御に必要なパッケージのインストール
#1. Ubuntu 18.04 のインストール
注意
本記事は、ubuntu-18.04.3をベースに書いてます。
##ダウンロード先
こちらのリンク先のページから、ディスクイメージをダウンロードします。
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
[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のインストールを参照してください。
-
https://qiita.com/myasu/items/a4e036a86976e3081a19#%EF%BC%93ntp%E3%81%AE%E8%A8%AD%E5%AE%9A ↩
-
https://qiita.com/myasu/items/a4e036a86976e3081a19#%EF%BC%95%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E5%88%B6%E5%BE%A1%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB ↩