Skip to main content

Raspberry Pi 用 4G LTE HAT - TCP/IP ネットワーキングの解説

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

はじめに

TCP(Transmission Control Protocol)は、Raspberry Pi 4G HAT を使用するアプリケーションにおいて重要です。TCP はインターネット上で信頼性が高く、順序が保証され、エラーがチェックされたデータ伝送を実現します。これは、クラウドサーバーやリモートシステムとの一貫した通信が必要な IoT デバイスのようなリアルタイムアプリケーションにとって不可欠です。TCP の信頼性により、センサーの読み取り値やテレメトリなどの重要なデータを送信し、コマンドを受信する際にデータが失われたり破損したりすることがありません。Raspberry Pi をゲートウェイまたはクライアントとして使用することで、リモートモニタリング、メッセージングシステム、ファイル転送など、さまざまなアプリケーションをサポートします。

前提条件

ハードウェア要件

Raspberry Pi 5Raspberry Pi 4G LTE CAT4 HAT

ソフトウェア要件

通信ドライバとツール

関連するドライバや通信ツールをまだインストールしていない場合は、まず ガイド を確認してください。

追加要件

以下の詳細を持つ事前設定済みの TCP サーバーが必要です:

  • ホスト: 例えば、自分のサーバー、またはテスト目的で使用する tcpbin.com
  • ポート番号: 専用のポート番号、ここでは tcpbin.com のポート 4242 を使用します。

tcpbin.com は、TCP/IP 通信のテストとデバッグに使用される公開 TCP サーバーです。送信されたメッセージをエコーバックするため、接続性とデータ伝送の確認に最適です。

tcpbin.com に AT コマンドを送信する

Raspberry Pi では Minicom を、Windows では USB 経由で Qcom Tool を開きます。

sudo minicom -D /dev/ttyUSB2
手順アクションAT コマンド期待される応答
1モバイルネットワークプロバイダーの APN を設定します。AT+QICSGP=1,1,"dialogbb","","",1OK
2PDP コンテキストをアクティブ化します。AT+QIACT=1OK
3PDP コンテキストがアクティブ化されていることを確認します。AT+QIACT?+QIACT: 1,1,1,"<Your_IP_Address>" OK
4サーバーへの TCP 接続を開きます。AT+QIOPEN=1,0,"TCP","tcpbin.com",4242,0,0+QIOPEN: 0,0 (接続成功を示します)
5サーバーにメッセージを送信します。AT+QISEND=0> (メッセージ入力のプロンプト) メッセージ入力後: Hello TCPBin<Ctrl+Z> SEND OK
6サーバーからの応答を読み取ります。AT+QIRD=0,1500+QIRD: <length> Hello TCPBin OK
7TCP 接続を閉じます。AT+QICLOSE=0OK

自動化された Python スクリプト

以下は、Raspberry Pi 上で Quectel 4G LTE モジュールと対話するための自動化された Python スクリプトです。このスクリプトは serial ライブラリを使用してモジュールに AT コマンドを送信します。APN、ポート、ボーレート、TCP ポート、アドレスの変数をカスタマイズできます。

Python コードの実装

ステップ 1. ディレクトリと仮想環境の準備

  • Raspberry Pi のターミナルを開きます。
  • 新しいプロジェクトフォルダを作成し、その中に移動します:
mkdir TCP_EX
cd TCP_EX
  • Python 仮想環境をセットアップします:
python3 -m venv --system-site-packages env
  • 仮想環境をアクティブ化します:
source env/bin/activate
  • 必要なライブラリをインストールします:
pip install pyserial 

ステップ 2. Python スクリプトの準備

  • Thonny Python IDE(Raspberry Pi にプリインストール済み)を開きます。

  • Thonny で新しいファイルを作成し、提供されたコードをエディタに貼り付けます。

  • 4G HAT のシリアルポートに対応する usb_port パラメータを更新します。通常、/dev/ttyUSB2 または /dev/ttyUSB3 になります。例:

usb_port = "/dev/ttyUSB2"
  • ファイルを TCP_EX フォルダに test_mqtt.py として保存します。
import serial
import time

# 設定変数
APN = "dialogbb" # ネットワークの APN に置き換えてください
PORT = "/dev/ttyUSB2" # Quectel モジュールに接続されたシリアルポート
BAUDRATE = 9600 # 通信ボーレート
TCP_ADDRESS = "tcpbin.com" # TCP サーバーアドレス
TCP_PORT = 4242 # TCP サーバーポート
MESSAGE = "Hello TCPBin" # 送信するメッセージ


def send_command(ser, command, wait_for="OK", timeout=5):
"""
モジュールに AT コマンドを送信し、応答を待ちます。
"""
ser.write((command + "\r\n").encode())
time.sleep(0.5)
end_time = time.time() + timeout
response = b""
while time.time() < end_time:
if ser.in_waiting > 0:
response += ser.read(ser.in_waiting)
if wait_for.encode() in response:
break
print(f">> {command}")
print(response.decode().strip())
return response.decode().strip()


def main():
try:
# シリアル接続を開く
ser = serial.Serial(PORT, BAUDRATE, timeout=1)
time.sleep(2) # モジュールの初期化を待つ

# 1. APN を設定
send_command(ser, f'AT+QICSGP=1,1,"{APN}","","",1')

# 2. PDP コンテキストをアクティブ化
send_command(ser, "AT+QIACT=1")

# 3. PDP コンテキストの状態を確認
send_command(ser, "AT+QIACT?")

# 4. TCP 接続を開く
send_command(ser, f'AT+QIOPEN=1,0,"TCP","{TCP_ADDRESS}",{TCP_PORT},0,0')
time.sleep(5) # 接続が確立するのを待つ

# 5. データを送信
send_command(ser, f"AT+QISEND=0")
ser.write((MESSAGE + "\x1A").encode()) # メッセージを送信し、Ctrl+Z で終了
time.sleep(1) # 送信のための時間を確保
print("メッセージが送信されました。")

# 6. 応答を読み取る
response = send_command(ser, "AT+QIRD=0,1500")
print(f"サーバー応答: {response}")

# 7. 接続を閉じる
send_command(ser, "AT+QICLOSE=0")
print("接続が閉じられました。")

# シリアルポートを閉じる
ser.close()

except Exception as e:
print(f"エラー: {e}")


if __name__ == "__main__":
main()

ステップ 3. スクリプトを実行する

  • ターミナルを開き、プロジェクトディレクトリにいることを確認します:
cd TCP_EX
  • 仮想環境をアクティブ化します:
source env/bin/activate
  • スクリプトを Python で実行します:
python test_tcp.py
  • 出力結果

リソース

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品をご利用いただく際にスムーズな体験を提供するため、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルをご用意しています。

Loading Comments...