Software
RaspberryPi
元に戻る

 Programming 2024/11/01

本文目次

本文以外目次
1.インターフェースの制御方法
(1)超概略OSの起動とプログラム
 ※カーネルの役目:資源やプロセス管理
 ※シェル、デーモン、コマンド、アプリケーションとは
 ※bashの機能
 ※環境変数について
(2)各プログラミングのについて
 a.シェルコマンドスクリプト
  (a)ファイル操作コマンド
  (b)テキスト操作コマンド
  (c)システム操作コマンド
   ★i2c-tools コマンド
  (d)ネットワーク操作コマンド
  (e)圧縮・アーカイブコマンド
  (f)ユーザー管理コマンド
 b.Cプログラミング
  ※標準ライブラリ
 c.PHP,Perlスクリプト
 d.Pythonスクリプト
(3)何を使用するためにどんなプログラム言語を使用するか
 a.RaspberryPiを使用したセンサーなどのデバイス一覧
 b.デバイスなどを使用するためのプログラムについて
■RaspberryPi
 (1)RaspberryPi Hardware
 (2)RaspberryPi OS Install & I/Otest
 (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.インターフェースの制御方法
(1)超概略OSの起動とプログラム
OSにはカーネルと言うOSの基本機能を担うプログラムが最初に読み込まれる。
このプログラムはコンピュータの資源管理やアプリケーションの実行、プロセス管理を行う。(概略※カーネルの役目:資源やプロセス管理を参照)
カーネルが読み込まれあと、シェルやデーモン(Windowsではサービスと言っている)が読み込まれる。
シェルはユーザーからの操作を受け付ける窓口として実行される。(※シェル、デーモン、コマンド、アプリケーションとは参照)
超概略でOSの動きを記載したが、この中でプログラミングはどの位置にいるかですが、プログラム方法としてシェルコマンド~C言語やPHP,Perl,Pythpn等のスクリプトに分けて簡単に紹介する。

 カーネルの役目:資源やプロセス管理
Linux系のプログラム(表計算表プログラムなどのアプリケーション)では複数のプログラムを動作させる事が出来この様なプログラムをプロセスと言います。
また必要なメモリ(ハードディスク、ファイルシステムなども含む)、CPUを含むハードウェア(キーボードやマウスその他I/Oインターフェース(ネットワーク))などを資源と言います。
複数のプロセスが動作しているために各プロセスが一つの資源を奪いあい同時に使用することによる不具合を無くするために資源の各プロセスの開始、停止、メモリーなどは領域の分配を時間的、重要度的な割込みなども使用して管理する事をカーネルが行っており、これをカーネルで資源およびプロセス管理を行っていると言っている。
 [目次に戻る]

 シェル、デーモン、コマンド、アプリケーションとは
シェル
OSの中心部分カーネールなどに命令を伝えてくれるプログラムの一種でLinuxの標準シェルは bash だ。(概略は※bashの機能を参照)
コンソール、ターミナルやネットワークごしにリモートからアクセスした場合でも応答し命令カーネルを通して実行結果を得る橋渡しするのがシェルだ。
デーモン
他のプロセスが必要とする機能が有るものでシステムのバックグラウンドで常に実行されるプロセスとしてシステムの開始時に開始され、システムが停止するまで実行される。
デーモン化のメリットとしては高速に反応することができるためリアルタイムに反応が必要なプログラムの多くはデーモン化されている。デーモンプログラムの一例としてはhttp (Webサーバ) が有る。
コマンド
主に C 言語などで書かれたコンパイルされたプログラムで、/bin などのディレクトリ内に置かれています。
シェルは入力されたコマンドと同じ名前のプログラムを、/bin などのディレクトリ内から探し出し起動する。
アプリケーション
GUI 環境を持っているか、あるいはコンソール(コマンドウィンドウ)で動作させる仕様なのか、などによって動作が異なります。
   CLI Command Line Interface  コマンドラインのインターフェース
   GUI Graphical User Interface グラフィカルなインターフェース
 [目次に戻る]

 bashの機能
①ジョブ管理機能 (プログラムのフォア又はバックグラウンド処理切替機能 fg/bg)
②コマンドの実行/停止/再開 (Ctrl+C,Ctrl+Z)
③シェルスクリプトの実行
④四則演算
⑤ホームディレクトリ(~)の定義やエイリアス機能(alias)
などが有る。

③のスクリプトとはシェルプログラムで使用するコマンドなどを記述したテキストファイルだ。
シェル上何行ものタスクを記載していた物をこのテキストファイルに記載することにより一度に実行が可能となる。

 環境変数について
一つにPATHという変数があり、ここで設定したディレクトリ下にあるファイル名(コマンドなど)を呼び出すときには通常ファイルの前に記載するディレクトリー名を省略できる。
これは、シェルがこのPATHに書かれたディレクトリを順に辿って指定されたコマンドを検索するためだ。
 [目次に戻る]

(2)各プログラミングについて
 .シェルコマンドスクリプト
OSのインストールでも使用したシェルコマンドです。
このコマンドをテキストファイルに書込んで多くの処理を行う事もできます。
この一連の処理をPHPやPerlから実行することも出来ます。
コマンドは非常に多く概略以下のものが有ります
(a)ファイル操作コマンド S欄の〇はシェルプログラムの内部コマンド
コマンド S 説明 使用例
ls ディレクトリの内容を一覧表示 ls [ディレクトリ]
cd ディレクトリの移動 cd [ディレクトリ]
pwd カレントディレクトリのパスを表示 pwd
alias シェルに「外部コマンドの別名」を定義する
export 環境変数を設定する
fg バックグラウンドで処理しているプロセスをシェルのメイン処理としてフォアグランド処理に切り替える
bg フォアグランドで処理しているプロセスをシェルのサブ処理としてバックグランド処理に切り替える
exec execコマンドで指定した外部コマンドにプロセスIDをそのまま引き継がせる。
mkdir 新しいディレクトリを作成 mkdir [ディレクトリ]
rmdir 空のディレクトリを削除 rmdir [ディレクトリ]
ln ハードリンクまたはシンボリックリンクを作成 ln ターゲット リンク名
cp ファイルをコピー cp コピー元 コピー先
mv ファイルを移動または名前を変更 mv 移動元 移動先
rm ファイルを削除 rm ファイル
touch 空のファイルを作成またはタイムスタンプを変更 touch [ファイル]
chmod ファイルのアクセス許可を変更 chmod アクセス許可 [ファイル]
chown ファイルの所有者を変更 chown 所有者[:グループ] [ファイル]
chgrp ファイルのグループを変更 chgrp グループ [ファイル]
find ファイルを検索 find [検索ディレクトリ] [条件]
locate インデックスを使用してファイルを高速検索 locate [ファイル名]
du ディスク使用量を表示 du [ディレクトリ]
df ファイルシステムのディスク使用量を表示 df
cat ファイルの内容を表示 cat [ファイル]
more/less ファイルの内容をページ単位で表示 more [ファイル]/less [ファイル]
head ファイルの先頭部分を表示 head [ファイル]
tail ファイルの末尾部分を表示 tail [ファイル]
 [目次に戻る]

(b)テキスト操作コマンド
コマンド 説明 使用例
grep テキストを検索 grep パターン [ファイル]
awk テキストを処理 awk 'プログラム' [ファイル]
sed ストリームエディタ(テキストの置換など) sed 'スクリプト' [ファイル]
cut テキストを分割 cut [ファイル]
paste テキストを結合 paste [ファイル1] [ファイル2]
sort テキストを並べ替え sort [ファイル]
tr 文字の置換・削除 tr 文字セット1 文字セット2
uniq 重複行を削除 uniq [ファイル]
wc 行数、単語数、バイト数をカウント wc [ファイル]
 [目次に戻る]

(c)システム操作コマンド
コマンド 説明 使用例
sudo 一般ユーザーがroot(特権ユーザーの)権限でプログラムを実行する sudo
ps 現在のプロセスを表示 ps
top/htop リアルタイムでプロセス情報を表示 top?/?htop
kill プロセスを終了 kill [プロセスID]
killall プロセス名でプロセスを終了 killall [プロセス名]
uptime システムの稼働時間を表示 uptime
uname システム情報を表示 uname
free メモリ使用量を表示 free
iostat I/O統計情報を表示 iostat
vmstat 仮想メモリの統計情報を表示 vmstat
lsof 開いているファイルの一覧を表示 lsof
dmesg カーネルのメッセージを表示 dmesg
service サービスを管理 `service サービス名 [start]
systemctl systemdサービスを管理 `systemctl サービス名 [start]
at 指定した時刻にコマンドを実行 at [時刻]
crontab crontab -e
alias/unalias コマンドのエイリアスを設定/削除 alias エイリアス='コマンド'/unalias [エイリアス]
history コマンド履歴を表示 history
nohup コマンドを終了してもバックグラウンドで実行し続ける nohup コマンド &
man マニュアルページを表示 man [コマンド]
echo メッセージを表示 echo メッセージ
date 日付と時刻を表示・設定 date
cal カレンダーを表示 cal
eeprog I2C シリアル バスに接続された 24Cxx EEPROM の読み取りと書き込みを行います。(i2c-toolsコマンド)
  ※このコマンドを実行しても「コマンドが見つかりません」とメッセージされます。
eeprog
  i2c-tools コマンド
 
コマンド 説明 使用例
i2cdetect I2Cに接続されている機器を検出しID番号を表示する。 i2cdetect
i2cdump I2Cに接続されているレジスタを調べます。 i2cdump
i2cget I2C/SMBus チップ レジスタから読み取ります。 i2cget
i2cset I2Cレジスタを設定します。 i2cset
i2ctransfer 1 回の転送でユーザー定義の I2C メッセージを送信します。 i2ctransfer
 [目次に戻る]

(d)ネットワーク操作コマンド
コマンド 説明 使用例
ping ネットワーク接続を確認 ping [ホスト名またはIPアドレス]
traceroute パケットの経路を追跡 traceroute [ホスト名またはIPアドレス]
ifconfig/ip ネットワークインターフェースの設定を表示・管理 ifconfig [インターフェース]/ip [コマンド]
netstat/ss ネットワーク接続、ルーティングテーブルなどを表示 netstat/ss
scp セキュアコピー scp コピー元 コピー先
rsync リモートおよびローカル間でファイルを同期 rsync コピー元 コピー先
wget ファイルをダウンロード wget URL
curl データを転送 curl URL
 [目次に戻る]

(e)圧縮・アーカイブコマンド
マンド 説明 使用例
tar アーカイブを作成・展開 tar [コマンド] アーカイブファイル
gzip ファイルを圧縮 gzip [ファイル]
gunzip ファイルを展開 gunzip [ファイル]
zip ファイルを圧縮 zip アーカイブファイル
unzip ファイルを展開 unzip [ファイル] ファイル
 [目次に戻る]

(f)ユーザー管理コマンド
コマンド 説明 使用例
passwd パスワードを変更 passwd [ユーザー名]
useradd ユーザーを追加 useradd [ユーザー名]
userdel ユーザーを削除 userdel [ユーザー名]
usermod ユーザー情報を変更 usermod [ユーザー名]
groupadd グループを追加 groupadd [グループ名]
groupdel グループを削除 groupdel [グループ名]
groups ユーザーが所属するグループを表示 groups [ユーザー名]
who/w ログインしているユーザーを表示 who/w
 [目次に戻る]


 .Cプログラミング
Cプログラムミングにはホストとフリースタンディング環境の2つの環境により作成される。
フリースタンディング環境ではpeintfやwriteなどの関数は無く、入力(キーボードなど)や出力(CRTなど)はアセンブリで書きそれをCからシステムコール呼び出しをして作って行くため、カーネルも作成出来るが、ハードウエアの事も理解してプログラムを作成しなければならないため、多くの時間が必要となり、通常のプログラミングでは使用しない。
ホスト環境では printf 関数などOS(カーネル)上で動作することを前提としたライブラリ関数を使用したプログラミングで通常がこの環境を使用して開発する。
この事から、ホスト環境で開発することを前提として説明する。
printf は標準ライブラリ※標準ライブラリ参照 のstdio.hの一部関数で、このライブラリを使用してプログラミングをする場合はプログラムを記述する先頭行に
#include <stdio.h>
と記載して使用する事をプログラム環境に知らせる。
このライブラリを使用してプログラムを作成することになる。
 [目次に戻る]

 標準ライブラリ
C言語の標準規格で定められている。
JIS X3010:2003(ISO/IEC 9899:1999)、通称C99では、標準ヘッダとして以下の24ファイルを定めている。
ヘッダ 名称 内容
assert.h 診断機能 実行時診断を行うassertマクロを定義する。
complex.h 複素数計算 複素数計算をサポートするマクロ、関数を宣言、定義する。C99より追加。
ctype.h 文字操作 文字分類、文字変換に有用な関数を宣言する。
errno.h エラー ライブラリ関数内エラーの報告用マクロを定義する。
fenv.h 浮動小数点環境 浮動小数点環境へのアクセス手段を提供するための型、マクロ、関数を宣言、定義する。C99より追加。
float.h 浮動小数点型の特性 浮動小数点型の大きさや特性を表すマクロを定義する。
inttypes.h 整数型の書式変換 最大幅の整数を操作する関数、及び数値文字列を最大幅の整数に変換する関数を宣言する。C99より追加。
iso646.h 代替つづり 演算子の代替つづりマクロを定義する。C95より追加。
limits.h 整数型の大きさ 整数型の大きさを表すマクロを定義する。
locale.h 文化圏固有操作 文化圏固有のデータ等の操作を行う型、マクロ、関数を宣言、定義する。
math.h 数学 数学的な演算を行う関数、及び関連するマクロを宣言、定義する。
setjmp.h 非局所分岐 関数の枠組みを越えた分岐を制御するための型、マクロ、関数を宣言、定義する。
signal.h シグナル操作 種々のシグナルを操作するための型、マクロ、関数を宣言、定義する。
stdarg.h 可変個数の実引数 可変個の実引数を実現するための型、マクロを定義する。
stdbool.h 論理型及び論理値 論理型及び論理値に関連するマクロを定義する。C99より追加。
stddef.h 共通の定義 処理系に依存する型、マクロを定義する。
stdint.h 整数型 指定幅を持つ整数型を宣言する。また、それらの宣言に対応するマクロを定義する。C99より追加。
stdio.h 入出力 入出力に関連する型、マクロ、関数を宣言、定義する。
stdlib.h 一般ユーティリティ 一般ユーティリティに関連する型、マクロ、関数を宣言、定義する。
string.h 文字列操作 文字列の操作を行うための型、マクロ、関数を宣言、定義する。
tgmath.h 型総称数学関数 数学関数の型総称マクロを定義する。
time.h 日付及び時間 時間を扱うための型、マクロ、関数を宣言、定義する。
wchar.h 多バイト文字及びワイド文字拡張ユーティリティ 多バイト文字、ワイド文字に関連する型、マクロ、関数を宣言、定義する。C95より追加。
wctype.h ワイド文字種分類及びワイド文字大文字小文字変換ユーティリティ ワイド文字種の分類や大文字小文字変換に有用な型、マクロ、関数を宣言、定義する。C95より追加。
 [目次に戻る]

 .PHP,Perlスクリプト
HTMLの中に書込んでプログラムを実行できる。
またMySQLも制御できる。
Perlでは正規表現を使用できる。
しかしI/Oを制御する場合はシェルコマンドのスクリプトやC言語を使用したプログラムを呼出し制御する方法がある。

 .Pythonスクリプト
RaspberryPiで推奨している言語
WebサーバーのHTLMの中に書込んだ実行が不明だがその他はライブラリが豊富でプログラムはしやすいと思われる。
勉強する必要がある。 
 [目次に戻る]

(3)何を使用するためにどんなプログラム言語を使用するか
RaspberryPiを使用したセンサーなどのデバイス一覧
[1] i2Cを使用したセンサーなど
[1-1] ADS1115 A/D変換器でホール素子を用いた直流電流測定,AC電圧測定
[1-2] INA226 電圧電流測定
[1-3] BME280 気温、湿度、大気圧センサー
[1-4] BH1750 照度センサー
[1-5] DS3231 時計
[1-6] SSD1306 モニター
[2] I/Oを使用した温度ツールを使用したい
[2-1] DS18B20 温度センサー
[2-2] リレーの制御 商用、インバータの電源切替、インバータの電源制御など
[2-3] RS232C等 RS232CやRS485の通信機能を使用
[2-4] ModBus 電力量計や太陽光充電器の情報を取得
[3-1] MySQL データサーバーを使用
[4-1] Webサーバー HTMLを使用した表示や制御画面の使用
[5-1] メールサーバ 自動お知らせ
[6-1] 時計 インターネット時計(プログラミングから除外)
上記センサーや機能を使用するために必要なプログラミングは何を使用したら良いのか?
 [目次に戻る]

.デバイスなどを使用するためのプログラムについて
 RaspberryPiで推奨しているPythonで全てができそうだ。
 今回このPythonでプログラムしてみよう!

 ■ライブラリの有無一覧
      S=シェル C=C言語 PH=PHP Pl=Perl Pt=Python    〇は専用のライブラリ有り
No もの S C PH Pl Pt
[1] i2c SやCを使用 SやCを使用
[1-1] ADS1115 ↑ or 〇 ↑or 〇
[1-2] INA226 ↑ or 〇
[1-3] BME280 ↑ or 〇 ↑or ?
[1-4] BH1750 ↑or ?
[1-5] DS3231 ↑or ?
[1-6] SSD1306 ↑or ?
[2] I/O SやCを使用 SやCを使用
[2-1] DS18B20
[2-2] リレーの制御 ↑使用
[2-3] RS232C等
[2-4] ModBus
[3-1] MySQL
{4-1] HTMLに組込 PH,PL,Pt?使用 PH,PL,Pt?使用
[5-1] mailサーバー
 [目次に戻る]