<!DOCTYPE html> <html class="writer-html4" lang="ja" > <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>付録 — IoT Programming ドキュメント</title> <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="_static/copybutton.css" type="text/css" /> <!--[if lt IE 9]> <script src="_static/js/html5shiv.min.js"></script> <![endif]--> <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/language_data.js"></script> <script type="text/javascript" src="_static/clipboard.min.js"></script> <script type="text/javascript" src="_static/copybutton.js"></script> <script type="text/javascript" src="_static/translations.js"></script> <script type="text/javascript" src="_static/js/theme.js"></script> <link rel="index" title="索引" href="genindex.html" /> <link rel="search" title="検索" href="search.html" /> <link rel="prev" title="Frequently-Asked Questions (FAQ: よくある質問)" href="faq.html" /> </head> <body class="wy-body-for-nav"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search" > <a href="index.html" class="icon icon-home"> IoT Programming </a> <div role="search"> <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> <input type="text" name="q" placeholder="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div> <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> <p class="caption"><span class="caption-text">Contents:</span></p> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="intro.html">実験の目的</a></li> <li class="toctree-l1"><a class="reference internal" href="intro.html#id2">実験のすすめかた</a></li> <li class="toctree-l1"><a class="reference internal" href="intro.html#url">参考URL</a></li> <li class="toctree-l1"><a class="reference internal" href="pre.html">事前準備</a></li> <li class="toctree-l1"><a class="reference internal" href="week1.html">1週目</a></li> <li class="toctree-l1"><a class="reference internal" href="week2.html">2週目</a></li> <li class="toctree-l1"><a class="reference internal" href="faq.html">Frequently-Asked Questions (FAQ: よくある質問)</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">付録</a><ul> <li class="toctree-l2"><a class="reference internal" href="#id2">実験室で赤外リモコン送信テスト</a></li> <li class="toctree-l2"><a class="reference internal" href="#env-ii-sensor">気温・湿度・気圧 (ENV II Sensor)</a></li> <li class="toctree-l2"><a class="reference internal" href="#speaker-hat">Speaker Hatで音をだす</a></li> </ul> </li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> <nav class="wy-nav-top" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="index.html">IoT Programming</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <div role="navigation" aria-label="breadcrumbs navigation"> <ul class="wy-breadcrumbs"> <li><a href="index.html" class="icon icon-home"></a> »</li> <li>付録</li> <li class="wy-breadcrumbs-aside"> <a href="_sources/appendix.rst.txt" rel="nofollow"> View page source</a> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="id1"> <h1>付録<a class="headerlink" href="#id1" title="このヘッドラインへのパーマリンク">¶</a></h1> <div class="section" id="id2"> <h2>実験室で赤外リモコン送信テスト<a class="headerlink" href="#id2" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>内蔵の赤外LEDを用いて、ビデオカメラ操作する例を <a class="reference internal" href="#irsend02"><span class="std std-numref">リスト 29</span></a> に示します。 ライブラリマネージャにて、IRremoteESP8266 をインストールしてください。ちなみに、テストしたバージョンは2.7.15でした。 <code class="docutils literal notranslate"><span class="pre">2.7.15</span></code> <strong>より新しいバージョンだと、失敗する場合があります。もし最新版を入れてうまくいかない場合はダウングレードしてください。</strong></p> <div class="literal-block-wrapper docutils container" id="irsend02"> <div class="code-block-caption"><span class="caption-number">リスト 29 </span><span class="caption-text">src/irsend02.ino</span><a class="headerlink" href="#irsend02" title="このコードへのパーマリンク">¶</a></div> <div class="highlight-arduino notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 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 70 71 72 73 74 75 76 77 78 79 80 81</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cm">/* IRremoteESP8266: IRsendDemo - demonstrates sending IR codes with IRsend.</span> <span class="cm"> Version 1.1 January, 2019</span> <span class="cm"> Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009,</span> <span class="cm"> Copyright 2009 Ken Shirriff, http://arcfn.com</span> <span class="cm"> An IR LED circuit *MUST* be connected to the ESP8266 on a pin</span> <span class="cm"> as specified by kIrLed below.</span> <span class="cm"> TL;DR: The IR LED needs to be driven by a transistor for a good result.</span> <span class="cm"> Suggested circuit:</span> <span class="cm"> https://github.com/crankyoldgit/IRremoteESP8266/wiki#ir-sending</span> <span class="cm"> Common mistakes & tips:</span> <span class="cm"> * * Don't just connect the IR LED directly to the pin, it won't</span> <span class="cm"> have enough current to drive the IR LED effectively.</span> <span class="cm"> * * Make sure you have the IR LED polarity correct.</span> <span class="cm"> See: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity</span> <span class="cm"> * * Typical digital camera/phones can be used to see if the IR LED is flashed.</span> <span class="cm"> Replace the IR LED with a normal LED if you don't have a digital camera</span> <span class="cm"> when debugging.</span> <span class="cm"> * * Avoid using the following pins unless you really know what you are doing:</span> <span class="cm"> * * Pin 0/D3: Can interfere with the boot/program mode & support circuits.</span> <span class="cm"> * * Pin 1/TX/TXD0: Any serial transmissions from the ESP8266 will interfere.</span> <span class="cm"> * * Pin 3/RX/RXD0: Any serial transmissions to the ESP8266 will interfere.</span> <span class="cm"> * * ESP-01 modules are tricky. We suggest you use a module with more GPIOs</span> <span class="cm"> for your first time. e.g. ESP-12 etc.</span> <span class="cm">*/</span> <span class="cp">#include</span> <span class="cpf"><M5StickCPlus.h></span><span class="cp"></span> <span class="cp">#include</span> <span class="cpf"><IRremoteESP8266.h></span><span class="cp"></span> <span class="cp">#include</span> <span class="cpf"><IRsend.h></span><span class="cp"></span> <span class="kr">const</span> <span class="kr">uint16_t</span> <span class="n">kIrLed</span> <span class="o">=</span> <span class="mi">9</span><span class="p">;</span> <span class="c1">// 赤外LEDが接続されたピン番号</span> <span class="n">IRsend</span> <span class="nf">irsend</span><span class="p">(</span><span class="n">kIrLed</span><span class="p">);</span> <span class="c1">// Set the GPIO to be used to sending the message.</span> <span class="c1">// Example of data captured by IRrecvDumpV2.ino</span> <span class="kr">uint16_t</span> <span class="n">photoshot</span><span class="p">[</span><span class="mi">99</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">3488</span><span class="p">,</span> <span class="mi">1740</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">426</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">420</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1304</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1304</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1304</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1304</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">462</span><span class="p">,</span> <span class="mi">1278</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">1278</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">1278</span><span class="p">,</span> <span class="mi">462</span><span class="p">,</span> <span class="mi">1280</span><span class="p">,</span> <span class="mi">460</span><span class="p">,</span> <span class="mi">1280</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">398</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">398</span><span class="p">,</span> <span class="mi">438</span> <span class="p">};</span> <span class="c1">// PANASONIC 40040E14667C</span> <span class="kr">uint16_t</span> <span class="n">recording</span><span class="p">[</span><span class="mi">99</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">3490</span><span class="p">,</span> <span class="mi">1738</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1304</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">420</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">438</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">442</span><span class="p">,</span> <span class="mi">1300</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">422</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">1302</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">424</span><span class="p">,</span> <span class="mi">462</span><span class="p">,</span> <span class="mi">1278</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">400</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">398</span><span class="p">,</span> <span class="mi">464</span><span class="p">,</span> <span class="mi">1278</span><span class="p">,</span> <span class="mi">464</span> <span class="p">};</span> <span class="c1">// PANASONIC 40040E143329</span> <span class="kr">void</span> <span class="nb">setup</span><span class="p">()</span> <span class="p">{</span> <span class="n">M5</span><span class="p">.</span><span class="nf">begin</span><span class="p">();</span> <span class="nf">Serial</span><span class="p">.</span><span class="nf">begin</span><span class="p">(</span><span class="mi">115200</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">fillScreen</span><span class="p">(</span><span class="n">BLUE</span><span class="p">);</span> <span class="n">irsend</span><span class="p">.</span><span class="nf">begin</span><span class="p">();</span> <span class="p">}</span> <span class="kr">void</span> <span class="nb">loop</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// Serial.println("NEC"); // irsend.sendNEC(0x00FFE01FUL);</span> <span class="c1">// Serial.println("Sony"); // irsend.sendSony(0xa90, 12, 2); // 12 bits & 2 repeats</span> <span class="n">M5</span><span class="p">.</span><span class="n">update</span><span class="p">();</span> <span class="k">if</span> <span class="p">(</span><span class="n">M5</span><span class="p">.</span><span class="n">BtnA</span><span class="p">.</span><span class="n">wasReleased</span><span class="p">())</span> <span class="p">{</span> <span class="n">irsend</span><span class="p">.</span><span class="n">sendRaw</span><span class="p">(</span><span class="n">photoshot</span><span class="p">,</span> <span class="mi">99</span><span class="p">,</span> <span class="mi">38</span><span class="p">);</span> <span class="c1">// Send a raw data capture at 38kHz.</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">fillScreen</span><span class="p">(</span><span class="n">YELLOW</span><span class="p">);</span> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">M5</span><span class="p">.</span><span class="n">BtnB</span><span class="p">.</span><span class="n">wasReleased</span><span class="p">())</span> <span class="p">{</span> <span class="n">irsend</span><span class="p">.</span><span class="n">sendRaw</span><span class="p">(</span><span class="n">recording</span><span class="p">,</span> <span class="mi">99</span><span class="p">,</span> <span class="mi">38</span><span class="p">);</span> <span class="c1">// Send a raw data capture at 38kHz.</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">fillScreen</span><span class="p">(</span><span class="n">RED</span><span class="p">);</span> <span class="p">}</span> <span class="nf">delay</span><span class="p">(</span><span class="mi">150</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">fillScreen</span><span class="p">(</span><span class="n">BLUE</span><span class="p">);</span> <span class="c1">// Serial.println("a Samsung A/C state from IRrecvDumpV2");</span> <span class="c1">// irsend.sendSamsungAC(samsungState);</span> <span class="c1">// delay(2000);</span> <span class="p">}</span> </pre></div> </td></tr></table></div> </div> </div> <div class="section" id="env-ii-sensor"> <h2>気温・湿度・気圧 (ENV II Sensor)<a class="headerlink" href="#env-ii-sensor" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>M5Stack社ENV II Unit(U001-B) <a class="reference external" href="https://lang-ship.com/blog/work/m5stack-env-ii-unit-u001-b/">https://lang-ship.com/blog/work/m5stack-env-ii-unit-u001-b/</a> の、M5StickCでの使い方(GitHub) に従って、以下2つをライブラリマネージャから入れてください。</p> <ul class="simple"> <li>Adafruit BMP280 Library</li> <li>Adafruit SHT31 Library</li> </ul> <p>上のリンクにあったプログラムとほぼ同じですが、<a class="reference internal" href="#env2"><span class="std std-numref">リスト 30</span></a> が、気温・湿度・気圧をLCDとシリアルコンソールに出力するプログラムです。(すこしだけ改変しています)</p> <div class="literal-block-wrapper docutils container" id="env2"> <div class="code-block-caption"><span class="caption-number">リスト 30 </span><span class="caption-text">src/env2.ino</span><a class="headerlink" href="#env2" title="このコードへのパーマリンク">¶</a></div> <div class="highlight-arduino notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cm">/*</span> <span class="cm"> Please install the < Adafruit BMP280 Library > (https://github.com/adafruit/Adafruit_BMP280_Library)</span> <span class="cm"> < Adafruit SHT31 Library > (https://github.com/adafruit/Adafruit_SHT31)</span> <span class="cm"> from the library manager before use.</span> <span class="cm"> This code will display the temperature, humidity and air pressure information on the screen</span> <span class="cm"> https://lang-ship.com/blog/work/m5stack-env-ii-unit-u001-b/</span> <span class="cm"> */</span> <span class="cp">#include</span> <span class="cpf"><M5StickCPlus.h></span><span class="cp"></span> <span class="cp">#include</span> <span class="cpf"><Adafruit_BMP280.h></span><span class="cp"></span> <span class="cp">#include</span> <span class="cpf"><Adafruit_SHT31.h></span><span class="cp"></span> <span class="n">Adafruit_SHT31</span> <span class="n">sht3x</span> <span class="o">=</span> <span class="n">Adafruit_SHT31</span><span class="p">(</span><span class="o">&</span><span class="nf">Wire</span><span class="p">);</span> <span class="n">Adafruit_BMP280</span> <span class="n">bme</span> <span class="o">=</span> <span class="n">Adafruit_BMP280</span><span class="p">(</span><span class="o">&</span><span class="nf">Wire</span><span class="p">);</span> <span class="kr">float</span> <span class="n">tmp</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span> <span class="kr">float</span> <span class="n">hum</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span> <span class="kr">float</span> <span class="n">pressure</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span> <span class="kr">void</span> <span class="nb">setup</span><span class="p">()</span> <span class="p">{</span> <span class="n">M5</span><span class="p">.</span><span class="nf">begin</span><span class="p">();</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">setRotation</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="nf">setTextSize</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span> <span class="nf">Wire</span><span class="p">.</span><span class="nf">begin</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">33</span><span class="p">);</span> <span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="n">F</span><span class="p">(</span><span class="s">"ENV Unit(SHT30 and BMP280) test..."</span><span class="p">));</span> <span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">bme</span><span class="p">.</span><span class="nf">begin</span><span class="p">(</span><span class="mh">0x76</span><span class="p">))</span> <span class="p">{</span> <span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">"Could not find a valid BMP280 sensor, check wiring!"</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">"Could not find a valid BMP280 sensor, check wiring!"</span><span class="p">);</span> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">sht3x</span><span class="p">.</span><span class="nf">begin</span><span class="p">(</span><span class="mh">0x44</span><span class="p">))</span> <span class="p">{</span> <span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">"Could not find a valid SHT3X sensor, check wiring!"</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">"Could not find a valid SHT3X sensor, check wiring!"</span><span class="p">);</span> <span class="p">}</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">fillScreen</span><span class="p">(</span><span class="n">BLACK</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">"ENV Unit test..."</span><span class="p">);</span> <span class="p">}</span> <span class="kr">void</span> <span class="nb">loop</span><span class="p">()</span> <span class="p">{</span> <span class="n">pressure</span> <span class="o">=</span> <span class="n">bme</span><span class="p">.</span><span class="n">readPressure</span><span class="p">();</span> <span class="n">tmp</span> <span class="o">=</span> <span class="n">sht3x</span><span class="p">.</span><span class="nf">readTemperature</span><span class="p">();</span> <span class="n">hum</span> <span class="o">=</span> <span class="n">sht3x</span><span class="p">.</span><span class="n">readHumidity</span><span class="p">();</span> <span class="nf">Serial</span><span class="p">.</span><span class="n">printf</span><span class="p">(</span><span class="s">"Temperature: %2.2f*C Humidity: %0.2f%% Pressure: %0.2fhPa</span><span class="se">\r\n</span><span class="s">"</span><span class="p">,</span> <span class="n">tmp</span><span class="p">,</span> <span class="n">hum</span><span class="p">,</span> <span class="n">pressure</span> <span class="o">/</span> <span class="mi">100</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="nf">setCursor</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">25</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">setTextColor</span><span class="p">(</span><span class="n">WHITE</span><span class="p">,</span> <span class="n">BLACK</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">printf</span><span class="p">(</span><span class="s">"Temp:%2.2f*C</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">tmp</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">printf</span><span class="p">(</span><span class="s">"Humi:%2.2f%%</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">hum</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">printf</span><span class="p">(</span><span class="s">"Prs :%2.0fhPa</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">pressure</span> <span class="o">/</span> <span class="mi">100</span><span class="p">);</span> <span class="nf">delay</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span> <span class="p">}</span> </pre></div> </td></tr></table></div> </div> <div class="admonition warning"> <p class="first admonition-title">警告</p> <p class="last">ENV II HAT用のプログラムではありません。<a class="reference external" href="https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Hat/ENVII_HAT">ENV II HAT用のサンプル</a></p> </div> </div> <div class="section" id="speaker-hat"> <h2>Speaker Hatで音をだす<a class="headerlink" href="#speaker-hat" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>参考:<a class="reference external" href="https://nn-hokuson.hatenablog.com/entry/2017/09/01/092945">https://nn-hokuson.hatenablog.com/entry/2017/09/01/092945</a></p> <p>ボタンを押したときに、2種類の音を出す例を <a class="reference internal" href="#speakerhat01"><span class="std std-numref">リスト 31</span></a> に示します。また、音データのサンプルを <a class="reference external" href="https://cit.istlab.info/m5stickcplus/src/coin05_16k.ino.txt">16k.txt</a> と <a class="reference external" href="https://cit.istlab.info/m5stickcplus/src/coin05_8k.ino.txt">8k.txt</a> におきました。 (16kも8kも、Speaker Hatで聴く分には違いはわかりませんでしたので、8kでいいとおもいます。)</p> <p><a class="reference internal" href="#speakerhat01"><span class="std std-numref">リスト 31</span></a> のコメント(黄色ハイライト部分)をよく読んで、タブを追加し、16k.txt と 8k.txt の内容を貼り付けてください。</p> <div class="literal-block-wrapper docutils container" id="speakerhat01"> <div class="code-block-caption"><span class="caption-number">リスト 31 </span><span class="caption-text">src/speakerhat01.ino</span><a class="headerlink" href="#speakerhat01" title="このコードへのパーマリンク">¶</a></div> <div class="highlight-arduino notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><M5StickCPlus.h></span><span class="cp"></span> <span class="kr">const</span> <span class="kr">int</span> <span class="n">servo_pin</span> <span class="o">=</span> <span class="mi">26</span><span class="p">;</span> <span class="kr">uint8_t</span> <span class="n">ledChannel</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="kr">uint8_t</span> <span class="n">resolution</span> <span class="o">=</span> <span class="mi">8</span><span class="p">;</span> <span class="kr">uint32_t</span> <span class="n">sampling_rate</span> <span class="o">=</span> <span class="mi">16000</span><span class="p">;</span> <span class="c1">//16kの場合。8kの場合は、8000</span> <span class="hll"><span class="cm">/*</span> </span><span class="hll"><span class="cm"> 別タブ(ファイル名はなんでもよい)に、音声データを以下の形式で貼っておく。</span> </span><span class="hll"><span class="cm"> 【音1】</span> </span><span class="hll"><span class="cm"> const uint8_t coin05_8k_raw[] PROGMEM = { 0x80, ... };</span> </span><span class="hll"><span class="cm"> const uint32_t coin05_8k_raw_len = 7218; // ←配列のサイズ</span> </span><span class="hll"><span class="cm"> 【音2】</span> </span><span class="hll"><span class="cm"> const uint8_t coin05_16k_raw[] PROGMEM = { 0x80, ... };</span> </span><span class="hll"><span class="cm"> const uint32_t coin05_16k_raw_len = 14437; // ←配列のサイズ</span> </span><span class="hll"><span class="cm"> PROGMEM と書くと、フラッシュメモリに配置する</span> </span><span class="hll"> </span><span class="hll"><span class="cm"> そのうえで、以下のextern文を、別タブの変数名と合わせて書く。</span> </span><span class="hll"><span class="cm"> 変数名を一致させることが重要です。</span> </span><span class="cm">*/</span> <span class="c1">// 【音1】</span> <span class="kr">extern</span> <span class="kr">const</span> <span class="kr">uint8_t</span> <span class="n">coin05_8k_raw</span><span class="p">[];</span> <span class="kr">extern</span> <span class="kr">const</span> <span class="kr">uint32_t</span> <span class="n">coin05_8k_raw_len</span><span class="p">;</span> <span class="c1">// 【音2】</span> <span class="kr">extern</span> <span class="kr">const</span> <span class="kr">uint8_t</span> <span class="n">coin05_16k_raw</span><span class="p">[];</span> <span class="kr">extern</span> <span class="kr">const</span> <span class="kr">uint32_t</span> <span class="n">coin05_16k_raw_len</span><span class="p">;</span> <span class="kr">void</span> <span class="nb">setup</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// put your setup code here, to run once:</span> <span class="n">M5</span><span class="p">.</span><span class="nf">begin</span><span class="p">();</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="n">setRotation</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="nf">setCursor</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span> <span class="n">M5</span><span class="p">.</span><span class="n">Lcd</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">" speaker hat test"</span><span class="p">);</span> <span class="n">ledcSetup</span><span class="p">(</span><span class="n">ledChannel</span><span class="p">,</span> <span class="n">sampling_rate</span> <span class="o">*</span> <span class="mi">32</span><span class="p">,</span> <span class="n">resolution</span><span class="p">);</span> <span class="n">ledcAttachPin</span><span class="p">(</span><span class="n">servo_pin</span><span class="p">,</span> <span class="n">ledChannel</span><span class="p">);</span> <span class="n">ledcWrite</span><span class="p">(</span><span class="n">ledChannel</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="p">}</span> <span class="kr">void</span> <span class="nf">playMusic</span><span class="p">(</span><span class="kr">const</span> <span class="kr">uint8_t</span><span class="o">*</span> <span class="n">music_data</span><span class="p">,</span> <span class="kr">uint32_t</span> <span class="n">len</span><span class="p">,</span> <span class="kr">uint16_t</span> <span class="n">sample_rate</span><span class="p">)</span> <span class="p">{</span> <span class="kr">uint32_t</span> <span class="n">delay_interval</span> <span class="o">=</span> <span class="p">((</span><span class="kr">uint32_t</span><span class="p">)</span><span class="mi">1000000</span> <span class="o">/</span> <span class="n">sample_rate</span><span class="p">);</span> <span class="k">for</span> <span class="p">(</span><span class="kr">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">len</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> <span class="n">ledcWrite</span><span class="p">(</span><span class="n">ledChannel</span><span class="p">,</span> <span class="n">music_data</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> <span class="nf">delayMicroseconds</span><span class="p">(</span><span class="n">delay_interval</span><span class="p">);</span> <span class="p">}</span> <span class="n">ledcWriteTone</span><span class="p">(</span><span class="n">ledChannel</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="p">}</span> <span class="kr">void</span> <span class="nb">loop</span><span class="p">()</span> <span class="p">{</span> <span class="n">M5</span><span class="p">.</span><span class="n">update</span><span class="p">();</span> <span class="k">if</span> <span class="p">(</span><span class="n">M5</span><span class="p">.</span><span class="n">BtnA</span><span class="p">.</span><span class="n">wasReleased</span><span class="p">())</span> <span class="p">{</span> <span class="n">playMusic</span><span class="p">(</span><span class="n">coin05_16k_raw</span><span class="p">,</span> <span class="n">coin05_16k_raw_len</span><span class="p">,</span> <span class="n">sampling_rate</span> <span class="o">+</span> <span class="mi">800</span><span class="p">);</span> <span class="c1">//なぜか音が低いので +800した</span> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">M5</span><span class="p">.</span><span class="n">BtnB</span><span class="p">.</span><span class="n">wasReleased</span><span class="p">())</span> <span class="p">{</span> <span class="n">playMusic</span><span class="p">(</span><span class="n">coin05_8k_raw</span><span class="p">,</span> <span class="n">coin05_8k_raw_len</span><span class="p">,</span> <span class="n">sampling_rate</span> <span class="o">/</span> <span class="mi">2</span><span class="p">);</span> <span class="c1">// 8kなので、2で割った</span> <span class="p">}</span> <span class="n">ledcWriteTone</span><span class="p">(</span><span class="n">ledChannel</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="nf">delay</span><span class="p">(</span><span class="mi">100</span><span class="p">);</span> <span class="p">}</span> </pre></div> </td></tr></table></div> </div> </div> </div> </div> </div> <footer> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <a href="faq.html" class="btn btn-neutral float-left" title="Frequently-Asked Questions (FAQ: よくある質問)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> </div> <hr/> <div role="contentinfo"> <p> © Copyright 2021, Motoki Miura. </p> </div> Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. </footer> </div> </div> </section> </div> <script type="text/javascript"> jQuery(function () { SphinxRtdTheme.Navigation.enable(true); }); </script> </body> </html>