RaspberryPiのGPIOおよびその他のインターフェース

GPIOインターフェース

ここに画像の説明を挿入します

ナンバリング方法
ここに画像の説明を挿入します

3.3V、5V(VCC):電源
GNDの正極:接地の場合、負極
SDA.0、SDA.1の負極:これはI2C(I側C)バスデータ送信ポート
SCLです。 0、SCL.1:I2Cバスクロック信号
GPIO.x(x = 0,1,2,3,4,5,6,7; 21,22,23,24,25,26,27,28,29) :汎用入力および出力インターフェース、GPIOポート、ソフトウェアを介して入力または出力として構成
できます
。TXD:データの送信に使用されます。RXD:データの受信に使用されます(通常、シングルチップコンピューターとコンピューターまたはチップ間の通信に使用されます)。 、シングルチップコンピューターがコンピューターのシリアルポートと通信する場合、シングルチップコンピューターのRXDはコンピューターのTXDに接続され、TXDはコンピューターのRXDに接続されます。詳細な説明:https://blog.csdn .net / sdwuyulunbi / article / details / 6632382
MOSI:マスター出力とスレーブ入力
MISO:マスター入力とスレーブ出力
SCLK:システムクロック、水晶振動子周波数を参照
CE0、CE1:チップ選択信号(チップアクティブ)-低を意味します-レベルアクティブ。
ここに画像の説明を挿入します
実際の使用では、多くのプロジェクトにもいくつかの異なる機能が必要です。そのため、Raspberry Piの一部のGPIOピンには、I2C、SPI、UARTインターフェイスなどの二重機能があります。RaspberryPi3B+と比較すると、Raspberry Pi 4にはこれらの機能をサポートするインターフェイスが多く、多くのピンの機能が拡張されています。以下は、各機能の簡単な説明です。
I2Cインターフェース
I2Cは、フィリップスが開発したシンプルな双方向2線式同期シリアルバスです。バスに接続されたデバイス間で情報を転送するために必要なのは2本のワイヤだけです。Raspberry Piは、I2Cインターフェースを介して複数のセンサーとコンポーネントを制御できます。それらの通信は、SDA(データピン)とSCL(クロック速度ピン)を介して行われます。各スレーブデバイスには一意のアドレスがあり、多くのデバイスとの高速通信が可能です。ID_EEPROMピンはI2Cプロトコルでもあり、HATとの通信に使用されます。
SPIインターフェイス
SPIは、マスタースレーブ関係のコンポーネントを制御するために使用されるシリアルペリフェラルインターフェイスです。スレーブインマスターアウトモードとマスターインスレーブアウトモードで動作します。RaspberryPiのSPIは、SCLKで構成されています。 MOSIおよびMISOインターフェイス。データ速度を制御するために、MOSIはRaspberry Piから接続されたデバイスにデータを送信しますが、MISOはその逆を行います。
UARTインターフェース
Arduinoを使用する人は誰でもUARTまたはシリアルについて聞いたことがあるはずです。ユニバーサル非同期レシーバ/トランスミッタインターフェースは、Arduinoをプログラムされたコンピュータに接続するために使用され、他のデバイスとRXおよびTXピン間の通信にも使用されます。 。。Raspberry Piのシリアル端末がraspi-configで有効になっている場合、これらのピンを使用して、コンピューターを介してRaspberry Piを制御するか、Arduinoを直接制御することができます。
PWMインターフェース
RaspberryPiでは、すべてのピンがソフトウェアPWMを実装でき、GPIO12、GPIO13、GPIO18、およびGPIO19はハードウェアパルス幅変調を実装できます。PWMは、この記事のPWMとは何かについて読むことができます
PythonでGPIOを使用する

インポートモジュール

import RPi.GPIO as GPIO

ピンリファレンスモードを設定する

GPIO.setmode(GPIO.BOARD)
#or
GPIO.setmode(GPIO.BCM)

使用できるモードを確認してください

mode=GPIO.getmode()
#mode的取值有GPIO.BOARD, GPIO.BCM, None

特に指定のない限り、以下のコードはGPIO.BOARDピンマッピングモードを使用します。ピン40を入力方向に設定するなど
、ピン方向(入力、出力)
を設定します。

pin = 40
GPIO.setup(pin,GPIO.IN)

同じ出力

GPIO.setup(pin,GPIO.OUT)
#输出还可以加初始电平:
GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH)
如果要同时设置多个引脚:
list=[11,12]
GPIO.setup(list,GPIO.OUT)

複数のピンを同時に設定したい場合

list=[11,12]
GPIO.setup(list,GPIO.OUT)

リリース
一般的に言って、リソースはプログラムの最後にリリースする必要があります。この良い習慣は、ラズベリーパイへの偶発的な損傷を防ぐことができます。スクリプトで使用されているピンを解放します。

GPIO.cleanup()

警告
ピンがデフォルト以外の値に設定されていることをRPi.GRIOが検出すると、警告メッセージが表示されます。次のコードで警告を無効にできます。

GPIO.setwarnings(False)

