工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Raspberry Pi 4とHiFive1ボード間でUART通信を確立する

このラボでは、Raspberry Pi 4とHiFive1の間で信頼性の高いUARTリンクを確立し、HiFive1をプログラミングして受信データをエコーさせ、Pi上でステアリング角度をボードに転送するPythonスクリプトを作成します。

パート0:Raspberry Pi 4でのUART有効化

Pi 4には4つのUARTコントローラーが搭載されています。この演習ではuart2とuart3を使用します。/boot/config.txtに以下の行を追加して再起動:

dtoverlay=uart2,115200
dtoverlay=uart3,115200

再起動後、デバイスノード/dev/ttyAMA1(uart2)と/dev/ttyAMA2(uart3)が利用可能になります。

ボードを以下のように接続:

Piからは/dev/ttyAMA1(HiFive1へ送信)と/dev/ttyAMA2(HiFive1コンソール受信)でこれらのチャネルにアクセスできます。

パート1:HiFive1のプログラミング

PC上で(Pi上ではない)、スケルトンプロジェクトをダウンロード:

$ cd ~/Documents/PlatformIO
$ wget https://ittc.ku.edu/~heechul/courses/eecs388/l10-comm.tar.gz
$ tar zxvf l10-comm.tar.gz

l10-interruptフォルダをVSCodeワークスペースに追加。目標はUART1からデータを読み取り、UART0でエコーし、結果をコンソールに出力することです。

簡潔なアルゴリズム:

while (1) {
    if (ser_isready(1)) {
        char data = ser_read(1);
        ser_write(0, data);
        ser_printline(0, "Received: ");
        /* 必要に応じてフォーマット調整 */
    }
}

シリアルAPIはeecs388_lib.h/cで定義:

void ser_setup(int devid);
int ser_isready(int devid);
void ser_write(int devid, char c);
void ser_printline(int devid, char *str);
char ser_read(int devid);
int ser_readline(int devid, int n, char *str);

devid = 0でUART0、devid = 1でUART1を選択。ser_isready関数はUART IPレジスタの保留データをチェック:

int ser_isready(int devid) {
    uint32_t regval = *(volatile uint32_t *)(UART_ADDR(devid) + UART_IP);
    return regval;
}

コンパイル・フラッシュ後、Piに切り替えて2つのターミナルを開く:

送信側ターミナルで任意の文字列を入力すると、同じ文字列がデバッグ側ターミナルに表示され、正常動作を確認できます。

パート2:Raspberry Pi 4上のPythonスクリプト

手動ターミナルの代わりに、以下を行うPythonプログラムを作成:

pySerialを使用したスケルトン例:

import serial
import time
import cv2  # または実際のカメラインターフェース

# シリアルポートを開く
ser1 = serial.Serial('/dev/ttyAMA1', 115200, timeout=1)
ser2 = serial.Serial('/dev/ttyAMA2', 115200, timeout=1)

while True:
    # フレーム取得
    frame = cv2.imread('frame.jpg')  # 実際のカメラ読み取りに置き換え
    # DNN推論
    angle = dnn_inference(frame)  # float32
    # floatを4バイト表現に変換
    angle_bytes = angle.to_bytes(4, byteorder='little', signed=True)
    ser1.write(angle_bytes)
    # オプション:デバッグ出力読み取り
    debug = ser2.readline().decode().strip()
    if debug:
        print('HiFive1:', debug)
    # タイミング制御(例:30fps)
    time.sleep(1/30)

# クリーンアップ
ser1.close()
ser2.close()

注:floatをバイトに変換して送信し、HiFive1側でも同じバイトオーダーで解釈してください。

付録:Raspberry Pi 4 GPIOとペリフェラル概要

Pi 4は、従来のPiモデルを超える拡張I²C、SPI、UARTインターフェースを提供します。pinoutコマンドで全ピンを表示:

pinout

主要ペリフェラル:

詳細な設定は公式Raspberry Piドキュメントを参照: Config-txtガイド。

製造プロセス

  1. シームレスMQTT統合:NodeMCU DHT22センサーとRaspberry Pi 3 B+ブローカー
  2. センサーデータをRaspberry Piに統合:実践ガイド
  3. ArduinoとRaspberry Pi 2のI2C連携でIoTセンサープロジェクトを実現
  4. M2M(マシンツーマシン)通信とは?その重要性と仕組み
  5. デジタル通信の基礎:理論から実践的実装まで
  6. データフローの理解:シンプレックスからフルデュプレックス通信まで
  7. 光データ通信:高帯域幅・耐干渉伝送のための光活用
  8. 決定論と耐障害性:産業制御ネットワークの必須設計原則
  9. UARTマスター: 汎用非同期受信送信機の完全解説
  10. 革命的コンパクト光増幅器、ノイズフリーで宇宙・光ファイバー通信を変革
  11. ワイヤレス通信距離をマスターする:電力、データレート、干渉が接続性をどう形作るか