United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

Pythonで組込み開発! ZerynthでPSoC 6 Wi-Fi BT Pioneerボードを使ってみた

Main34_fdabe3c4d8dbeb928b66bc1c5c4d3d6861aa8a1e.jpg

最近発表された、注目の集まるPSoC 6キットへのZerynthのサポート内容を紹介する。

Cypress PSoCとZerynthミドルウェアの組み合わせによって生まれる強力なプラットフォームには、迅速なIoT開発に有用な高度なハードウェア機能・Pythonの使いやすさと広範なエコシステム・マルチスレッド機能を備えたリアルタイムOS・クラウド統合・OTAアップデートといった数多くの利点がある。

PSoC入門

MCU_Portfolio_8b2de17268f0a2d486dabcd36ec4a034405a9796.jpg

画像出典: Cypress Roadmap: PSoC and MCU Portfolio.

Cypress PSoC (プログラマブルシステムオンチップ)は、「ユーザーモジュール」とよばれるプログラマブルなアナログ/デジタルブロック機能を搭載した独特なMCUシリーズだ。高度に統合された低電力ソリューションを開発できるプラットフォームである。そのため、Apple iPodなどのマスマーケットな民生機器で広く採用されている。

PSoC_6_MCU_Portfolio_2019222ea3eeafcb75c64d049a8d3ddc8ca08eb2.jpg

画像出典: Cypress Roadmap: PSoC and MCU Portfolio.

PSoC 6はシリーズ最新チップであり、特にウェアラブル及びIoTアプリケーションでの利用を対象としている。ARM Cortex-M4メインアプリケーションプロセッサに、BLEプロトコルスタックの実行や静電容量タッチセンサなどの機能に使用できる低電力Cortex-M0+を組み合わせて搭載している。もちろん、設定可能なアナログ及びデジタルブロック、プログラマブルI/Oルーティングと相互接続も備えている。

このリソースの組み合わせにより、部品数の削減と物理的な小型化と、消費電力の削減が実現されている。これはメイン又は補助プロセッサ上に、あるいはハードアナログブロック又はデジタルブロックを介して、各種機能を非常に効率的な方法で実装しているためだ。

PSoC 6 Wi-Fi BT Pioneer キット

P6WBPK_09e83e9c28161865b3d2f922cece868fe685a0d3.jpg

PSoC 6搭載 Wi-Fi BT Pioneerキットの主要な機能はつぎの通りだ。

  • Arduino Uno 3.3-Vシールド1及びDigilent® Pmod™モジュールと互換性のある拡張ヘッダ
  • タイプ1DX超小型2.4GHz WLAN及びBluetooth機能モジュール
  • データとコードに高速で拡張可能なメモリを提供する12-Mbit外部クワッドSPI NORフラッシュ
  • 大容量ストレージプログラミング、USB to UART/I2C/SPIブリッジ機能、カスタムアプリケーションサポートを備えたKitProg2オンボードプログラマ/デバッガ
  • 充電式リチウムイオンポリマー(Li-Po)バッテリをサポートするEZ-PD CCG3 USB Type-C電源供給(PD)システム
  • 自己容量(CSD)と相互容量(CSX)動作の両方が可能なCapSenseタッチセンシングスライダー(5セグメント)と2つのボタン、Cypressの第4世代CapSense技術を評価できるCSD近接検出センサ

ArduinoShield_b57429cde57528de7a51135ce12ca69d30e43e40.jpg

キットには、2.4インチTFTディスプレイ・3軸加速度計/ジャイロスコープ・PDMマイク入力・32ビットステレオコーデックがまとめてパッケージ化されたArduino互換シールドも付属する。

本キットの標準的な開発オプションはPSoC Creator IDEWICED Studioで、どちらもCツールチェーンを使用している。ただし本記事では、Pythonベースの開発環境「Zerynth」を使った開発にフォーカスしてみよう。

Zerynth Studio

ZP_ZS_PysicalDevices_d4b0643b721077c77bb929a93b05a923d7fc7cec.jpg

以下は、Ubuntu LinuxへZerynth Studioをインストールする際の手順の概要である。MS WindowsとMac OSへのインストールも可能だ。

まず、新しいディレクトリを作成する。

$ mkdir Zerynth

次に、ソフトウェアをダウンロードし、この場所に保存する。その後、アーカイブを抽出し、インストールを開始する。

$ cd Zerynth

$ tar xvf zerynth.tar.xz

$ ./zerynth

その後、オンラインインストールを実行することを選び、最新バージョンを選択し、これが完了したら、アプリケーションを起動する。ログイン画面ではZerynthのユーザーアカウントを求められるが、便利なことに、DesignSparkアカウントでもログインが可能だ。

デバイスアクセス用にudevを構成するには、いくつか追加の手順が必要だ。最初に新しいルールファイルを作成する。

$ sudo vi /etc/udev/rules.d/99-kitprog2.rules

中身は以下の通りだ。

# Match KP2 PID/VID

SUBSYSTEMS=="usb", ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="f148", ENV{CY_KP2_PID_VID}="f148:04b4"

