Hobby Lab 趣味のモノ作り実験のサイトです。
Software OS RaspberryPi プログラミング
1.OS動作概要(起動時)
 (1)カーネルの役目
 (2)シェルとは
 (3)デーモンとは
 (4)コマンドとは
 (5)アプリケーションとは
 (6)bashの機能
 (7)環境変数について
2.各プログラミング
 (1)シェルコマンド
  a.ファイル操作
  b.テキスト操作
  c.システム操作
  ★i2c-tools
  d.ネットワーク操作
  e.圧縮・アーカイブ
  f.ユーザー管理
 (2)Cプログラミング
  ※標準ライブラリ
 (3)PHP,Perlスクリプト
 (4)Pythonスクリプト
3.PG言語の使用
 (1)デバイス一覧
 (2)デバイス対応PG言語

Sf:OS関係
SfO:Mint 関係
 PCへMint導入
 アプリ導入
 その他1
 アイコンを作る
SfO:Ubuntu 関係
 PCへUbuntu導入
 アプリ導入
SfO:RaspberryPi 関係
はじめに
 RaspberryPiへOS導入
 アプリ導入
 Programming
シェル・コマンド関係
 LXTerminal
 sed
 i2ctools
I/O・アプリ関係
 RealVNCとViewer
 IO動作確認
 MySQL
 Python
 raspberrypiハード
Sf:Server 関係
SfS:レンタルサーバー
 CORE-X
SfS:Windowsサーバー
 XAMPPの概要と導入
 Note XAMPP
 Note XAMPP Err
 Note Apache
 Note PHP
 Note MyQSL
Sf:Programming関係
C 関係
 C言語でプログラムミング
Python 関係
はじめに
 RaspberryPi開始
 Windows開始
共通事項
 プログラミングNote
 パッケージ導入 pip
 標準ライブラリ
 Serialライブラリ
 SMBusライブラリ
HTML関係
 開始とNote
Sf:IDE 開発環境
SfI:STM32
 STM32CubeIDEでプログラム
 HALと直接レジスター操作の速度
SfI:CH32
 MounRiver Studioでプログラム
SfI:Arduino
各ボード毎の設定
 Uno 設定
 Mega2560 設定
 DUE_CH340 設定
 ESP_WROOM02 設定
 ESP12F_D1mini 設定
 ESP32 設定
 CH32V 設定
ライブラリー
 OneWire使い方
その他
 日本語リファレンス(外部リンク)
 WiFi Macアドレスを調査
Sf:AP アプリ関係
SfA:エディタ
SfA:回路図CAD
SfA:回路シミュレータ
 シミュレーションの設定
 色の設定
 電源設定設定
SfA:リモートソフト
Sf:Pt プロトコル関係
SfPt:MODBUS
Sf:Otgers その他

1.OS動作概要(起動時)

OSにはカーネルと言うOSの基本機能を担うプログラムが最初に読み込まれる。
このプログラムはコンピュータの資源管理やアプリケーションの実行、プロセス管理を行う。(概略※カーネルの役目:資源やプロセス管理を参照)
カーネルが読み込まれあと、シェルやデーモン(Windowsではサービスと言っている)が読み込まれる。
シェルはユーザーからの操作を受け付ける窓口として実行される。(※シェル、デーモン、コマンド、アプリケーションとは参照)
超概略でOSの動きを記載したが、この中でプログラミングはどの位置にいるかですが、プログラム方法としてシェルコマンド~C言語やPHP,Perl,Pythpn等のスクリプトに分けて簡単に紹介する。

 (1)カーネルの役目:資源やプロセス管理

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

 (2)シェルとは

OSの中心部分カーネールなどに命令を伝えてくれるプログラムの一種でLinuxの標準シェルは bash だ。(概略は※bashの機能を参照)
コンソール、ターミナルやネットワークごしにリモートからアクセスした場合でも応答しカーネルを通して実行結果を得る橋渡しするのがシェルだ。

 (3)デーモンとは

他のプロセスが必要とする機能が有るものでシステムのバックグラウンドで常に実行されるプロセスとしてシステムの開始時に開始され、システムが停止するまで実行される。
デーモン化のメリットとしては高速に反応することができるためリアルタイムに反応が必要なプログラムの多くはデーモン化されている。デーモンプログラムの一例としてはhttp (Webサーバ) が有る。

 (4)コマンドとは

主に C 言語などで書かれたコンパイルされたプログラムで、/bin などのディレクトリ内に置かれています。
シェルは入力されたコマンドと同じ名前のプログラムを、/bin などのディレクトリ内から探し出し起動する。

 (5)アプリケーションとは

GUI 環境を持っているか、あるいはコンソール(コマンドウィンドウ)で動作させる仕様なのか、などによって動作が異なります。
  CLI Command Line Interface  コマンドラインのインターフェース
  GUI Graphical User Interface グラフィカルなインターフェース

 (6)bashの機能

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

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

 (7)環境変数について

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

2.各プログラミング

 (1)シェルコマンド

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


 (2) 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より追加。

 (3)PHP,Perlスクリプト

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

 (4)Pythonスクリプト

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

3.どんなプログラミング言語を使用するか

(1)プログラムしたいデバイス一覧

[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] MySQL データサーバーを使用
[4] Webサーバー HTMLを使用した表示や制御画面の使用
[5] メールサーバ 自動お知らせ
[6] 時計 インターネット時計(プログラミングから除外)
上記センサーや機能を使用するために必要なプログラミングは何を使用したら良いのか?

(2)デバイスと対応するプログラミング言語について

 RaspberryPiで推奨しているPythonで全てができそうだ。
 今回はこのPythonでプログラムでプログラムをして見よう。

 ■ライブラリの有無一覧
  S=シェル C=C言語 H=PHP l=Perl t=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組込 H,l,t使用 H,l,t使用
[5-1] mailサーバ






































更新日 2025/11/25 19:36  管理者 平林 剛Hirabayashi Takeshi