1.6.arduino.md.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta http-equiv="Content-Style-Type" content="text/css" />
  6. <meta name="generator" content="pandoc" />
  7. <title></title>
  8. <style type="text/css">code{white-space: pre;}</style>
  9. <style type="text/css">
  10. div.sourceCode { overflow-x: auto; }
  11. table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
  12. margin: 0; padding: 0; vertical-align: baseline; border: none; }
  13. table.sourceCode { width: 100%; line-height: 100%; }
  14. td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
  15. td.sourceCode { padding-left: 5px; }
  16. code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
  17. code > span.dt { color: #902000; } /* DataType */
  18. code > span.dv { color: #40a070; } /* DecVal */
  19. code > span.bn { color: #40a070; } /* BaseN */
  20. code > span.fl { color: #40a070; } /* Float */
  21. code > span.ch { color: #4070a0; } /* Char */
  22. code > span.st { color: #4070a0; } /* String */
  23. code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
  24. code > span.ot { color: #007020; } /* Other */
  25. code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
  26. code > span.fu { color: #06287e; } /* Function */
  27. code > span.er { color: #ff0000; font-weight: bold; } /* Error */
  28. code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
  29. code > span.cn { color: #880000; } /* Constant */
  30. code > span.sc { color: #4070a0; } /* SpecialChar */
  31. code > span.vs { color: #4070a0; } /* VerbatimString */
  32. code > span.ss { color: #bb6688; } /* SpecialString */
  33. code > span.im { } /* Import */
  34. code > span.va { color: #19177c; } /* Variable */
  35. code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
  36. code > span.op { color: #666666; } /* Operator */
  37. code > span.bu { } /* BuiltIn */
  38. code > span.ex { } /* Extension */
  39. code > span.pp { color: #bc7a00; } /* Preprocessor */
  40. code > span.at { color: #7d9029; } /* Attribute */
  41. code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
  42. code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
  43. code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
  44. code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
  45. </style>
  46. <link rel="stylesheet" href="css/vendor.css" type="text/css" />
  47. </head>
  48. <body>
  49. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wb="http://open.weibo.com/wb" >
  50. <head>
  51. <title>一步步搭建物联网系统(教你设计物联网系统)</title>
  52. <meta name="keywords" content="设计物联网系统,物联网系统设计">
  53. <meta name="description" content="一份关于如何设计物联网系统的文档">
  54. <link rel="stylesheet" href="../css/vendor.css" />
  55. </head>
  56. <body class="container inner wrap">
  57. <h1>一步步搭建物联网系统(教你设计物联网系统)</h1>
  58. </body>
  59. </html>
  60. <div id="TOC">
  61. <ul>
  62. <li><a href="#arduino-极客的玩具"><span class="toc-section-number">1</span> Arduino 极客的玩具</a><ul>
  63. <li><a href="#极客的玩具"><span class="toc-section-number">1.1</span> 极客的玩具</a></li>
  64. <li><a href="#硬件熟悉"><span class="toc-section-number">1.2</span> 硬件熟悉</a></li>
  65. <li><a href="#开发环境"><span class="toc-section-number">1.3</span> 开发环境</a></li>
  66. <li><a href="#点亮一个led"><span class="toc-section-number">1.4</span> 点亮一个LED</a></li>
  67. <li><a href="#串口通信"><span class="toc-section-number">1.5</span> 串口通信</a><ul>
  68. <li><a href="#关于arduino-setup"><span class="toc-section-number">1.5.1</span> 关于Arduino Setup()</a></li>
  69. </ul></li>
  70. </ul></li>
  71. </ul>
  72. </div>
  73. <h1 id="arduino-极客的玩具"><span class="header-section-number">1</span> Arduino 极客的玩具</h1>
  74. <h2 id="极客的玩具"><span class="header-section-number">1.1</span> 极客的玩具</h2>
  75. <p>Arduino,是一个开放源代码的单芯片微电脑,它使用了Atmel AVR单片机,采用了基于开放源代码的软硬件平台,构建于开放源代码 simple I/O 接口板,并且具有使用类似Java,C 语言的Processing/Wiring开发环境。</p>
  76. <p>Arduino开发板封装了常用的库到开发环境中,可以让用户在开发产品时,将主要注意力放置于所需要实现的功能上,而不是开发的过程中。在为Arduino写串口程序时,我们只需要用Serial.begin(9600)以9600的速率初始化串口,而在往串口发送数据时,可以用Serial.write(‘1’)的方式向串口发送字串’1’。</p>
  77. <p>Arduino的出现很大程度上降低了电子制作的难度,初学者甚至不懂编程也可以上手Arduino,这也是它的魅力所在。</p>
  78. <h2 id="硬件熟悉"><span class="header-section-number">1.2</span> 硬件熟悉</h2>
  79. <p>为了满足各种需求,Arduino团队设计了很多款开发板,如UNO、Pro mini、Mega2560、Due、Leonardo、Yún、Pro、Fio、Nano等十几种 开发板和扩展板。最适合初学者的一款是Arduino UNO 。下图是Arduino UNO 的外观图:</p>
  80. <div class="figure">
  81. <img src="http://ebook.designiot.cn/images/uno.png" alt="UNO" />
  82. <p class="caption">UNO</p>
  83. </div>
  84. <p>注:后面的程序也是基于Arduino UNO开发板来讲解。</p>
  85. <h2 id="开发环境"><span class="header-section-number">1.3</span> 开发环境</h2>
  86. <div class="figure">
  87. <img src="http://ebook.designiot.cn/images/arduino.png" alt="Arduino" />
  88. <p class="caption">Arduino</p>
  89. </div>
  90. <p>开发环境如上图,十分简洁,编写代码需要知道两个基本的函数:</p>
  91. <div class="sourceCode"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span class="dt">void</span> setup(){
  92. }
  93. <span class="dt">void</span> loop(){
  94. }</code></pre></div>
  95. <p><code>setup()</code>函数用于初始化(如GPIO初始化,串口初始化,定时器初始化等)特点是只执行一次;<code>loop()</code>函数是一个死循环,可以看做C语言的<code>while(1)</code>函数。</p>
  96. <h2 id="点亮一个led"><span class="header-section-number">1.4</span> 点亮一个LED</h2>
  97. <p>对初学者来说,点亮led已成为入门必修课,使用Arduino控制led十分简单,并且很容易理解。 使用到的函数:</p>
  98. <ul>
  99. <li>pinMode(pin,mode)</li>
  100. <li>digitalWrite(pin,value)</li>
  101. </ul>
  102. <p>上一段代码分析:</p>
  103. <div class="sourceCode"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span class="dt">int</span> led=<span class="dv">13</span>;
  104. <span class="dt">void</span> setup()
  105. {
  106. pinMode(led,OUTPUT);
  107. }
  108. <span class="dt">void</span> loop()
  109. {
  110. digitalWrite(led,HIGH);
  111. delay(<span class="dv">1000</span>);
  112. digitalWrite(led,LOW);
  113. delay(<span class="dv">1000</span>);
  114. }</code></pre></div>
  115. <p>该程序实现Arduino单片机13号引脚以1S时间电平翻转,如果外接一个led,就可以看到led以1S的间隔闪烁;函数<code>pinMode()</code>有两个参数pin、value,pin参数用来指定引脚号,本程序中设置为13号引脚,mode用于设置引脚模式,有三个值:</p>
  116. <ul>
  117. <li><code>INPUT</code></li>
  118. <li><code>OUTPUT</code></li>
  119. <li><code>INPUT_PULLUP</code></li>
  120. </ul>
  121. <p>表示让某一个IO引脚作输入,反之,</p>
  122. <ul>
  123. <li><code>OUTPUT</code>则使一个IO引脚做输出</li>
  124. <li><code>INPUT_PULLUP</code>则配置一个IO引脚具有上拉输入功能(上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平),从英文意思也能很直观的看出来。</li>
  125. </ul>
  126. <p>理解了<code>pinMode()</code>函数,<code>digitalWrite()</code>就很容易理解啦,value的取值有两个<code>HIGH</code>、<code>LOW</code>,<code>HIGH</code>表示让某一个引脚输出高电平,反之,<code>LOW</code>则使某一个引脚输出低电平。 程序中还是用到<code>delay(ms)</code>函数,它表示延时多少毫秒,例如延时500 ms ,直接调用<code>delay(500);</code>就可以了。</p>
  127. <p>如果你仔细查看我的描述,你会发现我没有讲13号引脚怎么来的,是这样的:Arduino团队为了简化对引脚描述,对每个引脚都进行了编号,以UNO开发板为例,可以发现开发板排座的附近有对应的白颜色的数字,那便是所有的引脚编号,A0~A5是6路ADC输入引脚,0-13表示13路基本IO,数字前面的<code>~</code>表示该引脚具有PWM功能。如果要使用某一引脚,只需要知道引脚编号就可编写相应代码进行操作。</p>
  128. <p>例如<code>digitalWrite(2,LOW)</code>表示向2号引脚输出低电平。其他操作类似,是不是so easy <sup>-</sup> !</p>
  129. <h2 id="串口通信"><span class="header-section-number">1.5</span> 串口通信</h2>
  130. <p>使用到的基本函数:</p>
  131. <ul>
  132. <li>Serial.begin()</li>
  133. <li>Serial.write()</li>
  134. <li>Serial.read()</li>
  135. <li>Serial.available()</li>
  136. </ul>
  137. <p>在此项目中需要使用串口,Arduino串口初始化使用<code>Serial.begin(9600);</code>,其传输波特率为9600,其他波特率也行,函数位于<code>setup()</code>中,之后可以使用<code>Serial.read()</code>、<code>Serial.write()</code>读入一个字符,输出一个字符,使用<code>Serial.print()</code>输出字符串.代码如下:</p>
  138. <div class="sourceCode"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span class="dt">char</span> ch=<span class="st">&#39;1&#39;</span>;
  139. <span class="dt">void</span> setup()
  140. {
  141. Serial.begin(<span class="dv">9600</span>);
  142. }
  143. <span class="dt">void</span> loop()
  144. {
  145. Serial.write(ch);
  146. <span class="kw">while</span>(<span class="dv">1</span>)
  147. {
  148. <span class="kw">if</span>(Serial.available())
  149. {
  150. ch = Serial.read();
  151. Serial.print(ch);
  152. }
  153. }
  154. }</code></pre></div>
  155. <p>以上程序实现字符的输出(Serial.write(),Serial.print())和读入(Serial.read())。如果需要了解更多,可以参考:<a href="www.arduino.cc">Arduino官网</a></p>
  156. <h3 id="关于arduino-setup"><span class="header-section-number">1.5.1</span> 关于Arduino Setup()</h3>
  157. <p>如果你对Arduino的Setup很疑惑的话,可以看看这里。下面Arduino源码目录中的main函数:</p>
  158. <div class="sourceCode"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span class="ot">#include &lt;Arduino.h&gt;</span>
  159. <span class="dt">int</span> main(<span class="dt">void</span>)
  160. {
  161. init();
  162. setup();
  163. <span class="kw">for</span> (;;) {
  164. loop();
  165. <span class="kw">if</span> (serialEventRun) serialEventRun();
  166. }
  167. <span class="kw">return</span> <span class="dv">0</span>;
  168. }</code></pre></div>
  169. <div class="figure">
  170. <img src="./images/hwcnt.png" alt="hwcnt" />
  171. <p class="caption">hwcnt</p>
  172. </div>
  173. </body>
  174. </html>