しろふくろうず (しろふくろーず)

修繕に関するDIYをメインに趣味や時事ネタなども

Raspberry Pi OS の buster と bullseye のi2cアドレスレンジ範囲の違いと、明るさセンサー使用の巻

こんにちは。DIYフクロウです(・ω・)ノ

 

Raspberry Pi OS の buster と bullseye のi2cアドレスレンジ範囲の違い 備忘録です
(buster 32bit とbullseye 32bitにて確認)

 

図において

左がレガシーのBuster、右が現行のBullseryeです。

seeed社のGrove Base HAT for Raspberry Pi(0x04アドレスのSTM32版) のアナログ入力が使えなくて(=動かない)

見比べたところ、

Bullseyeでは0x03,0x04,0x05,0x06,0x07の割り当てが無いから使えないの(・ω・;)

(右図の赤字の箇所がBullseyeから割り当てなしI2Cアドレス)

 

seeed社のGrove Base HAT for Raspberry Pi

STM32版はファームウェアを書き換えて0x08以上にしないと無理っぽいですね
(しろふくろうはすぐには無理です)

 

現行のMM32版のGrove Base HATは、I2Cアドレスが0x08なので BullseryeでもBusterでも

どちらでも使えると思います。

 

ということで、

/home/pi/grove.py/grove/adc.pyの57行目:

def __init__(self, address = 0x08):

の0x08は使用するGrove Base HATがSTM32かMM32かによって、I2Cアドレスに書き換えましょう。(STM32=0x04、MM32=0x08)

 

書き換えたら、/home/pi/grove.py の階層で

sudo pip3 install . を再度して反映させましょう。

 

し忘れると、/home/pi/grove.py/grove/の階層にある

grove_light_sensor_v1_2.py 等のアナログ入力(adc.py)を使うpython3サンプルで

Check whether I2C enabled and   Grove Base Hat RPi  or  Grove Base Hat RPi Zero  inserted

のエラーが出てしまうので、反映は必須です (;ω;)

 

ちなみに、OKな場合は、次の通り出力されます。

pi@raspberrypi:~/grove.py/grove $ python3 grove_light_sensor_v1_2.py 
Hat Name = 'Grove Base Hat RPi Zero'
Usage: grove_light_sensor_v1_2.py <pin>
 <pin> could be one of below values
       in the pin column for ADC function
   And connect the device to corresponding slot
==============
 pin | slot
==============
  0  | A0   
  2  | A2   
  4  | A4  

 

引数0を付けた場合、A0ポートに接続した明るさセンサーの値が数値で出ます:

pi@raspberrypi:~/grove.py/grove $ python3 grove_light_sensor_v1_2.py 0
Hat Name = 'Grove Base Hat RPi Zero'
Detecting light...
Light value: 37
Light value: 36
Light value: 36
Light value: 36
Light value: 36

 

wiki.seeedstudio.com

 

以上となります(`・ω・´)v

 

ラズベリーパイ Zero / Zero 2W / 3A スワップサイズの変更(拡張) bullseye 32bitにて

こんにちは。DIYフクロウです(・ω・)ノ

 

ラズベリーパイ Zero / Zero 2W / 3A スワップサイズの変更(拡張) 備忘録です
(bullseye 32bitにて確認)


0. LXTerminalを起動

1. スワップの状況を確認

free -h

→Swapのtotalが99Mi

 

2. スワップの設定を編集する

sudo nano /etc/dphys-swapfile

 

CONF_SWAPSIZE=100 を 1024とかに変える

Ctrl + o (上書き保存)

Ctrl + x (nanoエディタ終了)

 

3. スワップのサービスを再起動(停止、スタート)する

sudo service dphys-swapfile restart

(restart = stop + start なので少し待つ)

 

4. スワップの状況を再確認

free -h

→Swapのtotalが1.0Giに変わっている

以上となります(`・ω・´)v

Planex Cloud Pi 2 P2Pプラットフォームソフトウェア を1年使ってみた感想

こんにちは。DIYフクロウです(・ω・)ノ

 

令和ゴネン、ウサギ年ですな・・・フクロウ年は永遠に来ない・・・


Planex Cloud Pi 2 をラズベリーパイで使った感想です。

個人的に、「点数」や
「使える」「使えない」や
「いけてる」「いけてない」で書くならば・・・

LTE回線で、リモートSSH接続は割とできるが、性質上、VNC接続は不安定で難しい感じなので、
1000~2000円で購入できたら、月額費用かからない点が良いのでSSH保守用に〇
2000円~3500円で購入できたら△
それ以上なら うーん躊躇しちゃうかも。


うーん、〇△ という感想になってますね (・ω・;ノ)
SSHは下記の条件を守れば、そこまで切断しやすい訳でもないので、
そこそこ使える製品だと思います!


1.ラズパイからの応答が無くなる件(・ω・;)

