Software
RaspberryPi
元に戻る

RaspberryPi OS Install & I/O Test 2024/11/05

本文目次

本文以外目次
1.RaspberryPi のOSをダウンロード
2.RaspberryPiへOSをインストール
  ソフトの更新
3.アプリケーションのインストール
 (1)エディターの紹介
 (2)rootパスワードの設定
 (3)SSHの動作確認
 (4)FTPインストール
 (5)Apacheのインストールと設定
 (6)Apache 用の PHP のインストール
   (5)(6)の関係Webページ
 (7)MySQLとPHPMyAdminをインストール
4.I/Oの使用設定
 (1)準備
   a.動作させたいデバイス
   b.RaspberryPiのI/O事前設定
 (2)I/Oの動作確認
   a.動作確認用の回路
   b.GPIOを使用するための準備
   c.LXTerminalから出力制御
   d.LXTerminalか入力制御
   f.PHPで動作確認
 (3)i2cの動作確認
   a.動作確認するi2cデバイス
   b.i2cを使用するためのコマンド
   c.i2cの制御用コマンドi2c-toolsの概要
   d.「i2cget」と「i2cset」を使う
 (4) 1-Wire(DS18B20)の動作確認
■RaspberryPi
 (1)RaspberryPi Hardware
 (2)RaspberryPi Programming
 (3)RaspberryPi Shell Commands sed
 (4)RaspberryPi Shell Commands i2ctools
■Python (プログラム言語)
 (1)Python_Start
 (2)Python_Library
 (3)Python_Device Control
 (4)Python Module SMBus
 (5)PythonPackageInstaller pip
■その他
 (1)正規表現
 (2)ASCIIコード

本   文
1.RaspberryPi のOSをダウンロード
 インストールには2つの方法がある
  ・SDカードを使用してインストールする
  ・ネットワーク経由でインストールする
 今回はSDカードを使用してインストールする。
  SDカードを使用した場合も2つの方法がある。
   ・イメージャを使用してインストールする。
   ・イメージをダウンロードしてイメージをSDカードに書き込む
なおイメージャを使用したOSは下記のとおり。
Raspberry Pi OS (Legacy 32-bit)

またイメージをダウンロードしたOSは下記のとおり。
Raspberry Pi OS (Legacy) とデスクトップおよび推奨ソフトウェア
発売日:2024年3月12日
システム:32ビット
カーネルバージョン:6.1
Debianバージョン:11(ブルズアイ)
サイズ:2469メガバイト

 公式サイトにはイメージャについては
Raspberry Pi Imagerを使用してオペレーティング システムをインストールすることをお勧めします。

Raspberry Pi Imager は、macOS、Windows、Linux 上でイメージをダウンロードして書き込むのに役立つツールです。 Imager には、Raspberry Pi 用の一般的なオペレーティング システム イメージが多数含まれています。 Imager は、 Raspberry PiやUbuntuなどのサードパーティ ベンダーから直接ダウンロードしたイメージの読み込みもサポートしています。 Imager を使用して、Raspberry Pi の資格情報とリモート アクセス設定を事前に構成できます。

Imager は、 形式でパッケージ化されたイメージ.imgと、zip のようなコンテナ形式をサポートします。

ブート デバイスにイメージを書き込むコンピュータが他にない場合は、インターネットから Raspberry Pi にオペレーティング システムを直接インストールできる場合があります。
 ダウンロードは
 https://www.raspberrypi.com/software/
 (1)イメージャーを使用した方法
  
私はWindowsパソコンでSDカードに書き込みますので
Windows用のダウンロードをマウスで右クリックするとダウンロードがはじまります。
imager_1.8.5.exe がダウンロードされました。
imager_1.8.5.exeを実行すると下記が表示されるので、[Install]をクリックします。
  
   [Finish]をクリックします。
  
   ディバイス、OS、ストレージを選択し[次へ]をクリックします。
  
   今回は Raspberry Pi OS (Legacy 32-bit) を選択しました。
  

  

  今回は「はい」をクリックした
  「設定を編集する」をクリックした場合は、下の ###OSのカスタマイズ### の設定を行う
  

   OSのカスタマイズを行わない場合はパス 
