にわか電子工作ファン

にわか電子工作ファンの備忘録

ラズパイ4 welcome to〜から進まない

事象
ラズパイの電源ONすると
welcome to〜 が表示された後直ぐに
ディスプレイ出力が無くなり先に進まなくなる。

原因
不明。アップグレードしたタイミングと被る気もするが定かでは無いです。

解決策
古いsdカード(古いOS)を入れたら立ち上がった。
(旧バージョンosで起動) 
ハードが壊れたのかと思っていたのでよかった。


解決策にたどり着くまでに実施検討した事
・別のマイクロsdカードにOSを入れ直し起動✖️
・ググってconfig の設定書き直し✖️
・買い直そうとも考えたが今ラズパイは高いので✖️

デジタル入力(プルアップ/プルダウン)

こんにちは、ニデコです。

電子工作を勉強のために始めました。立ち読みしていて面白そうだったので”ラズパイ自由自在 電子工作パーツ制御完全攻略 ”を参考に進めます。挫折しないようにできるところから少しずつ進めて行きます。なお部品やプログラムは思いつきで変えるので本はあくまで参考利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

11章 デジタル入力(プルアップ/プルダウン)

プルアップ、プルダウン。これはなんでやるのか意味が分からないランキングトップ3に入ります。これをなぜやる必要があるのか?(だってやらなくても動くじゃんって思う)電子工作を趣味としたい人もここで多くは挫折します。そして、にわか電子工作ファンも挫折しそうです。(にわかなので・・・)

・なんでやる必要があるのか?

VDD,GNDのどこにもつながっていない浮いた配線は他の回路の影響を受けて期待しない動きをしてしまうため。なのでそのような配線はVDDかGNDにつないで信号レベルを固定する。なお、ラズパイは内部にプルアップ、プルダウン抵抗が内蔵されており外付けで抵抗は不要。ソフトでONOFF操作できる。

・この状態は特に問題ない◯
電源(3.3V)
 |
 ◯
  | SWがON
 ◯
 |
GPIO


・この状態はどこにもつながっていない配線が出てくる☓
電源(3.3V)
 |
 ◯
  / SWがOFF
 ◯
 |⇦☓ここがどこにもつながってない。
GPIO
他の回路の影響を受けてONになったりOFFになったりする

そこで出てくる対策がプルアップ、プルダウン。

・プルアップ(通常状態がON)

・SW OFFでGPIOの電源はONの状態

・SWがOFFの時
電源(3.3V)
 |
抵抗
 |
 |ーGPIOーGND
 | ⇨◎こっちに流れる
 ◯
  / SWがOFF
 ◯ ⇩☓こっちには流れない
 |
GND
※信号は浮いてない。


・SWがONの時
電源(3.3V)
 |
抵抗
 |
 |ーGPIOーGND
 | ⇨☓こっちに流れない
 ◯
  | SWがON
 ◯ ⇩◎こっちに流れる
 |
GND

・プルダウン(通常状態がOFF)

・プルアップの逆。
・何もない状態でつなぐとショート(抵抗0で電流∞になってしまう)してしまうので間に抵抗を入れる。

・まとめ

浮いた配線は悪さをするので電位を決める必要がありその際にプルアップまたはプルダウンしておく。・・ことがなんとなく分かった。なお、ラズパイは内部にプルアップ、プルダウン抵抗が内蔵されており外付けで抵抗は不要。ソフトでONOFF操作できる。

ここまで読んでいただきありがとうございました。

デジタル入力(GPIO)

こんにちは。

電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略 ”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。17章までありますが部品を揃えたりする必要もあるようなのでできるところから少しずつ進めて行きます。
なお、部品は家にあればそれを利用、プログラムは思いつきで変えたりするので本はあくまで参考としての利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

11章 デジタル入力

・2章からいきなり11章に飛んだ理由
1章、2章まででかなり分からない言葉が増えてきました。(GPIO、プルアップ、I2Cなど、にわか電子工作ファンには厳しい)
ググってこのまま続けるのはしんどいなと本を眺めていたら11章以降に基本的な事が書かれていました。ということで、11章に飛んで本を参考にお勉強を続けたいと思います。

まずはGPIO。

・デジタル入力(ラズパイの入出力端子)