接続する際はP2PTunnelをCONNECTION SUCCEED UID した後に、TeraTerm等のターミナルを起動してSSH接続する順番でつながりますし、切断する際は、TeraTermを切断してからP2PTunnelを切断すればフリーズしないです。
つまり切断する際に、先にP2PTunnelを切断するとPeer-to-Peerのトンネルがなくなり、確実にTeraTermがフリーズします。(レールの上に車両を置いたのに、車両とレールを撤去する際に、レールを先に外すのは順番的にちょっと違うのでは?という感じでしょうか)

そうはいっても、操作を間違ってP2PTunnelのウィンドウがフリーズしたときはタスクマネージャーで強制的に切れば大丈夫でした。(・ω・;)

また、長時間接続するとフリーズしている場合があるのは、セキュリティ的にリモートをつなぎっぱなしはどうなのか?という面もあるので、使ったあとはまめにSSHを切断する運用が良いと思います。

 

2.ラズベリーパイOS 64bit環境下で動作(・ω・)♪

 

非公式ですが、Raspberry Pi OSが64bit(bullseye)の場合は、
Jetson Nanoのを使って内部のパス等を睨めっこしながら修正すればPiで使えました。
(Jetson Nano用というのは64bitという意味だったようです)


3.まとめ
1年以上連続稼働していますが、個人的には特に問題なくPiのリモート接続に使えて役立っています。

 

今後の製品改良でVNCの接続が安定する事に期待します。(・ω・)ノ

ラズベリーパイ 3A 3B 3B+ 4B Zero2W へのTensorflow導入メモ

こんにちは。DIYフクロウです(・ω・)ノ


ラズベリーパイ 3A 3B 3B+ 4B Zero2W のRaspberry Pi OS に

Tensorflowを導入するときのメモです。

■Buster 32bit armv7l (Python3.7 cp37)

 → 対応

  pip3 install tensorflow (pip3の場合は1.13か1.14?)もしくは
  PINTO0309 (Katsuya Hyodo) 様のビルドした  Tensorflow1系 1.14 1.15、TF2系の2.0 2.1 2.2 2.3 2.4 2.5 のcp37を使用


■Bullseye 32bit armv7l (Python3.9 cp39)

 → 非対応(;ω;)

■Bullseye 64bit aarch64 (Python3.9 cp39)

 → 対応

  PINTO0309 (Katsuya Hyodo) 様のビルドした TensorFlow 2.5 2.6 2.7 2.7 2.8 2.9 2.10 の 64-bit 版 を使用

github.com


細かい導入手順はここでは割愛・・・そこも重要(・ω・;)

ちなみに、
    from typing_extensions import Protocol
ModuleNotFoundError: No module named 'typing_extensions'

のエラーが発生したときは
pip3 install typing_extensions
で解決しました。

