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

PSoC 6 Pioneer BoardとIoT Add-On Shieldを極める:開発者向けガイド

はじめに

PSoC 6は、Cypressの強力なPSoCシリーズプロセッサーの最新メンバーです。PSoC 6 Pioneer IoT Add-On Shieldは、このプロセッサーライン向けの開発ツールで、オンボードデバッガー、Arduino互換ヘッダー、CapSenseウィジェットなどを備え、すべてPSoC 6プロセッサーに結びついています。このプロセッサーはデュアルコアデバイスで、低消費電力のCortex-M0+と高性能のCortex-M4が、共有ペリフェラルとメモリ空間を通じて連携しています。

このチュートリアルでは、Pioneer Boardの基本操作と、Pioneer Add-on Shieldを用いたPSoC 6デバイスの機能拡張を紹介します。Raspberry PiとのBLEおよびWiFi(XBee WiFiモジュール使用)通信、さらにPSoC 4 BLE Pioneer BoardとPSoC 6 Pioneer Board間のBLE通信についても解説します。

必要な材料

本チュートリアルの例は、CypressまたはDigi-Keyから購入可能なPSoC 6 Pioneer Kitで使用することを想定しています。

当然ながら、Pioneer Add-on Shieldも必要です。また、XBee WiFi Moduleも必要です。セットアップに応じていくつかのXBee WiFiオプションがあります:Trace、RP-SMAコネクタ付き外部2.4GHzアンテナ、またはワイヤーアンテナ。最も簡単なのはワイヤーアンテナ付きのXBeeです。

さらに、Raspberry Pi 3 Starter Kitが必要です。これはPSoC 6 Pioneer Boardからの通信ターゲットになります。もちろん、Pi 3単体とブレッドボード、ジャンパーワイヤー、抵抗、LEDを別途購入しても構いませんが、スターターキットはお得でおすすめです。

ハードウェア概要

Pioneer Kit IoT Add-on Boardの機能を詳しく見ていきます。

MicroSDカードスロット – このスロットのピンは、PSoC 6 BLE Pioneer Boardを含むほとんどのArduino互換ボードでSPIペリフェラルにマッピングされます。

XBeeヘッダー – 標準的なXBeeフットプリントに対応し、すべての公式XBeeモジュールと互換性があります。

Qwiicコネクタ – SparkFunのすべてのQwiicモジュールをサポート。3.3Vを供給します。

MicroB USB電源コネクタ – このコネクタのデータラインはどこにも接続されていません。XBeeモジュール用の3.3Vレギュレーターに5Vを供給し、Arduinoヘッダーからの5Vを上書きすることで、ハイパワーXBeeモジュール(セルラー、WiFi、Proモデルなど)を正常に動作させます。

D7およびD9ボタン – ユーザーボタン2つで、ピンD7とD9(PSoC 6ではP0.2とP13.1、PSoC 4 BLEではP1.0とP0.4)に接続されています。

3.3Vレギュレーター – スイッチング方式の3.3V電源レギュレーターで、上流電源の供給能力に応じて最大1.5Aまで供給可能。Arduinoピンの5V供給またはMicroB電源コネクタから電力を取り、XBeeヘッダーのみに供給します。

レベルシフトバッファー – 5V信号を3.3V信号にダウンコンバート。3.3Vまたは5Vシステムの両方でボードを使用可能にします。

I2Cレベルシフト回路 – 必要に応じてI2C信号を3.3Vから5Vに変換。

電圧供給選択ジャンパー – I2Cレベルシフト回路の変換レベルを選択。デフォルトは3.3V。5Vシステムで使用する場合は5Vに設定。PSoC 4およびPSoC 6 Pioneer BLEボードはともに3.3Vシステムです。

XBee DIO5 LED – DIO5はデフォルトでいくつかの有用な機能を持ち、特にWiFiモジュールでは設定済みWiFiネットワークへの接続状態を表示します。

