diff --git a/_build/html/.doctrees/environment.pickle b/_build/html/.doctrees/environment.pickle index 1f1769c..b429163 100644 --- a/_build/html/.doctrees/environment.pickle +++ b/_build/html/.doctrees/environment.pickle Binary files differ diff --git a/_build/html/.doctrees/intro.doctree b/_build/html/.doctrees/intro.doctree index eb1815d..42679d2 100644 --- a/_build/html/.doctrees/intro.doctree +++ b/_build/html/.doctrees/intro.doctree Binary files differ diff --git a/_build/html/.doctrees/pre.doctree b/_build/html/.doctrees/pre.doctree index c9304b6..b00197e 100644 --- a/_build/html/.doctrees/pre.doctree +++ b/_build/html/.doctrees/pre.doctree Binary files differ diff --git a/_build/html/.doctrees/week1.doctree b/_build/html/.doctrees/week1.doctree index f74b8ff..47fbc91 100644 --- a/_build/html/.doctrees/week1.doctree +++ b/_build/html/.doctrees/week1.doctree Binary files differ diff --git a/_build/html/_images/SimpleLED_m5s.png b/_build/html/_images/SimpleLED_m5s.png new file mode 100644 index 0000000..0fcbdad --- /dev/null +++ b/_build/html/_images/SimpleLED_m5s.png Binary files differ diff --git a/_build/html/_images/ir_sensor_47owm.png b/_build/html/_images/ir_sensor_47owm.png new file mode 100644 index 0000000..ca40e10 --- /dev/null +++ b/_build/html/_images/ir_sensor_47owm.png Binary files differ diff --git a/_build/html/_images/setRotation.gif b/_build/html/_images/setRotation.gif new file mode 100644 index 0000000..1e239b0 --- /dev/null +++ b/_build/html/_images/setRotation.gif Binary files differ diff --git a/_build/html/_sources/intro.rst.txt b/_build/html/_sources/intro.rst.txt index 469149c..1663260 100644 --- a/_build/html/_sources/intro.rst.txt +++ b/_build/html/_sources/intro.rst.txt @@ -41,3 +41,10 @@ 発表会における評価基準も、上記の基準に準じる。 + +参考URL +========================================== + +- M5StickC非公式日本語リファレンス +- スイッチサイエンス M5StickC Plus +- M5StickCガイド \ No newline at end of file diff --git a/_build/html/_sources/pre.rst.txt b/_build/html/_sources/pre.rst.txt index 414c7f7..c8a4b53 100644 --- a/_build/html/_sources/pre.rst.txt +++ b/_build/html/_sources/pre.rst.txt @@ -130,7 +130,7 @@ シリアルポートの選択 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**本体をUSB接続したあと** で、 :numref:`fig_select_serialport` に示すように、「ツール」→「シリアルポート」で、書き込むデバイスが接続されているシリアルポートを選択する。Windowsの場合は、COM3のように、``COM + 数字`` で表記される。Macの場合は、``/dev/cu.usbserial-XXXXX`` のように表記される。 +**本体をUSB接続したあと** で、 :numref:`fig_select_serialport` に示すように、「ツール」→「シリアルポート」で、書き込むデバイスが接続されているシリアルポートを選択する。Windowsの場合は、COM3のように、``COM + 数字`` で表記される。Macの場合は、``/dev/cu.usbserial-XXXXXXXXXX`` のように表記される。 .. _fig_select_serialport: @@ -152,3 +152,13 @@ 「→」のアイコンボタンをおすと、プログラムの書き込みを開始します。 .. warning:: 書き込みに失敗するときは、環境設定で、「より詳細な情報を表示する」にチェックをいれてみてください。原因がすこしわかりやすくなります。 + + +バージョン情報 +-------------------------------------------------- + +- Arduino IDEのバージョン: 1.8.13 (Windows Store 1.8.42.0) +- ESP32 for Arduino のバージョン:1.0.5 +- M5StickCPlus ライブラリのバージョン: 0.0.1 + + diff --git a/_build/html/_sources/week1.rst.txt b/_build/html/_sources/week1.rst.txt index 7839d7b..7fc10a2 100644 --- a/_build/html/_sources/week1.rst.txt +++ b/_build/html/_sources/week1.rst.txt @@ -3,9 +3,13 @@ .. note:: 以下の項目について、全員がすべてを試す必要はありません。役割分担をして、確認と理解をすすめてください。 -電源の切り方 +電源の切り方・入れ方 ---------------------------------------- +- 電源を切るには、電源ボタン(M5と書かれたAボタンの左側面)を、6秒間長押しします。 +- 電源を入れるには、電源ボタンを、2秒間長押しします。 +- `M5StickCガイド `_ の、4ページ目、ハードウェアの概要が参考になります。 + プログラムの書き込み方 -------------------------------------- @@ -13,75 +17,259 @@ :ref:`writetom5` を参照してください。 -コードを書くときの注意 +コードを書くときのヒントと注意 +------------------------------------------------------- + +- 以下のソースコード例は、右上のボタンを押すと、クリップボードに簡単にコピーできます。 +- ソースコードのインデントは、CTRL+T (Macの場合はCommand+T)キーで、自動整形できます。 +- ``#include `` は、M5StickC用のコードです。 **M5StickCPlus** では、``#include `` に変更しないと、表示がおかしくなることがあります。 +- 大文字と小文字は厳密に区別されます。 +- 画面をつかうプログラムを書き込んだあと、画面を使わないプログラムを書き込むと、前のプログラムの画面が残ることがあります。 + +Serial通信 --------------------------------------- -- #include を #include にしないと、画面がおかしくなる -- 大文字小文字に注意 -- 画面をつかうプログラムを書き込んだあと、画面を使わないプログラムを書き込むと、前のプログラムの画面が残ることがある。 +:numref:`serial01` は、シリアルモニタへ文字列を出力するシンプルな例です。グローバル変数 num を 0 に設定したうえで、setup()関数が1回実行されます。その後、loop()関数が繰り返し実行されます。 +プログラムの出力をみるには、Arduino IDEで「シリアルモニタ」をひらいてください。コードエディタ右上の虫眼鏡アイコンボタンをおします。 +Serialクラスには、print()関数、println()関数、 printf()関数があります。Serial通信を用いると、デバイス側の変数の値や状況を、PC側で確認するプログラムを書くことができます。 -Serialモニタ ---------------------------------------- +.. literalinclude:: src/serial01.ino + :caption: + :name: serial01 + :language: arduino + :emphasize-lines: 2 + :linenos: +シリアルモニタは、デバイスからの出力を確認するだけではなく、デバイスに文字を送信することもできます。:numref:`serial02` は、シリアルモニタを介して、PCからデバイスに文字を送信する例です。シリアルモニタ上部のテキストエリアから 0 を送信すると、カウンタ num をリセットします。10〜14行目で、PCから送信された文字を、1文字ずつ ``Serial.read()`` で読み取って、配列 ``buf`` に格納しています。PCから複数の文字を1回で送信すると、 ``Serial.available()`` は連続して 1 (=true) を返しますので、1回に送信された文字をすべて ``buf`` に格納することができます。ちなみに、シリアルモニタで送信された文字列の最後は、改行コード(10)が付与されます。 -文字列の扱い ----------------------------------------- +.. literalinclude:: src/serial02.ino + :caption: + :name: serial02 + :language: arduino + :emphasize-lines: 10-14 + :linenos: - -LED ----------------------------------------- - - -外部のLEDを接続 ------------------------------------------ - -PWM (Pulse Width Modulation) - - -外部のセンサを接続 ------------------------------------------ - -CdSセル 明度センサ - -人感センサ - -圧力センサ - -曲げセンサ - - -加速度センサ ------------------------------------------ - - -赤外(InfraRed)リモコン ------------------------------------------- - -読み取り - -信号発信 - -内蔵赤外LED +.. note:: 16行目の処理を忘れると、どうなるでしょうか? また、buf が溢れると、なにが起きるでしょうか?プログラムを書くときは、常に例外的な事象がおきる可能性を考えておきましょう。ただし、全ての例外的な事象に対処するのは困難な場合が多いです。 本体の液晶ディスプレイ(LCD) ------------------------------------------- -- M5StickCのDisplay周り解析 +- M5StickCのDisplay周り解析 が詳しいです。 +- :numref:`lcd01` のサンプルでは、外側から内側に向かって、10ピクセルずつ余白を残しながら、色を変えて塗りつぶしています。その後、8,16,26ピクセルフォント(それぞれ1,2,4番)をsetCursor()関数で指定して、print()関数で文字列を描画しています。 +- M5StickCPlusの機能である液晶ディスプレイ(LCD)を使用するため、 ``#include `` を指定し、``M5.begin()`` を呼び出しています。 + +.. literalinclude:: src/lcd01.ino + :caption: + :name: lcd01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + +画面の向きは、setRotation() 関数で、設定します。0〜3までの整数で、指定します。 + +.. figure:: images/setRotation.gif + :scale: 100% + +.. note:: フォントの種類を設定するときは、setTextFont() や、setCursor()の第3引数をつかいます。setTextSize()は、指定したフォントを何倍に引き伸ばして表示するか?なので、基本は1を指定することが多いです。倍率を増やすと、ギザギザが目立ちます。 + 本体のボタン ------------------------------------------ +本体には、3つのボタンがあります。 +(参考:`M5StickCガイド `_ の、4ページ目、ハードウェアの概要) + +:numref:`button01` に、ボタンをおしたらシリアルモニタに表示する例を示します。ボタンも、M5StickC/CPlusの機能なので、 ``#include `` を指定し、``M5.begin()`` を呼び出しておく必要があります。また、ボタンの状態を読み出して、ボタンオブジェクト(BtnA,BtnB)に設定するために、 ``M5.update()`` を、ループのなかに入れておく必要があります( `update()の定義 `_ )。長押しと普通押しを区別したい場合は、ifで確認する順番(長押しを先に判定する)が重要です。 + +.. literalinclude:: src/button01.ino + :caption: + :name: button01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + +.. note:: `非公式リファレンスの「ボタン管理(Button)」 `_ も参考になります。 + + +文字列の扱い、16進数や10進数の変換 +------------------------------------------------------------- + +:numref:`str01` に、文字列から整数に変換したり、16進数表現の文字列を10進数に変換する例を示します。 +Stringクラスを用いると、char配列 / byte配列 / 小文字変換や、空白改行の削除(ただし文字列の前後のみ)、部分文字列の取得などができます。 +元のデータが保持されるメソッドと、破壊されるメソッドがあることに注意しましょう。 +M5系デバイスのLCDでは、色を16ビット値(赤5bit/緑6bit/青5bit)で表現しています。 ``M5.Lcd.color565()`` という関数もありますが、ここではビット演算の理解を深めるため、関数を定義しています。 +C言語のポインタや、シフト演算などを理解していると、このような処理を円滑に記述できるようになります。 + +.. literalinclude:: src/str01.ino + :caption: + :name: str01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + +.. note:: 参考:https://qiita.com/nnn112358/items/ea6b5e81623ba690343c + + +ブザー(Beep) +------------------------------------- + +:numref:`sound01` は、内蔵Beepを鳴らすサンプルです。音の周波数は、最初の1オクターブ (f[0]〜f[6]) のみを配列宣言時に指定し、残りの3オクターブはsetup()内で、倍数を計算して配列に設定しています。 + +``setBeep()`` と ``beep()`` を使うと、同じビープ音を使い回すときは記述が短くて便利ですが、通常は ``tone()`` のほうが簡潔です。 +どちらの記法でも、命令実行のあと、音の停止を待たずに、すぐに次の処理に移行します(ノンブロッキング)。 +継続ミリ秒数(ms)は、 ``M5.Beep.update()`` が周期的に呼び出せるときに指定し、それ以外は省略するとよいでしょう。(結局、 ``delay()`` と ``mute()`` が必要になるため) + +.. literalinclude:: src/sound01.ino + :caption: + :name: sound01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + + +内蔵LED(赤・赤外) +---------------------------------------- + +M5StickCPlusには、2つのLEDランプが内蔵されています。GPIO(General Purpose I/O)10 には、赤色LED、GPIO9 には、赤外LEDが接続されています。 +場所は、USBケーブルを挿す面の反対側の面にある、小さな穴2つの内側です。 + +:numref:`led01` は、赤色LEDを点滅させるシンプルなプログラムです。 + +.. literalinclude:: src/led01.ino + :caption: + :name: led01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + + +外部のLED等を接続 +----------------------------------------- + +外部のLED等は、 G0, G25, G26 に接続します。 +サンプルプログラムは、:numref:`led01` と同様です。PIN 番号を、0 / 25 / 26 に変更してください。 + +ブレッドボードに、抵抗とLEDを直列に接続します。 +LEDの長い足のほうに、G0 (or G25 or G26) をジャンパワイヤで接続し、反対側(短い足)のほうを、GND (グランド)に接続します。 +ポートを「HIGH」にすると、3.3Vの電圧がかかります。 + +.. figure:: images/SimpleLED_m5s.png + :scale: 60% + +.. warning:: LEDのみで回路を構成しないよう注意!一般に、LEDは抵抗をつないで使用しないと、故障したり、最悪の場合破裂したりして危険です。ただし、抵抗入りLEDであれば問題ありません。 + +PWM (Pulse Width Modulation) +------------------------------------------------------------------- + +パルス幅変調とは、信号の周期Tに対する、パルスの幅を変化させる方法です。 +直流モータの速度制御や、サーボモータの制御、LEDの明度調整などに使われます。 + +:numref:`pwm01` は、赤色LEDを点滅させるシンプルなプログラムです。 ``ledcSetup(チャンネル, 周波数, 分解能)`` で、PWMチャンネル(0〜3)に対する周波数と分解能設定をし、 ``lecAttachPin(ピン番号, チャンネル)`` で、PWMチャンネルを適用する出力ピンを選択します。そのあと、 ``ledcWrite(チャンネル, 値)`` で、分解能で設定したビットで表現できる最大値+1以下の値を指定することで、デューティー比を設定します。:numref:`pwm01` の場合、分解能で8bitを指定したので、0〜256 の値が、デューティー比 0〜1 のパルス生成に対応します。 + +.. literalinclude:: src/pwm01.ino + :caption: + :name: pwm01 + :language: arduino + :linenos: + :emphasize-lines: 6-7, 15,19 + +.. note:: ソースコードのコメントにも書いていますが、周波数を小さくする(20〜30程度)と、どうなるでしょうか?ぜひやってみてください。 + +サーボモータ(サーボハット利用) +------------------------------------------------------------- + +:numref:`servohat01` は、`サーボハット `_ のサーボモータを動かすサンプルです。サーボモータの制御はPWMですので、基本的に、上のPWMとやっていることは同じです。おまけとして、LEDも点灯させました。``map関数`` は、Arduinoで使える関数で、範囲に対応する値を変換するときに使います。ここでは、サーボ制御で用いる5〜33の値を、LED制御の値0〜256に変換しています。 + +.. literalinclude:: src/servohat01.ino + :caption: + :name: servohat01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + + +外部のセンサを接続 (ADC) +----------------------------------------- + +ADCは、Analog to Digital Converter の意味です。 +``analogRead(PIN)`` は、PIN番ピンの電圧(0~3.3V)を、0〜4095 の値で返します。一般に、抵抗値が変化するタイプのセンサは、この方法をつかって、読み取ることができます。 + +.. warning:: `ADC `_ にかいてあるように、G26, G32, G33, G36のみ使えます。G26は、無線利用時には使えません。 + +:numref:`cds01` はCdSセル(照度センサ) の値を読み取るサンプルです。 + +.. literalinclude:: src/cds01.ino + :caption: + :name: cds01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + +圧力センサや、曲げセンサも、同様の方法で利用することができます。 + + +加速度センサ +----------------------------------------- + +:numref:`accgyro01` は、内蔵されている加速度センサ(MPU6886) の値を表示するサンプルです。ちなみに、IMUとは、Inertial Measurement Unit: 慣性計測装置 の略です。 +「ツール」→「シリアルプロッタ」をひらくと、値をグラフでみることができます。 +ジャイロセンサの値も取得可能です。 + + +.. literalinclude:: src/accgyro.ino + :caption: + :name: accgyro01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + +赤外(InfraRed)リモコン +------------------------------------------ + +信号の読み取り +~~~~~~~~~~~~~~~~~~~~~ + +赤外線リモコン受信モジュールが必要です。ここでは、`GP1UXC41QS `_ を前提に、話をすすめます。 + +また、準備として、ライブラリマネージャにて、IRremoteESP8266 をインストールします。ちなみに、テストしたバージョンは2.7.15でした。 + +ファイルメニュー → スケッチ例 → IRremoteESP8266 → IRrecvDumpV2 を選択します。 + +ブレッドボードに、以下の図のように配線します。Pとかいてある面が、受光器が出っ張っている面です。47Ωの抵抗を、5Vとの間に入れます。 +赤外線リモコン受信モジュールに接続したピンを ``const uint16_t kRecvPin = 36;`` として設定します。 +受光器にリモコンを向けて、ボタンを押すと、シリアルモニタに情報が表示されます。ここでは、Protocol : NEC , Code 0x2FD48B7 (32 Bits) と表示されたとします。 + +.. figure:: images/ir_sensor_47owm.png + :scale: 60% + + +信号の送信 +~~~~~~~~~~~~~~~~~~~~~~~~ + +内蔵の赤外LEDを用いて、信号を送信する例を :numref:`irsend01` に示します。 +赤外光が弱いため、かなり近づかないと(50cm程度)反応しない場合があります。 +外部の赤外LEDを用いると、距離を伸ばすことができます。 + +.. literalinclude:: src/irsend01.ino + :caption: + :name: irsend01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + + + スプライト ------------------------------------- 画面のちらつき防止 -ブザー -------------------------------------- -サーボモータ --------------------------------------- diff --git a/_build/html/genindex.html b/_build/html/genindex.html index 4fa130e..9fbda48 100644 --- a/_build/html/genindex.html +++ b/_build/html/genindex.html @@ -92,6 +92,7 @@ +
  • 参考URL
  • 事前準備
  • 1週目
  • 2週目
  • -
  • Arduino
  • -
  • Tutorial
  • -
  • Section Structure
  • -
  • Body Elements
  • -
  • Inline Markup
  • -
  • Directive Quick Reference
  • -
  • Interpreted Text Role Quick Reference
  • -
  • Conclusion
  • @@ -213,6 +206,14 @@

    発表会における評価基準も、上記の基準に準じる。

    +
    +

    参考URL

    + +
    diff --git a/_build/html/objects.inv b/_build/html/objects.inv index 97338f3..d27306b 100644 --- a/_build/html/objects.inv +++ b/_build/html/objects.inv Binary files differ diff --git a/_build/html/pre.html b/_build/html/pre.html index f1e833c..cfc8fab 100644 --- a/_build/html/pre.html +++ b/_build/html/pre.html @@ -93,6 +93,7 @@
    • 実験の目的
    • 実験のすすめかた
    • +
    • 参考URL
    • 事前準備
    • 1週目
    • @@ -289,7 +291,7 @@

      シリアルポートの選択

      -

      本体をUSB接続したあと で、 図 6 に示すように、「ツール」→「シリアルポート」で、書き込むデバイスが接続されているシリアルポートを選択する。Windowsの場合は、COM3のように、COM + 数字 で表記される。Macの場合は、/dev/cu.usbserial-XXXXX のように表記される。

      +

      本体をUSB接続したあと で、 図 6 に示すように、「ツール」→「シリアルポート」で、書き込むデバイスが接続されているシリアルポートを選択する。Windowsの場合は、COM3のように、COM + 数字 で表記される。Macの場合は、/dev/cu.usbserial-XXXXXXXXXX のように表記される。

      シリアルポートの選択

      図 6 シリアルポートの選択

      @@ -308,6 +310,14 @@
      +
      +

      バージョン情報

      +
        +
      • Arduino IDEのバージョン: 1.8.13 (Windows Store 1.8.42.0)
      • +
      • ESP32 for Arduino のバージョン:1.0.5
      • +
      • M5StickCPlus ライブラリのバージョン: 0.0.1
      • +
      +
      diff --git a/_build/html/search.html b/_build/html/search.html index afb27de..29a89b4 100644 --- a/_build/html/search.html +++ b/_build/html/search.html @@ -94,6 +94,7 @@
      • 実験の目的
      • 実験のすすめかた
      • +
      • 参考URL
      • 事前準備
      • 1週目
      • 2週目
      • diff --git a/_build/html/searchindex.js b/_build/html/searchindex.js index e84a1e5..d34248b 100644 --- a/_build/html/searchindex.js +++ b/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["arduino","conclusion","index","intro","pre","tutorial","week1","week2"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["arduino.rst","conclusion.rst","index.rst","intro.rst","pre.rst","tutorial.rst","week1.rst","week2.rst"],objects:{},objnames:{},objtypes:{},terms:{"#.":[],"#]":5,"#include":[0,6],"$date":5,"$revision":5,"%i":[],"'s":5,"()":0,"(\"":0,"(bm":6,"(i":5,"(infrared":2,"(int":[],"(link":[],"(num":[],"(pin":0,"(void":[],"(windows":[],");":0,")\"":5,")\\":[],"){":[],"**":[],"*\"":5,"*]":5,"++":[],"+-":0,"+\"":5,", \"":5,", and":5,", num":[],", or":5,"-+":0,"--":0,"-\"":5,"-arduinoide":[],"-based":3,"-c":4,"-dict":5,"-display":6,"-enumerated":5,"-esp":[],"-free":5,"-io":0,"-left":5,"-level":5,"-literal":5,"-m":[],"-notes":5,"-numbered":5,"-numfig":5,"-o":5,"-pages":[],"-quote":5,"-rest":5,"-role":5,"-science":4,"-ship":[0,6],"-specific":5,"-start":[],"-symbol":5,"-table":5,"-users":[1,5],"-xxxxx":4,".)":5,"..":5,".\"":5,".\\":[],".\n#":[],".arduino":4,".c":[],".cc":4,".com":[0,4,6],".espressif":4,".ftdichip":4,".githubusercontent":[],".h":[0,6],".htm":4,".html":[0,5],".info":5,".ino":[0,1],".istlab":5,".jp":[0,1,5],".json":4,".mongonta":[],".net":5,".org":5,".png":5,".printf":0,".sf":5,".sourceforge":5,".storange":0,".switch":4,".txt":5,".usbserial":4,".zip":[],"//":0,"/adc":0,"/analogread":0,"/arduino":[],"/blog":[0,6],"/catalog":4,"/cdm":[],"/cplus":4,"/crc":0,"/cu":4,"/dev":4,"/directives":5,"/dl":4,"/docs":5,"/download":[],"/drivers":4,"/en":4,"/espressif":[],"/factorytest":0,"/howto":[],"/i":0,"/images":5,"/isprime":[],"/linux":[],"/m":[0,6],"/macos":[],"/main":4,"/numbering":5,"/package":4,"/pages":[],"/peripherals":0,"/ref":5,"/reference":[0,6],"/reverse":5,"/rmt":0,"/roles":5,"/rst":5,"/sketch":[0,1],"/software":4,"/unofficial":[0,6],"/vcp":4,"/work":[0,6],"2d":0,"2s":0,"3d":0,"3v":0,"5stack":[3,4],"5stick":[],"5stickc":[0,4,6],"5stickcplus":[0,3,6],":/":[0,1,4,5,6],"::":5,":>":6,":\"":5,":numref":[],">":5,"@python":5,"[cit":5,"\")":[],"\",":[0,5],"\"..":5,"\":":5,"\\n":0,"\u2026\u300d":4,"\u2192\u300c":4,"\u2192\u300d":4,"\u3001/":[],"\u3001:":[],"\u3001\u2714":4,"\u3001\u300c":4,"\u3001esp":3,"\u3002:":4,"\u3002\u300c":4,"\u3002\u3061":4,"\u3002\u307b\u3052\u307b\u3052\u307b\u3052":5,"\u3002\u307e\u305f":4,"\u3002\uff08":[],"\u3002arduino":4,"\u3002c":[],"\u3002ide":4,"\u3002mac":4,"\u3002pc":[],"\u3002windows":4,"\u300cm":[],"\u300d\u2192":4,"\u300d\uff09":3,"\u3042\u3063":[],"\u3042\u3068":[4,6],"\u3042\u308a":[1,4,6],"\u3042\u308b":6,"\u3044\u3061\u3070\u3093":1,"\u3044\u308a":5,"\u3044\u308b":[1,3,4],"\u3044\u308c":4,"\u3046\u307e\u304f":3,"\u3046\u307e\u304f\u3044\u304b":3,"\u3048\u3089\u3076":4,"\u304a\u304b\u3057\u304f":6,"\u304a\u3051\u308b":3,"\u304a\u3057":[],"\u304a\u3059":4,"\u304a\u3082":4,"\u304a\u3088\u3073":3,"\u304a\u308a":3,"\u304b\u3051\u308b":3,"\u304b\u3064":[],"\u304b\u3069\u3046":3,"\u304b\u3084":[],"\u304b\u3089":[0,3,4,5],"\u304b\u308f\u308a":3,"\u304c\u3042\u308a":4,"\u304c\u304f\u308b":[],"\u304c\u3064\u304f":5,"\u304c\u3069":3,"\u304c\u308f\u304b\u308a":[],"\u304f\u3060":[4,6],"\u3053\u3053":[1,4,5],"\u3053\u3053\u306e":1,"\u3053\u3061\u3089":4,"\u3053\u3068":[3,4,6,7],"\u3053\u306e":[0,3],"\u3053\u308c\u3089":0,"\u3055\u3044":[4,6],"\u3055\u3089\u306b":5,"\u3057\u304b":5,"\u3057\u3066":6,"\u3059\u3053\u3057\u308f\u304b\u308a":4,"\u3059\u3059\u3081":[3,6],"\u3059\u3059\u3081\u304b":2,"\u3059\u3059\u3081\u308b":3,"\u3059\u3079\u3066":6,"\u3059\u308b":[1,3,5],"\u305b\u308b":3,"\u305d\u306e":[2,3],"\u305f\u3044":0,"\u305f\u3044\u304b":3,"\u305f\u304b":3,"\u305f\u3060\u3057":4,"\u305f\u3081":[3,4],"\u305f\u3089":4,"\u305f\u308a":[3,4],"\u3060\u3046\u3048":3,"\u3060\u3055\u3044":[4,6],"\u3060\u3068":5,"\u3064\u3044":5,"\u3064\u304b\u3046":6,"\u3064\u304f\u3088\u3046":5,"\u3066\u307f\u307e\u3057\u3087":7,"\u3067\u304d":[3,4,5],"\u3067\u304d\u308b":[3,4],"\u3067\u3059":[0,1,4,5],"\u3067\u3082":[],"\u3068\u3044\u3046":4,"\u3068\u3048":0,"\u3068\u304d":[2,4,5],"\u3068\u304f":3,"\u3068\u3057":[],"\u3068\u3057\u3066":[3,5],"\u3068\u308b":3,"\u3069\u3046":3,"\u306a\u3044":[4,5,6],"\u306a\u304b\u3063":3,"\u306a\u304c\u3089":3,"\u306a\u304f":4,"\u306a\u3057":4,"\u306a\u3063":3,"\u306a\u307f":4,"\u306a\u308a":[0,4,5],"\u306a\u308b":[3,6],"\u306b\u3057":6,"\u306b\u3059\u3059\u307f":4,"\u306b\u3059\u308c":5,"\u306b\u3064\u3044\u3066":[1,3,6],"\u306b\u3088\u3063":[],"\u306b\u3088\u308b":[1,3,5],"\u306b\u5bfe\u3059\u308b":3,"\u306e\u3061\u3089\u3064\u304d":6,"\u306e\u3067":4,"\u306e\u307f":4,"\u306e\u3088\u3046":[0,4,5],"\u3072\u3089\u304d":4,"\u3072\u3089\u304f":4,"\u3079\u304d":3,"\u307b\u3046":0,"\u307b\u3052\u307b\u3052":[],"\u307e\u3057":1,"\u307e\u3059":[0,1,4,5],"\u307e\u305b":6,"\u307e\u3063":1,"\u307e\u3067":4,"\u307e\u3068":1,"\u307e\u3068\u3081\u308b":3,"\u307f\u3066":4,"\u3082\u3061":[],"\u3082\u3068":3,"\u3084\u3059":3,"\u3084\u3059\u304f":[3,4],"\u3088\u3044":[],"\u3088\u3046":[0,3,4],"\u3088\u304f":1,"\u3088\u308a":4,"\u3089\u308c":3,"\u3089\u308c\u308b":3,"\u308c\u308b":4,"\u308f\u304b\u308a":3,"\u3092\u304a\u3057":4,"\u3092\u3059\u308c":5,"\u3092\u3064\u304b\u3044":5,"\u30a2\u30a4\u30b3\u30f3":4,"\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3":4,"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9":[],"\u30a2\u30c9\u30d0\u30fc\u30bf\u30a4\u30ba":6,"\u30a2\u30c9\u30d0\u30fc\u30bf\u30a4\u30ba\u30e1\u30f3\u30c8":[],"\u30a2\u30c9\u30ec\u30b9":[1,5],"\u30a4\u30af\u30ea\u30d7\u30b9":4,"\u30a4\u30f3\u30af\u30eb\u30fc\u30c9":4,"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb":2,"\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8":3,"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3":[],"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3intro":[],"\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30de\u30a4\u30b3\u30f3":[],"\u30ab\u30e9\u30fc":3,"\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3":5,"\u30af\u30ea\u30c3\u30af":[1,5],"\u30b0\u30eb\u30fc\u30d7":3,"\u30b3\u30d4\u30fc":4,"\u30b3\u30f3\u30d1\u30a4\u30eb":4,"\u30b3\u30f3\u30d1\u30a4\u30eb\u30c6\u30b9\u30c8":5,"\u30b3\u30fc\u30c9":2,"\u30b3\u30fc\u30c9\u30a8\u30c7\u30a3\u30bf":4,"\u30b5\u30a4\u30c8":[1,5],"\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":[],"\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0":4,"\u30b5\u30fc\u30d0":[2,3],"\u30b5\u30fc\u30dc\u30e2\u30fc\u30bf":[2,3],"\u30b5\u30fc\u30dc\u30e2\u30fc\u30bf\u30fc":[],"\u30b7\u30b9\u30c6\u30e0":[3,5],"\u30b7\u30ea\u30fc\u30ba":3,"\u30b9\u30ad\u30c3\u30d7":[],"\u30b9\u30b1\u30c3\u30c1":4,"\u30b9\u30bf\u30fc\u30c8\u30e1\u30cb\u30e5\u30fc":4,"\u30b9\u30c6\u30c3\u30d7":4,"\u30b9\u30d7\u30e9\u30a4\u30c8":2,"\u30bb\u30f3\u30b5":[2,3],"\u30bb\u30f3\u30b5\u30fc":[],"\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":[0,1,4],"\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9":4,"\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30b5\u30a4\u30c8":4,"\u30c1\u30a7\u30c3\u30af":4,"\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb":5,"\u30c1\u30fc\u30e0":3,"\u30c4\u30fc\u30eb":4,"\u30c6\u30ad\u30b9\u30c8":4,"\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2":4,"\u30c6\u30b9\u30c8":5,"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4":[2,3],"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u30b5\u30a4\u30ba":4,"\u30c7\u30d0\u30a4\u30b9":4,"\u30c7\u30d0\u30a4\u30b9\u30de\u30cd\u30fc\u30b8\u30e3":4,"\u30c7\u30fc\u30bf":3,"\u30c9\u30e9\u30a4\u30d0":4,"\u30d0\u30c3\u30c6\u30ea":4,"\u30d0\u30fc\u30b8\u30e7\u30f3":4,"\u30d1\u30cd\u30eb":3,"\u30d5\u30a1\u30a4\u30eb":[0,4,5],"\u30d5\u30a3\u30fc\u30eb\u30c9":4,"\u30d6\u30b6\u30fc":[2,4],"\u30d6\u30ed\u30c3\u30af\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0":4,"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0":3,"\u30d7\u30ed\u30b0\u30e9\u30e0":2,"\u30d9\u30fc\u30b9":4,"\u30da\u30fc\u30b8":[2,3],"\u30dc\u30bf\u30f3":[2,3,4],"\u30dc\u30fc\u30c9":[],"\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3":4,"\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3\u30fc":[],"\u30dd\u30fc\u30c8":4,"\u30de\u30a4\u30af\u30ed\u30d7\u30ed\u30bb\u30c3\u30b5":3,"\u30de\u30a4\u30b3\u30f3\u30dc\u30fc\u30c9":4,"\u30de\u30a4\u30b3\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb":3,"\u30e2\u30b8\u30e5\u30fc\u30eb":[],"\u30e2\u30cb\u30bf":2,"\u30e2\u30fc\u30c9":0,"\u30e9\u30a4\u30d6\u30e9\u30ea":[],"\u30e9\u30a4\u30d6\u30e9\u30ea\u30de\u30cd\u30fc\u30b8\u30e3":4,"\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9":6,"\u30ea\u30e2\u30b3\u30f3":2,"\u30ea\u30f3\u30af":[0,1,2,4],"\u30ec\u30d9\u30eb":3,"\u30ec\u30dd\u30fc\u30c8":3,"\u30fb\u65b9\u5411\u6027":3,"\u4e00\u756a\u5de6":4,"\u4e00\u822c\u7684":3,"\u4e00\u8cab":3,"\u4e00\u8cab\u6027":[],"\u4e0a\u8a18":3,"\u4e0b\u8a18":[],"\u4e0e\u3048":3,"\u4e21\u65b9":5,"\u4e88\u5099":3,"\u4e88\u7fd2":3,"\u4e8b\u524d":2,"\u4e92\u63db":4,"\u4eba\u611f":6,"\u4eba\u6c17":[],"\u4ed5\u7d44":3,"\u4ee5\u4e0b":[3,4,6],"\u4ee5\u964d":4,"\u4f5c\u54c1":3,"\u4f5c\u696d":[3,4],"\u4f7f\u3063":4,"\u4f7f\u308f":[4,6],"\u4f7f\u7528":[3,4],"\u4fe1\u53f7":6,"\u5099\u3048":3,"\u50cd\u304d":3,"\u5165\u308c\u308b":[],"\u5165\u529b":[3,4],"\u5168\u54e1":6,"\u5171\u6709":3,"\u5185\u5bb9":3,"\u5185\u8535":6,"\u5185\u8535irled":[],"\u5185\u90e8":0,"\u5186\u6ed1":3,"\u518d\u73fe":3,"\u518d\u8d77\u52d5":4,"\u5199\u771f":3,"\u51fa\u3059":[],"\u5206\u62c5":[3,6],"\u5207\u308a\u65b9":2,"\u521d\u5fc3":4,"\u521d\u5fc3\u8005":[],"\u5229\u7528":4,"\u5236\u5fa1":2,"\u5272\u5408":3,"\u5275\u9020":3,"\u52a0\u901f\u5ea6":2,"\u52b9\u679c":3,"\u52d5\u304b":3,"\u52d5\u4f5c":3,"\u533a\u5225":3,"\u5341\u5206":3,"\u5358\u8a9e":3,"\u539f\u56e0":4,"\u53c2\u7167":[0,5,6],"\u53c2\u8003":[1,2,3,4,5],"\u53d6\u5f97":2,"\u53f3\u4e0a":4,"\u5404\u6a5f":3,"\u5404\u81ea":3,"\u5411\u3051":[3,4],"\u5411\u4e0a":4,"\u542b\u307e":[],"\u542b\u3080":3,"\u5468\u308a":6,"\u547c\u3073":4,"\u56db\u89d2":4,"\u56f3\u3078":5,"\u56f3\u3084":3,"\u56f3\u8868":5,"\u5727\u529b":6,"\u57f7\u7b46":3,"\u57fa\u672c":3,"\u57fa\u6e96":2,"\u57fa\u790e":3,"\u5831\u544a":3,"\u5831\u544a\u66f8":3,"\u5834\u5408":[0,3],"\u5897\u52a0":4,"\u5916\u90e8":2,"\u5927\u6587\u5b57":6,"\u5931\u6557":4,"\u59cb\u3081":4,"\u5b66\u3093":[3,7],"\u5b66\u7fd2":[],"\u5b89\u4fa1":3,"\u5b8c\u6210":3,"\u5b9f\u4e16":3,"\u5b9f\u4e16\u754c":3,"\u5b9f\u65bd":3,"\u5b9f\u9a13":2,"\u5bb9\u91cf":4,"\u5c0f\u578b":3,"\u5c0f\u6587\u5b57":6,"\u5c11\u306a\u3044":0,"\u5c11\u306a\u304f":3,"\u5f0f\u65e5\u672c\u8a9e":6,"\u5f15\u7528":3,"\u5f37\u8abf":0,"\u5f62\u5f0f":3,"\u5f79\u5272":6,"\u5f8c\u7d99":4,"\u5fc5\u305a":3,"\u5fc5\u8981":[3,4,6],"\u601d\u308f":0,"\u60c5\u5831":[3,4],"\u610f\u56f3":3,"\u6210\u679c\u7269":3,"\u6271\u3044":2,"\u6271\u3046":[],"\u62b5\u6297":0,"\u62bc\u3059":4,"\u62bd\u8c61":3,"\u62c5\u5f53":3,"\u62e1\u5927":[1,5],"\u62e1\u5f35":4,"\u6307\u6a19":[],"\u6307\u793a":[3,4],"\u633f\u3057":4,"\u63a5\u7d9a":[2,4],"\u63db\u3048":3,"\u642d\u8f09":3,"\u6559\u54e1":3,"\u6570\u5b57":4,"\u6587\u4f53":3,"\u6587\u5b57\u5217":2,"\u6587\u6cd5":[],"\u6587\u732e":3,"\u65e5\u672c\u8a9e":4,"\u660e\u5ea6":6,"\u660e\u5feb":[],"\u660e\u78ba":3,"\u660e\u8a18":3,"\u6642\u523b":2,"\u66f2\u3052":6,"\u66f8\u304d":3,"\u66f8\u304d\u8fbc\u307f":2,"\u66f8\u304d\u8fbc\u3080":[4,6],"\u66f8\u304d\u8fbc\u3093":6,"\u66f8\u304f":2,"\u66f8\u5f0f":3,"\u6700\u65b0":[],"\u6700\u8fd1":4,"\u6709\u540d":4,"\u6709\u7528":3,"\u671f\u9593":3,"\u672c\u4f53":[2,4],"\u672c\u5b9f\u9a13":4,"\u67d4\u8edf":4,"\u691c\u7d22":4,"\u6982\u8981":[],"\u69cb\u7bc9":3,"\u6a5f\u5668":3,"\u6a5f\u80fd":3,"\u6b8b\u3059":3,"\u6b8b\u308b":6,"\u6bb5\u968e":4,"\u6c7a\u3081":3,"\u6ce8\u610f":[0,2,4],"\u6d17\u3044\u51fa\u3057":3,"\u6d3b\u304b\u3057":7,"\u6d3b\u52d5":3,"\u6db2\u6676":[2,3],"\u6e08\u307f":[],"\u6e96\u3058\u308b":3,"\u6e96\u5099":[2,3],"\u7121\u7dda":3,"\u7279\u6709":4,"\u72ec\u81ea":3,"\u73ed\u3068\u3057":3,"\u73ed\u3068\u3057\u3066":3,"\u7406\u7531":3,"\u7406\u89e3":6,"\u74b0\u5883":[2,3],"\u7528\u3044":3,"\u7528\u8a9e":3,"\u753b\u50cf":1,"\u753b\u9762":[3,4,6],"\u756a\u53f7":5,"\u767a\u4fe1":6,"\u767a\u58f2":4,"\u767a\u8868":3,"\u767a\u8868\u4f1a":3,"\u767a\u97f3":4,"\u767b\u5834":3,"\u76ee\u7684":2,"\u76f4\u63a5":0,"\u78ba\u8a8d":[3,6],"\u793a\u3055":3,"\u793a\u3057":[0,1,5],"\u793a\u3059":[3,4],"\u7a0b\u5ea6":3,"\u7ba1\u7406":4,"\u7bc4\u56f2":3,"\u7c21\u5358":[3,4],"\u7d20\u6570":[],"\u7d22\u5f15":[],"\u7d44\u307f\u5408\u308f":7,"\u7d50\u679c":5,"\u7d50\u8ad6":0,"\u7d5e\u308a\u8fbc\u307f":4,"\u7d5e\u308a\u8fbc\u3093":4,"\u7d71\u4e00":3,"\u7d71\u5408":[3,4],"\u8003\u5bdf":3,"\u811a\u6ce8":1,"\u81ea\u5206":4,"\u81ea\u52d5":5,"\u884c\u3046":[3,4],"\u884c\u3048":3,"\u884c\u3048\u308b":3,"\u8868\u793a":[1,3,5],"\u8868\u8a18":4,"\u89e3\u50cf":4,"\u89e3\u6790":6,"\u89e3\u6c7a":3,"\u8a00\u8a9e":4,"\u8a18\u8ff0":[3,4],"\u8a18\u9332":3,"\u8a2d\u5b9a":[0,2],"\u8a55\u4fa1":2,"\u8a66\u3059":6,"\u8a66\u9a13":3,"\u8a71\u3057\u5408\u3044":3,"\u8a71\u3057\u5408\u3063":3,"\u8a73\u3057\u3044":[],"\u8a73\u7d30":4,"\u8aac\u660e":3,"\u8aad\u307f":3,"\u8aad\u307f\u53d6\u308a":[3,6],"\u8abf\u67fb":3,"\u8b1b\u7fa9":[3,5],"\u8d64\u5916":2,"\u8d77\u52d5":4,"\u8fbc\u3080":0,"\u8fd1\u3044":[],"\u8fd1\u5e74":3,"\u8ffd\u52a0":[],"\u8ffd\u5b9f\u9a13":[],"\u9001\u4fe1":3,"\u901a\u4fe1":3,"\u9023\u643a":3,"\u9031\u76ee":[2,3],"\u9032\u3081":3,"\u9053\u7b4b":3,"\u9069\u5207":3,"\u9069\u5408":4,"\u90e8\u5206":3,"\u91cd\u8996":4,"\u9577\u5e74":4,"\u958b\u59cb":4,"\u958b\u767a":[2,3],"\u9593\u9055\u3044":0,"\u9632\u6b62":6,"\u96fb\u529b":2,"\u96fb\u6e90":2,"\u975e\u516c":6,"\u9805\u76ee":[3,6],"\u9806\u6b21":3,"\u9ad8\u6027":3,"\u9cf4\u3089":4,"\uff08\u300c":3,"\uff08arduino":2,"\uff08arduinoide":4,"\uff08iot":3,"\uff08project":3,"\uff09\u3002":4,"\uff09\u300d":4,"\uff1a<":4,"\uff1a\u300c":[],"\uff1am":3,"\uff1f\uff09":3,"\uff1f\uff1f":5,"])":5,"``":4,"cds\u30bb\u30eb":[0,6],"class":5,"default":5,"double":0,"else":[],"for":5,"if":5,"in":5,"int":0,"long":5,"new":5,"return":[],"this":5,"void":0,"with":5,"|br":[],_build:[],_esp:4,_factory:[],_factorytest:[],_feb:[0,1],_file:[],_ipconfig:5,_m:[],_menu:[],_pm:0,_point:0,_select:[],_serialport:[],_sketchexample:[],_t:0,added:5,addresses:5,admonition:5,adornment:5,after:5,also:5,an:5,analog:0,analogread:0,and:5,anonymous:5,any:5,arduino:[1,2],arduinocds:0,are:5,as:5,at:5,attention:5,attribute:5,author:5,auto:5,automatically:5,backslash:5,be:5,before:5,begin:[0,5],between:5,bibliographic:5,blank:5,bledevice:0,bleserver:0,bleutils:0,block:5,blocks:5,bluetooth:2,body:[],book:5,brackets:5,breaks:5,bullet:5,but:5,by:5,can:5,cannot:5,caption:5,caution:5,ccs:6,character:5,cheat:[],cheatsheet:5,cit:5,citation:5,classifier:5,co:6,code:[0,4,5],com:4,comment:5,comments:5,compound:5,conclusion:0,container:5,contents:[2,5],contexts:5,continuation:5,conversion:5,cp2:[],create:5,csv:5,custom:5,danger:5,data:5,date:5,david:5,decorations:5,def:5,definition:5,definitions:5,defs:5,delay:0,description:5,dev:[],development:4,device:4,directive:[],directly:5,display:6,divisor:[],dl:4,docinfo:5,docs:5,doctest:5,document:5,docutils:5,driver:[0,4],each:5,eclipse:4,element:5,elements:[],emphasis:5,empty:5,end:0,energy:2,enhancement:5,enumerated:5,environment:4,epigraph:5,equivalent:5,error:5,escapes:5,esp:0,etc:5,even:5,examples:5,explicit:5,external:5,factorytest:4,feb:5,felica:6,fft:0,field:5,fig:5,figure:5,file:[4,5],flush:5,footer:5,footnote:5,format:5,from:5,ftdi:4,full:5,g2:0,generate:5,generates:5,generic:5,gh:[],gnd:0,goodger:5,grid:5,header:5,heading:5,here:0,highlights:5,hint:5,hoge:0,html:5,http:5,https:[0,1,4,5,6],hyperlink:5,ide:2,image:5,images:[],important:5,include:[0,5,6],indentation:5,indented:5,indents:5,index:4,info:5,informal:5,inline:[],input:5,install:5,instead:5,integrated:4,internal:5,internet:5,interpreted:[],intro:[],introductory:5,ip:[1,5],ipconfig:[1,5],is:5,isprime:[],it:5,items:5,itself:5,java:4,jjyclock:6,labelled:5,lang:[0,6],latex:5,lcd:2,learning:3,least:5,led:2,legend:5,like:5,line:[0,5],lines:5,list:5,lists:5,literal:5,loop:0,low:2,lpt:4,m5stack:[],m5stick:4,m5stickc:3,m5stickcplus:4,main:0,make:0,manager:4,manually:5,many:5,markup:[],math:5,mathematical:5,meta:5,metadata:5,mi:5,microsoft:4,mini:5,modulation:6,name:5,named:5,network:2,next:5,no:5,non:5,not:[],notation:5,note:5,ntp:2,num:[],number:5,numbered:5,numref:5,of:5,on:5,once:0,option:5,optional:5,options:5,or:5,os:4,ota:6,overlined:5,paragraphs:5,parallel:5,parsed:5,passed:5,pbl:3,pc:4,pep:5,picture:5,pin:0,pinmode:0,pip:5,please:5,plus:4,point:0,port:4,possible:5,preceded:5,preference:2,preserve:5,prime:[],print:5,printf:[],processes:5,profile:2,proposal:5,protocol:2,pull:5,pulse:6,put:0,pwm:6,python:5,quick:[],quote:5,quoted:5,quotes:5,raspberrypi:[],raw:5,rcs:6,read:5,reading:5,reference:[],reminders:[],repeatedly:0,replace:5,replacement:5,request:5,rest:5,restructuredtext:[],result:[],revision:5,rfc:5,role:[],rom:0,rtc:6,rubric:5,run:0,sample:0,scanf:[],section:[],sections:5,sectnum:5,see:5,separate:5,separated:5,serial:[0,2],set:5,setup:[0,4],sheet:[],sidebar:5,simple:5,source:5,spaces:5,specific:5,sphinx:[1,5],spp:2,src:[0,1],ss:5,standalone:5,standard:5,start:0,stdio:[],store:4,strong:5,struct:0,structure:[],studio:4,sub:5,subscript:5,subsections:5,substitution:5,sup:5,superscript:5,syntax:[],table:5,tables:5,target:5,term:5,text:[],the:[],time:2,tip:5,title:5,titled:5,titles:5,to:[0,5],today:5,topic:5,tutorial:[],two:5,type:5,typedef:0,uiflow:4,underlined:5,unicode:5,uniform:5,uno:4,untouched:5,url:[],usb:4,use:5,used:5,useful:5,variation:5,vcp:4,ver:[],verse:5,version:5,virtual:4,visible:5,visual:4,warning:5,way:5,web:4,webclient:2,webserver:2,were:5,width:6,wifi:2,windows:[],wrapped:5,writer:5,www:[0,4],you:5,your:0},titles:["Arduino","Conclusion","IoT\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","\u5b9f\u9a13\u306e\u76ee\u7684","\u4e8b\u524d\u6e96\u5099","Tutorial","1\u9031\u76ee","2\u9031\u76ee"],titleterms:{"'s":[],"(infrared":6,"5stickcplus":4,"\u3059\u3059\u3081\u304b":3,"\u3059\u308b":4,"\u305d\u306e":6,"\u3068\u304d":6,"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb":4,"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3":[],"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3intro":[],"\u30b3\u30fc\u30c9":6,"\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":4,"\u30b5\u30fc\u30d0":6,"\u30b5\u30fc\u30dc\u30e2\u30fc\u30bf":6,"\u30b7\u30ea\u30a2\u30eb\u30dd\u30fc\u30c8":4,"\u30b9\u30d7\u30e9\u30a4\u30c8":6,"\u30bb\u30f3\u30b5":6,"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4":6,"\u30d3\u30eb\u30c9":4,"\u30d6\u30b6\u30fc":6,"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0":2,"\u30d7\u30ed\u30b0\u30e9\u30e0":[4,6],"\u30dc\u30bf\u30f3":6,"\u30dc\u30fc\u30c9":4,"\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3\u30fc":4,"\u30e2\u30cb\u30bf":6,"\u30e9\u30a4\u30d6\u30e9\u30ea":4,"\u30ea\u30e2\u30b3\u30f3":6,"\u30ea\u30f3\u30af":6,"\u4e8b\u524d":4,"\u5207\u308a\u65b9":6,"\u5236\u5fa1":6,"\u52a0\u901f\u5ea6":6,"\u53c2\u8003":6,"\u53d6\u5f97":6,"\u57fa\u6e96":3,"\u5834\u5408":4,"\u5916\u90e8":6,"\u5b66\u7fd2":[],"\u5b9f\u9a13":3,"\u6271\u3044":6,"\u6307\u6a19":[],"\u63a5\u7d9a":6,"\u6587\u5b57\u5217":6,"\u6642\u523b":6,"\u66f8\u304d\u8fbc\u307f":[4,6],"\u66f8\u304f":6,"\u672c\u4f53":6,"\u691c\u7d22":2,"\u6ce8\u610f":6,"\u6db2\u6676":6,"\u6e96\u5099":4,"\u74b0\u5883":4,"\u76ee\u7684":3,"\u78ba\u8a8d":4,"\u7d22\u5f15":2,"\u8868\u793a":4,"\u8a2d\u5b9a":4,"\u8a55\u4fa1":3,"\u8d64\u5916":6,"\u8ffd\u52a0":4,"\u9031\u76ee":[6,7],"\u9078\u629e":4,"\u958b\u767a":4,"\u96fb\u529b":6,"\u96fb\u6e90":6,"\uff08arduino":4,and:[],arduino:[0,4],bluetooth:6,body:5,cheat:5,conclusion:1,directive:5,documentation:[],elements:5,energy:6,esp:4,ide:4,indices:[],inline:5,interpreted:5,iot:2,lcd:6,led:6,linux:4,low:6,macos:4,markup:5,network:6,ntp:6,preference:6,profile:6,protocol:6,quick:5,reference:5,reminders:5,restructuredtext:5,role:5,section:5,serial:6,sheet:5,spp:6,structure:5,syntax:5,tables:[],testrtp:[],text:5,the:5,time:6,to:[],tutorial:5,url:4,webclient:6,webserver:6,welcome:[],wifi:6,windows:4}}) \ No newline at end of file +Search.setIndex({docnames:["arduino","conclusion","index","intro","pre","tutorial","week1","week2"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["arduino.rst","conclusion.rst","index.rst","intro.rst","pre.rst","tutorial.rst","week1.rst","week2.rst"],objects:{},objnames:{},objtypes:{},terms:{"#.":[],"#]":5,"#define":6,"#include":[0,6],"$date":5,"$revision":5,"%d":6,"%i":[],"&&":6,"')":6,"';":6,"']":6,"'a":6,"'c":6,"'s":5,"'z":6,"(&":6,"((":6,"()":[0,6],"(=":6,"(\"":[0,6],"(\u30d4\u30f3":6,"(bit":6,"(black":6,"(bm":6,"(buf":[],"(button":6,"(general":6,"(hex":6,"(hz":6,"(i":[5,6],"(infrared":2,"(int":[],"(kirled":6,"(link":[],"(ms":6,"(num":[],"(p":6,"(pin":[0,6],"(pwm":6,"(pwmch":[],"(rrggbb":6,"(sbuf":6,"(str":6,"(string":6,"(tmp":6,"(void":[],"(white":6,"(windows":[],"))":6,");":[0,6],")\"":[5,6],")\\":[],")\u300d":6,"){":[],"**":[],"*\"":5,"*]":5,"*p":6,"++":6,"+-":[0,6],"+\"":5,"+t":6,", \"":5,", and":5,", g":6,", gyrox":6,", num":6,", or":5,", r":6,",%":6,",\"":6,"-+":[0,6],"--":[0,6],"-\"":5,"-arduinoide":[],"-based":3,"-c":4,"-cn":3,"-dict":5,"-display":6,"-enumerated":5,"-esp":[],"-free":5,"-io":[0,6],"-left":5,"-level":5,"-literal":5,"-m":[],"-notes":5,"-numbered":5,"-numfig":5,"-o":5,"-pages":[],"-quote":5,"-rest":5,"-role":5,"-science":[3,4],"-shenzhen":3,"-ship":[0,3,6],"-specific":5,"-start":[],"-symbol":5,"-table":5,"-users":[1,5],"-xxxxx":[],"-xxxxxxxxxx":4,".)":5,"..":5,".\"":5,".\\":[],".\n#":[],".aliyuncs":3,".arduino":4,".available":6,".beep":6,".begin":6,".c":6,".cc":4,".charat":6,".color":6,".com":[0,3,4,6],".concat":6,".espressif":4,".fillrect":6,".fillscreen":6,".ftdichip":4,".getacceldata":6,".getbtnpress":6,".getgyrodata":6,".githubusercontent":[],".gres":6,".h":[0,6],".htm":4,".html":[0,5,6],".info":5,".init":6,".ino":[0,1,6],".istlab":5,".jp":[0,1,5,6],".json":4,".length":6,".mongonta":[],".mute":6,".net":5,".org":5,".oss":3,".pdf":3,".png":5,".print":6,".printf":[0,6],".println":6,".read":6,".sendnec":6,".setbeep":6,".setcursor":6,".setrotation":6,".settextcolor":6,".settextfont":6,".settextsize":6,".sf":5,".sourceforge":5,".storange":[0,6],".substring":6,".switch":[3,4],".toint":6,".tolowercase":6,".tone":6,".trim":6,".txt":5,".update":6,".usbserial":4,".wasreleased":6,".wasreleasefor":6,".zip":[],"//":[0,6],"/accgyro":6,"/adc":[0,6],"/analogread":0,"/arduino":[],"/blog":[0,6],"/button":6,"/catalog":[3,4],"/cdm":[],"/cds":6,"/class":[],"/cplus":[4,6],"/crc":0,"/cu":4,"/dev":4,"/directives":5,"/dl":4,"/docs":[3,5],"/download":[],"/drivers":4,"/ea":6,"/en":4,"/espressif":[],"/factorytest":0,"/howto":[],"/i":0,"/images":5,"/irsend":6,"/isprime":[],"/items":6,"/kitazaki":6,"/lcd":6,"/led":6,"/linux":[],"/m":[0,3,6],"/macos":[],"/main":4,"/nnn":6,"/numbering":5,"/o":6,"/package":4,"/pages":[],"/peripherals":[0,6],"/pjs":[],"/pwm":6,"/ref":5,"/reference":[0,3,6],"/resource":3,"/reverse":5,"/rmt":0,"/roles":5,"/rst":5,"/run":[],"/serial":6,"/servohat":6,"/sketch":[0,1],"/software":4,"/sound":6,"/str":6,"/unofficial":[0,3,6],"/vcp":4,"/work":[0,6],"0x":6,"0xxxxxxxxx":[],"10":6,"11":6,"14":6,"1\u30d0\u30a4\u30c8":6,"1\u56de":6,"1ce":6,"1s":6,"1uxc":6,"21":6,"2\u3064":6,"2d":0,"2f":6,"2fd":6,"2s":0,"3\u3064":6,"3d":0,"3v":[0,6],"5\u7cfb":6,"5bit":6,"5e":6,"5stack":[3,4],"5stick":[],"5stickc":[0,3,4,6],"5stickcplus":[0,3,6],"5v":6,"6b":6,"6bc":[],"6bit":6,"8bit":6,"8pixel":6,":/":[0,1,3,4,5,6],"::":5,":>":[3,6],":\"":5,":file":[],":numref":[],"; p":6,"< *":6,"< c":6,"<":[],">>":5,">`":[],"@python":5,"[0":6,"[6":6,"[a":6,"[b":6,"[c":6,"[cit":5,"[i":6,"[pos":6,"\")":6,"\",":[0,5,6],"\"..":5,"\":":5,"\";":6,"\\n":[0,6],"\u2026\u300d":4,"\u2192\u300c":4,"\u2192\u300d":4,"\u3001/":[],"\u3001:":[],"\u3001\u2714":4,"\u3001\u300c":4,"\u3001esp":3,"\u3001pc":6,"\u3002:":4,"\u3002\"":6,"\u3002\u300c":4,"\u3002\u3061":[4,6],"\u3002\u307b\u3052\u307b\u3052\u307b\u3052":5,"\u3002\u307e\u305f":[4,6],"\u3002\uff08":6,"\u3002arduino":4,"\u3002c":[],"\u3002color":[],"\u3002g":6,"\u3002gpio":6,"\u3002ide":4,"\u3002mac":4,"\u3002map":[],"\u3002p":6,"\u3002pc":6,"\u3002pin":6,"\u3002serial":6,"\u3002settextsize":6,"\u3002windows":4,"\u300chigh":6,"\u300cm":[],"\u300d\u2192":[4,6],"\u300d\uff09":3,"\u301cz":6,"\u3042\u3044":6,"\u3042\u3063":[],"\u3042\u3068":[4,6],"\u3042\u308a":[1,4,6],"\u3042\u308b":6,"\u3042\u308c":6,"\u3044\u3061\u3070\u3093":1,"\u3044\u308a":5,"\u3044\u308b":[1,3,4,6],"\u3044\u308c":4,"\u3046\u307e\u304f":3,"\u3046\u307e\u304f\u3044\u304b":3,"\u3048\u3089\u3076":4,"\u304a\u3044":6,"\u304a\u304b\u3057\u304f":6,"\u304a\u304d\u307e\u3057\u3087":6,"\u304a\u304d\u308b":6,"\u304a\u304f":6,"\u304a\u3051\u308b":3,"\u304a\u3057":6,"\u304a\u3059":4,"\u304a\u307e\u3051":6,"\u304a\u3082":4,"\u304a\u3088\u3073":3,"\u304a\u308a":3,"\u304b\u3048":[],"\u304b\u304b\u308a":6,"\u304b\u3051\u308b":3,"\u304b\u3064":[],"\u304b\u3069\u3046":3,"\u304b\u306a\u308a":6,"\u304b\u3084":[],"\u304b\u3089":[0,3,4,5,6],"\u304b\u308f\u308a":3,"\u304c\u3042\u308a":4,"\u304c\u304f\u308b":[],"\u304c\u3064\u304b\u3048":6,"\u304c\u3064\u304f":5,"\u304c\u3069":3,"\u304c\u308f\u304b\u308a":[],"\u304f\u3060":[4,6],"\u304f\u308a\u304b\u3048":6,"\u304f\u308c\u308b":6,"\u3053\u3053":[1,4,5,6],"\u3053\u3053\u306e":1,"\u3053\u3053\u306f":6,"\u3053\u3061\u3089":4,"\u3053\u3068":[3,4,6,7],"\u3053\u306e":[0,3,6],"\u3053\u308c":6,"\u3053\u308c\u3089":0,"\u3055\u3044":[4,6],"\u3055\u3044\u3054":6,"\u3055\u3089\u306b":5,"\u3057\u304b":5,"\u3057\u3057":6,"\u3057\u3066":6,"\u3057\u307e\u3057\u3087":6,"\u3059\u304e":[],"\u3059\u3050":6,"\u3059\u3053\u3057\u308f\u304b\u308a":4,"\u3059\u3059\u3081":[3,6],"\u3059\u3059\u3081\u304b":2,"\u3059\u3059\u3081\u308b":3,"\u3059\u3079":6,"\u3059\u3079\u3066":6,"\u3059\u308b":[1,3,5,6],"\u305a\u3064":6,"\u305b\u308b":[3,6],"\u305c\u3072\u3084\u3063":6,"\u305d\u306e":[2,3],"\u305d\u308c":6,"\u305d\u308c\u305e\u308c":6,"\u305f\u3044":[0,6],"\u305f\u3044\u304b":3,"\u305f\u3046\u3048":6,"\u305f\u304b":3,"\u305f\u3060\u3057":[4,6],"\u305f\u3081":[3,4,6],"\u305f\u3089":[4,6],"\u305f\u308a":[3,4,6],"\u305f\u308a\u3057":6,"\u3060\u3046\u3048":3,"\u3060\u3051":6,"\u3060\u3055\u3044":[4,6],"\u3060\u3068":5,"\u3064\u3044":5,"\u3064\u304b\u3044":6,"\u3064\u304b\u3046":6,"\u3064\u304b\u3063":6,"\u3064\u304f\u3088\u3046":5,"\u3064\u306a\u3044":6,"\u3064\u3076":6,"\u3064\u3076\u3059":6,"\u3066\u307f":6,"\u3066\u307f\u307e\u3057\u3087":7,"\u3067\u304d":[3,4,5,6],"\u3067\u304d\u308b":[3,4,6],"\u3067\u3057\u3087":6,"\u3067\u3059":[0,1,4,5,6],"\u3067\u307f\u308b":6,"\u3067\u3082":6,"\u3068\u3044\u3046":[4,6],"\u3068\u3048":0,"\u3068\u304b\u3044":6,"\u3068\u304d":[2,4,5],"\u3068\u304f":3,"\u3068\u3057":6,"\u3068\u3057\u3066":[3,5,6],"\u3068\u3059\u308b":6,"\u3068\u308b":3,"\u3069\u3046":[3,6],"\u3069\u3061\u3089":6,"\u306a\u3044":[4,5,6],"\u306a\u304b":6,"\u306a\u304b\u3063":3,"\u306a\u304c\u3089":[3,6],"\u306a\u304f":[4,6],"\u306a\u3057":4,"\u306a\u3063":3,"\u306a\u3069":6,"\u306a\u306b":6,"\u306a\u306e":6,"\u306a\u307f":[4,6],"\u306a\u3089":6,"\u306a\u308a":[0,4,5,6],"\u306a\u308b":[3,6],"\u306b\u304b\u3044":6,"\u306b\u3057":[],"\u306b\u3059\u3059\u307f":4,"\u306b\u3059\u308c":5,"\u306b\u3064\u3044\u3066":[1,3,6],"\u306b\u3088\u3063":[],"\u306b\u3088\u308b":[1,3,5],"\u306b\u5bfe\u3059\u308b":[3,6],"\u306b\u5bfe\u5fdc":[],"\u306e\u3061\u3089\u3064\u304d":6,"\u306e\u3067":[4,6],"\u306e\u307b\u3046":6,"\u306e\u307f":[4,6],"\u306e\u3088\u3046":[0,4,5],"\u3072\u3068\u3064":6,"\u3072\u3089\u3044":6,"\u3072\u3089\u304d":4,"\u3072\u3089\u304f":[4,6],"\u3079\u304d":3,"\u307b\u3046":[0,6],"\u307b\u3052\u307b\u3052":[],"\u307e\u3057":[1,6],"\u307e\u3057\u3087":[],"\u307e\u3059":[0,1,4,5,6],"\u307e\u305a":[],"\u307e\u305b":6,"\u307e\u305f":6,"\u307e\u3063":1,"\u307e\u3067":[4,6],"\u307e\u3068":1,"\u307e\u3068\u3081":[],"\u307e\u3068\u3081\u308b":3,"\u307f\u3066":4,"\u307f\u308b":6,"\u3082\u3061":[],"\u3082\u3061\u3044\u308b":[],"\u3082\u3068":3,"\u3084\u3059":3,"\u3084\u3059\u304f":[3,4],"\u3084\u3063":6,"\u3084setbeep":6,"\u3088\u3044":6,"\u3088\u3046":[0,3,4,6],"\u3088\u304f":1,"\u3088\u308a":4,"\u3089\u308c":3,"\u3089\u308c\u308b":3,"\u308c\u308b":[4,6],"\u308f\u304b\u308a":3,"\u3092\u304a\u3057":4,"\u3092\u3059\u308c":5,"\u3092\u3064\u304b\u3044":5,"\u30a2\u30a4\u30b3\u30f3":4,"\u30a2\u30a4\u30b3\u30f3\u30dc\u30bf\u30f3":[4,6],"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9":[],"\u30a2\u30c9\u30d0\u30fc\u30bf\u30a4\u30ba":6,"\u30a2\u30c9\u30d0\u30fc\u30bf\u30a4\u30ba\u30e1\u30f3\u30c8":[],"\u30a2\u30c9\u30ec\u30b9":[1,5,6],"\u30a4\u30af\u30ea\u30d7\u30b9":4,"\u30a4\u30f3\u30af\u30eb\u30fc\u30c9":4,"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb":[2,6],"\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8":3,"\u30a4\u30f3\u30c7\u30f3\u30c8":6,"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3":[],"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3intro":[],"\u30aa\u30af\u30bf\u30fc\u30d6":6,"\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30de\u30a4\u30b3\u30f3":[],"\u30ab\u30a6\u30f3\u30bf":6,"\u30ab\u30e1\u30e9":6,"\u30ab\u30e9\u30fc":3,"\u30ac\u30a4\u30c9":[3,6],"\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3":5,"\u30ae\u30b6\u30ae\u30b6":6,"\u30af\u30e9\u30b9":6,"\u30af\u30ea\u30c3\u30af":[1,5],"\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9":6,"\u30b0\u30e9\u30d5":6,"\u30b0\u30e9\u30f3\u30c9":6,"\u30b0\u30eb\u30fc\u30d7":3,"\u30b0\u30ed\u30fc\u30d0\u30eb":6,"\u30b1\u30fc\u30d6\u30eb":6,"\u30b3\u30d4\u30fc":[4,6],"\u30b3\u30e1\u30f3\u30c8":6,"\u30b3\u30f3\u30d1\u30a4\u30eb":4,"\u30b3\u30f3\u30d1\u30a4\u30eb\u30c6\u30b9\u30c8":5,"\u30b3\u30fc\u30c9":2,"\u30b3\u30fc\u30c9\u30a8\u30c7\u30a3\u30bf":[4,6],"\u30b5\u30a4\u30ba":6,"\u30b5\u30a4\u30c8":[1,5,6],"\u30b5\u30f3\u30d7\u30eb":6,"\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":[],"\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0":[4,6],"\u30b5\u30fc\u30d0":[2,3],"\u30b5\u30fc\u30dc":6,"\u30b5\u30fc\u30dc\u30cf\u30c3\u30c8":2,"\u30b5\u30fc\u30dc\u30e2\u30fc\u30bf":[2,3],"\u30b5\u30fc\u30dc\u30e2\u30fc\u30bf\u30fc":[],"\u30b7\u30b9\u30c6\u30e0":[3,5],"\u30b7\u30d5\u30c8":6,"\u30b7\u30ea\u30a2\u30eb":[],"\u30b7\u30ea\u30a2\u30eb\u30d7\u30ed\u30c3\u30bf":6,"\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf":6,"\u30b7\u30ea\u30fc\u30ba":3,"\u30b7\u30f3\u30d7\u30eb":6,"\u30b8\u30e3\u30a4\u30ed\u30bb\u30f3\u30b5":6,"\u30b8\u30e3\u30a4\u30ed\u30c7\u30fc\u30bf":6,"\u30b8\u30e3\u30f3\u30d1\u30ef\u30a4\u30e4":6,"\u30b9\u30a4\u30c3\u30c1\u30b5\u30a4\u30a8\u30f3\u30b9":3,"\u30b9\u30ad\u30c3\u30d7":6,"\u30b9\u30b1\u30c3\u30c1":[4,6],"\u30b9\u30bf\u30fc\u30c8\u30e1\u30cb\u30e5\u30fc":4,"\u30b9\u30c6\u30c3\u30d7":4,"\u30b9\u30d7\u30e9\u30a4\u30c8":2,"\u30bb\u30f3\u30b5":[2,3],"\u30bb\u30f3\u30b5\u30fc":[],"\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":[0,1,4,6],"\u30bf\u30a4\u30d7":6,"\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9":4,"\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30b5\u30a4\u30c8":4,"\u30c1\u30a7\u30c3\u30af":4,"\u30c1\u30e3\u30f3\u30cd\u30eb":6,"\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb":5,"\u30c1\u30fc\u30e0":3,"\u30c4\u30fc\u30eb":[4,6],"\u30c6\u30ad\u30b9\u30c8":4,"\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2":[4,6],"\u30c6\u30b9\u30c8":[5,6],"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4":[2,3],"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u30b5\u30a4\u30ba":4,"\u30c7\u30d0\u30a4\u30b9":[4,6],"\u30c7\u30d0\u30a4\u30b9\u30de\u30cd\u30fc\u30b8\u30e3":4,"\u30c7\u30e5\u30fc\u30c6\u30a3\u30fc":6,"\u30c7\u30fc\u30bf":[3,6],"\u30c9\u30e9\u30a4\u30d0":4,"\u30ce\u30f3\u30d6\u30ed\u30c3\u30ad\u30f3\u30b0":6,"\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2":6,"\u30d0\u30c3\u30c6\u30ea":4,"\u30d0\u30fc\u30b8\u30e7\u30f3":[2,6],"\u30d1\u30cd\u30eb":3,"\u30d1\u30eb\u30b9":6,"\u30d2\u30f3\u30c8":2,"\u30d3\u30c3\u30c8":6,"\u30d3\u30c3\u30c8\u30ab\u30e9\u30fc":6,"\u30d3\u30fc\u30d7":6,"\u30d4\u30af\u30bb\u30eb":6,"\u30d4\u30af\u30bb\u30eb\u30d5\u30a9\u30f3\u30c8":6,"\u30d4\u30f3":6,"\u30d5\u30a1\u30a4\u30eb":[0,4,5],"\u30d5\u30a1\u30a4\u30eb\u30e1\u30cb\u30e5\u30fc":6,"\u30d5\u30a3\u30fc\u30eb\u30c9":4,"\u30d5\u30a9\u30f3\u30c8":6,"\u30d6\u30b6\u30fc":[2,4],"\u30d6\u30ec\u30c3\u30c9\u30dc\u30fc\u30c9":6,"\u30d6\u30ed\u30c3\u30af\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0":4,"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0":3,"\u30d7\u30ed\u30b0\u30e9\u30e0":2,"\u30d9\u30fc\u30b9":4,"\u30da\u30fc\u30b8":[2,3,6],"\u30dc\u30bf\u30f3":[2,3,4],"\u30dc\u30bf\u30f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8":6,"\u30dc\u30fc\u30c9":[],"\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3":4,"\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3\u30fc":[],"\u30dd\u30a4\u30f3\u30bf":6,"\u30dd\u30fc\u30c8":[4,6],"\u30de\u30a4\u30af\u30ed\u30d7\u30ed\u30bb\u30c3\u30b5":3,"\u30de\u30a4\u30b3\u30f3\u30dc\u30fc\u30c9":4,"\u30de\u30a4\u30b3\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb":3,"\u30df\u30ea":6,"\u30e1\u30bd\u30c3\u30c9":6,"\u30e2\u30b8\u30e5\u30fc\u30eb":6,"\u30e2\u30cb\u30bf":[],"\u30e2\u30fc\u30bf":6,"\u30e2\u30fc\u30c9":[0,6],"\u30e9\u30a4\u30d6\u30e9\u30ea":[],"\u30e9\u30a4\u30d6\u30e9\u30ea\u30de\u30cd\u30fc\u30b8\u30e3":[4,6],"\u30e9\u30f3\u30d7":6,"\u30ea\u30b9\u30c8":6,"\u30ea\u30bb\u30c3\u30c8":6,"\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9":[3,6],"\u30ea\u30e2\u30b3\u30f3":2,"\u30ea\u30f3\u30af":[0,1,2,4],"\u30eb\u30fc\u30d7":6,"\u30ec\u30d9\u30eb":3,"\u30ec\u30dd\u30fc\u30c8":3,"\u30fb\u65b9\u5411\u6027":3,"\u4e00\u756a\u5de6":4,"\u4e00\u822c":6,"\u4e00\u822c\u7684":3,"\u4e00\u8cab":3,"\u4e00\u8cab\u6027":[],"\u4e0a\u8a18":3,"\u4e0a\u90e8":6,"\u4e0b\u8a18":[],"\u4e0e\u3048":3,"\u4e21\u65b9":5,"\u4e88\u5099":3,"\u4e88\u7fd2":3,"\u4e8b\u524d":2,"\u4e8b\u8c61":6,"\u4e92\u63db":4,"\u4eba\u611f":[],"\u4eba\u6c17":[],"\u4ecb\u3057":6,"\u4ed5\u7d44":3,"\u4ed8\u4e0e":6,"\u4ee5\u4e0b":[3,4,6],"\u4ee5\u5916":6,"\u4ee5\u964d":[4,6],"\u4eee\u5b9a":6,"\u4f38\u3070":6,"\u4f38\u9577":[],"\u4f4d\u7f6e":6,"\u4f55\u500d":6,"\u4f59\u767d":6,"\u4f5c\u54c1":3,"\u4f5c\u696d":[3,4],"\u4f7f\u3044":6,"\u4f7f\u3046":6,"\u4f7f\u3048":6,"\u4f7f\u3048\u308b":6,"\u4f7f\u3063":4,"\u4f7f\u308f":[4,6],"\u4f7f\u7528":[3,4,6],"\u4f8b\u5916":6,"\u4fbf\u5229":6,"\u4fdd\u6301":6,"\u4fe1\u53f7":[],"\u500d\u6570":6,"\u500d\u7387":6,"\u5024\u3084":6,"\u5024\u4ee5":[],"\u505c\u3081":6,"\u505c\u6b62":6,"\u5099\u3048":3,"\u50cd\u304d":3,"\u5148\u982d":6,"\u5165\u308a":6,"\u5165\u308c":2,"\u5165\u308c\u308b":6,"\u5165\u529b":[3,4,6],"\u5168\u3066":6,"\u5168\u54e1":6,"\u516c\u5f0f":6,"\u5171\u6709":3,"\u5185\u5074":6,"\u5185\u51e6":6,"\u5185\u5bb9":3,"\u5185\u8535":6,"\u5185\u8535ir":[],"\u5185\u8535irled":[],"\u5185\u8535led":2,"\u5185\u90e8":0,"\u5186\u6ed1":[3,6],"\u518d\u73fe":3,"\u518d\u8d77\u52d5":4,"\u5199\u771f":3,"\u51e6\u7406":6,"\u51fa\u3059":[],"\u51fa\u3063\u5f35\u3063":6,"\u51fa\u529b":6,"\u5206\u62c5":[3,6],"\u5206\u89e3":6,"\u5206\u89e3\u80fd":6,"\u5207\u308a\u65b9":2,"\u5207\u308b":6,"\u521d\u5fc3":4,"\u521d\u5fc3\u8005":[],"\u5224\u5b9a":6,"\u5229\u7528":[2,4],"\u5236\u5fa1":2,"\u524a\u9664":6,"\u524d\u5f8c":6,"\u524d\u63d0":6,"\u5272\u5408":3,"\u5275\u9020":3,"\u52a0\u901f":6,"\u52a0\u901f\u5ea6":2,"\u52b9\u679c":3,"\u52d5\u304b":3,"\u52d5\u304b\u3059":6,"\u52d5\u4f5c":3,"\u533a\u5225":[3,6],"\u5341\u5206":3,"\u5358\u8a9e":3,"\u5371\u967a":6,"\u539f\u56e0":4,"\u53b3\u5bc6":6,"\u53c2\u7167":[0,5,6],"\u53c2\u8003":[1,2,3,4,5],"\u53c2\u8003url":2,"\u53cd\u5bfe":6,"\u53cd\u5fdc":6,"\u53d6\u308a\u9664\u304f":6,"\u53d6\u5f97":2,"\u53d7\u4fe1":6,"\u53d7\u5149":6,"\u53d7\u5149\u5668":6,"\u53ef\u5909\u9577":6,"\u53ef\u80fd":6,"\u53f3\u4e0a":[4,6],"\u5404\u6a5f":3,"\u5404\u81ea":3,"\u540c\u3058":6,"\u540c\u69d8":6,"\u5411\u304b\u3063":6,"\u5411\u304d":6,"\u5411\u3051":[3,4,6],"\u5411\u4e0a":4,"\u542b\u307e":[],"\u542b\u3080":3,"\u5468\u308a":6,"\u5468\u671f":6,"\u5468\u671ft":6,"\u5468\u6ce2":6,"\u5468\u6ce2\u6570":6,"\u547c\u3073":4,"\u547c\u3073\u51fa\u3057":6,"\u547c\u3073\u51fa\u305b\u308b":6,"\u547d\u4ee4":6,"\u554f\u984c":6,"\u56db\u89d2":4,"\u56de\u3059":6,"\u56de\u8def":6,"\u56f0\u96e3":6,"\u56f3\u3078":5,"\u56f3\u3084":3,"\u56f3\u8868":5,"\u5727\u529b":6,"\u57f7\u7b46":3,"\u57fa\u672c":[3,6],"\u57fa\u672c\u7684":[],"\u57fa\u6e96":2,"\u57fa\u790e":3,"\u5831\u544a":3,"\u5831\u544a\u66f8":3,"\u5834\u5408":[0,3,6],"\u5834\u6240":6,"\u5857\u308a":6,"\u5897\u3084\u3059":6,"\u5897\u52a0":4,"\u5909\u3048":6,"\u5909\u5316":6,"\u5909\u63db":2,"\u5909\u6570":6,"\u5909\u66f4":6,"\u5916\u5074":6,"\u5916\u90e8":2,"\u591a\u3044":6,"\u5927\u6587\u5b57":6,"\u5931\u6557":4,"\u59cb\u3081":4,"\u5b66\u3093":[3,7],"\u5b66\u7fd2":[],"\u5b89\u4fa1":3,"\u5b8c\u6210":3,"\u5b9a\u7fa9":6,"\u5b9f\u4e16":3,"\u5b9f\u4e16\u754c":3,"\u5b9f\u65bd":3,"\u5b9f\u884c":6,"\u5b9f\u9a13":2,"\u5ba3\u8a00":6,"\u5bb9\u91cf":4,"\u5bfe\u51e6":6,"\u5bfe\u5fdc":6,"\u5c0f\u3055":6,"\u5c0f\u3055\u304f":6,"\u5c0f\u578b":3,"\u5c0f\u6587\u5b57":6,"\u5c11\u306a\u3044":0,"\u5c11\u306a\u304f":3,"\u5de6\u5074":6,"\u5e45\u5909":6,"\u5f0f\u65e5\u672c\u8a9e":[3,6],"\u5f15\u304d\u4f38\u3070":6,"\u5f15\u6570":6,"\u5f15\u7528":[3,6],"\u5f31\u3044":6,"\u5f37\u8abf":0,"\u5f62\u5f0f":3,"\u5f79\u5272":6,"\u5f85\u305f":6,"\u5f8c\u7d99":4,"\u5fc5\u305a":3,"\u5fc5\u8981":[3,4,6],"\u5fc5\u9808":6,"\u5fd8\u308c\u308b":6,"\u601d\u308f":0,"\u60c5\u5831":[2,3,6],"\u610f\u5473":6,"\u610f\u56f3":3,"\u6163\u6027":6,"\u6210\u679c\u7269":3,"\u6271\u3044":2,"\u6271\u3046":[],"\u62b5\u6297":[0,6],"\u62bc\u3059":[4,6],"\u62bd\u8c61":3,"\u62c5\u5f53":3,"\u62e1\u5927":[1,5],"\u62e1\u5f35":4,"\u6307\u5b9a":6,"\u6307\u6a19":[],"\u6307\u793a":[3,4],"\u633f\u3057":4,"\u633f\u3059\u9762":6,"\u63a5\u7d9a":[2,4],"\u63cf\u753b":6,"\u63db\u3048":3,"\u642d\u8f09":3,"\u6539\u884c":6,"\u6545\u969c":6,"\u6559\u54e1":3,"\u6570\u5909":[],"\u6570\u5b57":4,"\u6574\u5f62":6,"\u6574\u6570":6,"\u6587\u4f53":3,"\u6587\u5b57":6,"\u6587\u5b57\u5217":2,"\u6587\u6cd5":[],"\u6587\u732e":3,"\u65b9\u6cd5":6,"\u65e5\u672c\u8a9e":4,"\u660e\u5ea6":6,"\u660e\u5feb":[],"\u660e\u78ba":3,"\u660e\u8a18":3,"\u6620\u308a":6,"\u6642\u523b":2,"\u6642\u9593":6,"\u666e\u901a\u62bc":6,"\u66f2\u3052":6,"\u66f4\u65b0":6,"\u66f8\u3044":6,"\u66f8\u304b":6,"\u66f8\u304d":3,"\u66f8\u304d\u8fbc\u307f":2,"\u66f8\u304d\u8fbc\u3080":[4,6],"\u66f8\u304d\u8fbc\u3093":6,"\u66f8\u304f":2,"\u66f8\u5f0f":3,"\u6700\u521d":6,"\u6700\u5927":6,"\u6700\u5f8c":6,"\u6700\u60aa":6,"\u6700\u65b0":[],"\u6700\u8fd1":4,"\u6709\u540d":4,"\u6709\u7528":3,"\u671f\u5f85":[],"\u671f\u9593":3,"\u672c\u4f53":[2,4],"\u672c\u5b9f\u9a13":4,"\u67d4\u8edf":4,"\u683c\u7d0d":6,"\u691c\u7d22":4,"\u6982\u8981":6,"\u69cb\u6210":6,"\u69cb\u7bc9":3,"\u6a5f\u5668":3,"\u6a5f\u80fd":[3,6],"\u6b62\u3081\u308b":6,"\u6b8b\u3057":6,"\u6b8b\u3059":3,"\u6b8b\u308a":6,"\u6b8b\u308b":6,"\u6bb5\u968e":4,"\u6c7a\u3081":3,"\u6ce8\u610f":[0,2,4],"\u6d17\u3044\u51fa\u3057":3,"\u6d3b\u304b\u3057":7,"\u6d3b\u52d5":3,"\u6db2\u6676":[2,3],"\u6df1\u3081\u308b":6,"\u6e08\u307f":[],"\u6e96\u3058\u308b":3,"\u6e96\u5099":[2,3,6],"\u6ea2\u308c\u308b":6,"\u6f14\u7b97":6,"\u70b9\u6ec5":6,"\u70b9\u706f":6,"\u7121\u7dda":[3,6],"\u7167\u5ea6":6,"\u7279\u6709":4,"\u72b6\u614b":6,"\u72b6\u6cc1":6,"\u72ec\u81ea":3,"\u73ed\u3068\u3057":3,"\u73ed\u3068\u3057\u3066":3,"\u7406\u7531":3,"\u7406\u89e3":6,"\u74b0\u5883":[2,3],"\u751f\u6210":6,"\u7528\u3044":[3,6],"\u7528\u3044\u308b":6,"\u7528\u8a9e":3,"\u753b\u50cf":1,"\u753b\u9762":[3,4,6],"\u756a\u30d4\u30f3":6,"\u756a\u53f7":[5,6],"\u767a\u4fe1":[],"\u767a\u58f2":4,"\u767a\u8868":3,"\u767a\u8868\u4f1a":3,"\u767a\u97f3":4,"\u767b\u5834":3,"\u76ee\u7684":2,"\u76ee\u7acb\u3061":6,"\u76f4\u5217":6,"\u76f4\u63a5":0,"\u76f4\u6d41":6,"\u7701\u7565":6,"\u77ed\u3044\u8db3":6,"\u77ed\u304f":6,"\u7834\u58ca":6,"\u7834\u88c2":6,"\u78ba\u8a8d":[3,6],"\u793a\u3055":3,"\u793a\u3057":[0,1,5,6],"\u793a\u3059":[3,4],"\u79d2\u5f85":6,"\u79d2\u6570":6,"\u79d2\u9593":6,"\u79d2\u9cf4\u3089":6,"\u79fb\u884c":6,"\u7a0b\u5ea6":[3,6],"\u7a2e\u985e":6,"\u7a7a\u767d":6,"\u7ba1\u7406":[4,6],"\u7bc4\u56f2":[3,6],"\u7c21\u5358":[3,4,6],"\u7c21\u6f54":6,"\u7d20\u6570":[],"\u7d22\u5f15":[],"\u7d42\u7aef":6,"\u7d44\u307f\u5408\u308f":7,"\u7d50\u5c40":6,"\u7d50\u679c":5,"\u7d50\u8ad6":0,"\u7d5e\u308a\u8fbc\u307f":4,"\u7d5e\u308a\u8fbc\u3093":4,"\u7d71\u4e00":3,"\u7d71\u5408":[3,4],"\u7d99\u7d9a":6,"\u7e70\u308a\u8fd4\u3057":6,"\u8003\u3048":6,"\u8003\u5bdf":3,"\u8033\u969c\u308a":6,"\u8089\u773c":6,"\u80cc\u666f":6,"\u811a\u6ce8":1,"\u81ea\u5206":4,"\u81ea\u52d5":[5,6],"\u866b\u773c":6,"\u884c\u3046":[3,4],"\u884c\u3048":3,"\u884c\u3048\u308b":3,"\u884c\u76ee":6,"\u8868\u73fe":6,"\u8868\u793a":[1,3,5,6],"\u8868\u8a18":[4,6],"\u88c5\u7f6e":6,"\u8907\u6570":6,"\u898b\u3048":6,"\u89e3\u50cf":4,"\u89e3\u6790":6,"\u89e3\u6c7a":3,"\u8a00\u8a9e":[4,6],"\u8a08\u6e2c":6,"\u8a08\u7b97":6,"\u8a18\u6cd5":6,"\u8a18\u8ff0":[3,4,6],"\u8a18\u9332":3,"\u8a2d\u5b9a":[0,2,6],"\u8a55\u4fa1":2,"\u8a66\u3059":6,"\u8a66\u9a13":3,"\u8a71\u3057\u5408\u3044":3,"\u8a71\u3057\u5408\u3063":3,"\u8a73\u3057\u3044":6,"\u8a73\u7d30":4,"\u8aac\u660e":3,"\u8aad\u307f":3,"\u8aad\u307f\u51fa\u3057":6,"\u8aad\u307f\u53d6\u3063":6,"\u8aad\u307f\u53d6\u308a":3,"\u8aad\u307f\u53d6\u308b":6,"\u8abf\u6574":6,"\u8abf\u67fb":3,"\u8b1b\u7fa9":[3,5],"\u8d64\u5916":2,"\u8d64\u5916\u5149":6,"\u8d64\u5916\u7dda":6,"\u8d64\u8272":6,"\u8d64led":[],"\u8d77\u304d\u308b":6,"\u8d77\u52d5":4,"\u8ddd\u96e2":6,"\u8fbc\u3080":0,"\u8fd1\u3044":[],"\u8fd1\u3065":6,"\u8fd1\u5e74":3,"\u8fd4\u3057":6,"\u8fd4\u3059":6,"\u8ffd\u52a0":6,"\u8ffd\u5b9f\u9a13":[],"\u9001\u4fe1":3,"\u901a\u4fe1":[2,3],"\u901a\u5e38":6,"\u901f\u5ea6":6,"\u9023\u643a":3,"\u9023\u7d50":6,"\u9023\u7d9a":6,"\u9031\u76ee":[2,3],"\u9032\u3081":3,"\u9032\u6570":2,"\u904e\u304e":6,"\u9053\u7b4b":3,"\u9069\u5207":3,"\u9069\u5408":4,"\u9069\u7528":6,"\u9078\u629e":6,"\u90e8\u5206":[3,6],"\u914d\u5217":6,"\u914d\u7dda":6,"\u91cd\u8981":6,"\u91cd\u8996":4,"\u9577\u3044":6,"\u9577\u5e74":4,"\u9577\u62bc":6,"\u9577\u62bc\u3057":6,"\u958b\u59cb":4,"\u958b\u767a":[2,3],"\u9593\u9055\u3044":0,"\u95a2\u6570":6,"\u9632\u6b62":6,"\u96fb\u529b":2,"\u96fb\u5727":6,"\u96fb\u6e90":2,"\u975e\u516c":[3,6],"\u975e\u516c\u5f0f":[],"\u9805\u76ee":[3,6],"\u9806\u6b21":3,"\u9806\u756a":6,"\u9ad8\u6027":3,"\u9ad8\u97f3":6,"\u9cf4\u3063":6,"\u9cf4\u3089":[4,6],"\u9cf4\u3089\u3059":6,"\uff08\u300c":3,"\uff08\u8aad\u307f\u53d6\u3063":6,"\uff08\u8d64":2,"\uff08arduino":2,"\uff08arduinoide":4,"\uff08iot":3,"\uff08m":6,"\uff08project":3,"\uff09\u3001":6,"\uff09\u3002":[4,6],"\uff09\u300d":4,"\uff09\u30ad\u30fc":6,"\uff1a<":4,"\uff1a\u300c":[],"\uff1ahttps":6,"\uff1am":3,"\uff1f\u3011":6,"\uff1f\uff09":[3,6],"\uff1f\uff1f":5,"])":[5,6],"];":6,"]\u301c":6,"`_":[],"``":4,"byte":6,"cds\u30bb\u30eb":[0,6],"char":6,"class":5,"const":6,"continue":6,"default":5,"double":0,"else":6,"false":6,"float":6,"for":[4,5,6],"if":[5,6],"in":5,"int":[0,6],"long":5,"new":5,"null":6,"pin\u30d4\u30f3":[],"return":6,"this":5,"true":6,"void":[0,6],"while":6,"with":5,"| (":6,"|br":[],"||":6,"};":6,_build:[],_ch:6,_control:6,_esp:4,_factory:[],_factorytest:[],_feb:[0,1],_file:[],_guide:3,_ipconfig:5,_japanese:3,_m:[],_menu:[],_pm:0,_point:0,_select:[],_serialport:[],_sketchexample:[],_str:6,_t:0,accgyro:[],adc:2,added:5,addresses:5,admonition:5,adornment:5,after:5,also:5,an:5,analog:[0,6],analogread:[0,6],and:5,anonymous:5,any:5,arduino:[1,2,6],arduinocds:[0,6],are:5,as:5,ascii:6,at:5,attention:5,attribute:5,author:5,auto:5,automatically:5,ax:6,axp:6,ay:6,az:6,ba:6,backslash:5,be:5,beep:2,before:5,begin:[0,5,6],between:5,bibliographic:5,bits:6,blank:5,bledevice:0,bleserver:0,bleutils:0,block:5,blocks:5,blue:6,bluetooth:2,body:[],book:5,bool:6,bps:6,brackets:5,breaks:5,btna:6,btnb:6,buf:6,bullet:5,but:5,by:5,can:5,cannot:5,caption:5,caution:5,cc:[],ccs:6,cd:6,cds:[],ch1:6,ch2:6,ch:6,character:5,cheat:[],cheatsheet:5,cit:5,citation:5,classifier:5,cm:6,co:6,code:[0,4,5,6],com:4,command:6,comment:5,comments:5,compound:5,conclusion:0,constrain:6,container:5,contents:[2,5],contexts:5,continuation:5,conversion:5,converter:6,cp2:[],create:5,csv:5,ctrl:6,custom:5,cyan:6,danger:5,data:5,date:5,david:5,dccc:[],dec:6,decorations:5,def:5,define:6,definition:5,definitions:5,defs:5,delay:[0,6],description:5,dev:[],development:4,device:4,digital:6,digitalwrite:6,directive:[],directly:5,display:6,divisor:[],dl:4,docinfo:5,docs:5,doctest:5,document:5,docutils:5,driver:[0,4],each:5,eclipse:4,element:5,elements:[],emphasis:5,empty:5,end:0,energy:2,enhancement:5,enumerated:5,environment:4,epigraph:5,equivalent:5,error:5,escapes:5,esp:0,etc:5,even:5,examples:5,explicit:5,external:5,fabf:6,factorytest:4,feb:5,felica:6,fft:0,field:5,fig:5,figure:5,file:[4,5],flush:5,font:6,footer:5,footnote:5,format:5,from:[5,6],ftdi:4,full:5,g0:6,g2:[0,6],generate:5,generates:5,generic:5,getcoloruint:6,gh:[],gnd:[0,6],goodger:5,gp:6,gpio:6,green:6,greenyellow:6,grid:5,gx:6,gyrox:6,gyroy:6,gyroz:6,header:5,heading:5,height:[],here:0,hex:6,hextodec:6,high:6,highlights:5,hint:5,hoge:0,html:5,http:5,https:[0,1,3,4,5,6],hyperlink:5,hz:6,ide:[2,6],iframe:[],image:5,images:[],important:5,imu:6,include:[0,5,6],indentation:5,indented:5,indents:5,index:4,inertial:6,info:5,informal:5,inline:[],ino:6,input:5,install:5,instead:5,integrated:4,internal:5,internet:5,interpreted:[],intro:[],introductory:5,ip:[1,5],ipconfig:[1,5],ir:6,irled:6,irrecvdumpv:6,irremoteesp:6,irsend:6,is:5,isalldigit:6,isdigit:6,isprime:[],it:5,items:[5,6],itself:5,java:4,jjyclock:6,kirled:6,krecvpin:6,labelled:5,lang:[0,3,6],latex:5,lcd:2,learning:3,least:5,lecattachpin:6,led:2,ledcattachpin:6,ledcsetup:6,ledcwrite:6,legend:5,like:5,line:[0,5],lines:5,list:5,lists:5,literal:5,longer:6,loop:[0,6],low:2,lpt:4,m5:6,m5stack:3,m5stick:4,m5stickc:3,m5stickcplus:[4,6],mac:6,magenta:6,magnify:6,main:0,make:0,manager:4,manually:5,many:5,map:6,markup:[],math:5,mathematical:5,measurement:6,meta:5,metadata:5,mg:6,mhigh:6,mi:5,microsoft:4,mini:5,mlow:6,modulation:2,mpu:6,ms:6,mute:6,name:5,named:5,nay:6,naz:6,nec:6,network:2,next:5,ngy:6,ngz:6,no:5,non:5,not:[],notation:5,note:5,notice:[],ntp:2,num:6,number:5,numbered:5,numref:5,of:5,on:5,once:0,option:5,optional:5,options:5,or:[5,6],orange:6,os:4,ota:6,output:6,overlined:5,paragraphs:5,parallel:5,parsed:5,passed:5,pbl:3,pc:[4,6],pep:5,picture:5,pin:[0,6],pinmode:[0,6],pip:5,pixel:6,pjs:[],please:5,plus:[3,4],point:0,port:4,pos:6,possible:5,power:6,preceded:5,preference:2,preserve:5,pressed:6,prime:[],print:[5,6],printf:6,println:6,processes:5,profile:2,proposal:5,protocol:2,pull:5,pulse:2,purpose:6,put:0,pwm:2,pwmch:[],python:5,qiita:6,qs:6,quick:[],quote:5,quoted:5,quotes:5,raspberrypi:[],raw:5,rcs:6,read:5,reading:5,red:6,reference:[],reminders:[],repeatedly:0,replace:5,replacement:5,request:5,reset:6,rest:5,restructuredtext:[],result:[],revision:5,rfc:5,role:[],rom:0,rrggbb:6,rtc:6,rubric:5,run:0,sample:0,sbuf:6,scanf:[],section:[],sections:5,sectnum:5,see:5,separate:5,separated:5,serial:[0,2],set:5,setbeep:6,setcursor:6,setrotation:6,settextfont:6,setup:[0,4,6],sheet:[],sidebar:5,simple:5,source:5,spaces:5,specific:5,sphinx:[1,5],spp:2,src:[0,1,6],ss:5,standalone:5,standard:5,start:0,stdio:[],store:4,str:6,string:6,strong:5,struct:0,structure:[],studio:4,sub:5,subscript:5,subsections:5,substitution:5,sup:5,superscript:5,syntax:[],table:5,tables:5,target:5,term:5,text:[],textfont:6,than:6,the:[],time:2,tip:5,title:5,titled:5,titles:5,tmp:6,to:[0,5,6],today:5,tone:6,topic:5,toshiba:6,tutorial:[],tv:6,two:5,type:5,typedef:0,uiflow:4,uint:6,underlined:5,unicode:5,uniform:5,unit:6,uno:4,untouched:5,update:6,url:[],usb:[4,6],use:5,used:5,useful:5,variation:5,vcp:4,ver:[],verse:5,version:5,virtual:4,visible:5,visual:4,warning:5,was:6,way:5,web:4,webclient:2,webserver:2,were:5,width:2,wifi:2,windows:[],wrapped:5,writer:5,www:[0,3,4,6],yellow:6,you:5,your:0},titles:["Arduino","Conclusion","IoT\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","\u5b9f\u9a13\u306e\u76ee\u7684","\u4e8b\u524d\u6e96\u5099","Tutorial","1\u9031\u76ee","2\u9031\u76ee"],titleterms:{"'s":[],"(infrared":6,"5stickcplus":4,"\u3059\u3059\u3081\u304b":3,"\u3059\u308b":4,"\u305d\u306e":6,"\u3068\u304d":6,"\u307e\u3068\u3081":[],"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb":4,"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3":[],"\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3intro":[],"\u30b3\u30fc\u30c9":6,"\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":4,"\u30b5\u30fc\u30d0":6,"\u30b5\u30fc\u30dc\u30cf\u30c3\u30c8":6,"\u30b5\u30fc\u30dc\u30e2\u30fc\u30bf":6,"\u30b7\u30ea\u30a2\u30eb\u30dd\u30fc\u30c8":4,"\u30b9\u30d7\u30e9\u30a4\u30c8":6,"\u30bb\u30f3\u30b5":6,"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4":6,"\u30d0\u30fc\u30b8\u30e7\u30f3":4,"\u30d2\u30f3\u30c8":6,"\u30d3\u30eb\u30c9":4,"\u30d6\u30b6\u30fc":6,"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0":2,"\u30d7\u30ed\u30b0\u30e9\u30e0":[4,6],"\u30dc\u30bf\u30f3":6,"\u30dc\u30fc\u30c9":4,"\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3\u30fc":4,"\u30e2\u30cb\u30bf":[],"\u30e9\u30a4\u30d6\u30e9\u30ea":4,"\u30ea\u30e2\u30b3\u30f3":6,"\u30ea\u30f3\u30af":6,"\u4e8b\u524d":4,"\u4fe1\u53f7":6,"\u5165\u308c":6,"\u5185\u8535led":6,"\u5207\u308a\u65b9":6,"\u5229\u7528":6,"\u5236\u5fa1":6,"\u52a0\u901f\u5ea6":6,"\u53c2\u8003":6,"\u53c2\u8003url":3,"\u53d6\u5f97":6,"\u57fa\u6e96":3,"\u5834\u5408":4,"\u5909\u63db":6,"\u5916\u90e8":6,"\u5b66\u7fd2":[],"\u5b9f\u9a13":3,"\u60c5\u5831":4,"\u6271\u3044":6,"\u6307\u6a19":[],"\u63a5\u7d9a":6,"\u6570\u5909":[],"\u6574\u6570":[],"\u6587\u5b57\u5217":6,"\u6642\u523b":6,"\u66f8\u304d\u8fbc\u307f":[4,6],"\u66f8\u304f":6,"\u672c\u4f53":6,"\u691c\u7d22":2,"\u6ce8\u610f":6,"\u6db2\u6676":6,"\u6e96\u5099":4,"\u74b0\u5883":4,"\u76ee\u7684":3,"\u78ba\u8a8d":4,"\u7d22\u5f15":2,"\u8868\u793a":4,"\u8a2d\u5b9a":4,"\u8a55\u4fa1":3,"\u8aad\u307f\u53d6\u308a":6,"\u8d64\u5916":6,"\u8ffd\u52a0":4,"\u9001\u4fe1":6,"\u901a\u4fe1":6,"\u9031\u76ee":[6,7],"\u9032\u6570":6,"\u9078\u629e":4,"\u958b\u767a":4,"\u96fb\u529b":6,"\u96fb\u6e90":6,"\uff08\u8d64":6,"\uff08arduino":4,adc:6,analogread:[],and:[],arduino:[0,4],beep:6,bluetooth:6,body:5,cheat:5,conclusion:1,directive:5,documentation:[],elements:5,energy:6,esp:4,ide:4,indices:[],inline:5,interpreted:5,iot:2,lcd:6,led:6,linux:4,low:6,macos:4,markup:5,modulation:6,network:6,ntp:6,preference:6,profile:6,protocol:6,pulse:6,pwm:6,quick:5,reference:5,reminders:5,restructuredtext:5,role:5,section:5,serial:6,sheet:5,spp:6,structure:5,syntax:5,tables:[],testrtp:[],text:5,the:5,time:6,to:[],tutorial:5,url:4,webclient:6,webserver:6,welcome:[],width:6,wifi:6,windows:4}}) \ No newline at end of file diff --git a/_build/html/week1.html b/_build/html/week1.html index e63ff18..bc1f992 100644 --- a/_build/html/week1.html +++ b/_build/html/week1.html @@ -93,23 +93,29 @@
        • 実験の目的
        • 実験のすすめかた
        • +
        • 参考URL
        • 事前準備
        • 1週目
        • 2週目
        • @@ -197,67 +203,855 @@

          以下の項目について、全員がすべてを試す必要はありません。役割分担をして、確認と理解をすすめてください。

          -

          電源の切り方

          +

          電源の切り方・入れ方

          +
            +
          • 電源を切るには、電源ボタン(M5と書かれたAボタンの左側面)を、6秒間長押しします。
          • +
          • 電源を入れるには、電源ボタンを、2秒間長押しします。
          • +
          • M5StickCガイド の、4ページ目、ハードウェアの概要が参考になります。
          • +

          プログラムの書き込み方

          プログラムの書き込み を参照してください。

          -

          コードを書くときの注意

          +

          コードを書くときのヒントと注意

            -
          • #include<M5StickC.h> を #include<M5StickCPlus.h> にしないと、画面がおかしくなる
          • -
          • 大文字小文字に注意
          • -
          • 画面をつかうプログラムを書き込んだあと、画面を使わないプログラムを書き込むと、前のプログラムの画面が残ることがある。
          • +
          • 以下のソースコード例は、右上のボタンを押すと、クリップボードに簡単にコピーできます。
          • +
          • ソースコードのインデントは、CTRL+T (Macの場合はCommand+T)キーで、自動整形できます。
          • +
          • #include <M5StickC.h> は、M5StickC用のコードです。 M5StickCPlus では、#include <M5StickCPlus.h> に変更しないと、表示がおかしくなることがあります。
          • +
          • 大文字と小文字は厳密に区別されます。
          • +
          • 画面をつかうプログラムを書き込んだあと、画面を使わないプログラムを書き込むと、前のプログラムの画面が残ることがあります。
          -

          Serialモニタ

          +

          Serial通信

          +

          リスト 1 は、シリアルモニタへ文字列を出力するシンプルな例です。グローバル変数 num を 0 に設定したうえで、setup()関数が1回実行されます。その後、loop()関数が繰り返し実行されます。 +プログラムの出力をみるには、Arduino IDEで「シリアルモニタ」をひらいてください。コードエディタ右上の虫眼鏡アイコンボタンをおします。 +Serialクラスには、print()関数、println()関数、 printf()関数があります。Serial通信を用いると、デバイス側の変数の値や状況を、PC側で確認するプログラムを書くことができます。

          +
          +
          リスト 1 src/serial01.ino
          +
          1
          +2
          +3
          +4
          +5
          +6
          +7
          +8
          +9
          int num = 0;
          +void setup() {
          +  Serial.begin(115200); // 通信速度をbpsで設定
          +}
          +void loop() {
          +  Serial.printf("%d \n" , num);
          +  num++;
          +  delay(500); // 500ミリ秒待つ
          +}
          +
          +
          -
          -

          文字列の扱い

          +

          シリアルモニタは、デバイスからの出力を確認するだけではなく、デバイスに文字を送信することもできます。リスト 2 は、シリアルモニタを介して、PCからデバイスに文字を送信する例です。シリアルモニタ上部のテキストエリアから 0 を送信すると、カウンタ num をリセットします。10〜14行目で、PCから送信された文字を、1文字ずつ Serial.read() で読み取って、配列 buf に格納しています。PCから複数の文字を1回で送信すると、 Serial.available() は連続して 1 (=true) を返しますので、1回に送信された文字をすべて buf に格納することができます。ちなみに、シリアルモニタで送信された文字列の最後は、改行コード(10)が付与されます。

          +
          +
          リスト 2 src/serial02.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          +29
          int num = 0;
          +char buf[100];
          +
          +void setup() {
          +  Serial.begin(115200); // 通信速度をbpsで設定
          +}
          +
          +void loop() {
          +  int pos = 0;
          +  while (Serial.available()) { //PCから送信された文字があるあいだ、くりかえす
          +    char c = Serial.read(); // 1バイト読み取る
          +    buf[pos] = c;           // 配列buf に格納
          +    pos++;    // 格納位置をひとつ右へ
          +  }
          +  if (pos > 0) {
          +    buf[pos] = 0; // さいごに Null (文字列の終端)を追加(これを忘れるとどうなる?)
          +    Serial.print("> from pc: ");
          +    Serial.print( buf ); // 格納しておいた文字列を表示
          +    if (buf[0] == '0' && pos == 2) { // buf={ 48(='0'), 10(=改行) } のとき
          +      num = 0;  // num を 0 にする
          +      Serial.println( "Reset num" );
          +    }
          +    delay(2000);
          +  }
          +
          +  Serial.printf("%d \n" , num );
          +  num++;
          +  delay(500);
          +}
          +
          +
          -
          -

          LED

          +
          +

          注釈

          +

          16行目の処理を忘れると、どうなるでしょうか? また、buf が溢れると、なにが起きるでしょうか?プログラムを書くときは、常に例外的な事象がおきる可能性を考えておきましょう。ただし、全ての例外的な事象に対処するのは困難な場合が多いです。

          -
          -

          外部のLEDを接続

          -

          PWM (Pulse Width Modulation)

          -
          -
          -

          外部のセンサを接続

          -

          CdSセル 明度センサ

          -

          人感センサ

          -

          圧力センサ

          -

          曲げセンサ

          -
          -
          -

          加速度センサ

          -
          -
          -

          赤外(InfraRed)リモコン

          -

          読み取り

          -

          信号発信

          -

          内蔵赤外LED

          本体の液晶ディスプレイ(LCD)

            -
          • M5StickCのDisplay周り解析 <https://lang-ship.com/blog/work/m5stickc-display></https:>
          • +
          • M5StickCのDisplay周り解析 <https://lang-ship.com/blog/work/m5stickc-display> が詳しいです。
          • +
          • リスト 3 のサンプルでは、外側から内側に向かって、10ピクセルずつ余白を残しながら、色を変えて塗りつぶしています。その後、8,16,26ピクセルフォント(それぞれ1,2,4番)をsetCursor()関数で指定して、print()関数で文字列を描画しています。
          • +
          • M5StickCPlusの機能である液晶ディスプレイ(LCD)を使用するため、 #include <M5StickCPlus.h> を指定し、M5.begin() を呼び出しています。
          +
          +
          リスト 3 src/lcd01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          +29
          +30
          +31
          +32
          +33
          +34
          +35
          #include <M5StickCPlus.h>
          +
          +void setup() {
          +  M5.begin();
          +  M5.Lcd.setRotation(3);
          +  M5.Lcd.fillRect(0, 0, 240, 135, RED); 
          +  //M5StickCPlusの画面サイズは、240 x 135
          +
          +  M5.Lcd.fillRect(10, 10, 220, 115, ORANGE);
          +  M5.Lcd.fillRect(20, 20, 200, 95, YELLOW);
          +  M5.Lcd.fillRect(30, 30, 180, 75, GREENYELLOW);
          +  M5.Lcd.fillRect(40, 40, 160, 55, CYAN);
          +  M5.Lcd.fillRect(50, 50, 140, 35, BLUE);
          +  M5.Lcd.fillRect(60, 60, 120, 15, MAGENTA);
          +
          +  M5.Lcd.setTextFont(1); // 8pixel ASCII font
          +  M5.Lcd.setTextSize(1); // Magnify (x1-7)
          +  M5.Lcd.setTextColor(WHITE);
          +  M5.Lcd.setCursor(10,1); M5.Lcd.print("RED");
          +  M5.Lcd.setTextColor(BLACK);
          +  M5.Lcd.setCursor(20,11); M5.Lcd.print("ORANGE");
          +  M5.Lcd.setCursor(30,21); M5.Lcd.print("YELLOW");
          +  M5.Lcd.setCursor(40,31); M5.Lcd.print("GREENYELLOW");
          +  M5.Lcd.setCursor(50,41); M5.Lcd.print("CYAN");
          +  M5.Lcd.setTextColor(WHITE);
          +  M5.Lcd.setCursor(60,51); M5.Lcd.print("BLUE");
          +  M5.Lcd.setCursor(70,60,2); M5.Lcd.print("MAGENTA (2)");
          +  // setCursorの第3引数は、TextFont番号
          +
          +  M5.Lcd.setTextColor(BLACK);
          +  M5.Lcd.setCursor(30,90,4); M5.Lcd.print("26pixel ASCII (4)");
          +}
          +
          +void loop() {
          +}
          +
          +
          +
          +

          画面の向きは、setRotation() 関数で、設定します。0〜3までの整数で、指定します。

          +
          +_images/setRotation.gif +
          +
          +

          注釈

          +

          フォントの種類を設定するときは、setTextFont() や、setCursor()の第3引数をつかいます。setTextSize()は、指定したフォントを何倍に引き伸ばして表示するか?なので、基本は1を指定することが多いです。倍率を増やすと、ギザギザが目立ちます。

          +
          +
          +
          +

          本体のボタン

          +

          本体には、3つのボタンがあります。 +(参考:M5StickCガイド の、4ページ目、ハードウェアの概要)

          +

          リスト 4 に、ボタンをおしたらシリアルモニタに表示する例を示します。ボタンも、M5StickC/CPlusの機能なので、 #include <M5StickCPlus.h> を指定し、M5.begin() を呼び出しておく必要があります。また、ボタンの状態を読み出して、ボタンオブジェクト(BtnA,BtnB)に設定するために、 M5.update() を、ループのなかに入れておく必要があります( update()の定義 )。長押しと普通押しを区別したい場合は、ifで確認する順番(長押しを先に判定する)が重要です。

          +
          +
          リスト 4 src/button01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          #include <M5StickCPlus.h>
          +
          +void setup() {
          +  M5.begin();
          +  M5.Lcd.setRotation(3);
          +}
          +
          +void loop() {
          +  M5.update(); // 各ボタンの状態を(読み取って)更新する:ボタンを判定するときは必須。
          +
          +  if (M5.BtnA.wasReleasefor(1000) ) {
          +    Serial.println("[A] was Pressed longer than 1s");
          +  } else if (M5.BtnA.wasReleased()) {
          +    Serial.println("[A] was Pressed");
          +  } else if (M5.BtnB.wasReleasefor(1000) ) {
          +    Serial.println("[B] was Pressed longer than 1s");
          +  } else if (M5.BtnB.wasReleased()) {
          +    Serial.println("[B] was Pressed");
          +  } else if (M5.Axp.GetBtnPress() == 2) {
          +    Serial.println("[Power] was Pressed");
          +  }
          +  delay(10);
          +}
          +
          +
          +
          +
          +

          注釈

          +

          非公式リファレンスの「ボタン管理(Button)」 も参考になります。

          +
          +
          +
          +

          文字列の扱い、16進数や10進数の変換

          +

          リスト 5 に、文字列から整数に変換したり、16進数表現の文字列を10進数に変換する例を示します。 +Stringクラスを用いると、char配列 / byte配列 / 小文字変換や、空白改行の削除(ただし文字列の前後のみ)、部分文字列の取得などができます。 +元のデータが保持されるメソッドと、破壊されるメソッドがあることに注意しましょう。 +M5系デバイスのLCDでは、色を16ビット値(赤5bit/緑6bit/青5bit)で表現しています。 M5.Lcd.color565() という関数もありますが、ここではビット演算の理解を深めるため、関数を定義しています。 +C言語のポインタや、シフト演算などを理解していると、このような処理を円滑に記述できるようになります。

          +
          +
          リスト 5 src/str01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          +29
          +30
          +31
          +32
          +33
          +34
          +35
          +36
          +37
          +38
          +39
          +40
          +41
          +42
          +43
          +44
          +45
          +46
          +47
          +48
          +49
          +50
          +51
          +52
          +53
          +54
          +55
          +56
          +57
          +58
          +59
          +60
          +61
          +62
          +63
          +64
          +65
          +66
          +67
          +68
          +69
          #include <M5StickCPlus.h>
          +
          +void setup() {
          +  Serial.begin(115200);
          +  M5.begin();
          +  M5.Lcd.setRotation(3);
          +  Serial.println("整数 または 6文字の16進数(RRGGBB)を入力してください。");
          +}
          +
          +String str = ""; // String: 可変長の文字列クラス
          +void loop() {
          +  char buf[100] = {0};
          +  int pos = 0;
          +  while (Serial.available()) { //PCから送信された文字があるあいだ、くりかえす
          +    char c = Serial.read(); // 1バイト読み取る
          +    buf[pos] = c;           // 配列buf に格納
          +    pos++;    // 格納位置をひとつ右へ
          +  }
          +  if (pos > 0) {
          +    buf[pos] = 0;
          +    String sbuf = buf;
          +    sbuf.trim(); //文字列の前と後の空白と改行を取り除く(破壊的メソッド)
          +    str.concat(sbuf); // 文字列の連結 (意味としては、str = str + sbuf)
          +    Serial.println(str);
          +    if (isDigit(sbuf)) {
          +      int num = sbuf.toInt();
          +      Serial.println( num * num );
          +    }
          +    if (sbuf.length() == 6) { // RRGGBBとして、LCD画面の背景を塗りつぶす
          +      sbuf.toLowerCase();
          +      uint8_t r = hexToDec( sbuf.substring(0, 2) );
          +      uint8_t g = hexToDec( sbuf.substring(2, 4) );
          +      uint8_t b = hexToDec( sbuf.substring(4, 6) );
          +      M5.Lcd.fillScreen( getColorUInt16( r , g , b ) );
          +      M5.Lcd.setCursor(0, 70, 4);
          +      M5.Lcd.printf(" %02x %02x %02x \n", r, g, b);
          +      M5.Lcd.printf(" %d %d %d ", r, g, b);
          +    }
          +  }
          +  delay(50);
          +}
          +//全ての文字が0〜9なら、1(true)を返す
          +bool isDigit(String s) {
          +  bool isAllDigit = true;
          +  const char *p = s.c_str(); // String.c_str() は、NULLで終端されたchar配列の先頭アドレスを返す
          +  while ( *p != 0 ) {
          +    if (*p < '0' || '9' < *p) isAllDigit = false;
          +    p++;
          +  }
          +  return isAllDigit;
          +}
          +// M5 用の、16ビットカラー値に変換 引用:https://qiita.com/nnn112358/items/ea6b5e81623ba690343c
          +uint16_t getColorUInt16(uint8_t red, uint8_t green, uint8_t blue) {
          +  return ((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3);
          +}
          +// 引数hex が16進表記の文字列だと仮定して、10進の値を返す
          +uint8_t hexToDec(String hex) {
          +  int dec = 0;
          +  int tmp = 0;
          +  for (int p = 0; p < hex.length(); p++) {
          +    tmp = int(hex.charAt(p));
          +    if ( '0' <= tmp && tmp <= '9' ) tmp = tmp - '0';
          +    if ( 'a' <= tmp && tmp <= 'f' ) tmp = tmp - 'a' + 10;
          +    if ( 'A' <= tmp && tmp <= 'F' ) tmp = tmp - 'A' + 10;
          +    tmp = constrain(tmp, 0, 15); //例外処理
          +    dec = (dec * 16) + tmp;
          +  }
          +  return dec;
          +}
          +
          +
          +
          + +
          +
          +

          ブザー(Beep)

          +

          リスト 6 は、内蔵Beepを鳴らすサンプルです。音の周波数は、最初の1オクターブ (f[0]〜f[6]) のみを配列宣言時に指定し、残りの3オクターブはsetup()内で、倍数を計算して配列に設定しています。

          +

          setBeep()beep() を使うと、同じビープ音を使い回すときは記述が短くて便利ですが、通常は tone() のほうが簡潔です。 +どちらの記法でも、命令実行のあと、音の停止を待たずに、すぐに次の処理に移行します(ノンブロッキング)。 +継続ミリ秒数(ms)は、 M5.Beep.update() が周期的に呼び出せるときに指定し、それ以外は省略するとよいでしょう。(結局、 delay()mute() が必要になるため)

          +
          +
          リスト 6 src/sound01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          +29
          +30
          +31
          +32
          +33
          +34
          #include <M5StickCPlus.h>
          +
          +int f[28] = { 262, 294, 330, 349, 392, 440, 494 }; // 配列のサイズは4オクターブ分
          +void setup() {
          +  Serial.begin(115200);
          +  M5.begin();
          +  M5.Lcd.setRotation(3);
          +  for (int i = 0; i < 7; i++) {
          +    f[i + 7]  = f[i] * 2;
          +    f[i + 14] = f[i] * 4;
          +    f[i + 21] = f[i] * 8;
          +  }
          +  // setBeep( Hz, ms) でビープ音を設定して、beep()で鳴らす。
          +  M5.Beep.setBeep(523, 500);  M5.Beep.beep();  delay(500);
          +  // tone( Hz, ms ) で鳴らす方法
          +  M5.Beep.tone(1046, 500);  delay(500);
          +  // msを省略し、tone( Hz ) で鳴らす(結局、delayが必要になるので)
          +  M5.Beep.tone(2092);  delay(500);
          +  // ここはmsを指定するとよい (loopのM5.Beep.updateが停めてくれるので、delayを省略できる)
          +  M5.Beep.tone(2092 * 2, 1000);
          +}
          +
          +void loop() {
          +  M5.Beep.update(); //tone()やsetBeep()で指定した時間を過ぎていたら音を止める。
          +  //                  M5.Beep.mute() とすると、すぐに停止する。
          +
          +  while (Serial.available()) {
          +    char c = Serial.read();
          +    if (c < 'c' || 'z' < c) continue; // c〜zの文字以外なら、以降のwhile内処理をスキップ
          +    M5.Beep.tone( f[c - 'c'] , 1000); // 1秒鳴らす
          +    Serial.println( f[c - 'c'] );
          +  }
          +  delay(50);
          +}
          +
          +
          +
          +
          +
          +

          内蔵LED(赤・赤外)

          +

          M5StickCPlusには、2つのLEDランプが内蔵されています。GPIO(General Purpose I/O)10 には、赤色LED、GPIO9 には、赤外LEDが接続されています。 +場所は、USBケーブルを挿す面の反対側の面にある、小さな穴2つの内側です。

          +

          リスト 7 は、赤色LEDを点滅させるシンプルなプログラムです。

          +
          +
          リスト 7 src/led01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          int PIN = 10; // 赤色LED G10
          +//int PIN = 9; // Ir LED (カメラには映りますが、肉眼では見えません) G9
          +// その他、G0 (0) , G25 (25), G26 (26) がつかえます。
          +// https://lang-ship.com/blog/work/m5stickc-io/
          +
          +void setup() {
          +  pinMode(PIN, OUTPUT); // PINのモード設定
          +}
          +
          +void loop() {
          +  digitalWrite(PIN, HIGH); // HIGH = 1
          +  delay(1000);
          +  digitalWrite(PIN, LOW); // LOW = 0
          +  delay(500);
          +}
          +
          +
          +
          +
          +
          +

          外部のLED等を接続

          +

          外部のLED等は、 G0, G25, G26 に接続します。 +サンプルプログラムは、リスト 7 と同様です。PIN 番号を、0 / 25 / 26 に変更してください。

          +

          ブレッドボードに、抵抗とLEDを直列に接続します。 +LEDの長い足のほうに、G0 (or G25 or G26) をジャンパワイヤで接続し、反対側(短い足)のほうを、GND (グランド)に接続します。 +ポートを「HIGH」にすると、3.3Vの電圧がかかります。

          +
          +_images/SimpleLED_m5s.png +
          +
          +

          警告

          +

          LEDのみで回路を構成しないよう注意!一般に、LEDは抵抗をつないで使用しないと、故障したり、最悪の場合破裂したりして危険です。ただし、抵抗入りLEDであれば問題ありません。

          +
          +
          +
          +

          PWM (Pulse Width Modulation)

          +

          パルス幅変調とは、信号の周期Tに対する、パルスの幅を変化させる方法です。 +直流モータの速度制御や、サーボモータの制御、LEDの明度調整などに使われます。

          +

          リスト 8 は、赤色LEDを点滅させるシンプルなプログラムです。 ledcSetup(チャンネル, 周波数, 分解能) で、PWMチャンネル(0〜3)に対する周波数と分解能設定をし、 lecAttachPin(ピン番号, チャンネル) で、PWMチャンネルを適用する出力ピンを選択します。そのあと、 ledcWrite(チャンネル, 値) で、分解能で設定したビットで表現できる最大値+1以下の値を指定することで、デューティー比を設定します。リスト 8 の場合、分解能で8bitを指定したので、0〜256 の値が、デューティー比 0〜1 のパルス生成に対応します。

          +
          +
          リスト 8 src/pwm01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          int PIN = 10; // 内蔵LED
          +int PWM_CH = 1; // 0~3で指定する。0にすると高音が鳴って耳障り?
          +
          +void setup() {
          +  pinMode(PIN, OUTPUT); // PINのモード設定
          +  ledcSetup(PWM_CH, 90, 8); // CH, 周波数(Hz) 【小さくするとどうなる?】, 分解能(bit)
          +  ledcAttachPin(PIN, PWM_CH);
          +  // https://lang-ship.com/reference/unofficial/M5StickC/Peripherals/LED_Control/
          +}
          +
          +void loop() {
          +  int i;
          +
          +  for (int i = 0 ; i < 256 ; i++) {
          +    ledcWrite(PWM_CH, i);
          +    delay( 5 );
          +  }
          +  for (int i = 256 ; i > 0 ; i--) {
          +    ledcWrite(PWM_CH, i);
          +    delay( 5 );
          +  }
          +}
          +
          +
          +
          +
          +

          注釈

          +

          ソースコードのコメントにも書いていますが、周波数を小さくする(20〜30程度)と、どうなるでしょうか?ぜひやってみてください。

          +
          -

          本体のボタン

          +

          サーボモータ(サーボハット利用)

          +

          リスト 9 は、サーボハット のサーボモータを動かすサンプルです。サーボモータの制御はPWMですので、基本的に、上のPWMとやっていることは同じです。おまけとして、LEDも点灯させました。map関数 は、Arduinoで使える関数で、範囲に対応する値を変換するときに使います。ここでは、サーボ制御で用いる5〜33の値を、LED制御の値0〜256に変換しています。

          +
          +
          リスト 9 src/servohat01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          #define MLOW 5
          +#define MHIGH 33
          +
          +void setup() {
          +  ledcSetup(1, 50, 8); //サーボハット CH1
          +  ledcAttachPin(26, 1);
          +
          +  pinMode(10, OUTPUT);
          +  ledcSetup(2, 100, 8);//LED CH2
          +  ledcAttachPin(10, 2);
          +}
          +
          +void loop() {
          +  for (int i = MLOW; i <= MHIGH; i = i + 1) {
          +    ledcWrite(1, i);
          +    int v = map(i, MLOW, MHIGH, 0, 256); // 範囲5〜33に対するiの値を、範囲0〜256に変換
          +    ledcWrite(2, v);
          +    delay(50);
          +  }
          +  delay(300);
          +  for (int i = MHIGH; i >= MLOW; i = i - 1) {
          +    ledcWrite(1, i);
          +    int v = map(i, MLOW, MHIGH, 0, 256);
          +    ledcWrite(2, v);
          +    delay(20);
          +  }
          +  delay(300);
          +}
          +
          +
          -
          -

          スプライト

          -

          画面のちらつき防止

          -
          -

          ブザー

          +
          +

          外部のセンサを接続 (ADC)

          +

          ADCは、Analog to Digital Converter の意味です。 +analogRead(PIN) は、PIN番ピンの電圧(0~3.3V)を、0〜4095 の値で返します。一般に、抵抗値が変化するタイプのセンサは、この方法をつかって、読み取ることができます。

          +
          +

          警告

          +

          ADC にかいてあるように、G26, G32, G33, G36のみ使えます。G26は、無線利用時には使えません。

          +
          +

          リスト 10 はCdSセル(照度センサ) の値を読み取るサンプルです。

          +
          +
          リスト 10 src/cds01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          int PIN = 26;
          +
          +// +--- 15kΩ抵抗 --+-- CdSセル --+
          +// |              |             |
          +// GND           G26           3V3
          +// https://www.storange.jp/2012/03/arduinocds.html
          +
          +// 注意点: https://lang-ship.com/reference/unofficial/M5StickC/Peripherals/ADC/
          +
          +void setup() {
          +  pinMode(PIN, ANALOG); // PINのモード設定
          +  // https://lang-ship.com/blog/work/m5stickc-io/
          +}
          +
          +void loop() {
          +  Serial.printf("%04d\n", analogRead(PIN) ); // 暗 0 〜 4095 明
          +  delay(1000);
          +}
          +
          +
          +
          +

          圧力センサや、曲げセンサも、同様の方法で利用することができます。

          -

          サーボモータ

          +

          加速度センサ

          +

          リスト 11 は、内蔵されている加速度センサ(MPU6886) の値を表示するサンプルです。ちなみに、IMUとは、Inertial Measurement Unit: 慣性計測装置 の略です。 +「ツール」→「シリアルプロッタ」をひらくと、値をグラフでみることができます。 +ジャイロセンサの値も取得可能です。

          +
          +
          リスト 11 src/accgyro.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          // 参考にしたサイト: https://qiita.com/kitazaki/items/1ce671532270cd44fabf
          +
          +#include <M5StickCPlus.h>
          +
          +float gyroX, gyroY, gyroZ;  // ジャイロデータ 
          +float ax, ay, az;  // 加速度データ
          +
          +void setup() {
          +  M5.begin();
          +  M5.Lcd.setRotation(3);
          +  M5.IMU.Init();
          +  Serial.begin(115200);
          +  Serial.println("");
          +}
          +void loop() {
          +  M5.IMU.getGyroData(&gyroX, &gyroY, &gyroZ);
          +  M5.IMU.getAccelData(&ax, &ay, &az);
          +  M5.Lcd.setCursor(0, 10, 2);
          +
          +  M5.Lcd.printf("aX :%7.2f  \naY :%7.2f  \naZ :%7.2f mg  \n\n", ax , ay , az );
          +  Serial.printf("%7.2f , %7.2f , %7.2f \n", ax , ay , az); //シリアルプロッタ用の出力
          +
          +  M5.Lcd.printf("gX :%7.2f  \ngY :%7.2f  \ngZ :%7.2f mg  ", gyroX * M5.IMU.gRes, gyroY * M5.IMU.gRes, gyroZ * M5.IMU.gRes);
          +  // Serial.printf("%7.2f,%7.2f,%7.2f,", gyroX * M5.IMU.gRes, gyroY * M5.IMU.gRes, gyroZ * M5.IMU.gRes);
          +
          +  delay(50);
          +}
          +
          +
          +
          +
          +
          +

          赤外(InfraRed)リモコン

          +
          +

          信号の読み取り

          +

          赤外線リモコン受信モジュールが必要です。ここでは、GP1UXC41QS を前提に、話をすすめます。

          +

          また、準備として、ライブラリマネージャにて、IRremoteESP8266 をインストールします。ちなみに、テストしたバージョンは2.7.15でした。

          +

          ファイルメニュー → スケッチ例 → IRremoteESP8266 → IRrecvDumpV2 を選択します。

          +

          ブレッドボードに、以下の図のように配線します。Pとかいてある面が、受光器が出っ張っている面です。47Ωの抵抗を、5Vとの間に入れます。 +赤外線リモコン受信モジュールに接続したピンを const uint16_t kRecvPin = 36; として設定します。 +受光器にリモコンを向けて、ボタンを押すと、シリアルモニタに情報が表示されます。ここでは、Protocol : NEC , Code 0x2FD48B7 (32 Bits) と表示されたとします。

          +
          +_images/ir_sensor_47owm.png +
          +
          +
          +

          信号の送信

          +

          内蔵の赤外LEDを用いて、信号を送信する例を リスト 12 に示します。 +赤外光が弱いため、かなり近づかないと(50cm程度)反応しない場合があります。 +外部の赤外LEDを用いると、距離を伸ばすことができます。

          +
          +
          リスト 12 src/irsend01.ino
          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          #include <IRremoteESP8266.h>
          +#include <IRsend.h>
          +
          +uint16_t kIrLed = 9; // 内蔵IrLED
          +IRsend irsend(kIrLed);
          +
          +uint32_t code = 0x2FD48B7; // Toshiba TV Power
          +void setup() {
          +  irsend.begin();
          +}
          +
          +void loop() {
          +  irsend.sendNEC( code , 32);
          +  delay(5000);
          +}
          +
          +
          +
          +
          +
          +
          +

          スプライト

          +

          画面のちらつき防止

          Wifi 接続

          @@ -281,11 +1075,11 @@

          Preference

          -
          -

          電力制御

          +
          +

          電力制御

          -
          -

          その他

          +
          +

          その他

          • CO2 (CCS811)
          • RCS-620S (Felica)
          • @@ -294,8 +1088,8 @@
          • OTA
          -
          -

          参考リンク

          +
          +

          参考リンク

          diff --git a/images/._setRotation.gif b/images/._setRotation.gif new file mode 100644 index 0000000..c6aacfa --- /dev/null +++ b/images/._setRotation.gif Binary files differ diff --git a/images/SimpleLED_m5s.png b/images/SimpleLED_m5s.png new file mode 100644 index 0000000..0fcbdad --- /dev/null +++ b/images/SimpleLED_m5s.png Binary files differ diff --git a/images/ir_sensor.png b/images/ir_sensor.png new file mode 100644 index 0000000..ac91d08 --- /dev/null +++ b/images/ir_sensor.png Binary files differ diff --git a/images/ir_sensor_47owm.png b/images/ir_sensor_47owm.png new file mode 100644 index 0000000..ca40e10 --- /dev/null +++ b/images/ir_sensor_47owm.png Binary files differ diff --git a/images/setRotation.gif b/images/setRotation.gif new file mode 100644 index 0000000..1e239b0 --- /dev/null +++ b/images/setRotation.gif Binary files differ diff --git a/intro.rst b/intro.rst index 469149c..1663260 100755 --- a/intro.rst +++ b/intro.rst @@ -41,3 +41,10 @@ 発表会における評価基準も、上記の基準に準じる。 + +参考URL +========================================== + +- M5StickC非公式日本語リファレンス +- スイッチサイエンス M5StickC Plus +- M5StickCガイド \ No newline at end of file diff --git a/pre.rst b/pre.rst index 414c7f7..c8a4b53 100755 --- a/pre.rst +++ b/pre.rst @@ -130,7 +130,7 @@ シリアルポートの選択 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**本体をUSB接続したあと** で、 :numref:`fig_select_serialport` に示すように、「ツール」→「シリアルポート」で、書き込むデバイスが接続されているシリアルポートを選択する。Windowsの場合は、COM3のように、``COM + 数字`` で表記される。Macの場合は、``/dev/cu.usbserial-XXXXX`` のように表記される。 +**本体をUSB接続したあと** で、 :numref:`fig_select_serialport` に示すように、「ツール」→「シリアルポート」で、書き込むデバイスが接続されているシリアルポートを選択する。Windowsの場合は、COM3のように、``COM + 数字`` で表記される。Macの場合は、``/dev/cu.usbserial-XXXXXXXXXX`` のように表記される。 .. _fig_select_serialport: @@ -152,3 +152,13 @@ 「→」のアイコンボタンをおすと、プログラムの書き込みを開始します。 .. warning:: 書き込みに失敗するときは、環境設定で、「より詳細な情報を表示する」にチェックをいれてみてください。原因がすこしわかりやすくなります。 + + +バージョン情報 +-------------------------------------------------- + +- Arduino IDEのバージョン: 1.8.13 (Windows Store 1.8.42.0) +- ESP32 for Arduino のバージョン:1.0.5 +- M5StickCPlus ライブラリのバージョン: 0.0.1 + + diff --git a/src/accgyro.ino b/src/accgyro.ino new file mode 100644 index 0000000..f0955b1 --- /dev/null +++ b/src/accgyro.ino @@ -0,0 +1,27 @@ +// 参考にしたサイト: https://qiita.com/kitazaki/items/1ce671532270cd44fabf + +#include + +float gyroX, gyroY, gyroZ; // ジャイロデータ  +float ax, ay, az; // 加速度データ + +void setup() { + M5.begin(); + M5.Lcd.setRotation(3); + M5.IMU.Init(); + Serial.begin(115200); + Serial.println(""); +} +void loop() { + M5.IMU.getGyroData(&gyroX, &gyroY, &gyroZ); + M5.IMU.getAccelData(&ax, &ay, &az); + M5.Lcd.setCursor(0, 10, 2); + + M5.Lcd.printf("aX :%7.2f \naY :%7.2f \naZ :%7.2f mg \n\n", ax , ay , az ); + Serial.printf("%7.2f , %7.2f , %7.2f \n", ax , ay , az); //シリアルプロッタ用の出力 + + M5.Lcd.printf("gX :%7.2f \ngY :%7.2f \ngZ :%7.2f mg ", gyroX * M5.IMU.gRes, gyroY * M5.IMU.gRes, gyroZ * M5.IMU.gRes); + // Serial.printf("%7.2f,%7.2f,%7.2f,", gyroX * M5.IMU.gRes, gyroY * M5.IMU.gRes, gyroZ * M5.IMU.gRes); + + delay(50); +} \ No newline at end of file diff --git a/src/button01.ino b/src/button01.ino new file mode 100644 index 0000000..c125448 --- /dev/null +++ b/src/button01.ino @@ -0,0 +1,23 @@ +#include + +void setup() { + M5.begin(); + M5.Lcd.setRotation(3); +} + +void loop() { + M5.update(); // 各ボタンの状態を(読み取って)更新する:ボタンを判定するときは必須。 + + if (M5.BtnA.wasReleasefor(1000) ) { + Serial.println("[A] was Pressed longer than 1s"); + } else if (M5.BtnA.wasReleased()) { + Serial.println("[A] was Pressed"); + } else if (M5.BtnB.wasReleasefor(1000) ) { + Serial.println("[B] was Pressed longer than 1s"); + } else if (M5.BtnB.wasReleased()) { + Serial.println("[B] was Pressed"); + } else if (M5.Axp.GetBtnPress() == 2) { + Serial.println("[Power] was Pressed"); + } + delay(10); +} \ No newline at end of file diff --git a/src/cds01.ino b/src/cds01.ino new file mode 100644 index 0000000..25b5a3b --- /dev/null +++ b/src/cds01.ino @@ -0,0 +1,18 @@ +int PIN = 26; + +// +--- 15kΩ抵抗 --+-- CdSセル --+ +// | | | +// GND G26 3V3 +// https://www.storange.jp/2012/03/arduinocds.html + +// 注意点: https://lang-ship.com/reference/unofficial/M5StickC/Peripherals/ADC/ + +void setup() { + pinMode(PIN, ANALOG); // PINのモード設定 + // https://lang-ship.com/blog/work/m5stickc-io/ +} + +void loop() { + Serial.printf("%04d\n", analogRead(PIN) ); // 暗 0 〜 4095 明 + delay(1000); +} \ No newline at end of file diff --git a/src/irsend01.ino b/src/irsend01.ino new file mode 100644 index 0000000..cfb1daf --- /dev/null +++ b/src/irsend01.ino @@ -0,0 +1,15 @@ +#include +#include + +uint16_t kIrLed = 9; // 内蔵IrLED +IRsend irsend(kIrLed); + +uint32_t code = 0x2FD48B7; // Toshiba TV Power +void setup() { + irsend.begin(); +} + +void loop() { + irsend.sendNEC( code , 32); + delay(5000); +} \ No newline at end of file diff --git a/src/lcd01.ino b/src/lcd01.ino new file mode 100644 index 0000000..123ecda --- /dev/null +++ b/src/lcd01.ino @@ -0,0 +1,35 @@ +#include + +void setup() { + M5.begin(); + M5.Lcd.setRotation(3); + M5.Lcd.fillRect(0, 0, 240, 135, RED); + //M5StickCPlusの画面サイズは、240 x 135 + + M5.Lcd.fillRect(10, 10, 220, 115, ORANGE); + M5.Lcd.fillRect(20, 20, 200, 95, YELLOW); + M5.Lcd.fillRect(30, 30, 180, 75, GREENYELLOW); + M5.Lcd.fillRect(40, 40, 160, 55, CYAN); + M5.Lcd.fillRect(50, 50, 140, 35, BLUE); + M5.Lcd.fillRect(60, 60, 120, 15, MAGENTA); + + M5.Lcd.setTextFont(1); // 8pixel ASCII font + M5.Lcd.setTextSize(1); // Magnify (x1-7) + M5.Lcd.setTextColor(WHITE); + M5.Lcd.setCursor(10,1); M5.Lcd.print("RED"); + M5.Lcd.setTextColor(BLACK); + M5.Lcd.setCursor(20,11); M5.Lcd.print("ORANGE"); + M5.Lcd.setCursor(30,21); M5.Lcd.print("YELLOW"); + M5.Lcd.setCursor(40,31); M5.Lcd.print("GREENYELLOW"); + M5.Lcd.setCursor(50,41); M5.Lcd.print("CYAN"); + M5.Lcd.setTextColor(WHITE); + M5.Lcd.setCursor(60,51); M5.Lcd.print("BLUE"); + M5.Lcd.setCursor(70,60,2); M5.Lcd.print("MAGENTA (2)"); + // setCursorの第3引数は、TextFont番号 + + M5.Lcd.setTextColor(BLACK); + M5.Lcd.setCursor(30,90,4); M5.Lcd.print("26pixel ASCII (4)"); +} + +void loop() { +} \ No newline at end of file diff --git a/src/led01.ino b/src/led01.ino new file mode 100644 index 0000000..4149c43 --- /dev/null +++ b/src/led01.ino @@ -0,0 +1,15 @@ +int PIN = 10; // 赤色LED G10 +//int PIN = 9; // Ir LED (カメラには映りますが、肉眼では見えません) G9 +// その他、G0 (0) , G25 (25), G26 (26) がつかえます。 +// https://lang-ship.com/blog/work/m5stickc-io/ + +void setup() { + pinMode(PIN, OUTPUT); // PINのモード設定 +} + +void loop() { + digitalWrite(PIN, HIGH); // HIGH = 1 + delay(1000); + digitalWrite(PIN, LOW); // LOW = 0 + delay(500); +} \ No newline at end of file diff --git a/src/pwm01.ino b/src/pwm01.ino new file mode 100644 index 0000000..606b08e --- /dev/null +++ b/src/pwm01.ino @@ -0,0 +1,22 @@ +int PIN = 10; // 内蔵LED +int PWM_CH = 1; // 0~3で指定する。0にすると高音が鳴って耳障り? + +void setup() { + pinMode(PIN, OUTPUT); // PINのモード設定 + ledcSetup(PWM_CH, 90, 8); // CH, 周波数(Hz) 【小さくするとどうなる?】, 分解能(bit) + ledcAttachPin(PIN, PWM_CH); + // https://lang-ship.com/reference/unofficial/M5StickC/Peripherals/LED_Control/ +} + +void loop() { + int i; + + for (int i = 0 ; i < 256 ; i++) { + ledcWrite(PWM_CH, i); + delay( 5 ); + } + for (int i = 256 ; i > 0 ; i--) { + ledcWrite(PWM_CH, i); + delay( 5 ); + } +} \ No newline at end of file diff --git a/src/serial01.ino b/src/serial01.ino new file mode 100644 index 0000000..2947625 --- /dev/null +++ b/src/serial01.ino @@ -0,0 +1,9 @@ +int num = 0; +void setup() { + Serial.begin(115200); // 通信速度をbpsで設定 +} +void loop() { + Serial.printf("%d \n" , num); + num++; + delay(500); // 500ミリ秒待つ +} diff --git a/src/serial02.ino b/src/serial02.ino new file mode 100644 index 0000000..5ccd3cb --- /dev/null +++ b/src/serial02.ino @@ -0,0 +1,29 @@ +int num = 0; +char buf[100]; + +void setup() { + Serial.begin(115200); // 通信速度をbpsで設定 +} + +void loop() { + int pos = 0; + while (Serial.available()) { //PCから送信された文字があるあいだ、くりかえす + char c = Serial.read(); // 1バイト読み取る + buf[pos] = c; // 配列buf に格納 + pos++; // 格納位置をひとつ右へ + } + if (pos > 0) { + buf[pos] = 0; // さいごに Null (文字列の終端)を追加(これを忘れるとどうなる?) + Serial.print("> from pc: "); + Serial.print( buf ); // 格納しておいた文字列を表示 + if (buf[0] == '0' && pos == 2) { // buf={ 48(='0'), 10(=改行) } のとき + num = 0; // num を 0 にする + Serial.println( "Reset num" ); + } + delay(2000); + } + + Serial.printf("%d \n" , num ); + num++; + delay(500); +} \ No newline at end of file diff --git a/src/servohat01.ino b/src/servohat01.ino new file mode 100644 index 0000000..5205ab1 --- /dev/null +++ b/src/servohat01.ino @@ -0,0 +1,28 @@ +#define MLOW 5 +#define MHIGH 33 + +void setup() { + ledcSetup(1, 50, 8); //サーボハット CH1 + ledcAttachPin(26, 1); + + pinMode(10, OUTPUT); + ledcSetup(2, 100, 8);//LED CH2 + ledcAttachPin(10, 2); +} + +void loop() { + for (int i = MLOW; i <= MHIGH; i = i + 1) { + ledcWrite(1, i); + int v = map(i, MLOW, MHIGH, 0, 256); // 範囲5〜33に対するiの値を、範囲0〜256に変換 + ledcWrite(2, v); + delay(50); + } + delay(300); + for (int i = MHIGH; i >= MLOW; i = i - 1) { + ledcWrite(1, i); + int v = map(i, MLOW, MHIGH, 0, 256); + ledcWrite(2, v); + delay(20); + } + delay(300); +} \ No newline at end of file diff --git a/src/setrotation.html b/src/setrotation.html new file mode 100644 index 0000000..1ed0451 --- /dev/null +++ b/src/setrotation.html @@ -0,0 +1,3 @@ +© + + diff --git a/src/sound01 b/src/sound01 new file mode 100644 index 0000000..b4f4fc8 --- /dev/null +++ b/src/sound01 @@ -0,0 +1,34 @@ +#include + +int f[28] = { 262, 294, 330, 349, 392, 440, 494 }; // 配列のサイズは4オクターブ分 +void setup() { + Serial.begin(115200); + M5.begin(); + M5.Lcd.setRotation(3); + for (int i = 0; i < 7; i++) { + f[i + 7] = f[i] * 2; + f[i + 14] = f[i] * 4; + f[i + 21] = f[i] * 8; + } + // setBeep( Hz, ms) でビープ音を設定して、beep()で鳴らす。 + M5.Beep.setBeep(523, 500); M5.Beep.beep(); delay(500); + // tone( Hz, ms ) で鳴らす方法 + M5.Beep.tone(1046, 500); delay(500); + // msを省略し、tone( Hz ) で鳴らす(結局、delayが必要になるので) + M5.Beep.tone(2092); delay(500); + // ここはmsを指定するとよい (loopのM5.Beep.updateが停めてくれるので、delayを省略できる) + M5.Beep.tone(2092 * 2, 1000); +} + +void loop() { + M5.Beep.update(); //tone()やsetBeep()で指定した時間を過ぎていたら音を止める。 + // 参考:M5.Beep.mute() を実行すると、すぐに停止する。 + + while (Serial.available()) { + char c = Serial.read(); + if (c < 'c' || 'z' < c) continue; // c〜zの文字以外なら、以降のwhile内処理をスキップ + M5.Beep.tone( f[c - 'c'] , 1000); // 1秒鳴らす + Serial.println( f[c - 'c'] ); + } + delay(50); +} diff --git a/src/sound01.ino b/src/sound01.ino new file mode 100644 index 0000000..f468876 --- /dev/null +++ b/src/sound01.ino @@ -0,0 +1,34 @@ +#include + +int f[28] = { 262, 294, 330, 349, 392, 440, 494 }; // 配列のサイズは4オクターブ分 +void setup() { + Serial.begin(115200); + M5.begin(); + M5.Lcd.setRotation(3); + for (int i = 0; i < 7; i++) { + f[i + 7] = f[i] * 2; + f[i + 14] = f[i] * 4; + f[i + 21] = f[i] * 8; + } + // setBeep( Hz, ms) でビープ音を設定して、beep()で鳴らす。 + M5.Beep.setBeep(523, 500); M5.Beep.beep(); delay(500); + // tone( Hz, ms ) で鳴らす方法 + M5.Beep.tone(1046, 500); delay(500); + // msを省略し、tone( Hz ) で鳴らす(結局、delayが必要になるので) + M5.Beep.tone(2092); delay(500); + // ここはmsを指定するとよい (loopのM5.Beep.updateが停めてくれるので、delayを省略できる) + M5.Beep.tone(2092 * 2, 1000); +} + +void loop() { + M5.Beep.update(); //tone()やsetBeep()で指定した時間を過ぎていたら音を止める。 + // M5.Beep.mute() とすると、すぐに停止する。 + + while (Serial.available()) { + char c = Serial.read(); + if (c < 'c' || 'z' < c) continue; // c〜zの文字以外なら、以降のwhile内処理をスキップ + M5.Beep.tone( f[c - 'c'] , 1000); // 1秒鳴らす + Serial.println( f[c - 'c'] ); + } + delay(50); +} diff --git a/src/str01.ino b/src/str01.ino new file mode 100644 index 0000000..9d99309 --- /dev/null +++ b/src/str01.ino @@ -0,0 +1,69 @@ +#include + +void setup() { + Serial.begin(115200); + M5.begin(); + M5.Lcd.setRotation(3); + Serial.println("整数 または 6文字の16進数(RRGGBB)を入力してください。"); +} + +String str = ""; // String: 可変長の文字列クラス +void loop() { + char buf[100] = {0}; + int pos = 0; + while (Serial.available()) { //PCから送信された文字があるあいだ、くりかえす + char c = Serial.read(); // 1バイト読み取る + buf[pos] = c; // 配列buf に格納 + pos++; // 格納位置をひとつ右へ + } + if (pos > 0) { + buf[pos] = 0; + String sbuf = buf; + sbuf.trim(); //文字列の前と後の空白と改行を取り除く(破壊的メソッド) + str.concat(sbuf); // 文字列の連結 (意味としては、str = str + sbuf) + Serial.println(str); + if (isDigit(sbuf)) { + int num = sbuf.toInt(); + Serial.println( num * num ); + } + if (sbuf.length() == 6) { // RRGGBBとして、LCD画面の背景を塗りつぶす + sbuf.toLowerCase(); + uint8_t r = hexToDec( sbuf.substring(0, 2) ); + uint8_t g = hexToDec( sbuf.substring(2, 4) ); + uint8_t b = hexToDec( sbuf.substring(4, 6) ); + M5.Lcd.fillScreen( getColorUInt16( r , g , b ) ); + M5.Lcd.setCursor(0, 70, 4); + M5.Lcd.printf(" %02x %02x %02x \n", r, g, b); + M5.Lcd.printf(" %d %d %d ", r, g, b); + } + } + delay(50); +} +//全ての文字が0〜9なら、1(true)を返す +bool isDigit(String s) { + bool isAllDigit = true; + const char *p = s.c_str(); // String.c_str() は、NULLで終端されたchar配列の先頭アドレスを返す + while ( *p != 0 ) { + if (*p < '0' || '9' < *p) isAllDigit = false; + p++; + } + return isAllDigit; +} +// M5 用の、16ビットカラー値に変換 引用:https://qiita.com/nnn112358/items/ea6b5e81623ba690343c +uint16_t getColorUInt16(uint8_t red, uint8_t green, uint8_t blue) { + return ((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3); +} +// 引数hex が16進表記の文字列だと仮定して、10進の値を返す +uint8_t hexToDec(String hex) { + int dec = 0; + int tmp = 0; + for (int p = 0; p < hex.length(); p++) { + tmp = int(hex.charAt(p)); + if ( '0' <= tmp && tmp <= '9' ) tmp = tmp - '0'; + if ( 'a' <= tmp && tmp <= 'f' ) tmp = tmp - 'a' + 10; + if ( 'A' <= tmp && tmp <= 'F' ) tmp = tmp - 'A' + 10; + tmp = constrain(tmp, 0, 15); //例外処理 + dec = (dec * 16) + tmp; + } + return dec; +} \ No newline at end of file diff --git a/week1.rst b/week1.rst index 7839d7b..7fc10a2 100755 --- a/week1.rst +++ b/week1.rst @@ -3,9 +3,13 @@ .. note:: 以下の項目について、全員がすべてを試す必要はありません。役割分担をして、確認と理解をすすめてください。 -電源の切り方 +電源の切り方・入れ方 ---------------------------------------- +- 電源を切るには、電源ボタン(M5と書かれたAボタンの左側面)を、6秒間長押しします。 +- 電源を入れるには、電源ボタンを、2秒間長押しします。 +- `M5StickCガイド `_ の、4ページ目、ハードウェアの概要が参考になります。 + プログラムの書き込み方 -------------------------------------- @@ -13,75 +17,259 @@ :ref:`writetom5` を参照してください。 -コードを書くときの注意 +コードを書くときのヒントと注意 +------------------------------------------------------- + +- 以下のソースコード例は、右上のボタンを押すと、クリップボードに簡単にコピーできます。 +- ソースコードのインデントは、CTRL+T (Macの場合はCommand+T)キーで、自動整形できます。 +- ``#include `` は、M5StickC用のコードです。 **M5StickCPlus** では、``#include `` に変更しないと、表示がおかしくなることがあります。 +- 大文字と小文字は厳密に区別されます。 +- 画面をつかうプログラムを書き込んだあと、画面を使わないプログラムを書き込むと、前のプログラムの画面が残ることがあります。 + +Serial通信 --------------------------------------- -- #include を #include にしないと、画面がおかしくなる -- 大文字小文字に注意 -- 画面をつかうプログラムを書き込んだあと、画面を使わないプログラムを書き込むと、前のプログラムの画面が残ることがある。 +:numref:`serial01` は、シリアルモニタへ文字列を出力するシンプルな例です。グローバル変数 num を 0 に設定したうえで、setup()関数が1回実行されます。その後、loop()関数が繰り返し実行されます。 +プログラムの出力をみるには、Arduino IDEで「シリアルモニタ」をひらいてください。コードエディタ右上の虫眼鏡アイコンボタンをおします。 +Serialクラスには、print()関数、println()関数、 printf()関数があります。Serial通信を用いると、デバイス側の変数の値や状況を、PC側で確認するプログラムを書くことができます。 -Serialモニタ ---------------------------------------- +.. literalinclude:: src/serial01.ino + :caption: + :name: serial01 + :language: arduino + :emphasize-lines: 2 + :linenos: +シリアルモニタは、デバイスからの出力を確認するだけではなく、デバイスに文字を送信することもできます。:numref:`serial02` は、シリアルモニタを介して、PCからデバイスに文字を送信する例です。シリアルモニタ上部のテキストエリアから 0 を送信すると、カウンタ num をリセットします。10〜14行目で、PCから送信された文字を、1文字ずつ ``Serial.read()`` で読み取って、配列 ``buf`` に格納しています。PCから複数の文字を1回で送信すると、 ``Serial.available()`` は連続して 1 (=true) を返しますので、1回に送信された文字をすべて ``buf`` に格納することができます。ちなみに、シリアルモニタで送信された文字列の最後は、改行コード(10)が付与されます。 -文字列の扱い ----------------------------------------- +.. literalinclude:: src/serial02.ino + :caption: + :name: serial02 + :language: arduino + :emphasize-lines: 10-14 + :linenos: - -LED ----------------------------------------- - - -外部のLEDを接続 ------------------------------------------ - -PWM (Pulse Width Modulation) - - -外部のセンサを接続 ------------------------------------------ - -CdSセル 明度センサ - -人感センサ - -圧力センサ - -曲げセンサ - - -加速度センサ ------------------------------------------ - - -赤外(InfraRed)リモコン ------------------------------------------- - -読み取り - -信号発信 - -内蔵赤外LED +.. note:: 16行目の処理を忘れると、どうなるでしょうか? また、buf が溢れると、なにが起きるでしょうか?プログラムを書くときは、常に例外的な事象がおきる可能性を考えておきましょう。ただし、全ての例外的な事象に対処するのは困難な場合が多いです。 本体の液晶ディスプレイ(LCD) ------------------------------------------- -- M5StickCのDisplay周り解析 +- M5StickCのDisplay周り解析 が詳しいです。 +- :numref:`lcd01` のサンプルでは、外側から内側に向かって、10ピクセルずつ余白を残しながら、色を変えて塗りつぶしています。その後、8,16,26ピクセルフォント(それぞれ1,2,4番)をsetCursor()関数で指定して、print()関数で文字列を描画しています。 +- M5StickCPlusの機能である液晶ディスプレイ(LCD)を使用するため、 ``#include `` を指定し、``M5.begin()`` を呼び出しています。 + +.. literalinclude:: src/lcd01.ino + :caption: + :name: lcd01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + +画面の向きは、setRotation() 関数で、設定します。0〜3までの整数で、指定します。 + +.. figure:: images/setRotation.gif + :scale: 100% + +.. note:: フォントの種類を設定するときは、setTextFont() や、setCursor()の第3引数をつかいます。setTextSize()は、指定したフォントを何倍に引き伸ばして表示するか?なので、基本は1を指定することが多いです。倍率を増やすと、ギザギザが目立ちます。 + 本体のボタン ------------------------------------------ +本体には、3つのボタンがあります。 +(参考:`M5StickCガイド `_ の、4ページ目、ハードウェアの概要) + +:numref:`button01` に、ボタンをおしたらシリアルモニタに表示する例を示します。ボタンも、M5StickC/CPlusの機能なので、 ``#include `` を指定し、``M5.begin()`` を呼び出しておく必要があります。また、ボタンの状態を読み出して、ボタンオブジェクト(BtnA,BtnB)に設定するために、 ``M5.update()`` を、ループのなかに入れておく必要があります( `update()の定義 `_ )。長押しと普通押しを区別したい場合は、ifで確認する順番(長押しを先に判定する)が重要です。 + +.. literalinclude:: src/button01.ino + :caption: + :name: button01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + +.. note:: `非公式リファレンスの「ボタン管理(Button)」 `_ も参考になります。 + + +文字列の扱い、16進数や10進数の変換 +------------------------------------------------------------- + +:numref:`str01` に、文字列から整数に変換したり、16進数表現の文字列を10進数に変換する例を示します。 +Stringクラスを用いると、char配列 / byte配列 / 小文字変換や、空白改行の削除(ただし文字列の前後のみ)、部分文字列の取得などができます。 +元のデータが保持されるメソッドと、破壊されるメソッドがあることに注意しましょう。 +M5系デバイスのLCDでは、色を16ビット値(赤5bit/緑6bit/青5bit)で表現しています。 ``M5.Lcd.color565()`` という関数もありますが、ここではビット演算の理解を深めるため、関数を定義しています。 +C言語のポインタや、シフト演算などを理解していると、このような処理を円滑に記述できるようになります。 + +.. literalinclude:: src/str01.ino + :caption: + :name: str01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + +.. note:: 参考:https://qiita.com/nnn112358/items/ea6b5e81623ba690343c + + +ブザー(Beep) +------------------------------------- + +:numref:`sound01` は、内蔵Beepを鳴らすサンプルです。音の周波数は、最初の1オクターブ (f[0]〜f[6]) のみを配列宣言時に指定し、残りの3オクターブはsetup()内で、倍数を計算して配列に設定しています。 + +``setBeep()`` と ``beep()`` を使うと、同じビープ音を使い回すときは記述が短くて便利ですが、通常は ``tone()`` のほうが簡潔です。 +どちらの記法でも、命令実行のあと、音の停止を待たずに、すぐに次の処理に移行します(ノンブロッキング)。 +継続ミリ秒数(ms)は、 ``M5.Beep.update()`` が周期的に呼び出せるときに指定し、それ以外は省略するとよいでしょう。(結局、 ``delay()`` と ``mute()`` が必要になるため) + +.. literalinclude:: src/sound01.ino + :caption: + :name: sound01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + + +内蔵LED(赤・赤外) +---------------------------------------- + +M5StickCPlusには、2つのLEDランプが内蔵されています。GPIO(General Purpose I/O)10 には、赤色LED、GPIO9 には、赤外LEDが接続されています。 +場所は、USBケーブルを挿す面の反対側の面にある、小さな穴2つの内側です。 + +:numref:`led01` は、赤色LEDを点滅させるシンプルなプログラムです。 + +.. literalinclude:: src/led01.ino + :caption: + :name: led01 + :language: arduino + :linenos: +.. :emphasize-lines: 10-14 + + +外部のLED等を接続 +----------------------------------------- + +外部のLED等は、 G0, G25, G26 に接続します。 +サンプルプログラムは、:numref:`led01` と同様です。PIN 番号を、0 / 25 / 26 に変更してください。 + +ブレッドボードに、抵抗とLEDを直列に接続します。 +LEDの長い足のほうに、G0 (or G25 or G26) をジャンパワイヤで接続し、反対側(短い足)のほうを、GND (グランド)に接続します。 +ポートを「HIGH」にすると、3.3Vの電圧がかかります。 + +.. figure:: images/SimpleLED_m5s.png + :scale: 60% + +.. warning:: LEDのみで回路を構成しないよう注意!一般に、LEDは抵抗をつないで使用しないと、故障したり、最悪の場合破裂したりして危険です。ただし、抵抗入りLEDであれば問題ありません。 + +PWM (Pulse Width Modulation) +------------------------------------------------------------------- + +パルス幅変調とは、信号の周期Tに対する、パルスの幅を変化させる方法です。 +直流モータの速度制御や、サーボモータの制御、LEDの明度調整などに使われます。 + +:numref:`pwm01` は、赤色LEDを点滅させるシンプルなプログラムです。 ``ledcSetup(チャンネル, 周波数, 分解能)`` で、PWMチャンネル(0〜3)に対する周波数と分解能設定をし、 ``lecAttachPin(ピン番号, チャンネル)`` で、PWMチャンネルを適用する出力ピンを選択します。そのあと、 ``ledcWrite(チャンネル, 値)`` で、分解能で設定したビットで表現できる最大値+1以下の値を指定することで、デューティー比を設定します。:numref:`pwm01` の場合、分解能で8bitを指定したので、0〜256 の値が、デューティー比 0〜1 のパルス生成に対応します。 + +.. literalinclude:: src/pwm01.ino + :caption: + :name: pwm01 + :language: arduino + :linenos: + :emphasize-lines: 6-7, 15,19 + +.. note:: ソースコードのコメントにも書いていますが、周波数を小さくする(20〜30程度)と、どうなるでしょうか?ぜひやってみてください。 + +サーボモータ(サーボハット利用) +------------------------------------------------------------- + +:numref:`servohat01` は、`サーボハット `_ のサーボモータを動かすサンプルです。サーボモータの制御はPWMですので、基本的に、上のPWMとやっていることは同じです。おまけとして、LEDも点灯させました。``map関数`` は、Arduinoで使える関数で、範囲に対応する値を変換するときに使います。ここでは、サーボ制御で用いる5〜33の値を、LED制御の値0〜256に変換しています。 + +.. literalinclude:: src/servohat01.ino + :caption: + :name: servohat01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + + +外部のセンサを接続 (ADC) +----------------------------------------- + +ADCは、Analog to Digital Converter の意味です。 +``analogRead(PIN)`` は、PIN番ピンの電圧(0~3.3V)を、0〜4095 の値で返します。一般に、抵抗値が変化するタイプのセンサは、この方法をつかって、読み取ることができます。 + +.. warning:: `ADC `_ にかいてあるように、G26, G32, G33, G36のみ使えます。G26は、無線利用時には使えません。 + +:numref:`cds01` はCdSセル(照度センサ) の値を読み取るサンプルです。 + +.. literalinclude:: src/cds01.ino + :caption: + :name: cds01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + +圧力センサや、曲げセンサも、同様の方法で利用することができます。 + + +加速度センサ +----------------------------------------- + +:numref:`accgyro01` は、内蔵されている加速度センサ(MPU6886) の値を表示するサンプルです。ちなみに、IMUとは、Inertial Measurement Unit: 慣性計測装置 の略です。 +「ツール」→「シリアルプロッタ」をひらくと、値をグラフでみることができます。 +ジャイロセンサの値も取得可能です。 + + +.. literalinclude:: src/accgyro.ino + :caption: + :name: accgyro01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + +赤外(InfraRed)リモコン +------------------------------------------ + +信号の読み取り +~~~~~~~~~~~~~~~~~~~~~ + +赤外線リモコン受信モジュールが必要です。ここでは、`GP1UXC41QS `_ を前提に、話をすすめます。 + +また、準備として、ライブラリマネージャにて、IRremoteESP8266 をインストールします。ちなみに、テストしたバージョンは2.7.15でした。 + +ファイルメニュー → スケッチ例 → IRremoteESP8266 → IRrecvDumpV2 を選択します。 + +ブレッドボードに、以下の図のように配線します。Pとかいてある面が、受光器が出っ張っている面です。47Ωの抵抗を、5Vとの間に入れます。 +赤外線リモコン受信モジュールに接続したピンを ``const uint16_t kRecvPin = 36;`` として設定します。 +受光器にリモコンを向けて、ボタンを押すと、シリアルモニタに情報が表示されます。ここでは、Protocol : NEC , Code 0x2FD48B7 (32 Bits) と表示されたとします。 + +.. figure:: images/ir_sensor_47owm.png + :scale: 60% + + +信号の送信 +~~~~~~~~~~~~~~~~~~~~~~~~ + +内蔵の赤外LEDを用いて、信号を送信する例を :numref:`irsend01` に示します。 +赤外光が弱いため、かなり近づかないと(50cm程度)反応しない場合があります。 +外部の赤外LEDを用いると、距離を伸ばすことができます。 + +.. literalinclude:: src/irsend01.ino + :caption: + :name: irsend01 + :language: arduino + :linenos: +.. :emphasize-lines: 6-7, 15,19 + + + + スプライト ------------------------------------- 画面のちらつき防止 -ブザー -------------------------------------- -サーボモータ ---------------------------------------