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)

デバッグ用