######################OSのカスタマイズ###########################
OSのカスタマイズ
OS カスタマイズ メニューを使用すると、最初の起動前に Raspberry Pi をセットアップできます。以下を事前に構成できます。
ユーザー名とパスワード
Wi-Fi認証情報
デバイスのホスト名
タイムゾーン
あなたのキーボードレイアウト
リモート接続
初めて OS カスタマイズ メニューを開いたときに、ホスト コンピューターから Wi-Fi 資格情報をロードする許可を求めるプロンプトが表示される場合があります。 「はい」と答えると、Imager は現在接続しているネットワークから Wi-Fi 資格情報を事前入力します。 「いいえ」と答えた場合は、Wi-Fi 認証情報を手動で入力できます。

hostnameオプションは、 Raspberry Pi がmDNSを使用してネットワークにブロードキャストするホスト名を定義します。 Raspberry Pi をネットワークに接続すると、ネットワーク上の他のデバイスは<hostname>.localまたは を使用してコンピュータと通信できます<hostname>.lan。

ユーザー名とパスワードのオプションは、Raspberry Pi の管理者ユーザー アカウントのユーザー名とパスワードを定義します。

無線LANオプションを使用すると、無線ネットワークの SSID (名前) とパスワードを入力できます。ネットワークが SSID をパブリックにブロードキャストしない場合は、「非表示 SSID」設定を有効にする必要があります。デフォルトでは、Imager は現在いる国を「無線 LAN の国」として使用します。この設定は、Raspberry Pi で使用される Wi-Fi ブロードキャスト周波数を制御します。ヘッドレス Raspberry Pi を実行する予定がある場合は、無線 LAN オプションの資格情報を入力します。

ロケール設定オプションを使用すると、Pi のタイム ゾーンとデフォルトのキーボード レイアウトを定義できます。

[サービス]タブには、Raspberry Pi にリモートで接続するための設定が含まれています。

Raspberry Pi をネットワーク経由でリモートで使用する予定がある場合は、 [SSH を有効にする]の横のボックスをオンにします。ヘッドレス Raspberry Pi を実行する予定がある場合は、このオプションを有効にする必要があります。

・OS カスタマイズの [全般] タブで指定したユーザー名とパスワードを使用して、ネットワーク経由で Raspberry Pi に SSH 接続するためのパスワード認証オプションを選択します。

・現在使用しているコンピューターの秘密キーを使用して、パスワードなしの公開キー SSH 認証を行うように Raspberry Pi を事前設定するには、[公開キー認証のみを許可する]を選択します。 SSH 構成に既に RSA キーがある場合、Imager はその公開キーを使用します。そうでない場合は、「Run SSH-keygen」をクリックして公開鍵/秘密鍵のペアを生成できます。 Imager は新しく生成された公開キーを使用します。

OS のカスタマイズには、書き込み中のイメージャーの動作を構成できるオプションメニューも含まれています。これらのオプションを使用すると、Imager がイメージの検証を終了したときにノイズを再生したり、検証後にストレージ メディアを自動的にアンマウントしたり、テレメトリを無効にしたりできます。

「いいえ」を右クック

########################OSのカスタマイズEND########################
 OSを記録するディバイスのデータを完全に削除するメッセージと確認
 「はい」をクリック
   

  
   しばらく待つ
  
   SDカードにインストール完了!
   「続ける」を右クリックする。
   SDカードをRaspberry PiのSDスロットに差し込むj

 (2)イメージをダウンロードする場合
  イメージをダウンロードする
  記録するSD又はUSBメモリのフォーマットを行う。
メモリーの容量に大きな違い(32G有るはずが1Gしか無いと表示など)が有る場合[SD Card Formatter]と言うソフトが必要。
  イメージをSD又はUSBメモリーに記録する。[Win32DiskImager]などのソフトソフトが必要
[目次に戻る]


2.RaspberryPiへOSをインストール
   国を Japan と選択すると
   言語 Japanese、時間場所 Tokyo が自動的に選択される
   「Next」をクリック
  

  ユーザー名を入力
  パスワードは2回入力して
  「Next」をクリック
  

  下記内容の画面がでました
  Set up Screen 日本語訳
セットアップ画面 一部のモニターでは、デスクトップが画面より大きく、端が切り取られます。
ここで調整できます。
このモニターのデスクトップのサイズを縮小します
    

   画面が正しく表示されたら「次へ」を押します
  
   両ブラウザを簡単に比較します。
