顕微鏡下でのBLE(24-52リンク)
NORDICは数年前からnRF52シリーズの新しいクリスタルを製造してきました。ただし、多くはまだ古いnRF24ファミリを使用しています。今日は、広告チャネルでそれらの間の双方向通信を整理する方法を紹介します。さらに、RSSIレベルを測定するnRF52クリスタルの機能を使用して、グラフにプロットします。
接続オプション
古い家族と新しい家族の間のワイヤレス機能に関する北欧のフォーラムを 読んで、 2つの可能性があることがわかりました。これは、ESB(Enhanced Shock Burst)プロトコルであり、そのアドオンであるGazellプロトコルです。これは確かに良いことですが、いくつかの困難があります。 nRF24側では、これは、nrf24le1およびnrf24lu1モジュール(nRF24L01バンドル+マイクロコンピューター)の場合にのみnRFgo_SDK_2.3.0にあるソースです。しかし、ラジオのアマチュアの間では、コントローラーのないそのようなモジュールはより普及しています。
図
1nRF52の側面からも、すべてがスムーズであるとは限りません。 SDKでは、ESBおよびGazellプロトコルは、既製のコンパイル済みモジュールの形式で提供されますが、これは氷ではありません。レジスターを直接操作して、それらを最下位レベルでリンクします。彼の3番目の記事でnRF51822を使用してビーコンを作成する方法についてはすでに説明しました。この出版物を読むことも興味深いでしょう。
まず、構築するシステムについて少し説明します。 BLEパケット形式の広告チャネルで送受信します。これにより、携帯電話とNRF Connectプログラム(androidおよびiOS)を使用できるようになります)放送中のパッケージをご覧ください。これは私たちを大いに助け、元のタスクを段階に分割することを可能にします。nRF24L01に無線チャネルを持つホストとm / cnRF52832にデバイスがあります。また、nRF24L01は単なる無線チャネルであり、コントローラーが必要です。ST社とは異なるm / cで同時に2つのプロジェクトを作成します。ホストは1秒間に数回無線パケットをブロードキャストします。これはデバイスによって受信され、RSSIレベルを測定し、その値を含む応答パケットを送り返します。リターンメッセージを受信した後、ホストはRSSIレベルの1バイトをCOMポートに出力します。受信レベルの変化を視覚的に追跡するために、小さなグラフィカルプログラムを作成しました。
ホストNrf24L01 + Stm8L152
それでは、Nrf24L01 + Stm8L152リンク上のホストから始めましょう。このタスクでは、写真を上に示したNrf24L01モジュールと、STM8L152C6T6に基づくデバッグボードであるSTM8L-DISCOVERYを使用しました。以下は、nRF24L01モジュールのピン配置です。
図2
STM8Lからのピン配置-DISCOVERY
#define LED_PORT GPIOC
#define LED_PIN GPIO_Pin_7
#define IRQ_PORT GPIOE
#define IRQ_PIN GPIO_Pin_0
#define CE_PORT GPIOD
#define CE_PIN GPIO_Pin_1
#define SPI_CLK_PORT GPIOE
#define SPI_CLK_PIN GPIO_Pin_4
#define SPI_MISO_PORT GPIOE
#define SPI_MISO_PIN GPIO_Pin_2
#define SPI_MOSI_PORT GPIOE
#define SPI_MOSI_PIN GPIO_Pin_5
#define SPI_CSN_PORT GPIOD
#define SPI_CSN_PIN GPIO_Pin_0
#define LED_PIN GPIO_Pin_7
#define IRQ_PORT GPIOE
#define IRQ_PIN GPIO_Pin_0
#define CE_PORT GPIOD
#define CE_PIN GPIO_Pin_1
#define SPI_CLK_PORT GPIOE
#define SPI_CLK_PIN GPIO_Pin_4
#define SPI_MISO_PORT GPIOE
#define SPI_MISO_PIN GPIO_Pin_2
#define SPI_MOSI_PORT GPIOE
#define SPI_MOSI_PIN GPIO_Pin_5
#define SPI_CSN_PORT GPIOD
#define SPI_CSN_PIN GPIO_Pin_0
図
3COMポートにデータを出力するために、m / scp2102へのUSBアダプターをPC2およびPC3レッグに接続して使用しました。あなたはここにそのドライバを入手することができます。結局、これが起こったことです。
図
4nRF24L01モジュールでは、電源ピンの間にはんだ付けされた電解コンデンサがあります。モジュールが安定して動作するように設定することをお勧めします。完全なプロジェクトとファームウェアはこことここにあります..。Stm8開発環境用のIARを使用して開くことができます。m / cをフラッシュして起動します。STM8L-DISCOVERYボードの青いLEDが1秒間に2回点滅し、パッケージが送信されていることを示します。今こそ、NRF Connectプログラムを開始して、図5aに示すようなものを見るときです。成功すると、おめでとうございます。タスクの前半が完了しました。
図5a________________________________図5b_______________________________図5c______________________________
ホストNrf24L01 + stm32F103
ホストの仕事から遠く離れないように、stm32F103 m / cについても同じことを繰り返します。これを行うために、USBコネクタが取り付けられた「青い錠剤」を取りました。これにより、アダプターを使用せずに、これらのドライバーを使用してUSBポートに直接データを出力することが可能になりました。stm32F103のプロジェクトをSTM32CubeMxにまとめました。
青い錠剤側からのピン配列
#define SPI_CE_PORT GPIOB
#define SPI_CE_PIN GPIO_PIN_4
#define SPI_IRQ_PORT GPIOB
#define SPI_IRQ_PIN GPIO_PIN_5
#define SPI_MISO_PORT GPIOB
#define SPI_MISO_PIN GPIO_PIN_6
#define SPI_CLK_PORT GPIOB
#define SPI_CLK_PIN GPIO_PIN_7
#define SPI_MOSI_PORT GPIOB
#define SPI_MOSI_PIN GPIO_PIN_8
#define SPI_CSN_PORT GPIOB
#define SPI_CSN_PIN GPIO_PIN_9
#define SPI_CE_PIN GPIO_PIN_4
#define SPI_IRQ_PORT GPIOB
#define SPI_IRQ_PIN GPIO_PIN_5
#define SPI_MISO_PORT GPIOB
#define SPI_MISO_PIN GPIO_PIN_6
#define SPI_CLK_PORT GPIOB
#define SPI_CLK_PIN GPIO_PIN_7
#define SPI_MOSI_PORT GPIOB
#define SPI_MOSI_PIN GPIO_PIN_8
#define SPI_CSN_PORT GPIOB
#define SPI_CSN_PIN GPIO_PIN_9
図6
プロジェクト自体とファームウェアをとることができ、こことここ。Stm32開発環境用のIARを使用して開くことができます。STM32F103のプログラミングには、どのプログラマーでも使用できます。これを使いました。
図7
電源を接続し、広告チャネルでパッケージを確認してみます。写真は図5aと同じになります。このボードでは何も点滅せず、両方のLEDが継続的に点灯します。PC13レッグの緑色のLEDを復活させることができませんでした。送信周波数はstm8L152のボードよりも高く、10Hzです。これらのパラメータはすべて、プロジェクト内で簡単に変更できます。
デバイスNrf52832
したがって、ホストを備えたシステムの最初の部分が機能していると想定します。次に、デバイスを起動します。これは、NORDIC PCA10040から、適切なKIT上で行うことができます
図8
あなたはまた、M / K nRF52832で任意のボードを使用することができます。古いデザインのボードを使用します。しかし、PCA10040キットで確認したところ、起動もしました。プロジェクトとファームウェアはこことここにあります。これは、古いSDK12.3.0を使用してKeil uVision4環境で構築されており、ここで取得できます。..。プロジェクトを問題なくビルドするには、そのフォルダーをnrf52832_workspace_SDK12 \ examples \ Peripheral \ディレクトリに配置する必要があります。実際、NORDICのプロジェクトには関連するリンクが多数含まれているため、任意の場所に収集されることはありません。 nRF52832をフラッシュするには、nRFgoStudioまたはnRF Connect forDesktopプログラムを使用できます。
デバイスプロジェクトを立ち上げるときは、最初にこれを行うことをお勧めします。なぜならデバイスはブロードキャストリスニングモードで動作し、無線パケットをオンエアで送信しません。これは、ホストからパケットを受信した後の応答としてのみ発生します。したがって、最初にデバイスが動作していることを確認する必要があります。これを行うには、プロジェクトのBleListen()関数をコメントアウトし、逆にBleRadioTransaction()のコメントを解除する必要があります。以下に示すように。
この場合、デバイス自体が無線パケットのブロードキャストを開始します。それらは電話で見ることができます。写真の例を図5bに示します。すべてが正常な場合は、すべてを元に戻し、ホストデバイスとデバイスデバイスの両方をオンにします。電話では、図5cのように、両方が表示されます。これは、デバイスがホストのメッセージを確認し、それに応じて独自のメッセージを送信したことを意味します。次に、ホストがRSSIレベルの応答メッセージを受信した場合、ホストはこの値をCOMポートに設定します。ここで、WindowsでLevelRssiプログラムを実行し、正しいポートを選択すると、デバイスの相対位置が異なるとRSSIレベルがどのように変化するかがわかります。
結論
別の考えを持ったとき、私は記事の準備をほぼ終えていました。nRF52840 m / cに基づいて、より一般的なデバイス、つまりpca10059ドングルをデバイスとして使用することにしました。これが彼の写真です。
図9
幸いなことに、私はそのようなボードを2つ持っていました。プロジェクトを再構築した後、ファームウェアをプロジェクトにアップロードするという問題が発生しました。nRF Connect forDesktopを使用してこれを行う必要があることはわかっていました、しかし、ドングルをDFU(ファームウェアアップデート)モードに入れる方法をすぐには理解しませんでした。これがその方法です。リセット後すぐにDFUモードになります。最初にドングルをUSBコネクタに接続してから、水平プッシャーでリセットボタン(プロセッサから最も遠い)を押す必要があります。ドングルの赤いLEDが点滅し始めます。 nRF Connectプログラムを開き、[Programmer]セクションの[Install]ボタンをクリックします。必要なソフトウェアがダウンロードされたら、「開く」ボタンをクリックします。
図10
目の前にプログラマウィンドウが開きます。
図11
左上で目的のCOMポートを選択します。次の図のようなものが表示されます。
図12
左側には、コントローラーのメモリーに何があるかが表示されます。 「HEXファイルの追加」ボタンをクリックすると、右側に記入するファイルを追加できます。ここにもいくつか問題がありました。 「すべて消去」ボタンと「消去&書き込み」ボタンは使用できません。ドングルにはプログラマーがいないため、プログラムはブートローダーを使用してロードされます。そして、MBRセクションから説明します。これらのセクションを消去すると、DFUモードを介したファームウェアは不可能になります。理論的には、画面の右半分にファームウェアを追加して、[書き込み]ボタンを押すだけです。すべてが正しいようですが、機能しません。プログラムはFLASHメモリのアドレス0から始まり、このアドレスはすでにMBRパーティションによって占有されています。これに対処する方法は、このチュートリアルで読むことができます。..。長く読んでいるかどうかは、Keilの例を使って写真で説明します。これは、非スタックプロジェクト用のマイクロプロセッサメモリ割り当てを備えたプロジェクトの写真です。
図
13FLASH-aポインターを0x1000に、RAMを0x20000008にシフトして、プロジェクトを再コンパイルする必要があります。
図14
その後、nRF Connect forDesktopプログラムを使用できるようになります。おそらくそれだけです。下のビデオで私がしたことを見ることができます。
yadi.sk/i/BGQQnga1HeN50A
yadi.sk/i/d8A9pU82kBcTMw
yadi.sk/i/XGac8xwpksVX7g
Caesar Satellite Group ofCompaniesの従業員
VladimirPecherskikh