例:PSoC 6 Pioneer Kitを用いたWiFi経由のRaspberry Pi通信

この例では、WiFi経由でRaspberry Piに信号を送信する方法を示します。XBee WiFiモジュールへのアクセス、PSoC 6の2コア間プロセス間通信、Raspberry Piでのコマンド受信とパースの方法を学びます。

この例を実行するにはいくつかのセットアップが必要です。順を追って説明します。

PSoC 6 Pioneer Kitセットアップ:ハードウェア

Pioneer Kit側のセットアップは簡単です:XBee WiFiモジュールをPioneer IoT Add-on Shieldに挿入し、シールドをPioneer Kit BoardのArduinoヘッダーに装着します。

Raspberry Pi側には、ハードウェアとソフトウェアの両方でより詳細な説明が必要です。

PSoC 6 Pioneer Kitセットアップ:ソフトウェア

注: PSoC 6のサポートはCreator 4.2以降でのみ利用可能です!

Pioneer Kit用のソフトウェアプロジェクトはGitHubで公開されています。

PSOC 6 PIONEER KIT SOFTWARE DOWNLOAD

ダウンロードして展開したら、PSoC Creatorで例(XBee_WiFi_Example)を開きます。

最初にmain_cm4.cファイルを開き、いくつかの変更を行う必要があります。以下のようなコードセクションが見つかります:
char ssid[] = “your_ssid_here”;
char rpi_ip[] = “raspi_ip_here”;
char ssid_pw[] = “wifi_pw_here”;
int dest_port = 5000;
char encrypt_mode = WPA2;
やるべきことは明らかです:これらの設定を自身のネットワーク環境に合わせて変更してください。encrypt_modeの値はWPA、WEP、WPA2、または(望ましくないですが)NO_SECURITYが指定可能です。rpi_ipはドット区切りのIPアドレス(例:「10.8.253.193」)で、Raspberry Piのコマンドウィンドウで「ifconfig」と入力し、「wlan0」セクションを見て取得できます(コマンドウィンドウの開き方は後述)。

ボードをプログラムするには、付属のUSB-A to USB-CケーブルでPCに接続し、ツールバーの「Program」ボタン(下図参照)をクリックしてプロジェクトを自動ビルド&書き込みします。

ターゲット選択ウィンドウが表示される場合があります。「KitProg2」リスト項目の下のどちらを選んでも、フラッシュへの書き込みは正しく行われます。

Raspberry Piセットアップ:ハードウェア

まずハードウェア接続を見てみましょう:

ご覧のとおり、LED(330Ω抵抗付き)をRaspberry Piのピン3(GPIO 2)とピン6(グラウンド)に接続しています。これによりGPIO2をトグルしてLEDの点灯/消灯を確認できます。

Raspberry Piセットアップ:ソフトウェア

最新版のRaspbian(フルインストール、Lite版ではない)が動作し、キーボード、マウス、モニター、ローカルWiFiネットワークに接続されていることを前提とします。そうでない場合は、少し時間をかけてセットアップしてください。Piのセットアップについては別チュートリアルを参照してください。

Raspberry Piのデスクトップから開始します。以下のような画面が表示されているはずです:

画面上部の小さなロゴ(下図参照)をクリックしてコマンドラインを開きます。以降、このコマンドラインが開いているものとして進めます。

コマンドラインウィンドウが開きます。これによりRaspberry Piに直接コマンドを実行させられます。

まずFlaskをインストールします。FlaskはPythonのWebフレームワークで、バックエンドでPythonスクリプトを実行するWebフロントエンドを簡単に作れます。以下のコマンドを入力してEnter:
sudo pip install flask
大量の出力が流れ、最終的にFlaskがインストールされます。

