APDahlen Applications Engineer
Arduinoのクラシックなフォームファクタの最新版には、Qwiicポートが搭載されています。図1 は、Arduino UNO R4 WiFiのQwiic ポートに、代表的なAdafruit 3966 気圧センサを接続したものです。
Qwiicを初めてご使用になる方は、このリンクから簡単な紹介をご覧ください。
要約(TL;DR): Qwiic接続に対応したArduinoは、新しいハードウェアを簡単に試すための便利な方法を提供します。ただし、新しいUNO R4 WiFiには、I2Cについての考え方を変える新しいI2Cハードウェアポートが追加されているので、ご注意ください。.
具体的には、Qwiicボードが動作しない場合は、Qwiicポートを指定する際に、WireオブジェクトからWire1オブジェクトに変更する必要がある場合があります。
詳細な説明と動作例については、続けて以下をご覧ください。
図1: Arduino UNO R4 WiFiにAdafruit BMP388(3966)センサを接続した画像。すべての部品は、Arduino Plug and Makeベースに実装されています。
ArduinoとQwiicを使い始めるのに最も簡単な方法は何ですか?
UNO R4 WiFiを使い始めるのに最も簡単な方法の1つは、ArduinoのPlug and Makeキットを購入することです。このTechForumの記事では、このキットを、Arduino、プログラミング、センサのソフトウェアに焦点を当てた学習を始めるのに最適な出発点として紹介しています。
Plug and Makeキットには、以下のさまざまな適合Qwiicボード(Modulino)が付属しています。
Modulinoボードが好まれる理由は?
Modulinoボードは、物理的およびソフトウェアの面でUNO R4 WiFiに適合するよう、当初から開発されました。
-
図2に示すように、Modulinoボードはすべて互いに適合するように設計されており、Plug and Makeベースにネジで固定し、プロジェクトの堅固な土台を形成します。
-
Modulinoボードには、包括的なライブラリが含まれています。これには、基本的なLED点滅プログラムと同じくらい簡単に使えるサンプルスケッチが含まれています。これは、学習者がArduinnoをすぐに使いこなせるようになるための出発点となります。プログラミングの退屈なコンポーネントではなく、より高度なアプリケーションに集中することができます。Arduinoの流儀に忠実で、学習者は比較的複雑な動作を素早くコーディングすることができるため、興奮を呼び起こす可能性を秘めています。
-
ソフトウェアライブラリは、32ビットUNOの高度な機能に対応するように構築されています。具体的には、UNOのQwiic接続用にセカンダリWire1ポートを使用しています。
技術的なヒント: 簡単にアプリケーションを開発するというArduinoの哲学は、学問の分野としてのマイクロコントローラのより深い理解と照らし合わせて検討する必要があります。IDEの最新バージョンでは、IDEが基盤となる .hファイルおよび .cppファイルにジャンプできるため、この作業が簡単になりました。これにより、基盤となるサポートレイヤを簡単に確認することができます。
図2: 4つのModulinoボードをデイジーチェーン接続したArduino Plug and Makeの画像
QwiicセンサがArduino UNO R4 WiFiで認識されないという一般的な問題の訂正
最も可能性の高い問題は、誤ったWireオブジェクトの使用です。具体的には、Wire1(Qwiic)オブジェクトを使用すべきところで Wire(従来型)オブジェクトを使用していることです。この回答は、適切なQwiic搭載ボードが選択されていることを前提としています。
背景:WireオブジェクトとWire1オブジェクトの違いは何でしょうか?
まず、初期バージョンのUNOは8ビットのAtmel(Microchip)ATMega328 AVRを使用して構築されていたことを認識しておきましょう。最新のArduino R4は、高度な32ビットRenesas RA4M1 をベースにしています。そのため、複数の通信用ペリフェラルを含む高度な機能を備えています。
-
ATMega328 には、ハードウェアベースのI2Cモジュールが1つ搭載されていました。これはWireオブジェクトとして識別され、Wire.begin()、Wire.write()、およびWire.end() などのメソッドを使用してアクセスされていました。物理的には、このハードウェアはピンD18(SDA)およびピンD19(SCL)にマッピングされています。ほとんどの「Arduino」ライブラリは、このハードウェアペリフェラルの速度を活用するように構築されています。
-
RA4M1 には2つのI2C通信用ペリフェラルが搭載されています。先ほど説明したD18およびD19ユニットに加え、RA4M1 のP401(SDA)およびP400(SCL)にマッピングされた新しいQwiicポートも搭載されています。この2つ目のオブジェクトはWire1と呼ばれています。
Wireオブジェクトが Wire1に変更された動作例
図1は、Adafruit気圧センサに接続されたUNO R4 WiFiを示しています。センサボードはQwiic対応であり、Modulinoと同じ接続ワイヤを使用してR4に簡単に接続できます。
-
Adafruitの例に従って、サンプルソフトウェアをロードしました。
-
Adafruitライブラリがインストールされました。
-
I2Cのサンプルコードをコンパイルし、UNO R4にダウンロードしました。
-
システムはセンサを検出できませんでした。
従来のクイック対策(推奨されない)の説明
すぐ思いつくが、おそらくダーティな解決策として、Adafruit_BMP3XX.hファイル内でWireオブジェクトのアドレスを変更する方法があります。
この抜粋に示すように、変更は比較的簡単です。必要な作業は、WireをWire1に変更するだけです。
public:
Adafruit_BMP3XX();
bool begin_I2C(uint8_t addr = BMP3XX_DEFAULT_ADDRESS,
TwoWire *theWire = &Wire1);
これは、Adafruitライブラリを簡単に検出できない方法で破壊するため、「ダーティな」修正と呼ばれます。たとえば、UNO R3で同じセンサライブラリを使用した場合、ATmega328 エコシステムにはWire1オブジェクトが定義されていないため、コードはコンパイルされません。
クリーンな(推奨される)修正の説明
より良い解決策は、スケッチから呼び出しを変更することです。ライブラリを壊すのではなく、Wire1オブジェクトのアドレスで呼び出し関数を変更します。以下に例を示します。
if (!bmp.begin_I2C(BMP3XX_DEFAULT_ADDRESS, &Wire1)){
おわりに
Arduinoは約20年間にわたって私たちに親しまれてきました。その間、私たちは物事が1つの既知の場所に存在することに慣れてきました。この例は、古い方法を利用しようとして罠に陥ってしまう様子を示しています。
個人的には、Arduinoが追加のハードウェアを活用したのは良いことだと思います。Qwiicポートを既存のI2Cラインと並列にするのではなく、独立させたことで柔軟性が向上しました。
皆様からのご意見をお待ちしております。Arduino R4の他の部分でも、このような従来のやり方からの変化に遭遇したことはありませんか?
ご健闘をお祈りします。
APDahlen
関連情報
関連情報および有用な情報については、以下のリンクをご覧ください。
著者について
Aaron Dahlen氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間教壇に立ったことによってさらに強化されました(経験と知識の融合)。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。彼はミネソタ州北部の自宅に戻り、このような記事のリサーチや執筆を楽しんでいます。

