read_sensor module¶
- read_sensor.dsw_read(pi)¶
Raspberry_piでのデジタルスイッチ(DIPスイッチ)の状態を読み取るためのメソッド
- Returns:
dsw (int) -- 各種スイッチ状態をまとめた結合値
Notes
各種操作を以下に示す.重複内容は割愛
dsw1 = pi.read(12): GPIOピン12の状態(ON=0,OFF=1)を読み取りdsw1に代入
dsw1 = ~dsw1 & 0x01: 読み取ったスイッチの状態 (dsw1) を反転. (ON=1,OFF=0)
dsw = (dsw4 << 3) | (dsw3 << 2) | (dsw2 << 1) | (dsw1 << 0):
各種スイッチの反転した状態の値をビットシフト演算で結合.
- read_sensor.get(sensor)¶
入力文字列に応じた各種センサデータメソッドを起動し出力結果を返却
- Parameters:
sensor (str) -- センサ名
- Returns:
各種センサから得られたデータ
Notes
main.init(pi): GPIOピンを用いた入出力を準備
pi.serial_data_available(g_huart0):
指定されたシリアルポート(g_huart0)で受信可能なデータのバイト数を整数で返す
受信可能なデータがない場合は0を返す
pi.serial_read_byte(g_huart0):
指定されたシリアルポート(g_huart0)から1バイトのデータを読み込み整数として返す
受信データがない場合は-1を返す
入力文字列に応じて各種センサデータ取得メソッドを起動し, メソッド返却値を返却
- read_sensor.init_pigpio()¶
RasPberryPi上でGPIO制御のためにpigpioライブラリを初期化
- read_sensor.pi¶
pigpioライブラリのインスタンス. GPIOピンを制御するために使用
- Type:
piogio.pi
Notes
接続をグローバル変数 pi に割り当て
- read_sensor.led_show(pi, on)¶
LED点灯用関数.未使用
- read_sensor.main_init(pi)¶
GPIOピンを用いた入出力を準備するためのメソッド
- Parameters:
pi (piogio.pi) -- pigpioライブラリのインスタンス. GPIOピンを制御するために使用
Notes
piogio.setmode(gpio,mode)
gpio: 指定したいGPIOピン番号を指定. RasPberryPi上のハードウェアのピン番号
mode: 指定したいGPIOピンの動作モードを表す整数値.
pigpio.INPUT (0): 入力モード。GPIOピンが外部からの信号を読み取るために使用
pigpio.OUTPUT (1): 出力モード。GPIOピンが外部のデバイスや回路に信号を送るために使用
各種実行内容(同様の内容は省略)
pi.set_mode(GPIO18_LED, pigpio.OUTPUT): GPIOピン GPIO18_LED を出力モードに設定
pi.set_mode(GPIO12_DSW1, pigpio.INPUT): GPIOピン GPIO12_DSW1 を入力モードに設定
SW1_1の状態を読み取るための準備. 他3行も同様
pi.set_mode(GPIO04_I2CEN1_, pigpio.OUTPUT): GPIOピン GPIO04_I2CEN1_を出力モードに設定
I2C通信のための入力の準備. 他4行も同様
pi.set_mode(GPIO25_SPI_OE_, pigpio.OUTPUT): GPIOピン GPIO25_SPI_OE_ を出力モードに設定
SPI制御のための入力準備.
- read_sensor.mcp3204_read(pi, ch)¶
茎径センサ値,果実径値を取得するためのメソッド
- Parameters:
pi (piogio.pi) -- pigpioライブラリのインスタンス. GPIOピンを制御するために使用
ch (int) -- MPC3204のチャンネル番号 (0 or 1)
- Returns:
fV -- 茎径センサ値, 果実径センサ値
Notes
pi.write(GPIO25_SPI_OE_, 1): GPIOピン GPIO25_SPI_OE_からの信号を読み取るためのモードに変更
pi.spi_open(SPI0_BUS, SPI0_CLK_HZ, SPI0_MODE):
SPIバス0を開き,指定のクロック速度とモードで通信を開始
SPI0_BUS = 0
SPI0_CLK_HZ = 1000000
SPI0_MODE = 3
SPI通信ではMCP3204に対する3バイトのSPIコマンドが必要となる
xferメソッドで指定する各バイトの値
1バイト目: (0、0、0、0、0、Start、SGL/DIFF、D2)
2バイト目: (D1、D0、何でもよいから6ビット分)
3バイト目: なんでもよい8ビット(ダミービット)
chをこのフォーマットに適応するように整形を行う
ch = ch & 0x07: chの下位3ビットのみを抽出. 0b00000CCC (0~7)の形に整形
txd = (0x06 | (ch > 2), 0x00 | (ch << 6), 0x00): MCP3204に対して適切なチャネルを指定するための3バイトのSPIコマンドを準備
0x06 | (ch > 2): 1バイト目
'0606'(0b00000110): シングルエンドモードでの実行を指す.
(ch > 2): チャンネルのサイズに従って'0606'(0b00000011'0')の最終桁を'0'か'1'にするかを決定する.
この操作を行うことで, ch<3の場合('0606')とch>=3の場合('0607')で分かれるチャンネル指定を正常に行うことができる
0x00 | (ch << 6): 2バイト目
ch = ch & 0x07: chは左づめの3bitに意味を持つビットが存在する状態にする.実際はchは0~3の値であり,意味を持つ値は2ビット分である.
(ch << 6): 6ビットだけchをシフトさせることで意味を持つビットをxferメソッド指定するビット位置に割り当てる. 最後に0x00との or演算を行うことで必要ビット以外のビット位置を0とし,指定フォーマットのバイトを作成する
0x00: 3バイト目: xferメソッド実行時に必要であるが特別送信するデータがないためダミービットを指定する
rxr, rxd = pi.spi_xfer(h, txd) の返却物
rxr: 読み取りの結果やエラーコードなど、通信の成否や追加のステータス情報を格納
rxd (list): rxd[0]: 1番目のバイト: 最初の送信データに対するMCP3204からの応答. (一般的には無視される)
rxd[1]: 2番目のバイト: 下位4ビットにデータが含まれる
rxd[2]: 3番目のバイト: 8ビットすべてにデータが含まれる
pi.i2c_close(handle): I2Cハンドルを閉じてリソースを解放
pi.write(GPIO13_I2CEN4_, 1): GPIOピン GPIO13_I2CEN4_を外部のデバイスや回路に信号を送るためのモードに変更
nV = ((rxd[1] << 8) | (rxd[2] << 0)) & 0x0fff: rxdのうちrxd[1]とrxd[2]の意味を持つビットを12ビットデータとしてnVに格納
センサ固有の変換式に基づいて生データ(nV)を物理量に変換後返却
- read_sensor.mcp3204ex_read(pi, ch)¶
茎径センサの値を取得するためのメソッド
- Parameters:
pi (piogio.pi) -- pigpioライブラリのインスタンス. GPIOピンを制御するために使用
ch -- MPC3204のチャンネル番号
- Returns:
fV -- 果実径センサ値
Notes
未使用
- read_sensor.s1133_ext()¶
光度センサからのデータを読み取り送信するメソッド
- Returns:
lux (int) -- 光の強度
- read_sensor.ADDR_I2C3¶
I2Cデバイスのアドレス
- Type:
constants
Notes
他部分はdef s1133_int()と同様のため割愛.
- read_sensor.s1133_int()¶
光度センサからのデータを読み取り送信するメソッド
- Returns:
lux (int) -- 光の強度
- read_sensor.ADDR_I2C2¶
I2Cデバイスのアドレス
- Type:
constants
Notes
pi.write(GPIO05_I2CEN2_, 0): GPIOピン GPIO05_I2CEN2_からの信号を読み取るためのモードに変更
pi.i2c_open(1, addr, 0): I2Cデバイスとの通信を準備
第1引数: 使用するI2Cバスの番号を指定. Raspberry Piの場合は'1'はI2Cバス1を指す
第2引数: I2Cデバイスのアドレス
第3引数: オプションフラグ. 基本的には0を指定
rxr, rxd = pi.i2c_read_device(handle, 3):
通信準備されたI2Cデバイスからデータを読み取る.今回の場合は3バイトのデータを読み取る
rxr: 読み取りの結果やエラーコードなど、通信の成否や追加のステータス情報を格納
rxr = 3: 指定したバイト数(この場合は3バイト)が正常に読み取られたことを示す
rxr = 0: バイト数が0で、何も読み取られなかったことを示す
rxrが0以下の場合,エラーとして処理
rxd: 実際に読み取ったデータを格納
pi.i2c_close(handle): I2Cハンドルを閉じてリソースを解放
pi.write(GPIO05_I2CEN2_, 1): GPIOピン GPIO05_I2CEN2_を外部のデバイスや回路に信号を送るためのモードに変更
受け取った3バイトのデータからセンサ測定値を抽出.
正しくデータが得られなかった場合すべてのデータ値を0とする.
センサ固有の変換式に基づいて生データを物理量に変換後返却
- read_sensor.show_term(text)¶
デバッグ用
- read_sensor.show_uart(pi, text)¶
デバッグ用
- read_sensor.sht25_read(pi)¶
温湿度センサからのデータを読み取り送信するメソッド
- Returns:
fT (float) -- 温度
fH (float) -- 湿度
- read_sensor.ADDR_I2C1¶
I2Cデバイスのアドレス
- Type:
constants
Notes
pi.write(GPIO04_I2CEN1_, 0): GPIOピン GPIO04_I2CEN1_からの信号を読み取るためのモードに変更
pi.i2c_open(1, addr, 0): I2Cデバイスとの通信を準備
第1引数: 使用するI2Cバスの番号を指定. Raspberry Piの場合は'1'はI2Cバス1を指す
第2引数: I2Cデバイスのアドレス
第3引数: オプションフラグ. 基本的には0を指定
pi.i2c_write_byte(handle, 0xE3): センサへ0xE3コマンドを送信.温度データを取得開始
rxrT, rxdT = pi.i2c_read_device(handle, 3):
通信準備されたI2Cデバイスから温度データを読み取る.今回の場合は3バイトのデータを読み取る
rxrT: 読み取りの結果やエラーコードなど、通信の成否や追加のステータス情報を格納
rxrT = 3: 指定したバイト数(この場合は3バイト)が正常に読み取られたことを示す
rxrT = 0: 実行失敗時意図的に0に設定
rxrTが0以下の場合,エラーとして処理
rxdT: 実際に読み取ったデータを格納
pi.i2c_write_byte(handle, 0xE3): センサへ0xE3コマンドを送信.湿度データを取得開始
rxrH, rxdH = pi.i2c_read_device(handle, 3):
通信準備されたI2Cデバイスから温度データを読み取る.今回の場合は3バイトのデータを読み取る
rxrH: 読み取りの結果やエラーコードなど、通信の成否や追加のステータス情報を格納
rxrH = 3: 指定したバイト数(この場合は3バイト)が正常に読み取られたことを示す
rxrH = 0: 実行失敗時意図的に0に設定
rxdH: 実際に読み取ったデータを格納
pi.i2c_close(handle): I2Cハンドルを閉じてリソースを解放
pi.write(GPIO04_I2CEN1_, 1): GPIOピン GPIO04_I2CEN1_を外部のデバイスや回路に信号を送るためのモードに変更
以下の操作を温度センサ,湿度センサから得た測定値に対して実行
受け取った3バイトのデータからセンサ測定値を抽出.正しくデータが得られなかった場合すべてのデータ値を0とする.
各センサで固有の変換式に基づいて生データを物理量に変換して温度,湿度を返却
- read_sensor.sht85_read(pi)¶
強制通風筒からのデータを読み取り送信するメソッド
- Returns:
fT (float) -- 温度
fH (float) -- 湿度
- read_sensor.ADDR_I2C4¶
I2Cデバイスのアドレス
- Type:
constants
Notes
pi.write(GPIO13_I2CEN4_, 0): GPIOピン GPIO13_I2CEN4_からの信号を読み取るためのモードに変更
pi.i2c_open(1, addr, 0): I2Cデバイスとの通信を準備
第1引数: 使用するI2Cバスの番号を指定. Raspberry Piの場合は'1'はI2Cバス1を指す
第2引数: I2Cデバイスのアドレス
第3引数: オプションフラグ. 基本的には0を指定
txd = bytearray([0x24, 0x00]): センサへの送信コマンドを指定. コマンド(0x24, 0x00)は測定開始を表す
pi.i2c_write_device(handle, txd): センサへコマンドを送信を実行
rxr, rxd = pi.i2c_read_device(handle, 6):
通信準備されたI2Cデバイスからデータを読み取る.今回の場合は6バイトのデータを読み取る
rxr: 読み取りの結果やエラーコードなど、通信の成否や追加のステータス情報を格納
rxr = 6: 指定したバイト数(この場合は6バイト)が正常に読み取られたことを示す
rxr = 0: バイト数が0で、何も読み取られなかったことを示す
rxrが0以下の場合,エラーとして処理. 実行失敗時意図的に0に設定
rxd: 実際に読み取ったデータを格納
pi.i2c_close(handle): I2Cハンドルを閉じてリソースを解放
pi.write(GPIO13_I2CEN4_, 1): GPIOピン GPIO13_I2CEN4_を外部のデバイスや回路に信号を送るためのモードに変更
受け取った6バイトのデータからセンサ測定値を抽出. 正しくデータが得られなかった場合すべてのデータ値を0とする.
センサ固有の変換式に基づいて生データを物理量に変換後返却
- read_sensor.signal_handler(signal, frame)¶
デバッグ用
- read_sensor.uart_write(pi, text)¶
デバッグ用