次に、このプロジェクト用に書かれたソフトウェアをGitHubからインストールします:
git clone https://github.com/sparkfun/Flask_Tutorial
再びテキストがスクロールし、プロンプトが戻ればインストール完了です。続いて:
sudo python Flask_Tutorial/Python/app.py
これによりアプリが起動し、Pioneer BoardからのTCP/IP入力を待ち受けます。これで、IoT ShieldのD7とD9ボタンを押すことで、Raspberry Piに接続されたLEDをオン/オフできるようになります。便利!

ここで何が起きているのか? パート1:Pioneer Kit

PSoC 6ソフトウェアプロジェクトの高レベルなビューから見ていきましょう。画面左側のWorkspace Explorerフレームを見てください。重要なファイルとそれらがプロジェクト全体とどう関わっているかを歩いていきます。

Workspace Explorerが見づらい場合は、画像をクリックして拡大してください。

プロジェクトのトップレベルには6つのエントリーがあります:回路図(TopDesign.sch)、Design Wide Resources(XBee_WiFi_Example.cydwr)、Cortex-M0+コア関連ソースファイル(CM0p (Core 0))、Cortex-M4コア関連ソースファイル(CM4 (Core 1))、両コアで共有されるファイル(Shared Files)、IDEが生成するサポートファイル(Generated_Source)。

このプロジェクトの回路図は非常にシンプルで、いくつかのLED、スイッチ、XBee WiFiモジュールとデータをやり取りするUARTのみを持ちます。LEDは現在の実装では未使用です。

.cydwrファイルの内容はスキップします。このファイルには、回路図で使用される信号のピン割り当て、クロック生成、コア設定定数が含まれます。興味があれば自由に調べてみてください。大半は自明です。

リストを下ると、Cortex-M0+ソースファイルに到達します。このサブドメインのトップレベルには5つのエントリーがあります:「Header Files」、「Source Files」、およびその他3ファイル。私たちが関心を持つのは「Header Files」と「Source Files」のサブドメイン、そしてその中の1ファイルのみです:main_cm0p.c。ここがCortex-M0+プロセッサーで動作するコードのmain()関数です。

ワークスペースの構造から推測できるように、2つのコアそれぞれで完全に別個のコードベースが動作しています。main_cm0p.cはCortex-M0+コアのエントリーポイントであり、このコアがCortex-M4コアを開始します。Cortex-M4コアにも同様のサブドメインとファイルがあり、やはりmain_cm4.cのみを気にすればよいです。

最後に「Shared Files」セクション。これらのファイルの大半は自動生成されますが、ipc_common.cとipc_common.hはこのプロジェクトのために開発されたプロセス間通信(IPC)のヘルパーファイルです。

Cortex-M0+ メインファイル

重要な内容をハイライトしたので、重要なコードビットを1ファイルずつ見ていきます。まずmain_cm0p.cから。このファイルは、Cortex-M0+コアがシステムのために行うすべてのアクティビティを処理します:2つのプッシュボタンを監視し、どちらかが押されたときにCortex-M4へ信号を送ります。

しかし、これは一見ほど単純ではありません。Cortex-M4は処理後に信号をクリアできる必要があり、つまり複数のプロセスが同じデータにアクセスします。複数のプロセスが同じデータセットで作業する場合、書き込み衝突の影響を考慮する必要があります。あるプロセスがデータを変更しようとしている最中に、もう一方のプロセスが同じデータを変更しようとしたらどうなるか? これを扱うために、ipc_commonファイルで保護された読み書きシステムを使用します。

これがどう機能するか理解するには、まずIPCチャネルの概念を理解する必要があります。IPCチャネルはセマフォを使用して、あるプロセスから別のプロセスへデータを書き込む際、2つのコア間で衝突がないことを保証します。各コアのアプリケーション実行開始時に、実行中に使用するIPCチャネルのエンドポイントを確立する必要があります。以下の2行のコードを見てください:
IPC_STRUCT_Type *D9IpcHandle;
D9IpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(7);
1行目はIPCチャネルの特性を定義する構造体へのポインタを作成します。2行目は実際にその構造体を、システムIPCチャネル7のメモリ位置を指すように設定します。チャネル7を使用するのは、チャネル0-6がシステム用に予約されているためです。