以上となります(`・ω・´)v

ラズベリーパイへのVNC接続で Cannot currently show the desktop

こんにちは。DIYフクロウです(・ω・)ノ

 

お久しぶりの投稿です~


Bullseye 32bit/64bit では改善済みですが、Buster 32bit 備忘録として。

ラズベリーパイ4(Buster 32bit)で HDMI出力先にディスプレイを接続しない状態で

VNCでリモート画面確認しようとしたら、

Cannot currently show the desktop

と表示されてしまい、起動したのかもよくわからない状態になってしまいました。

 

解決方法

HDMIをセーフモードにする

 →解像度XGA固定となってしまう?

 

HDMIダミープラグを接続する

 → 追加購入が必要となるが、正解でした。
   

   microHDMI対応の小型ダミープラグがあると最高なのですが
   Amazon見ても現状無い感じなので・・・

   microHDMIオス- HDMIメス の変換にHDMIダミープラグ(オス)を接続したら
   VNC経由で画面が表示されるようになりましたとさ。

 

 

 

 

ラズベリーパイに接続した温度センサーの数値をAzureのクラウドストレージに保存してみました

こんにちは。DIYフクロウです(・ω・)ノ

 

お久しぶりの投稿です~

 

Pythonで動かして学ぶ!あたらしいIoTの教科書 株式会社VOST著

 

を読んで、なんとか、

Microsoft Azureのクラウドストレージに温度(数値)をアップロードできました。

Azureで苦労し、顔文字までIoTになってしまったフクロウです (IoT)ノ

Azureは無料試用版で試しています。

 

本書ではI2C温度センサー(ADT7410)をRaspberry Pi に接続した例ですが、

DIYフクロウはI2C温度センサー(AM2320)を使いました。(・ω・v)

 

やっぱり、本書の動作環境のとおりRaspberry Pi は Stretch (Python3.5.3) でないとダメでした。

Buster (Python3.7.3) ですとchapter5.pyで次のようなエラーが出てあきらめました。

(ラズパイ4で進めていくとP.111でプログラムを実行するとエラーで行きづまります。)

 

import iothub_client
File "/home/pi/.local/lib/python3.7/site-packages/iothub_client/__init__.py", line 1, in <module>
from .iothub_client import *
ImportError: libboost_python-py35.so.1.62.0: cannot open shared object file: No such file or directory

 

ムムムム・・・(;ω;)

 

ということで、ラズパイ4BはBuster (Python3.7.3) なので難しいと思います。

ラズパイ3BのRaspbian OSがStretchの環境で行いました。(・ω・;)

 

そのほか、気になった点

P.95 ④クリック:

 IoT Hub が、「おすすめ」に無いときは「すべて表示」から探しましょう。

 

P.100 ④クリック:

 Stream Analytics job が、「おすすめ」に無いときは「すべて表示」から探して作成しましょう。

 

P.103 Stream AnalyticsのジョブでIoT Hub の新規入力設定:

 パーティションキーは 空白 でOK。

 

P.105 出力の設定

 サブスクリプションが無料試用版だと、ストレージアカウントが選べない・・・

 →手動で行えば突破できました!

 ここが一番困りました・・・Azure慣れておらず(;ω;)

 

詳細は、

・「サブスクリプションからストレージを選択する」から「ストレージ設定を手動で行う」に丸ポチを変える

・ストレージアカウントを手動で入力(P.92で設定した名前)し、ストレージ アカウント キーは、左上の「三」クリックして、「ストレージアカウント」をクリックして、自分で設定したストレージアカウントの名前(P.92で設定した名前)をクリックして左のメニューの設定にある「アクセスキー」をクリックすると、key1のキーやkey2のキーがありますので、key1のキーをコピーして貼り付ける。

・コンテナーは「既存のものを使用」にして、P.94の5.3項で作成したコンテナーの名前を入れる。

 

これで突破できると思います。

 

なお、cyapter5.pyのAM2320化改造は

頭に追加:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

 

補足:

CONNECTION_STRING = "xxxxxx" のxxxxxは

CONNECTION_STRING = "HostName=xxxxxx" でした。(・ω・;)

 

削除:

bus = smbus.SMBus(1)

追加:

i2c = smbus.SMBus(1)
address = 0x5c

 

追加:

def am2320():
    try:
        i2c.write_i2c_block_data(address,0x00,[])
    except:
        pass
    time.sleep(0.003)
    i2c.write_i2c_block_data(address,0x03,[0x00,0x04])
    time.sleep(0.015)
    block = i2c.read_i2c_block_data(address,0,6)
    hum = float(block[2] << 8 | block[3])/10 # 湿度
    tmp = float(block[4] << 8 | block[5])/10 # 温度
    return tmp

 

 削除:

# 温度を読み込む関数
def adt7410():
    block = bus.read_i2c_block_data(0x48, 0x00, 2)
    data = (block[0] << 8 | block[1]) >> 3 # 13ビットデータ
    if (data >= 4096): # 温度が負の場合
        data -= 8192
    temp = data * 0.0625
    return temp

 

削除:

        inputValue = adt7410()

追加:

        inputValue = am2320()

        print(inputValue)

 

削除(任意):

        time.sleep(1) #1秒

追加(任意):

        time.sleep(60) #60秒

 

Thonny Python IDEを使わずにターミナルから実行してみました。

f:id:shirofukurokun:20200927153649j:plain

Raspbian_Stretch_Terminal

 

これでP.114までうまくいきコンテナーの中からCSVファイルをダウンロードすると温度が取得できました!(・ω・♪)

 

ちなみにAM2320の物理配線はI2C接続なので、次の通りジャンパーワイヤーで接続します。

f:id:shirofukurokun:20200927152330p:plain

RaspberryPi_AM2320_fritzing

ここまでお読みいただき、ありがとうございます。

以上となります(`・ω・´)v

Raspberry Pi 3 Model B SSH接続できない ⇒ 解決!

こんにちは。DIYフクロウです(・ω・)ノ

 

Raspberry Pi 3 Model Bを手に入れました!

 

Windows 10 PCからVNCによるリモートデスクトップ接続したり、

SSH接続してPythonでLチカとかして遊ぼう(訂正:勉強しよう)と思ったのですが、

TeraTermからSSH接続がうまくいかず

「ホストに接続できません」ってエラーになる。困った (IoT)ノ

 

raspbianにおいてデフォルトでSSHは無効なので、有効にしたり

起動時にSSHが自動で有効になるようにしたりしたものの、解決しない!(;ω;)

インターネットでSSH接続できない事例を参照するも、解決しない!(・ω・;)

 

PCからラズパイへping応答するので、IPアドレスは問題ないのに・・・

(ラズパイからPCへping応答しないのは別途調査・・・)

 

結局:

ダメ元でターミナルソフトをTeraTermから

Puttyに変更するとすんなりSSH接続しました(・ω・;)

 

・・・ん、TeraTermSSH接続するときのPort番号が23になっている・・・

22に変更したらTeraTermからでもSSH接続でき…ました 汗

 

完全にお疲れ様モードでした(;ω;)

 

ここまでお読みいただき、ありがとうございます。

以上となります(`・ω・´)v