・種類
   2 5.0V
   2 3.3V
   8 GND
  26 GPIO番号2−27
   2 GPIO番号1,2※本に記載無いので使用しない。pinoutでは表記される。
 ーーーーーーーーーー
合計40ピン

・GPIO(General-purpose input/output)
 ・GPIO番号2から27 の 26本ある
 ・ON:3.3v
 ・OFF:0V
 ・GPIOピン1本あたりの最大電流は16mAまで
  ※これ知らなかった。LED光らせるの結構攻めてた。危ない。
 ・複数のGPIOピンに同時に流せる電流合計は50mAまで

・I2C(GPIO26ピンの一部と共用)
 ・複数のICと接続できる。必要ピン数は2ピン。

・SPI(GPIO26ピンの一部と共用)
 ・複数のICと接続できる。必要ピン数は5ピンだが高速。

・UART(GPIO26ピンの一部と共用)
 ・シリアル通信できる。基本1対1。2ピン必要。
  パソコンとラズパイをつないだりする。

・GPIO番号とI2C、SPI、UARTの関係

GPIO2 I2C SDA
GPIO3 I2C SCL
GPIO4
GPIO5
GPIO6
GPIO7 SPI CE1
GPIO8 SPI CE0
GPIO9 SPI MISO
GPIO10 SPI MOSI
GPIO11 SPI CLK
GPIO12
GPIO13
GPIO14 UART TxD
GPIO15 UART RxD
GPIO16
GPIO17
GPIO18
GPIO19
GPIO20
GPIO21
GPIO22
GPIO23
GPIO24
GPIO25
GPIO26
GPIO27

・ラズベリーパイのGPIOピン詳細確認コマンド(piout)

下記で確認可能
raspberry@raspberrypi:~ $ piout

pinout
・なぜコネクタのピン番号とGPIO番号が一致していないのか?

・GPIOピン名はプロセッサ(CPUに相当する部品)のGPIO番号名が表示されていてコネクタのピン番号とはリンクしていないとのこと。

・まとめ

・ラズパイにはGPIOという26本の外部入出力ピンがあり(電圧は3.3v/0V、電流は1ピンあたり16mA、またはピン合計で50mAまで)複数のデバイスと通信できるI2C(2ピン利用)、SPI(5ピン利用)とシリアル通信できるUART(2ピン利用)も具備している。
ということが分かりました。今回はとりあえずここまで。

ここまで読んでいただきありがとうございました。 

温度センサー

こんにちは。

電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略 ”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。17章までありますが部品を揃えたりする必要もあるようなのでできるところから少しずつ進めて行きます。
なお、部品は家にあればそれを利用、プログラムは思いつきで変えたりするので本はあくまで参考としての利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

2章 温度センサー

・評価部品

・ADT7410 温度センサー

何故か家にあったこれ一個を使い実験する。
複数のセンサーをi2cで制御して性能差を確認すると言う本の趣旨から外れている気もするが一個しか持っていないのだからしょうがない。

・データシートはこちら
https://www.analog.com/media/en/technical-documentation/data-sheets/ADT7410.pdf

・型番違うが類似の本語あったのでこちらも
https://www.analog.com/media/jp/technical-documentation/data-sheets/ADT7420_jp.pdf


[ADT7410のピン情報]
 ・VDD:電源(+側) 今回3.3Vとした
 ・SCL:i2c 通信のタイミングを調整する
 ・SDA:i2c データのやり取りをする
 ・GND:グランド(ー側)

 ・J1、J2:SCL,ADAをプルアップしたい場合にショートさせる。10kΩでVDDにプルアップされる。何もしていないとオープン。

 ・J3、J4:部品のI2Cバスアドレスのデフォルトは0x48。競合する場合はJ3,J4をショートさせて変更するなど対応する。今回はこの部品しか使わないので特に何もしない。

動作確認環境

raspberry@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye

raspberry@raspberrypi:~ $ python --version
Python 3.9.2

・プログラムの実行

・温度を測定するプログラム ADT7410のみ

[temp.py]

import pigpio
import datetime
import time

INTERVAL = 60

I2C_INTERFACE = 1

ADT7410_ADDRESS = 0x48 # センサ固有のアドレス

ADT7410_REG_TEMPERATURE_HIGH = 0x00
ADT7410_REG_CONFIGURATION = 0x03

pi = pigpio.pi()