・パフォーマンス:Chrome
どちらのブラウザも高速ですが、Chromeの方が速度を維持しながらもリソースを消費しません
・プライベート:Firefox
 使い始めからユーザーのプライバシー保護のために動作する点で、FirefoxはChromeを大きくリード。そして、私たちが懸念している限り、これは他のすべての側面よりも重要です
・プライベートブラウジングモード:同点
 どちらのプライベートブラウジングモードも、低レベルのトラッキングから保護する以上のことはできません
・使いやすさ:Chrome
 どちらも素晴らしいですが、Chromeの方がより幅広いGoogleエコシステムとの緊密な統合が可能なため、Chromeに軍配が上がりました
・VPN:同点
 どちらもVPNは内蔵されていません
・カスタマイズ性:Chrome
 利用可能な拡張機能やテーマの数が圧倒的に多い。とはいえ、Firefoxで物足りなく感じることはないでしょう
と言うことで、リソースを消費しないと言うことから、図と違いChromium を使用しよう思います。
  

  

  
  リスタートされ下記画面が数秒間表示されます。
  

  インストールの終了
   
[目次に戻る]


ソフトの更新
下記ターミナルでコマンドを実行する。
tryday@tryday:~ $ sudo apt update
ヒット:1 https://packages.sury.org/php bullseye InRelease
ヒット:2 http://archive.raspberrypi.org/debian bullseye InRelease
取得:3 http://raspbian.raspberrypi.org/raspbian bullseye InRelease [15.0 kB]
15.0 kB を 3秒 で取得しました (5,097 B/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードできるパッケージが 213 個あります。表示するには 'apt list --upgradable' を実行してください。
tryday@tryday:~ $ sudo apt -y upgrade
tryday@tryday:~ $
[目次に戻る]


3.アプリケーションのインストール
 (1)エディターの紹介
 エディターの紹介 nano https://www.nano-editor.org/dist/latest/nano.html
カーソルを右に動かす キーボード カーソルキー →
カーソルを左に動かす キーボード カーソルキー ←
カーソルを上に動かす キーボード カーソルキー ↑
カーソルを下に動かす キーボード カーソルキー ↓

デリートキーで文字を消して、
入力した文字がそのままテキストファイルに記入されるっぽい。

ファイルの保存が Ctrl + S
エディタの終了が Ctrl + X

ワード検索 Ctrl + W

 (2)rootパスワードの設定     最初に戻る
sudo passwd root
  その後2回パスワードを入力して完了!

 (3)SSHの動作確認     最初に戻る
   Windowsのターミナルを起動し下記画面が出るので、操作する。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows

PS C:\Users\asovo>
ssh tryday@192.168.10.114 ・・・①
The authenticity of host '192.168.10.114 (192.168.10.114)' can't be established.
ED25519 key fingerprint is SHA256:
・・・・・・・・・・・・・・・・・・・・・・・・.・・・②
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
y・・・③
Please type 'yes', 'no' or the fingerprint:
yes・・・④
Warning: Permanently added '192.168.10.114' (ED25519) to the list of known hosts.
tryday@192.168.10.114's password:
********・・・⑤
Linux tryday 6.1.21-v7+ #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu May 2 15:59:15 2024
tryday@tryday:~ $
exit・・・⑥
ログアウト
Connection to 192.168.10.114 closed.
PS C:\Users\asovo>

 黄緑色がキー入力内容です。
①は ログインするユーザー名 @ sshサーバのIPアドレス
②のピンク色の部分が公開鍵です。
③はご入力で yse と入力する必要があったが、 y としか入力しなかったので、④でyseと入力
⑤は表示が有りませんが、 ユーザーのパスワードを入力しています。
⑥はリモート接続されているがすぐログオフ=exit した状況で、Windowsのターミナル初期表示に戻った!
  公開鍵に変更する場合は 
   https://monoist.itmedia.co.jp/mn/articles/1912/11/news022_3.html

 (4)FTPインストール     最初に戻る
sudo apt-get install vsftpd

  OS起動時にFTPdも自動起動するようにします。
sudo systemctl enable vsftpd

  設定せずにFTPソフトで接続した場合、書き込みが出来ないので、最低限の設定する。
550 Permission denied.
コマンドが受け付けられません.
アップロードを中止しました.
  とFTTPのメッツセージが出て書き込むことが出来ない。
  なおディレクトリの変更も出来ないか確認!現在は/home/trydayになっている。ここをアパッチのhttpdに変更しても良いが

   設定ファイルを編集
    vsftpdの設定ファイルを編集します。
sudo vi /etc/vsftpd.conf
    コメント#を消去する。
# write_enable=YES
    保存して終わる
:w
:q
    または
:wq
  OSを再起動する。
  ※サービスと再起動[ service vsftpd start ]しても反映されません。注意

 (5)Apacheのインストールと設定     最初に戻る
  a.インストール
  まず、ターミナルに次のコマンドを入力して、使用可能なパッケージを更新します。 
sudo apt update

  次に、次のコマンドでパッケージをインストールします。apache2
sudo apt install apache2 -y

  インストールが終われば試してみる。
   他のコンピュータでIPアドレスを打ち込むと
   Apache2が表示される。
  
  初期の設定は /var/www/html/ にindex.htmlがある。

  b.設定ファイルの変更
   ユーザー名 tryday の場合、/home/tryday のディレクトリー以降がFTPで管理出来ます。
   このため、Webのデータ(HTML等)の保管場所を www/html/ 以降に保管しようと思い、apache2の設定を変更します。
   (a)ドキュメントルート
    変更はRaspberry Piの端末エミュレータから ルート権限でエディターを起動して修正下さい。
tryday@tryday:~ $ su root
パスワード: root@tryday:/home/tryday# geany

   /etc/apache2/sites-available の 000-default.conf の中を変更します。
DocumentRoot /var/www/html
           ↓
# DocumentRoot /var/www/html
DocumentRoot /home/tryday/www/html

   (b)ディレクトリー
    /etc/apache2 の apache2.conf の中を変更します。
<Directory /var/www/>
           ↓
# <Directory /var/www/>
<Directory /home/tryday/www/>

   (c)apacheの再起動
    Raspberry Piの端末エミュレータから ルート権限でapacheを再起動します
root@tryday:/home/tryday# sudo /etc/init.d/apache2 restart

  c.パーミッションの変更
   HTMLデータをFTPで転送したあと、各ディレクトリーやファイルのパーミッションを下記の様に設定下さい。
ディレクトリー 705又は755
ファイル 604又は644
PHPファイル 705又は755

 (6)Apache 用の PHP のインストール     最初に戻る
ApacheサーバーがPHPファイルを処理できるようにするには、最新バージョンのPHPとApache用のPHPモジュールをインストールする必要があります。次のコマンドを入力して、これらをインストールします。
tryday@tryday:~ $sudo apt install php libapache2-mod-php -y
  (2)(3)関係のURL
  https://www.raspberrypi.com/documentation/computers/remote-access.html

 (7)MySQLとPHPMyAdminをインストール   動作しない!     最初に戻る
  a.MariaDB導入
https://qiita.com/mono_taro/items/affac9438146ab307bf4
MariaDB導入
まずはsudo apt updateをする。
で、MariaDBを導入する。
tryday@tryday:~ $ sudo apt update
tryday@tryday:~ $ sudo apt install mariadb-server
   または
tryday@tryday:~ $ sudo apt update
tryday@tryday:~ $ sudo apt install -y mariadb-server

  b.phpMyAdminの導入
MariaDBの導入が出来たら次はphpMyAdminを導入する。
tryday@tryday:~ $ sudo apt install phpmyadmin
設定画面が出てくるので、「apache2」にチェックを入れ、「yes」「ok」で進み、パスワードを入力する。
※MariaDBの設定が済んでいればパスワードの設定は必要なし?

ログイン
http://192.168.*.*/phpmyadminでphpMyAdminのログインページを開く
ユーザー名「root」,パスワードは設定したものを使う。

  c.ユーザー他設定
tryday@tryday:~ $ sudo apt update
tryday@tryday:~ $ sudo apt install -y mariadb-server
   mysql_secure_installationというツールを使ってユーザー権限等を書き換え
tryday@tryday:~ $ sudo mysql_secure_installation・・・①

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): ・・・②
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n]
n ・・・③
... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n]
y ・・・④
New password:
・・・⑤
Re-enter new password:
・・・⑥
Password updated successfully!
Reloading privilege tables..
... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
y ・・・⑦
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
n ・・・⑧
... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
y ・・・⑨
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
y ・・・⑩
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
tryday@tryday:~

