大昔のraspberry pi B+に最新イメージを入れてみた

サーボモーター駆動用のラズパイとして、捨てないで残存してた多分10年ぐらい前のほぼ初代のラズパイを引っ張ってきて、raspberry pi imagerでsdカードにヘッドレスイメージ書き込んでブートして見たらうまく起動。この時代のラズパイはwi-fiも付いてないから今となっては希少な有線LAN接続。その分cpu負荷も少ないだろうから逆に貴重です。写真にはまだDACボードがアタッチされた状態ですが、これは不要になります。

イメージ書き込んだら、直後にsshという名前の空ファイルを書き込んだsdカードのトップディレクトリに入れてsshを有効化します、これやらないとssh接続を拒絶されます。

ssh接続時しようとした時にHost Key違うよメッセージが(Host key verification failed.)出るから以下でキーをリセットする。

$ ssh-keygen -R raspberrypi.local

メモリはラズパイゼロと同じく500MBしかないからデスクトップは厳しい。

スクリーンショット 2021-10-05 10.14.42.png

 

以前使っていたi2s DACはこちら、PCM5102使ってます。

 

admin

サーボモーター駆動

ラズパイのアプリケーションの定番の一つだろうけど、リモコンでサーボモーター駆動をやってみたい。目的はwebカメラの向きのコントロール、音声ビーム機能と組み合わせると、話者の方向に自動的に向けるようにもできるだろうけど、機能としては独立だから、まずはマニュアル操作をやってみることだろう。

 

admin

Apacheの再インストール(@raspberry pi)

1. 依存関係にあるパッケージを検索して削除、

$ dpkg –get-selections | grep apache

apache2 install

apache2-bin install

apache2-data install

apache2-utils install

libapache2-mod-php7.3 install

$ sudo apt-get remove –purge apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.3

 

2. Apacheを再インストールします

$ sudo apt install apache2

libapache2-mod-php7.3も再インストールします

$ sudo apt install apache2 libapache2-mod-php7.3

 

admin

(Python) バックグラウンド処理での問題

rc.localに入れたPythonスクリプト(gpio初期化、co2センサーアクセス、gpio(led)制御、mysql書き込み)が正常に実行されない。

・処理の最初(gpio初期化からgpio制御まで)は動作していているから、おそらくmysqlへのアクセスで失敗している。うまくいくこともあるからタイミング問題であろう。多分pythonからアクセスに行ってもmysqlが立ちあがっていないんだろう、例外処理入れてないから推測ですが。

・一番安易に時間待ち(5秒)入れて見て問題ない様子、それほど長くは待つ必要はないだろうから。もともとco2センサーが安定するまでには2~3分必要というから、mysql起動待ちではなくセンサー安定待ちでその程度の時間待ちを入れても良さそう。

 

admin

ヘッドレスは地雷

Raspberry piにwi-fi追加しようとしてconfファイルいじってたら、使えてたwi-fiにもつながらなくなった。

wi-fiつながらないと他に手段なく、① デスクトップ無し、② 外部モニター/キーボード無しなのでアクセス手段が無くなって手出しできなくなります。

imageバックアップしてたからリカバリー出来たけど、もしそれが無かったら再構築するしかなさそう。

Raspberry pi標準のイメージ書き込みツールはカスタムイメージも書き込みできるので、コンソールでddコマンド打つよりも簡単かも知れません。

 

admin

Volumioの最新版

ラズパイで稼働しているvolumioが不調(おそらくsdカードが寿命か)になってきたので、現行最新版を入れてみた。

ビューは結構変更されてて、日本語メニューも選択できるようになっています。

Spotify用のプラグインもあるけど、これは有料アカウントでないと使えないらしいので諦めました。macからairplayでvolumio選択もあるけど、これはつながるだけで音質は望めない。

もともとI2S-DACは音がいいので、ラズパイゼロと組み合わせた音楽サーバーは現状最強だと思います。

 

admin

SDカードイメージのバックアップについて

Raspberry piのイメージバックアップでMacのコンソールから行うやり方。ddコマンドが使えるのでlinuxと同じと言えばそれまでですが。

対象のsdカードを特定して、

$ diskutil list

〜〜部分〜〜

/dev/disk2 (external, physical):

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:     FDisk_partition_scheme                        *8.0 GB     disk2

   1:             Windows_FAT_32 ⁨boot⁩                    268.4 MB   disk2s1

   2:                      Linux ⁨⁩                        7.7 GB     disk2s2

アンマウントして、

$ diskutil umountDisk /dev/disk2

ddコマンドでバックアップします

$ sudo dd if=/dev/disk2 of=raspi-backup.img bs=1m

進捗は別の端末をcommand+nで開いて、

$ sudo killall -INFO dd

で、実行中のコンソールに、

1286+0 records in

1286+0 records out

1348468736 bytes transferred in 297.716017 secs (4529379 bytes/sec)

のように表示できます。ddもkillallもmacのパスワード要求されます。