# Match KP2 CMSIS-DAP

SUBSYSTEMS=="usb", ATTRS{interface}=="KitProg2 CMSIS-DAP", ENV{CY_KP2_PID_VID}=="f148:04b4", MODE="0666"

 

その後、udevルールが再読み込みされた。

$ sudo udevadm control --reload-rules && udevadm trigger

この時点でボードが接続され、オンボードフラッシュがUSBストレージとしてマウントされたので、ファイルマネージャウィンドウが開く。さらに重要なのは、Zerynth Studioの上部にある[Device (デバイス)]フィールドでドロップダウンリストを選択すると、[Physical Devices (物理デバイス)]の下に[PSoC6 WiFi-Bt Pioneer Kit(PSoC6 WiFi-Btパイオニアキット)]が表示される。

準備はたったの3ステップで完了

アプリケーションをロードする準備として実行しなければならない初期手順は3つある。そして3つの手順はすべて、ツールバーの[Device (デバイス)]ドロップダウンの右側にある[Z]アイコンのボタンをクリックすることで完了できる。
はじめにボタンをクリックすると、ターゲットに登録ファームウェアが配置され、マイクロコントローラに対して一意のIDが取得され、Zerynthバックエンドに登録される。

2回目にクリックすると、仮想マシン(VM)を作成するプロンプトが表示される。

ZP_ZS_CreateVM_757f05929402d22fc2b145f98477fc4b4eb56a93.jpg

最後に、3回目にクリックすると、使用するVMを選択できる。

ZP_ZS_Virtualize_57f7e6ced9a34e1d18b310d5dea79cda22b6a8ce.jpg

これでZerynthアプリケーションを実行する最初の準備は完了だ。

サンプルプログラムからはじめよう

ZP_ZS_Blink_4bb9e65e6a417cf687a436fc2bdf1b170d38bfe7.jpg

左側のツールバーの電球アイコンをクリックすると、サンプル集が表示される。サンプル集には、出力にシリアルコンソールを使用する昔ながらの[Hello World]プログラムと、組み込みプラットフォームではより一般的な[LED blink]プログラムの両方が既にある。サンプルをクリックすると、プロジェクトの説明とmain.pyの内容が表示され、その後にコピーをローカルで作成することができる。

pinMode(LED0,OUTPUT)

# loop forever
while True:
    digitalWrite(LED0, HIGH)  # turn the LED ON by setting the voltage HIGH
    sleep(1000)               # wait for a second
    digitalWrite(LED0, LOW)   # turn the LED OFF by setting the voltage LOW
    sleep(1000)               # wait for a second

上記は[Blink (点滅)]のサンプルで、Arduinoで作業したことがある人なら見慣れたものだろう。プログラミングガイドには、これがピンと関数のネーミングのヒントになったという説明がある。

プロジェクトを実行[Verify]には、上部のツールバーのチェックマークアイコンをクリックし、上矢印アイコンの[Uplink]ボタンを押す。するとボードへスケッチをロードすることができる。

ZP_P6WBP_LED_407954b9699683199750b75da081756cef5cc433.jpg

この後、少し待つとLED5が点滅し始める。

その他の基本的なサンプルスケッチには例えばデジタル及びアナログ(ADC)読み取りがあり、高度なサンプルにはマルチスレッドやタイマーの使用をデモンストレーションするスケッチなどがある。

上級編へ

ZP_ZS_CapSense_d28d82dabeec2bd991af09e8fa7266bb0e9c3a8d.jpg

執筆時点では、PSoC用のサンプルスケッチは1つだけある。PioneerキットのCapSenseボタンとスライダーを読み取るというものだ。これに加えて、Zerynth標準ライブラリ機能を試すことのできる、より高度で汎用的なサンプルスケッチもある。例えば、RTC・ファイルシステムのサポート・割り込み・暗号化・省電力といった機能や、同じプロジェクトでのCコードとPythonコードの混在を可能にするC言語インターフェイスといった機能がある。

また、様々なIoTプラットフォーム、イーサリアムブロックチェーン、各種センサ、ModbusやMQTTなどの非常に便利な規格をサポートする公式ライブラリもある。コミュニティライブラリをGitHubに公開し、GitHubからインストールすることもサポートされている。

他にも優れた機能として、Zerynth Advanced Device Manager (ADM)がある。これは、管理されたOver The Air (OTA)アップデート、リモートプロシージャコール(ホストされたJSON RPCインターフェイスを使用してデバイス上のPython関数をリモートで呼び出すことができる)、デバイスごとのユーザーインターフェイスにハイレベルな機能を提供してくれる。これらの機能については、今後の投稿で紹介する予定だ。

まだ取り上げていないものには、PSoCプラットフォームの目玉である、自身で設定可能なアナログ及びデジタルブロックがある。少なくとも現時点では、これらは公式のCypressツールを使用して設定する必要があるようだ。ただし、デバイスの設定可能な領域は、ファームウェアの設定のそれよりもはるかに限定的だろうと推測される。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin