RaspberryPi Zero再設定
by K.I
2022/08/24〜2022/09/18
Index
- 3〜4年前から、RaspberryPi Zeroを
- 大容量のSDカードによるファイルサーバ
- AlexaによるPCの起動・停止用サーバ
- LED表示の置時計
- として結構、日常的に便利に使っていたんだけど、
- バックアップを取っていなかったので、最初から全部設定をやり直すはめになった
- 特に、LED表示は、以前使っていたNodeRedのライブラリが使えなくなったので、かなり手間取った
- 設定方法は基本的に、以前とほとんど同じなんだけど、
- 変わっていることも多かったし、一から全部やり直しだったので、改めて纏め直した
- RaspberryPiのページから、Windows用のRaspberry Pi Imagerをダウンロードする
- これで、RaspberryPi用の起動SDを作成することが出来る
- Raspberry Pi Imagerを起動する
- OSは、Raspberry Pi OS (32-BIT)を選択
- デフォルトユーザが設定されていないので、以下を必ず設定する
- 歯車アイコンをクリックして、SSHを有効に、
- ホスト名は、raspberrypi.localにしておく
- パスワード認証にして、ユーザ名、パスワードを設定
- Wi-Fiを設定するをチェック
- ストレージでSDカードを指定して、書き込む
- SDカードをセットして、RaspberryPiを起動する
- PCで、cmdプロンプトを起動して、
- ssh ユーザ名@raspberrypi.local と入力
interface wlan0
static ip_address=192.168.1.104/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
[top]
- Sambaをインストールして、ファイルサーバとして設定してみる
$ sudo apt-get update
$ sudo apt-get install samba
- 元のsmb.confを保存しておいて、新規にsmb.confを作成
$ cd /etc/samba
$ sudo mv smb.conf smb.conf.org
$ sudo vi smb.conf
例えば、以下のように記述する
[global]
unix charset=UTF-8
dos charset=CP932
workgroup=WORKGROUP
[share]
path=/var/shared
read only=no
browseable=yes
$ sudo systemctl restart smbd
$ sudo systemctl restart nmbd
$ sudo mkdir /var/shared
$ sudo chmod 777 /var/shared
$ sudo useradd -s /usr/sbin/nologin xxx
$ sudo pdbedit -a xxx
- ここでパスワードを設定すれば、共有フォルダの設定は完了
[top]
$ sudo fdisk -l
:
Device Boot Start End Sectors Size Id Type
/dev/sda1 65536 966655999 966590464 460.9G 7 HPFS/NTFS/exFAT
$ sudo mkdir /media
$ sudo mount /dev/sda1 /media/usb1
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 3.5G 24G 13% /
devtmpfs 87M 0 87M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 2.1M 84M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/mmcblk0p1 253M 50M 203M 20% /boot
tmpfs 43M 20K 43M 1% /run/user/1000
/dev/sda1 461G 388G 74G 85% /media/usb1
- /etc/samba/smb.confに以下を追加
[media]
path=/media/usb1
read only=no
browseable=yes
$ sudo apt-get install usbmount
- /etc/usbmount/usbmount.confに以下の記述があることを確認
MOUNTPOINTS="/media/usb0 /media/usb1 /media/usb2 /media/usb3
/media/usb4 /media/usb5 /media/usb6 /media/usb7"
- でも、rebootすると、マウントされていなかった。。
- 結果的には、usbmountのインストールは不要だったかもしれない
$ sudo blkid /dev/sda1
/dev/sda1: LABEL="USB512" UUID="9C33-6BBD" BLOCK_SIZE="512" TYPE="exfat"
proc /proc proc defaults 0 0
PARTUUID=b7254c6c-01 /boot vfat defaults,flush 0 2
PARTUUID=b7254c6c-02 / ext4 defaults,noatime 0 1
UUID="9C33-6BBD" /media/usb1 exfat defaults,noatime,nofail 0 0
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
- rebootしても、ちゃんとマウントされるようになった
- Windowsで、Sambaの共有フォルダの読み込みは出来るようになったが、
- 対象のフォルダを確認してみると、所有者とグループがrootになっている
- Sambaでアクセスするユーザのuid,gidを確認
$ sudo pdbedit -L
xxx:1001:
$ id xxx
uid=1001(xxx) gid=1001(xxx) groups=1001(xxx)
- /etc/fstabのmount optionに、uid,gidを追加
UUID="9C33-6BBD" /media/usb1 exfat defaults,noatime,nofail,uid=1001,gid=1001 0 0
- これで対象のフォルダの所有者とグループがSambaに登録されたユーザとなり、
[top]
- まず、NodeRedをインストール・アップグレード(20〜30分掛かる)
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
$ node-red-start
$ sudo systemctl enable nodered.service
- RaspberryPi ZeroのNodeRedにも、Alexa Home Skill Bridgeをインストールする
$ cd ~/.node-red
$ npm install node-red-contrib-alexa-home-skill
- これで、NodeRedに Alexa homeノードが追加される
- 右上にあるΞ(三本線)のメニューをクリックして、パレットの管理を選択
- ノードの追加で、alexaを検索
- node-red-contrib-alexa-localを追加する
- alexaグループが追加されたのは良かったが、
- 何故か、RaspberryPiグループが消えてしまった。。2
- RaspberryPiで必要な、以下のノードが使えない
- rpi-gpio in
- rpi-gpio out
- rpi-mouse
- rpi-keyboard
- 右上にあるΞ(三本線)のメニューをクリックして、パレットの管理を選択
- 現在のノードに、上記のノードが無いことを確認して、
- ノードの追加で、rpi-gpioを検索
- node-red-node-pi-gpioというのが、それっぽいので、ノードの追加を実行する
- これで、RaspberryPiグループが追加され、上記の4つのノードが使えるようになった
- RaspberryPi Zeroでも、LED点灯をやってみる
- RaspberryPiのPIN7(GPIO004)に、1kΩの抵抗を介してLEDを接続する
- Inject⇒Trigger⇒rpi-gpio outと接続する
- Injectを繰り返し1s間隔、Trigger250ms待機、GPIO04-7ピンに設定
- 今度は、Alexaと連携させてWindows PC のON/OFFをする
- RaspberryPiからの、 PCの起動とシャットダウンについては、以前調べたので、
- 予め、etherwakeとnetコマンドをインストールして、使えることを確認しておく
- Alexa homeノードの出力が、Trueの場合、Falseの場合で別処理をする様に、Switchノードを設定する
- Swithノードで、処理を分岐できたので、それぞれPCの起動とシャットダウン処理を割り当てる
- NodeRedの機能グループの execノード は、Shellコマンドを直接実行することができる
- これで、「Alexa、PCをつけて」とか「PCの電源を入れて」とか言うと、PCが起動して、
- 「Alexa、PCをOFFにして」とかで、PCをシャットダウン出来るようになった!
1もちろん固定IPで設定したアドレスを指定しても良い。
2記録していないけど、実際はいろいろ試行錯誤をしてしまったので、その所為と思われる。
[top]
- MAX7219を使ったドットマトリクスLEDモジュールを使ってみる
- ⇒LEDモジュールを4個カスケード接続したもの
- 以前は、NodeRedのnode-max7219-led-matrixとかで使って動かしていたんだけど、
- bcm2835ライブラリは、RaspberryPiの周辺回路に搭載されたSoC
- Broadcom BCM2835 のRaspberryPi用のCライブラリで、GPIOへのアクセスを可能にする
$ sudo wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.44.tar.gz
$ tar zxvf bcm2835-1.44.tar.gz
$ cd bcm2835-1.44/
$ sudo ./configure
$ sudo make
$ sudo make install
- これをちょっと改造して、時刻を表示するようにした。
- コードを見てみると、ざっと以下のように記述すれば良さそう
#include <bcm2835.h>
bcm2835_spi_begin();
bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST);
bcm2835_spi_setDataMode(BCM2835_SPI_MODE0);
bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_256);
bcm2835_gpio_fsel(Max7219_pinCS, BCM2835_GPIO_FSEL_OUTP);
- あとは、MAX7219のレジスタを必要に応じて設定する
#define Max7219_pinCS RPI_GPIO_P1_24
bcm2835_gpio_write(Max7219_pinCS,LOW);
:
bcm2835_spi_transfer(ADRS); // レジスタの設定を
bcm2835_spi_transfer(DATA); // 必要なだけ繰り返し行う
:
bcm2835_gpio_write(Max7219_pinCS,HIGH);
bcm2835_spi_end();
bcm2835_close();
- こんな感じで、簡単にRaspberryPiのGPIOをコントロールできる
- MAX7219LEDモジュールとRaspberryPiの接続
RaspberryPi | max7219module |
5V | VCC |
GND | GND |
GPIO10(MOSI) | DIN |
GPIO8(CEO) | CS |
GPIO11(CLK) | CLK |
- シリアルデータフォーマット(16bit・MSBファースト)
- 無効データ4bit + アドレス4bit + データ8bit の16bitをSPIで送信する
D15-D14-D13-D12 | D11-D10-D9-D8 | D7-D6-D5-D4-D3-D2-D1-D0 |
X - X - X - X | address | MSB - data - LSB |
- MAX7219モジュールの4個カスケード接続なので、
- 横一列8ドットx4つ分のシリアルデータを連続して送る
- 16bitx4=64bit、それを8Digit分だけ繰り返す
address | register | note |
0xX0 | No-OP | カスケード接続時にコマンドをスキップするために使用 |
0xX1 | Digit0 | 0桁目の表示データ |
0xX2 | Digit1 | 1桁目の表示データ |
0xX3 | Digit2 | 2桁目の表示データ |
0xX4 | Digit3 | 3桁目の表示データ |
0xX5 | Digit4 | 4桁目の表示データ |
0xX6 | Digit5 | 5桁目の表示データ |
0xX7 | Digit6 | 6桁目の表示データ |
0xX8 | Digit7 | 7桁目の表示データ |
0xX9 | DecodeMode | 0x00でデコードなし |
0xXA | Intensity | 0xX0で輝度最小 |
0xXB | ScanLimit | 0xX7でDigit0〜7を全部表示 |
0xXC | ShutDown | 0b00000001でNormalOperation |
0xXF | DisplayTest | 0b00000000でNormalOperation、0b00000001で全点灯 |
- DecodeMode〜DisplayTestの設定は、全部やった方がよさそう
- MAX7219の仕様を理解したので、なんとか時刻表示できるようになった。
- 以前は、NodeRedのライブラリを組み合わせて作っていたが不安定だった。
- Cで組み直して、安定動作するようになった。
- /etc/rc.localにコマンド・スクリプトを記述して、自動的に起動するようにした
su -c '/usr/local/bin/clock 0123 &'
[top]
$ uname -a
Linux raspberrypi 5.15.32+ #1538 Thu Mar 31 19:37:58 BST 2022 armv6l GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
$ lscpu
Architecture: armv6l
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Vendor ID: ARM
Model: 7
Model name: ARM1176
Stepping: r0p7
CPU max MHz: 1000.0000
CPU min MHz: 700.0000
BogoMIPS: 697.95
Flags: half thumb fastmult vfp edsp java tls
$ lsusb
Bus 001 Device 002: ID 0bda:0109 Realtek Semiconductor Corp. microSDXC Card Reader [Hama 00091047]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 460.9G 0 disk
mqsda1 8:1 1 460.9G 0 part /media/usb1
mmcblk0 179:0 0 29.1G 0 disk
tqmmcblk0p1 179:1 0 256M 0 part /boot
mqmmcblk0p2 179:2 0 28.9G 0 part /
- RaspberryPiのModel・Serial等
$ cat /proc/cpuinfo
processor : 0
model name : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS : 697.95
Features : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xb76
CPU revision : 7
Hardware : BCM2835
Revision : 9000c1
Serial : 0000000012345678
Model : Raspberry Pi Zero W Rev 1.1
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 3.9G 24G 15% /
devtmpfs 87M 0 87M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 2.1M 84M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/mmcblk0p1 253M 50M 203M 20% /boot
/dev/sda1 461G 388G 74G 85% /media/usb1
tmpfs 43M 20K 43M 1% /run/user/1000
$ vcgencmd measure_temp
temp=45.5'C
$ whoami
pi
$ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),104(input),106(render),108(netdev),999(spi),998(i2c),997(gpio),117(lpadmin)
$ sudo reboot
$ sudo shutdown -r now
$ sudo shutdown -h now
$ ip addr
$ ifconfig
$ pinout
$ htop
- dateで時刻を確認したら、BSTになっていたので
- sudo raspi-configを実行
- Localisation Optionsを選択
- Timezoneを選択
- Asiaを選択
- Tokyoを選択
- Finish
[top]
- 設定をせずにssh接続しようとすると、エラーになる(Windowsのコマンドプロンプトの操作)
>ssh pi@raspberrypi.local
ssh: Could not resolve hostname raspberrypi.local: \202\273\202\314\202\346\202\244\202\310\203z\203X\203g\202\315\225s\226\276\202\305\202\267\201B
- 起動ディスクの作成まで戻って、SSH接続を有効に設定しておかなければならない
- sshで一度間違えて繋いでしまうと、sshのキーが登録されてしまうので、再接続時にエラーになる
- 起動ディスクを作り直した時も同様にエラーとなる
>ssh pi@raspberrypi.local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for raspberrypi.local has changed,
and the key for the corresponding IP address ****:****:****:****:****:****:****:****
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:NqarhEvxcj/ZCDpCFZw1MkQLyweWOpQJaKromqpER+c.
Please contact your system administrator.
Add correct host key in C:\\Users\\K.I/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\K.I/.ssh/known_hosts:1
ECDSA host key for raspberrypi.local has changed and you have requested strict checking.
Host key verification failed.
>ssh-keygen -R raspberrypi.local
# Host raspberrypi.local found: line 1
C:\Users\K.I/.ssh/known_hosts updated.
Original contents retained as C:\Users\K.I/.ssh/known_hosts.old
- Windowsで、フォルダをSambaの共有フォルダへコピーしようとするとエラーになる
store dos attributes = no
- で、Sambaを再起動すれば、コピーできるようになった
$ sudo apt install nodered
:
:
dpkg: error processing archive /tmp/apt-dpkg-install-p0KZq2/178-nodered_2.2.3-2_armhf.deb (--unpack):
new nodered package pre-installation script subprocess returned error exit status 5
Errors were encountered while processing:
/tmp/apt-dpkg-install-p0KZq2/178-nodered_2.2.3-2_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
[top]
- 最終的に、以前の機能を取り戻すことが出来たので良かった。
- 設定を見直したので、かなり安定動作するようになったと思う
- RaspberryPi Zeroをもう一個手に入れたら、いろいろ弄ってみようと思っていたが、
- 全然、手に入らなくなったのと、動作が不安定だったので、
- 手をこまねいているうちに、バックアップを取り忘れてしまった。
- 以前のように、簡単に入手できるようになる日は来るんだろうか。。
[top]
[電子工作関連に戻る]