ローカルからのアクセスに限定する行をコメントアウトします。
tryday@tryday:~ $ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
ファイル中のbinde-addressの行を次の通りコメントアウトします。
# binde-address =127.0.0.1

①MariaDBにログインして外部端末からのアクセスを許可します。
②rootパスワードを入力し、権限変更のコマンドを入力。
③mysqlから外れる
④MariaDBを再起動して完了
tryday@tryday:~ $ mysql -u root -p ・・・①
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 37
Server version: 10.5.23-MariaDB-0+deb11u1 Raspbian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
grant all privileges on *.* to root@"%" identified by '**********' with grant option; ・・・②
Query OK, 0 rows affected (0.009 sec)

MariaDB [(none)]>
exit ・・・③
Bye
tryday@tryday:~ $
sudo systemctl restart mysql ・・・④
tryday@tryday:~ $

phpmyadminを動作させる
/etc/apache2/apache2.confの最下行に以下を追記
Include /etc/phpmyadmin/apache.conf

   修正後apacheを再起動します。
root@tryday:/home/tryday# sudo /etc/init.d/apache2 restart
Restarting apache2 (via systemctl): apache2.service.
root@tryday:/home/tryday#

   これで Webクライアントから localhost/phpmydmin/index.php でphpmyadminが表示されます。

