Raspberry pi Zero で オフィス環境の可視化 その8 ファン交換
2019-12 に、Raspberry pi 3B+ をセットアップしました。 pongsuke.hatenablog.com
問題なく動いているのですが、冷却ファンがうるさいです。
どうも、カタカタ音がします。 グリースを塗ったりすれば治りそうですが、面倒なので交換しました。
2個 Raspberry Pi DCブラシレス冷却ファンヒートシンク冷却ラジエータコネクタRaspberry Pi 2 / Pi 3 / 3B +およびPiゼロ/ゼロWまたはその他のロボットプロジェクト用の1対2インターフェース3.3V 5Vを分離 Amazon.co.jp: 2個 Raspberry Pi DCブラシレス冷却ファンヒートシンク冷却ラジエータコネクタRaspberry Pi 2 / Pi 3 / 3B +およびPiゼロ/ゼロWまたはその他のロボットプロジェクト用の1対2インターフェース3.3V 5Vを分離: パソコン・周辺機器
2つで、768 税込 でした。
RPI3B+ が余っていたので、それを使用した流れでした。 セットアップした際には、動作が早くて、セットアップも早くて、満足していたのですが、 こうなると、ファンレス・低電力で動く RPI Zero などにしておけばよかったかな・・・なんて思ったりします。
Sipeed Tang primer を試す
TANG PRIMER という、FPGAの入門ボードみたいなの?を試します。
スイッチサイエンスから購入したのですが、商品名が Tang premier
となっています。
公式のガイド
Tang Primer Documentation :: Documentation for Tang Primer
Getting started を見ると、
- Requirements
- Installing Tang Dynasty IDE
- Installing USB Driver
- Getting to Blinky
となている。
ハードウェア構成
下の方にPINに関する詳細PDFがあります。
https://github.com/kprasadvnsi/tang-doc/releases/download/1.0.0/sipeed-tang-primer-pins.pdf
データシート
https://media.digikey.com/pdf/Data%20Sheets/Seeed%20Technology/102110202_Web.pdf
先に目を通しておきます。
IDE のダウンロードとインストール
ダウンロードの際に、キャプチャが有るのですが、なかなか難易度が高かったです・・・。
https://dl.sipeed.com/TANG/Primer/IDE
Installing USB Driver
そもそもわかっていないのですが、どうやら microUSB でつなぐようです。
USBで Windows10 パソコンと繋いで、デバイスマネージャーを確認しました。
右クリック から、ドライバーの更新、手動更新で、IDEインストール先のドライバーを指定します。
私の環境では C:\Anlogic\TD4.4.433\driver\win8_10_64
でした。
再起動して、再確認。
警告が出ています・・・
このデバイスに必要なドライバーのデジタル署名を検証できません。ハードウェアまたはソフトウェアに最近加えられた変更により、正しく署名されていないファイルや破損したファイルがインストールされた可能性があります。また、出所の不明な悪意のあるソフトウェアであることも考えられます。 (コード 52)
テストモードを試す
PS C:\WINDOWS\system32> bcdedit /set TESTSIGNING ON 要素データを設定中にエラーが発生しました。 この値はセキュア ブート ポリシーによって保護されているため、変更または削除できません。
仕方ないので、セキュアブートを無効しました。
認識の確認
IDE を立ち上げて、Download デバイスが出てくることを確認。
Getting to Blinky
サンプルコードを実行します。
git を Download して、Project > Open Project から Tang_FPGA_Examples-master\0.LED\prj\led.al
を選択。
一旦 Run する。
led.bit
が生成されるので、いよいよ読み込ませる。
Download から、 Add して、 Run
すると、RGB Led が、光りだします。
チュートリアルには、既知の不具合により Speed は 400kbps じゃないと動かない、、、と書かれていますが、1Mbps でも、動きました。
コードを見る
io.adc
set_pin_assignment {CLK_IN} { LOCATION = K14; } ##24MHZ set_pin_assignment {RST_N} { LOCATION = K16; } ##USER_KEY ## RGB LEDs, 3 pins set_pin_assignment {RGB_LED[0]} { LOCATION = R3; } ##LED_R, R3 set_pin_assignment {RGB_LED[1]} { LOCATION = J14; } ##LED_G, J14 set_pin_assignment {RGB_LED[2]} { LOCATION = P13; } ##LED_B, P13
led.v
module led ( input wire CLK_IN, input wire RST_N, output wire [2:0]RGB_LED ); parameter time1 = 25'd24_000_000;//¾§ÕñΪ24Mhz reg [2:0]rledout; reg [24:0] count; reg [1:0]shift_cnt; initial begin count=25'b0; rledout=3'b1; shift_cnt=2'b0; end always @(posedge CLK_IN)begin if(RST_N==0)begin count <= 25'b0; rledout <= 3'b1; shift_cnt <=2'b0; end if(count == time1) begin count<= 25'd0; if(shift_cnt==2'b10)begin rledout <= 3'b1; shift_cnt <=2'b0; end else begin rledout <= {rledout[1:0],1'b0}; shift_cnt <= shift_cnt + 1'b1; end end else count <= count + 1'b1; end assign RGB_LED = rledout; endmodule
そもそも、オンボードのフルカラーLEDの制御はどうするのか? という話ですが、上記のPDFを見ると 書いてあります。
R3 red
J14 green
P13 blue
Volumio セットアップ 2020-02
むかーしセットアップした Raspberry + ハイレゾ対応?DAC マシンの Volumio update を行ったら、ファイルシステムをマウントできなくなった。
稼働時間から考えて、MicroSCの破損だと思われる。
オフィス環境の可視化どうよう、USBにしてみたり、Readonly にしても良いのだが、32GB の microSD が余っているので、とりあえず microSD で再セットアップする。
ISO ダウンロード
Download |Get Started | Volumio
焼き付ける
Once download has finished, you’ll have a zip file Extract the downloaded zip file and you’ll have a .img image file Download and install Etcher, which will write Volumio to your SD Card Open etcher, and click on “Select Image”. Now select the Volumio .img file Insert the MicroSD Card on your computer, you could use an external card reader or the SD slot if your computer has one. Click on Select drive, and select the SD Card \ SD Card reader. To be safe, unplug every External USB Drive you may have connected to your PC and make sure that the device name correspond to the microSD card Click “Continue” and when ready, hit “Flash” When the operation has finished (it may take up to 10 minutes)close Etcher and eject the SD card Done! Volumio is now on your SD Card!
raspbian 同様、こちらでも Etcher を使えと言っている。
ドキュメント
SSH
volumio.local/dev から有効化する。
volumio / volumio
IPの設定
GUIから行う。
ただ、設定したところ「ネットワークの設定に成功!」と表示されるものの、どうも失敗している模様。
sudo reboot したところ、正常に反映されました。
作業時間 30分ほど
QC35C を試す
いつ買ったのが思い出せませんが、QC35C
が、手元にあったので、試します。
3.5 inchi です。
hdmi 接続
GPIO に挿して、hdmi をつなぎます。
普通に、hdmi モニターとして動作します。
タッチパネル
ドライバーを入れましょう。
How to install the LCD driver of Raspberry Pi
を見て、従います。
1.)Step1, Install Raspbian official mirror
raspbian os を入れなさいということですから、入れましょう。
2.) Step2, Clone my repo onto your pi
clone せよ! ということなのでしましょう。
$ sudo rm -rf LCD-show $ git clone https://github.com/goodtft/LCD-show.git $ chmod -R 755 LCD-show $ cd LCD-show/
3.)Step3, According to your LCD's type, excute the corresponding driver:
LCDの種類に応じて、適切なファイルを実行せよとのこと。
どれだろうと、調べていると、どうやら MPI3508_480_320-show
が該当するらしい。
$ sudo ./MPI3508_480_320-show
中身を見たたら、
sudo cp -rf ./boot/config-35-480X320.txt /boot/config.txt
とかしているけど、そんなファイルは、無い。
rasipban buster には、対応していないのではないかと思いながらも、config-35-480X320.txt
拾ってきて使ってみる。
$ cd ./boot/
$ wget https://raw.githubusercontent.com/lcdwiki/LCD-show-ubuntu/master/boot/config-35-480X320.txt
$ sudo ./MPI3508_480_320-show
勝手に再起動した後、タッチは有効になったが、ずれている状態。
キャリブレーションファイル
アレコレして、結果的に動いたのがこれ。
$ cat /etc/X11/xorg.conf.d/99-calibration.conf Section "InputClass" Identifier "calibration" MatchProduct "ADS7846 Touchscreen" #Option "Calibration" "233 3945 183 3939" Option "Calibration" "3936 227 268 3880" Option "SwapAxes" "1" Option "InvertY" "1" EndSection
コチラ を使用させていただきました。
neuralassemblyのメモ: Raspberry PiのGPIOが引き出せる小型タッチスクリーンが届いたので電子工作に使ってみた
Raspberry pi Zero で オフィス環境の可視化 その7 K-30破損? mh-z19 へ切り替え
K-30 破損?
K-30 が、ずっと 0 を出すようになってしまいました。
LEDも点灯していないし、なにかおかしくなったようです。
代替センサー
手元には、mh-z19
が有るので、切り替えることにしました。
以前、pwmで動作確認を済ませていますが、なんとなく UART にしました。
制御スクリプト
pip から、 mh-z19
ライブラリをインストールできます。
$ sudo pip3 install mh-z19
動作
$ sudo python3 -m mh_z19 {"co2": 952}
なお、ライブラリをインストールする際には mh-z19
で、インポートするライブラリ名称は mh_z19
となっています。
かたやハイフン、かたやアンダーバーです。
Python 内部で使用する
import mh_z19 result = mh_z19.read() co2 = result['co2']
これに、データベース接続などして、保存します。
起動には、やはり sudo 必要です。
Raspberry pi リードオンリー化のテスト
Raspberry pi Busbet OS での、microsd read only 化に挑戦します。
Andreas さんのやり方をそのまんま真似してみます。
Make your Raspberry Pi file system read-only (Raspbian Buster)
私は、Raspberry pi zero w を使用します。
はたして、うまくいくかな?
コマンドメモ
コピペで繰り返す用
$ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get remove --purge triggerhappy logrotate dphys-swapfile $ sudo apt-get autoremove --purge
/boot/cmdline.txt
の行末に追加
fastboot noswap ro
ロガーの変更
$ sudo apt-get install busybox-syslogd
$ sudo apt-get remove --purge rsyslog
今後は sudo logread
を使用してね! とのこと。
/etc/fstab 改変。
ro
が追加されている。
tmpfs
が、3行追加されている。
proc /proc proc defaults 0 0 PARTUUID=fb0d460e-01 /boot vfat defaults,ro 0 2 PARTUUID=fb0d460e-02 / ext4 defaults,noatime,ro 0 1 #Also add the entries for the temporary file system at the end of the file: tmpfs /tmp tmpfs nosuid,nodev 0 0 tmpfs /var/log tmpfs nosuid,nodev 0 0 tmpfs /var/tmp tmpfs nosuid,nodev 0 0
いろいろ移動する
$ sudo rm -rf /var/lib/dhcp /var/lib/dhcpcd5 /var/spool /etc/resolv.conf $ sudo ln -s /tmp /var/lib/dhcp $ sudo ln -s /tmp /var/lib/dhcpcd5 $ sudo ln -s /tmp /var/spool $ sudo touch /tmp/dhcpcd.resolv.conf $ sudo ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf $ sudo rm /var/lib/systemd/random-seed $ sudo ln -s /tmp/random-seed /var/lib/systemd/random-seed
/lib/systemd/system/systemd-random-seed.service 改変
ExecStartPre=/bin/echo "" >/tmp/random-seed
を、Serviceセクションに追加する。
こんな感じになるはず。
3行目?に追加している。
[Service] Type=oneshot RemainAfterExit=yes ExecStartPre=/bin/echo "" >/tmp/random-seed ExecStart=/lib/systemd/systemd-random-seed load ExecStop=/lib/systemd/systemd-random-seed save TimeoutSec=30s
おまけ機能
optional としてあるところですが、実に便利なので、ぜひ導入しましょう。
設定すると、$ ro
で、 Read Only mode となり、 $ rw
で、 Read and Write mode になります。
また、ログインシェルに (ro):~$
のように、現状の mode を表記してくれます。
/etc/bash.bashrc を編集する。
set_bash_prompt() { fs_mode=$(mount | sed -n -e "s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p") PS1='\[\033[01;32m\]\u@\h${fs_mode:+($fs_mode)}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' } alias ro='sudo mount -o remount,ro / ; sudo mount -o remount,ro /boot' alias rw='sudo mount -o remount,rw / ; sudo mount -o remount,rw /boot' PROMPT_COMMAND=set_bash_prompt
やってみたら、何がおきた?
crontab が消えた
/etc/crontab に書き込む
時刻が狂った
etc/crontab に、@reboot root ntpdate -v ntp.nict.jp
を入れた。
ファイルを保存できなくなった
これはちょっと意外でした。
/home/user/ に、ファイルを書き出そうとしたら、書き出せなかった。
「書き出せるけれども、再起動したら消える」のかと、なんとなく勘違いしておりました。
タイムラプス専用のマシンを作りたくて挑戦したのですが、ファイルを保存できなくなってしまった。
なので、撮影&転送コマンドを書き換える必要が出ました。
ビフォー
#!/bin/bash today=`date "+%Y%m%d"` t_stamp=`date "+%Y%m%d%H%M%S"` ssh iot_ssh@_IP_ADDR_ "mkdir -p ./zero_w/`echo $today`" raspistill -o ./out.png scp ./out.png iot_ssh@_IP_ADDR_:./zero_w/`echo $today`/`echo $t_stamp`.png
ファイルを作成し、spc で転送していた。
アフター
#!/bin/bash today=`date "+%Y%m%d"` t_stamp=`date "+%Y%m%d%H%M%S"` ssh iot_ssh@_IP_ADDR_ "mkdir -p ./zero_w/`echo $today`" raspistill -o - | ssh iot_ssh@_IP_ADDR_ "cat > ./zero_w/`echo $today`/`echo $t_stamp`.png"
ファイルを作成する代わりに、標準出力に出して、SSHで標準入力から読み込むようにしました。
ポイントは、raspistill の -o で - を指定すると、標準出力に出せる点と、
scpではなく、ssh を使用している点でしょうか。
フリスクネオの缶に収まった zero w
ピンヘッダー給電にしたので、縦長に収まりました。
カメラマウントがブサイクに大きいけれど、別に構わない。
Raspberry pi Zero で オフィス環境の可視化 その6 マイクロSDカード破損?色々変える
2016-12-05 から稼働していたオフィス環境のログングマシン Raspberry pi zero ですが、2019年7月から動いてないことがわかりました。
Root ファイルシステムの Super block が見つからないとか、破損しているだとかのメッセージですが、fsck などでも対処できず、マイクロSDカードが破損したのではないかと考えています。
約2年半で破損したようです。
これを気に色々変えます
代替マシンは 3B+
代替マシンは 3B+ でいいかな・・・と思っています。
当初は、Zero の低電力、低価格、小型さに惹かれて Zero で各種センサーを動かしていましたが、いくつかの理由で Raspberry pi 3B+ にしようとおもっています。
1.セットアップに無駄に時間がかかる。
apt update など。
単純に遅い。
2.あまり小型化できていない
確かに本体は小さいが、センサーとケーブルを綺麗にまとめきれていないので、本体の小ささは活きていない。
USBハブも邪魔です。
3.電力はコンセントから取れている
zeroなら、モバイルバッテリーでもしっかり動く、、、のですが、オフィスに置くので、別に、そこまで低電力ではなくていいです・・・。
普通にコンセントに刺します。
4.RPI3B+ 余ってる
これがでかい。
埃をかぶり続けそうなので、使用することにしました。
5.USB BOOT したい
これが1番でかい。
そもそもマイクロSDは、常時使用には向いていません。
3B+は、デフォルトでUSB Boot 対応なので、 BalenaEtcher で、USBメモリなどに OS を焼き付ければそれで終わりです。
なお、2B Version 1.2 ``a22042``` なら、usb boot 対応らしい。
cpu info と Version 対応表
Checking Your Raspberry Pi Revision Number & Board Version - Raspberry Pi Spy
K30 co2センサー
Rpi3B+ での設定メモ
GPIO で UART を使えるようにする
raspi-config > interface options > Serial
シェルで使用する? NO
シリアルポートハードウェア? YES
$ ls /dev/ttyS0
/dev/ttyS0
サンプルを取得する
https://www.co2meter.com/pages/indoor-air-quality-links
AN137 - Interfacing Raspberry Pi to SenseAir K30 Sensor via UART. Sample Code (ZIP)
K-30.py
サンプルを一部改変しています。
python3 向けに、print を () 付きにして、 ser.write を byte 指定の b"" に変更。
resp も、int が帰ってくるようなので、そのまま受け取っています。
#rpi serial connections #Python app to run a K-30 Sensor import serial import time ser = serial.Serial("/dev/ttyS0",baudrate =9600,timeout = .5) print(" AN-137: Raspberry Pi3 to K-30 Via UART\n") ser.flushInput() time.sleep(1) for i in range(1,21): ser.flushInput() ser.write(b"\xFE\x44\x00\x08\x02\x9F\x25") time.sleep(.5) resp = ser.read(7) #high = ord(resp[3]) #low = ord(resp[4]) high = resp[3] low = resp[4] co2 = (high*256) + low print("i = ",i, " CO2 = " +str(co2)) time.sleep(.1)
BME280 湿度、温度、気圧センサー
BME280 が、設定が楽そうなので、新規に購入しました。
I2C と SPI の両方に対応している。
仕様 電源電圧 : DC 1.8~3.3V 通信方式 : I2C(最大3.4MHz) SPI(最大10MHz) 測定レンジ 温度 : -40~+85℃ 湿度 : 0~100% 気圧 : 300~1100 hPa 分解能 温度 : 0.01℃ 湿度 : 0.008% 気圧 : 0.18Pa 測定精度 温度 : ±1℃ 湿度 : ±3% 気圧 : ±1hPa I2Cアドレス SDO LOW : 0x76 SDO HIGH: 0x77
i2C でやる
なんとなく、i2c にします。
配線
ラズパイの場合、本体のプルアップ抵抗が有るので、抵抗は不要とのこと。
I2C用のプルアップ抵抗は未実装です。
Raspberry Piで使う場合はこの基板にプルアップ抵抗は不要です。 (Raspberry Pi基板上にI2Cのプルアップ抵抗が実装済みのため)I2Cアドレスの設定方法
I2Cアドレスは、
SDO端子をGNDにつなぐと0x76
SDO端子をVioにつなぐと0x77
になります。必ずどちらかにつないでください。
うーん、、、なんとなく、SDOを、GND にしました。
(あとから気が付きましたが、サンプルスクリプトは、0x76 なので、GNDおすすめ)
BME280 | RPI3B+ |
---|---|
SDO, GND | GND |
SCK | I2C_SCL1 |
SDI | I2C_SDA1 |
CSB,Vio | 3.3V |
Vcare | なし |
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 --
スクリプト
スイッチサイエンスのスクリプトを、一部改変して使う。
BME280/bme280_sample.py at master · SWITCHSCIENCE/BME280 · GitHub
ライブラリ 追加
$ pip3 install smbus2
スクリプト修正
print を () で囲む。
起動
$ python3 bme280_sample.py temp : 22.06 ℃ pressure : 1027.39 hPa hum : 32.81 %
失敗
どうにも気温が高くなりすぎています。
ケースの中に RPI3B+ を入れておいたのですが、触ってみると、ケース全体が温かい・・・
どうやら、RPI3B+ の発熱で、ケース自体が温まり、センサーにも影響したようです。
PiZero では起こらなかったことなので、RPI3B+ を使用するのは、発熱のデメリットも有るようです。
暫くは、ケースを開けて様子を見ようと思います。
追記
ケースを開けましたが、ケース自体が温まってしまうので、どうにも狂います。
仕方ないので、センサーをケースから外し、横に置く形式にしました。