GPIO.cleanup()は、スクリプトで使用されているGPIOピンのみを解放し、設定されたピン番号付けルールをクリアすることに注意してください。
読み取り
ピンの入力ステータスを読み取り、次のようにピン入力ステータスを取得する必要があることもよくあります。

GPIO.input(channel)
#低电平返回0 / GPIO.LOW / False,高电平返回1 / GPIO.HIGH / True。

入力ピンがフローティングの場合、ピンの値はフローティングになります。
つまり、ボタンまたはスイッチが押されるまで信号に接続されないため、読み取られた値は不明です。
干渉の影響により、入力値が繰り返し変化する場合があります。
次のコードを使用して問題を解決します。

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
# or
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#需要注意的是,上面的读取代码只是获取当前一瞬间的引脚输入信号。

ピンのステータス変化をリアルタイムで監視する必要がある場合は、2つの方法があります。
最も簡単で独創的な方法は、入力信号値を定期的にチェックすることです。この方法はポーリングと呼ばれます。
プログラムが間違ったタイミングで読み取ると、入力信号が失われる可能性があります。
ポーリングはループで実行され、プロセッサリソースを消費します。
ポーリング方法

while GPIO.input(channel) == GPIO.LOW:
    time.sleep(0.01)  # wait 10 ms to give CPU chance to do other things

GPIO入力に応答する別の方法は、割り込み(エッジ検出)を使用することです。ここで、エッジは、高から低(立ち下がりエッジ)または低から高(立ち上がりエッジ)への信号遷移を指します。
エッジ検出
エッジとは、信号状態の低から高への変化(立ち上がりエッジ)または高から低への変化(立ち下がりエッジ)を指します。通常、入力信号の値よりも入力状態の側に関心があります。この状態のこちら側はイベントと呼ばれます。

wait_for_edge()関数
wait_for_edge()は、エッジが検出されるまでプログラムの実行が継続されないようにするために使用されます。

channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)

add_event_detect()関数
この関数はピンを監視します。ピンの入力ステータスが変化すると、event_detected()を呼び出すとtrueが返されます。

GPIO.add_event_detect(channel, GPIO.RISING)
if GPIO.event_detected(channel):
	print('Button pressed')

RPI.GPIOモジュールのパルス幅変調(PWM)機能パルス
幅変調(PWM)は、マイクロプロセッサのデジタル出力を使用してアナログ回路を制御することを指します。これは、アナログ信号レベルをデジタルでエンコードする方法です。Raspberry Piでは、GPIOをプログラミングすることでPWMを実現できます。
PWMインスタンスを作成します。

p = GPIO.PWM(channel, frequency)

PWMを有効にする:

p.start(dc)   # dc 代表占空比(范围:0.0 <= dc <= 100.0)

頻度の変更:

p.ChangeFrequency(freq)   # freq 为设置的新频率,单位为 Hz

デューティサイクルを変更します。

p.ChangeDutyCycle(dc)  # 范围:0.0 <= dc >= 100.0

PWMを停止します:

p.stop()
#注意,如果实例中的变量“p”超出范围,也会导致 PWM 停止。

DSIディスプレイポート

DSIディスプレイポートを使用すると、Raspberry Piをタブレットコンピューターと同様のタッチディスプレイに接続できます。このディスプレイは、タッチコントロール機能をサポートできます。一般的なサイズは7インチ、5インチなどです。
ここに画像の説明を挿入します

CSIカメラインターフェース

CSIカメラインターフェイスは、RaspberryPiをRaspberryPiのカメラモジュールに接続できるようにする専用コネクタです。通常のWebカメラはUSBインターフェイスが1つしかないため、このインターフェイスでは使用できません。
ここに画像の説明を挿入します

HDMI / USB /ネットワークインターフェース

これらのスロットは、Raspberry PiをHDMIディスプレイ、マウス、キーボードなどのUSBデバイスに接続するため、およびインターネットアクセス用のイーサネット接続に使用されます。ただし、Raspberry Pi 3BにはWi-Fi機能が組み込まれているため、通常の状況では、イーサネットインターフェイスはあまり一般的に使用されません。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
USBシリアルポートを使用して他のデバイスに接続する場合は、Pythonシリアルライブラリを使用して次の操作を行うことができます。

import serial
ser=serial.Serial('/dev/ttyUSB0',9600)#如果是1就写1
ser.write('12345'.encode())#这里发的时候要有encode(),不然系统会报错格式不对

他のシリアルライブラリの使用法については、自分で学ぶことができます。

ここに画像の説明を挿入します

マイクロUSB電源インターフェース/3.5mmオーディオ出力インターフェース

RaspberryPiの電源はMicroUSBデータケーブルを介してUSB5V充電器に直接接続でき、GPIOピンの電源もこれを介して提供されます。Raspberry Piオペレーティングシステムをインストールしたばかりの場合、オーディオはデフォルトでHDMIを介して出力され、設定することで3.5mmオーディオインターフェイスから出力できます。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_50866711/article/details/114538164