[目次に戻る]


4.I/Oの使用設定
 (1)準備
a.動作させたいデバイス
 ①I2C
  ADS1115(A/D)
  INA228(電流・電圧)
  BME280(温度・気圧・湿度)
  DS3231(時計)
  GY302(光度)
  GM009696(ディスプレイ)
 ②1-Wire
  DS18B20
 ③シリアル
  ModBus 電力量計
 ④I(装置状態)
  負荷の状態(太陽光発電か商用電源)
 ⑤O(装置制御)
  電源供給制御(太陽光発電か商用電源、インバータの動作)

 「RaspberryPiの設定」に以上のインターフェースの設定が有ったがどんな関係か次に記載する。

b.RaspberryPiのI/O事前設定
RaspberryPiの設定を選択 → RaspberryPiの設定画面の「インターフェース」を選択する

設定項目 説明(コマンドライン入力の場合も記載)
SSH ラズベリーパイに対するSSHを使用したリモートアクセスを有効/無効にします。
SSHで別のコンピュータからラズベリーパイにコマンドラインでリモートアクセスすることができます。 無効にしておくと起動時にSSHサービスが開始せず、リソースを解放できることになります。 SSHの使用についてはこちらを読んでください。 SSHはデフォルトでは有効になっていることに気を付けてください。 公共のネットワークからラズベリーパイに直接接続する場合には、全てのユーザーに安全なパスワードを設定しない限りSSHは無効にした方が良いでしょう。
 コマンドラインの場合
$ sudo raspi-config nonint do_composite <0/1>
 0: 有効にする   1: 無効にする
VNC WayVNC または RealVNC 仮想ネットワーク コンピューティング サーバーを有効または無効にします。
 コマンドラインの場合
$ sudo raspi-config nonint do_vnc <0/1> <0/1>
 0: 有効にする   1: 無効にする
SPI SPIインターフェースとSPIカーネルモジュールの自動読み込みを有効/無効にします。PiFaceのような製品が必要になります。
 コマンドラインの場合
$ sudo raspi-config nonint do_spi <0/1>
 0: 有効にする   1: 無効にする
I2C I2CインターフェースとI2Cカーネルモジュールの自動読み込みを有効/無効にします。
 コマンドラインの場合
$ sudo raspi-config nonint do_i2c <0/1>
 0: 有効にする   1: 無効にする
シリアル
ポート
シリアル接続ハードウェアを有効または無効にします。
 コマンドラインの場合
$ sudo raspi-config nonint do_serial_hw <0/1/2>
 0: 有効にする   1: 無効にする