#ADT7410
# (ADT7410を初期化)
adt7410_h = pi.i2c_open(I2C_INTERFACE, ADT7410_ADDRESS)

# (温度の分解能を最大(16bits)に変更
pi.i2c_write_byte_data(adt7410_h, ADT7410_REG_CONFIGURATION, 0b10000000) # 16bits

print('"ADT7410"')

while True:
    #ADT7401
    (val_count, val) = pi.i2c_read_i2c_block_data(adt7410_h, ADT7410_REG_TEMPERATURE_HIGH, 2)
    adt7410_temp = int.from_bytes(val, 'big', signed=True) / 128
    print(f'{adt7410_temp:.4f}')
    time.sleep(INTERVAL)

[実行]
raspberry@raspberrypi:~ $ python3 temp.py
"ADT7410"
28.7266
29.2109
27.8906
28.2969

つまずき

★つまずき1

・pi.i2c_openでエラーがでる
 ・原因:ラズパイのi2c機能が起動してない。
  ※本には記載が無いので注意
 (立ち上げておく事が当たり前なのかも‥)

 ・対策:ラズパイのi2c設定を立ち上げる
  (方法は下記)
  ・左上のラズベリーアイコン選択。
  ・プルダウンから設定を選択
  ・設定のプルダウンから
   “Raspberry Piの設定”を選択。
   エディタが開く
  ・エディタのインターフェースタブを選択
  ・i2cをON(薄い色から濃い色に変わる)

・確認には sudo i2cdetect -y 1 を実行
 ・i2cが動いてない時
raspberry@raspberrypi:~ $ sudo i2cdetect -y 1
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory

 ・i2cが動いている時 ※下記は0x48がつながっている状態
raspberry@raspberrypi:~ $ sudo i2cdetect -y 1

i2cdetect
★つまずき2

 pi.i2c_write_byte_dataでwriteエラーが出る。
・温度センサーを1個だけにしたからか?
・現在原因調査中(勉強中)・・・
  ↓(一日経過)
・原因わかりました。
 ADT7410のGNDを接続するGPIOピンの場所を間違えてました。 
 本をよく見てなかった。次回からよく見る。(ラズパイが壊れなくてよかった)

・GPIO接続状態
 ・VDD:3V3 (1)
 ・SCL:GPIO2 (3)
 ・SDA:GPIO3 (5)
 ・GND:GND (9) ※ここを見間違えてGPIO4 (7)へ接続していた。

 ・FAN(GND):(6) GND
 ・FAN(VDD):(2) 5V

・ラズベリーパイのGPIOピン詳細確認
下記で確認可能
raspberry@raspberrypi:~ $ piout

pinout
★つまずき3

温度の読み替えがわからない。
データシートでなんとかわかった気がする

・精度により2種の読み方がある
 ・13ビットでの温度読み替え
raspberry@raspberrypi:~ $ i2cget -y 1 0x48 0x00 w
0x4a0e
 ・0x4a0eの2バイト前後を入れ替えて0x0e4a
 ・0x0e4a(0b111001001010)を3ビット右シフトして0b111001001
 ・0b11001101を16で割って10進数で表すと28.5625
28.6℃ぐらい

 ・16ビットでの温度読み替え
  (今回はこっちを使っている)
raspberry@raspberrypi:~ $ i2cget -y 1 0x48 0x80 w
0x210f
 ・0x210fの2バイト前後を入れ替えて0x0f21
 ・0x0f21(0b111100100001)を128で割って10進数で表すと30.2578125

★つまずき4

pigpioプログラムの意味がよくわからない
 pi.i2c_open()
 pi.i2c_write_byte_data()
 pi.i2c_read_i2c_block_data()
つまずいたまま。
本を読み終える頃にはわかっていると良いなと・・

・感想と疑問点

・温度センサの入力電圧範囲は2.7V-5.5V。今回3.3Vを利用したが。ラズパイは5.0Vの電源もある。
 こっちを使うとどうなるんだろう。性能が上がる?
・i2cって何だろう。
・プルアッププルダウンって何だろう。しないとどうなるのか?
・pigpioの関数?についての説明がどこかにあると嬉しい

・備忘録

・スクリーンショット gnome-screenshot
 ・インストール
  raspberry@raspberrypi:~ $ sudo apt install gnome-screenshot
 ・エリア指定したスクリーンショット
  raspberry@raspberrypi:~ $ gnome-screenshot --area