次に、もう一方のコアにこのIPCチャネルに関連付けられたメモリアドレスを伝える必要があります。それがこの関数呼び出しの役割です:
while(Cy_IPC_Drv_SendMsgPtr(D9IpcHandle, CY_IPC_NO_NOTIFICATION, &D9Button) != CY_IPC_DRV_SUCCESS);
D9Buttonはコードの前半で設定された変数です。この関数呼び出しはwhile()ループで囲まれています。これは、もう一方のプロセス(Cortex-M4で動作するコード)がこの情報を受信したという検証を得るまで、関数呼び出しを繰り返すためです。また、変数のロックが解放されるまで待機します。これはCortex-M4がポインタ値の読み取りを終えたことを示します。
while(Cy_IPC_Drv_IsLockAcquired(D9IpcHandle));
最後に、アプリケーションの無限ループに入り、カスタム関数ReadSharedVar()とWriteSharedVar()が、もう一方のコアとボタン状態を通信する共有変数の更新を処理します。これらの関数については後で詳しく説明します。

Cortex-M4 メインファイル

Cortex-M4のmain()関数では、Cortex-M0+のmain()関数で行ったのと同様に、IPCチャネルのセットアップに関する操作を繰り返します。
IPC_STRUCT_Type *D9IpcHandle;
D9IpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(7);
これが完了したら、Cortex-M0+プロセスから送信されたメッセージ(アクセスすべき共有変数のアドレスを含む)を「キャッチ」するコードを呼び出す必要があります。
while (Cy_IPC_Drv_ReadMsgPtr(D9IpcHandle, (void *)&D9Button) != CY_IPC_DRV_SUCCESS);
再びwhile()ループで囲み、Cortex-M0+からメッセージが送られるまで継続的に呼び出します。その後、そのIPCチャネルのロックを解放し、Cortex-M0+プロセスが引き続き操作できるようにし、将来的にIPCチャネルを使用できるようにします。これはwhile()ループで囲む必要はありません。ロックを解放するだけなので、1回発行すればよいのに対し、ロックが解放されたことを確認するには繰り返しが必要だからです。
Cy_IPC_Drv_LockRelease(D9IpcHandle, CY_IPC_NO_NOTIFICATION);
これらすべてが完了したら、XBee WiFiシールドをセットアップしてローカルネットワークにアクセスします。そのコードは例題でよくドキュメント化されているため、ここでは重複しません。

アプリケーションコードを実行する無限ループでは、再びカスタム関数ReadSharedVar()とWriteSharedVar()を呼び出し、Cortex-M0+コアと共有されているボタン状態を保持する変数にアクセスします。これらの関数が何をしているか、もう少し詳しく見てみましょう。

Read More Info……

PSoC 6 Pioneer BoardとPioneer IoT Add-on Shieldの使用方法

製造プロセス

  1. 気象観測ステーションをCWOPと統合:実践ガイド
  2. Acconeer A111パルスレーダーをRaspberry Piと統合:実践ガイド
  3. IoTとMQTT入門:コード不要のESP8266チュートリアル
  4. Bridge Shield でスマートロボットを構築:Raspberry Pi と Arduino の統合
  5. GoPiGo v2をWindows 10 IoT Coreで拡張 - Raspberry Pi 3対応
  6. IoTエコシステムにおける視覚データの力を解き放つ
  7. IoTがフィールドサービスに革命:予知保全と高ROIを実現
  8. スマートシティがIoT、マイクロサービス、ダッシュボードで効率的な資産管理を実現する方法
  9. IoT World:VerticaのIoT分析向けビッグデータソリューション内幕
  10. HitachiのLumada IoTプラットフォーム:スマート製造のための産業インサイトを統合
  11. エンタープライズIoT:現在のインターネット価値の36倍を解き放つ