シリアル
コンソール
シリアル接続でシェルおよびカーネル メッセージを有効または無効にします。
 コマンドラインの場合
$ sudo raspi-config nonint do_serial_cons <0/1/2>
 0: 有効にする   1: 無効にする
1-Wire DS18B20 温度センサーでよく使用される Dallas 1 線式インターフェースを有効または無効にします。
 コマンドラインの場合
$ sudo raspi-config nonint do_onewire <0/1>
 0: 有効にする   1: 無効にする
リモート
GPIO
GPIO ピンへのリモート アクセスを有効または無効にします。
 コマンドラインの場合
$ sudo raspi-config nonint do_rgpio <0/1>
 0: 有効にする   1: 無効にする
  [目次に戻る]

 (2)I/O (装置状態/装置制御) の動作確認
a.動作確認用の回路
RaspberryPiの定格
 1端子最大 16mA
 全端子合計電流 50mA
今回の回路
 今回はGPIO17でLEDを点灯させます。
 LEDは「L-513LET」(赤)を使用します。
 ここでR1の値を決めます.

 以上から
 R1 = ('3.3-2.1) / 0.005 = 240(Ω)

b.GPIOを使用するための準備
 「リモートGPIO」をONに設定する


c.LXTerminalから出力制御
 GPIOに関係するディレクトリ「/sys/class/gpio」をファイルマネジャーで開いてみます。

①.今回LEDを点灯するインターフェースgpio17を使用できるようにRaspberryPiの端末エミュレータから下記の様に入力します。
tryday@tryday~ $ echo 17 > /sys/class/gpio/export
 上記はechoコマンドのリダイレクト機能を使用し、ファイル名「export」に「17」を書き込んでいます。
 書き込まれたことにより、書き込んだNoの「gpio17」のディレクトリーおよびその中には下記ファイルマネジャーに示すディレクトリおよびファイルが作成されます。
 なお今回どうやって作成しているかは調査しません。
 GPIO17のディレクトリーが作成されましたがその中にこれから関係するファイルについて「direction」、「value」を開いてみる。
 「direction」は in 「value」は 0 になっていることが判る。


②.以下により「direction」ファイルの内容を OUT にします。
tryday@tryday~ $ echo 17 > /sys/class/gpio/gpio17/direction

③-1.出力をHiにするため valueファイルに1を書込む
tryday@tryday~ $ echo 1 > /sys/class/gpio/gpio17/value
valueに1が書込まれると点灯
③-2.出力をLoにするためvalueファイルに0を書込む
tryday@tryday~ $ echo 1 > /sys/class/gpio/gpio17/value
valueに0が書込まれると消灯

④.最後にGPIO17ピンの制御を終了する
tryday@tryday~ $ echo 17 > /sys/class/gpio/unexport
 ディレクトリー 「gpio17」が無くなりました。

d.LXTerminalか入力制御
 入力ピンは先ほどの出力ピンと同じGPIO17を使用して印加する電圧はPinNo1の3.3(V)を使用します。
 出力制御と同じRaspberryPiの端末エミュレータから下記の様に入力します。
 そして入力 GPIO17の状態はvalueファイルの内容を読取ることにより0又は1が書込まれます。
 このため出力制御で使用したeche では無く cat コマンドを使用してファイルの中身を見ます。

①.GPIO17を使用できるようにします。
tryday@tryday~ $ echo 17 > /sys/class/gpio/export
 ディレクトリー 「gpio17」が作成され、必要なファイルも作成されました。
②.I/Oを入力に設定します。
tryday@tryday~ $ echo in > /sys/class/gpio/gpio17/direction
 ディレクトリー 「direction」のファイルにinが書かれました。
 ディレクトリーとファイルは以下の通り

 GPIO17に電圧を印加するのは写真の白線でRaspberryPi側のPinNo1番(3.3V)から取っている。
電圧印加していない状態
③-1.電圧を印加してない状態で入力内容を確認します
tryday@tryday~ $ cat /sys/class/gpio/gpio17/value
0
電圧を印加した状態
③-2.電圧を印加した状態で入力内容を確認する。
tryday@tryday~ $ cat /sys/class/gpio/gpio17/value
1

④.最後にGPIO17ピンの制御を終了する
tryday@tryday~ $ echo 17 > /sys/class/gpio/unexport
 ディレクトリー 「gpio17」が無くなりました。

e.PHPで動作させるには
 PHPには、Linuxのコマンドをラップした関数群がたくさんあります。例えば、cdや、pwdなどもそうです。
  Linuxのcdコマンドは、PHPではchdir()になり、
  Linuxのpwdコマンドは、PHPではgetcwd()になります。
 しかし入出力で使用した「echo」「cat」は下記の方法で使用します。

 PHPからシェルコマンドを実行させる方法
コマンド ステータス※ 実行結果の取得 備    考
exec() オールマイティ
shell_exec() × 一番スタンダード
passthru() × 画像などの出力に使用
実行演算子 × shell_exec()と同じ
※ステータス:コマンドがどんな状態で終了したか示す値で一般的には正常動作で「0」以外は異常終了です。
ものによりますが、-255~+255の整数が設定されているようです。

 コマンドの実行結果が全部必要で、かつ、exitステータスも必要な場合→exec()
 コマンドの実行結果が全部必要だが、exitステータスは不要な場合→shell_exec()
 コマンドの実行結果を取得する必要がない(実行結果を直接ブラウザに出力する)→passthru()

 join(separator,array) この関数は 変数特に配列変数 array の文字列の最後に separator の内容を連結します。
 配列の場合は、複数の各文字列最後に separator の内容を連結します。
 PHPからHTMLに改行を付加した文字列を渡す場合にはjoin("<br />", $result);と書きます。

f.PHPで動作確認
gpio17 を出力として gpio16を入力とする。
tryday@tryday:~/www/html/cgi-bin $ echo out > /sys/class/gpio/gpio17/direction
tryday@tryday:~/www/html/cgi-bin $ echo 16 > /sys/class/gpio/export
tryday@tryday:~/www/html/cgi-bin $ echo in > /sys/class/gpio/gpio16/direction
gpio17とgpio16を電線で接続する。
プログラムはgpio17に出力させ、gpio16でその出力状態を表示する。

ファイル名 gpio.php
<?php
exec('echo 0 > /sys/class/gpio/gpio17/value', $result, $status);
if( $status ){
throw new Exception("Error!! ($status)");
}

exec('cat /sys/class/gpio/gpio16/value', $result, $status);
if( $status ){
throw new Exception("Error!! ($status)");
}
echo join("<br/>", $result);
 gpio.phpを実行させる。
tryday@tryday:~/www/html/cgi-bin $ php gpio.php
0
tryday@tryday:~/www/html/cgi-bin $
 [目次に戻る]

 (3) I2C の動作確認

  ※動作確認に使用するプルアップ抵抗は3.3(kΩ)程度を使用する。

a.動作確認するI2Cデバイス
 ・.ADS1115(A/D)


b.RaspberryPiでI2Cを使用するためのコマンド
  出来るだけ簡単にするため新たにインストールはしない方向で進める
  今回はインストールされているi2c-toolsコマンドを使用する。
(a)最新のI2Cのツールをインストールする。
 最初からインストールされていた。
tryday@tryday~ $sudo apt-get update
ヒット:1 https://packages.sury.org/php bullseye InRelease
ヒット:2 http://archive.raspberrypi.org/debian bullseye InRelease
ヒット:3 http://raspbian.raspberrypi.org/raspbian bullseye InRelease
パッケージリストを読み込んでいます... 完了

tryday@tryday~ $sudo apt-get install i2c-tools
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
i2c-tools はすでに最新バージョン (4.2-1+b1) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 122 個。

(b)RaspberryPi のI2C回路を使用する設定
 RaspberryPiの設定画面でI2CをONにする。

c.i2cの制御用コマンドi2c-toolsの概要
No コマンド 内           容 manページ
eeprog ※ I2C シリアル バスに接続された 24Cxx EEPROM の読み取りと書き込みを行います。
i2cdetect I2Cに接続されている機器を検出しID番号を表示する i2cdetect(8)
i2cdump I2Cに接続されているレジスタを調べます i2cdump(8)
i2cget I2C/SMBus チップ レジスタから読み取ります。 i2cget(8)
i2cset I2Cレジスタを設定します。 i2cset(8)
i2ctransfer 1 回の転送でユーザー定義の I2C メッセージを送信します。 i2ctransfer(8)
※①についてはコマンドを実行しても「コマンドが見つかりません」とメッセージされます。
tryday@tryday:~ $ eeprom
bash: eeprom: コマンドが見つかりません

(a)コマンドの動作確認 i2cdetect を使用したI2Cに接続されている機器を検出しID番号を表示する
 ADS1115を確認確認する
tryday@tryday:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

tryday@tryday:~ $
検索するIDアドレス範囲を指定(例 0x40~0x52)する場合は
tryday@tryday:~ $ i2cdetect -y 1 0x40 0x52
0 1 2 3 4 5 6 7 8 9 a b c d e f
00:
10:
20:
30:
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- --
60:
70:

tryday@tryday:~ $

ADS1115をI2Cに接続状況
注意
 ADS1115のSCL,SDAプルアップ抵抗を外すこと。
以上のコマンドから「i2cget」と「i2cset」を使用してI2Cの部品動作を確認します。

d.「i2cget」と「i2cset」を使う
(a)ADS1115(A/D)
  1V又は4Vを入力電圧として印加し動作確認を行った。
① A0の入力電圧確認
tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3c3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x2c1f

tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3c3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x057d
1(V) 0x2c1f ->0x1f2c ->DEC変換7980ー>×125μ= 0.9975(V)
4(V) 0x057d = 4.000625(V)

②A1の入力電圧確認
tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3d3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x271f

tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3d3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x087d
1(V) 0x271f = 0.996875(V)
4(V) 0x087d = 4.001(V)

③A2の入力電圧確認
tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3e3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x2d1f

tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3e3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x037d
1(V) 0x271f = 0.997375(V)
4(V) 0x037d = 4.000375(V)

④A3の入力電圧確認
tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3f3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x301f

tryday@tryday:~ $ i2cset -y 1 0x48 0x01 0xe3f3 w
tryday@tryday:~ $ i2cget -y 1 0x48 0x00 w
0x027d
1(V) 0x301f = 0.998(V)
4(V) 0x027d = 4.00025(V)

動作確認状況
 [目次に戻る]
 (4) 1-Wire(DS18B20)の動作確認
■1-Wire設定前のRaspberryPi設定状態 

   1-Wireを追加
 設定で[OK]をクリックするとRaspberryPiの再起動を聞いてくるので、再起動を行ってください。

■再起動後のモジュールリスト確認
tryday@tryday:~ $ lsmod
tryday@tryday:~ $
 追加されたモジュール
 w1_gpio    16384 0
 wire 40960  1 w1_gpio
 cn 16384   1 wire

■DS18B20の接続


■PinNoの変更方法
 温度検出の信号線を接続するデフォルトピンはGPIO=4 PinNo=7だが変更する場合は  /boot/config.txt の
[all]
dtoverlay=w1-gpio
 GPIO4をGPIO17へ変更する場合
[all]
dtoverlay=w1-gpio,gpiopin=17
 に変更する。

■動作確認
 測定結果のファイルの有無確認 
tryday@tryday:~ $ ls -l /sys/bus/w1/devices/
合計 0
lrwxrwxrwx 1 root root 0 11月 4 19:56
28-01211257a758 -> ../../../devices/w1_bus_master1/28-01211257a758
lrwxrwxrwx 1 root root 0 11月 4 19:44
w1_bus_master1 -> ../../../devices/w1_bus_master1
tryday@tryday:~ $
 今回は1個接続したの1個[28-01211257a758]が作成されている。

 測定内容の確認
tryday@tryday:~ $ cat /sys/bus/w1/devices/28-01211257a758/w1_slave
5e 01 4b 46 7f ff 7f 10 b2 : crc=b2 YES
5e 01 4b 46 7f ff 7f 10 b2 t=21875
tryday@tryday:~ $ cat /sys/bus/w1/devices/28-01211257a758/w1_slave
a0 01 4b 46 7f ff 7f 10 2c : crc=2c YES
a0 01 4b 46 7f ff 7f 10 2c t=26000
tryday@tryday:~ $
  YESは温度サーチが接続されている。
  t=は1000倍の値になっている。
  2回目の温度測定の前に若干温度素子を触って温度を上げてみた。
 [目次に戻る]