転送速度は4MB/secぐらいだから、sdカードのサイズにもよりますが時間はたっぷりかかります。

進捗はFinderでimgファイルのサイズを見ても想像はつくのですが。

 

admin

co2 センサー(NDIRとは、Non Dispersive InfraRed(非分散型赤外))MH-Z19BをPythonから使う

・センサーの動作確認

$ sudo raspi-config

UARTで使うので初期状態では有効になっていないシリアルインタフェースを有効にする

特に設定なしでそのまま使えるmh-z19をインストール

https://test.pypi.org/project/mh-z19/

$ sudo pip3 install mh-z19

シリアルインターフェースはroot権限ないと動作しません。

$ sudo python -m mh_z19

{“co2”: 934}

キャリブレーション(最低値400ppm付近にするだけみたいです)

$ sudo python -m mh_z19 –zero_point_calibration

Call Calibration with ZERO point.

$ sudo python -m mh_z19

{“co2”: 404}

co2濃度以外の数値も吐き出せるから、このライブラリは値を辞書形式で出力しています、

パラメータに—all指定でco2濃度以外も測定できます

$ sudo python -m mh_z19 –all

{“co2”: 405, “temperature”: 31, “TT”: 71, “SS”: 0, “UhUl”: 0}

Python中ではこういう風に使います

>>> import mh_z19

>>> mh_z19.read()

{‘co2’: 572}

 

admin

raspberry piのgpioを使う

GPIO用のライブラリRPi.GPIOは標準で組み込まれています

  1. Pythonからのアクセス方法

——————————————

# BCM PIN ASSIGN

# ledは23:blue, 24:yellow, 25:red

BLUE = 23

YELLOW =24

RED = 25

# Shut down sw is assigned to 17

SHUTDOWN = 17

def init():

    # initialise Pins

    GPIO.setwarnings(False)

    GPIO.setmode(GPIO.BCM)

    GPIO.setup(BLUE, GPIO.OUT)

    GPIO.setup(YELLOW, GPIO.OUT)

    GPIO.setup(RED, GPIO.OUT)

    GPIO.output(BLUE, True)

    GPIO.output(YELLOW, False)

    GPIO.output(RED, False)

# switchの割り当てとイベント待ち

    GPIO.setup(SHUTDOWN, GPIO.IN)

    GPIO.setup(SHUTDOWN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

    return

def handle_sw_input():

    def switch_callback(gpio_pin):

        print(‘sw was pushed’)

    #

    GPIO.add_event_detect(SHUTDOWN, GPIO.FALLING,bouncetime=250)

    # when the sw was pushed, call the ‘call back routine’ 

    GPIO.add_event_callback(SHUTDOWN, switch_callback) 

    return

 

・イベント待ちのサンプルはこちらから

https://qiita.com/maoutokagura/items/9aef5e23167ce2bc1d10

 

  1. 個別プログラムgpioのインストール

動作確認用が主目的と思いますが

$ sudo su –

# wget https://project-downloads.drogon.net/wiringpi-latest.deb

# dpkg -i wiringpi-latest.deb

# exit

$ gpio -v

gpio version: 2.52

Copyright (c) 2012-2018 Gordon Henderson

This is free software with ABSOLUTELY NO WARRANTY.

For details type: gpio -warranty

Raspberry Pi Details:

  Type: Pi Zero-W, Revision: 01, Memory: 512MB, Maker: Sony 

  * Device tree is enabled.

  *–> Raspberry Pi Zero W Rev 1.1

  * This Raspberry Pi supports user-level GPIO access.

こういう風に設定します。

$ gpio -g mode 23 out ; -g bcmモード指定の意味

$ gpio -g write 23 0 ; 

GPIOのピン指定にはBOARDとBCMあるので紛らわしいのですが、以下BCM指定時のピン名称です。BOARDはその名の通り物理ピン番号指定のようです。

 

admin

Python 3を使う@raspberry pi zero

パッケージの互換とか面倒になって来たので、python3を標準とするように変更。元々のイメージにはpython2とpython3はインストール済みです。

・シンボリックリンクの切り替え

$ cd /usr/bin

$ sudo unlink python

$ sudo ln -s python3 python

でpythonコマンドでpython2.7でなくpython3.7が呼び出されます。この先考えるとpython3の方が確実に便利になる筈。

・mysqlへの接続モジュール追加インストール

python3にしたらpythonスクリプトからはmysqlに接続できなくなって、python3用としてのmysqlcliantをインストール

$ sudo apt-get install python3-dev ; 事前準備でこのドライバー必要と

さらにpython3でpip使えないので、

$ sudo apt install curl ; curl入ってないのでインストール

$ curl “https://bootstrap.pypa.io/get-pip.py” -o “get-pip.py” ; ソースを持ってくる

$ sudo python get-pip.py ; pipインストール

ここまでが準備で、

pipがインストールできたのでmysqlclientをインストール

$ pip install mysqlclient

 

admin