・pigpioの自動起動
raspberry@raspberrypi:~ $ sudo systemctl enable pigpiod.service
raspberry@raspberrypi:~ $ sudo shutdown -r now

起動確認
raspberry@raspberrypi:~ $ sudo systemctl status pigpiod.service


ここまで読んでいただきありがとうございました。 

ラズパイ設定

こんにちは。

電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略 ”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。17章までありますが部品を揃えたりする必要もあるようなのでできるところから少しずつ進めて行きます。
なお、部品は家にあればそれを利用、プログラムは思いつきで変えたりするので本はあくまで参考としての利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

ラズパイ設定

この本を進める上で必要となるラズベリーパイの設定について記載します。
家にwifi 環境とHDMI入力可能なディスプレイがある前提の記載となります。

・評価部材

・ラズベリーパイ4の本体

本書はラズベリーパイ4で動作確認しているのでこれ一択と思います。

・ラズベリーパイ4用のキット

内容物の詳細
・Raspberry Pi OSがプリロードされた64GB Marstudy HC10 Microカード
 OSがプリロードされていていい。最初のパソコンでやる作業がなくなる。

・ラズベリーパイ4用のケース
 GPIOなど外部端子の事をよく考えられていて良い。他社を買う場合は結構適当なのがあるのでよく見て購入する必要あり。

・ファンおよびヒートシンクセット
 部屋の温度25℃ぐらいでCPUフル負荷にする場合はファンは必須。

・高品質Micro HDMI-HDMIケーブル(1.5M) x2
 1本は必須。でもデュアルモニタしないきもするので2本はいらないかも。

・5.1V 3.5A USB-C Raspberry Pi 4電源
 電源をOFFする際、電源をコンセントで抜き差しするのは面倒だし本体側でコードを抜くのも基盤に付いたコネクタが壊れそう。これはON/OFFスイッチがついていて便利。

・USB-CおよびUSB-A互換 MicroSDカードリーダー
 パソコンでmicroSDカードにOSを入れたり、カード内を編集する際に必要。しかしOSがプリロードされているmicroSDカードが付いているので要らないかも。

・キーボード(USB)、マウス(USB)

USB接続ならなんでもOKです。
しかしケーブルが鬱陶しいので下記がオススメ
Ewin®2.4kHz無線 ミニキーボードマウス付き

bluetooth版もありますがbluetooth起動前は使えないので2.4kHz無線の方が良いです。

・モバイルバッテリー(USBーC)

持ち運ぶなら必要
・5V(3A以上)のモバイルバッテリ
・バッテリーとラズパイをつなぐケーブル(ラズパイ側はUSB-C)  

立ち上げ

OSがプリロードされているのであとは本体にmicroSDを入れて
ケーブルつないで電気入れると立ち上がりあとはメニューに従っていればOKです。
わからなくなったら、ググるとわかりやすく説明されているサイトがあるので探してみてください。


ここまで読んでいただきありがとうございました。

LEDを光らす

こんにちは。

電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。17章までありますが部品を揃えたりする必要もあるようなのでできるところから少しずつ進めて行きます。
なお、部品は家にあればそれを利用、プログラムは思いつきで変えたりするので本はあくまで参考としての利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

1章 多様なLEDを光らす

・評価部材

 ・ラズパイ
  ・ディスプレイケーブル、ディスプレイ
  ・キーボード、マウス、wifi環境
  ・電源
  ・ジャンパーケーブルx2
  ・ブレッドボード
 ・抵抗 100Ω
 ・LED(赤) ”OSDR3133A”
 ・LED(3色) ”OSTA5131A-R/PG/B”

・部品の決定

・LED(赤)

  ・本に記載の部品(LED)は無かったのですが家に”OSDR3133A”が転がっていたのでこれで進めます。

  ・”OSDR3133A”の特性
   DC Forward Curent(If):30mA
   DC Forward Voltage(Vf):typ 2.0V
   ※ぐぐるとあった。

・電流制限抵抗の決定

  ラズパイ電源が3.3vなので
  3.3V-2.0V(Vf) = 1.3V
  30mA(If) から、半分の15mAで光らす
  として1.3V/15mA=87Ω
  家に100Ωが転がっているので
  100Ωとした。なので、
  1.3V/100Ω=13mAぐらいで光る予定

動作確認環境

raspberry@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
raspberry@raspberrypi:~ $ python --version
Python 3.9.2

・プログラムの実行

・pigpioデーモンの起動

[実行]
raspberry@raspberrypi:~ $ sudo pigpiod
これを実行しないとpigpiodが使えない。

デーモン?ってなにって思い調べてみると、
バックグラウンドで動く常駐プログラムの事。
MITの開発者が呼び始めたのがもととなっており、
古代ギリシャでは神の使いでいつも自分の近くにいる
ものをデーモンと呼んでいたからみたい。
※ウィキペディアより
コンピューターに常駐プログラム(デーモン)を入れる私は神って事か・・?


・プログラム ハードPWM

[led_pwm_hw.py]

import sys
import pigpio 

LED_PIN = 12
LED_PWM_FREQUENCY = 8000
pwm_duty = float(sys.argv[1])

pi = pigpio.pi()
pi.set_mode(LED_PIN, pigpio.OUTPUT)
pi.hardware_PWM(LED_PIN, int(LED_PWM_FREQUENCY), int(pwm_duty * 1e6))

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 0.1
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 0.5
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 1.0
0.1<0.5<1.0で強く光る。点灯


・プログラム 別の方法

[led_pwm_sw.py]

import time
import pigpio

LED_PIN = 12
pi = pigpio.pi()
pi.set_mode(LED_PIN, pigpio.OUTPUT)

while True:
    pi.write(LED_PIN, 1)
    time.sleep(0.5)
    pi.write(LED_PIN, 0)
    time.sleep(0.5)

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw.py
0.5秒光り0.5秒消える 点滅

・プログラム 3色LED

[led_pwm_sw_rgb.py]

import sys
import pigpio

LED_R_PIN = 12
LED_G_PIN = 13
LED_B_PIN = 19
LED_PWM_FREQUENCY = 8000
LED_PWM_RANGE = 100
r_pwm_duty = float(sys.argv[1])
g_pwm_duty = float(sys.argv[2])
b_pwm_duty = float(sys.argv[3])
pi = pigpio.pi()
pi.set_mode(LED_R_PIN, pigpio.OUTPUT)
pi.set_mode(LED_G_PIN, pigpio.OUTPUT)
pi.set_mode(LED_B_PIN, pigpio.OUTPUT)
pi.set_PWM_frequency(LED_R_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_frequency(LED_G_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_frequency(LED_B_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_range(LED_R_PIN, LED_PWM_RANGE)
pi.set_PWM_range(LED_G_PIN, LED_PWM_RANGE)
pi.set_PWM_range(LED_B_PIN, LED_PWM_RANGE)
pi.set_PWM_dutycycle(LED_R_PIN, int(r_pwm_duty * LED_PWM_RANGE))
pi.set_PWM_dutycycle(LED_G_PIN, int(g_pwm_duty * LED_PWM_RANGE))
pi.set_PWM_dutycycle(LED_B_PIN, int(b_pwm_duty * LED_PWM_RANGE))

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw_rgb.py 0.0 0.9 0.0
RGBとdutyの組み合わせでいろいろな色を表示できる 点灯

・プログラム 3色LED順次発色

[led_pwm_sw_rgb2.py]

import time
import pigpio

LED_R_PIN = 12
LED_G_PIN = 13
LED_B_PIN = 19
pi = pigpio.pi()
pi.set_mode(LED_R_PIN, pigpio.OUTPUT)
pi.set_mode(LED_G_PIN, pigpio.OUTPUT)
pi.set_mode(LED_B_PIN, pigpio.OUTPUT)

while True:
    pi.write(LED_B_PIN, 0)
    pi.write(LED_R_PIN, 1)
    time.sleep(0.5)

    pi.write(LED_R_PIN, 0)
    pi.write(LED_G_PIN, 1)
    time.sleep(0.5)
    
    pi.write(LED_G_PIN, 0)
    pi.write(LED_B_PIN, 1)
    time.sleep(0.5)

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw_rgb2.py
3色を0.5秒ごとに順に光らせる


とりあえず光らせることができた。

・疑問点など

・pwmのソフトのプログラムがわからない。簡単なプログラムが見つけられない。
・pwmのハード制御がソフト制御より正確って書いてあったけど本当か確かめたい。ある周波数までは精度変わらないとか無いのか❓


ここまで読んでいただきありがとうございました。