<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>醬是創客</title>
	<atom:link href="https://www.chosemaker.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.chosemaker.com</link>
	<description>醬是創客</description>
	<lastBuildDate>Tue, 30 Aug 2022 07:48:17 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.6.11</generator>

<image>
	<url>https://www.chosemaker.com/wp-content/uploads/2020/07/cropped-favicon-1-32x32.jpg</url>
	<title>醬是創客</title>
	<link>https://www.chosemaker.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>[ESP32教學#20] Arduino透過SPI介面傳送/接收CAN bus通訊協議</title>
		<link>https://www.chosemaker.com/board/esp32/lesson-20/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Fri, 29 Jul 2022 07:48:09 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=658</guid>

					<description><![CDATA[<p>醬是創客的ESP32教學主題第20篇，以NodeMCU-32S(使用Arduino IDE)來實作教 &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-20/">[ESP32教學#20] Arduino透過SPI介面傳送/接收CAN bus通訊協議</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的ESP32教學主題第20篇，以NodeMCU-32S(使用Arduino IDE)來實作教學，本篇教學Arduino透過SPI介面傳送/接收CAN bus通訊協議，來傳送接收Standard/Extended/Remote request Frame</p>



<p>以下是我們今天的目標</p>



<ul><li>傳送接收Standard/Extended/Remote request Frame</li><li>了解CAN bus ID/DLC/DATA的關聯</li></ul>



<p>設備:<br>安信可原廠/副廠NodeMCU-32S&nbsp;#<a href="https://www.ruten.com.tw/item/show?22030930136256" target="_blank" rel="noreferrer noopener">露天拍賣</a>&nbsp;#<a href="https://shopee.tw/ESP32-S-NodeMCU-32S-WiFi-%E8%97%8D%E8%8A%BDBLE-%E9%99%84Arduino%E6%95%99%E5%AD%B8-%E5%AE%89%E4%BF%A1%E5%8F%AF%E7%89%A9%E8%81%AF%E7%B6%B2IoT-Wi-Fi%E9%96%8B%E7%99%BC%E6%9D%BF-i.293276804.6546028316" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>醬是創客CAN bus模組&nbsp;#<a href="https://www.ruten.com.tw/item/show?22231977692381" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">露天拍賣</a>&nbsp;#<a aria-label="undefined (opens in a new tab)" href="https://shopee.tw/Arduino-ESP32-MCP2515-TJA1050-CAN-bus%E6%94%B6%E7%99%BC%E6%A8%A1%E7%B5%84-SPI%E4%BB%8B%E9%9D%A2-%E9%80%81%E6%95%99%E5%AD%B8-i.293276804.14390512916?sp_atk=4fe21112-65f1-4725-b29b-442d9ba8ed4e&amp;xptdk=4fe21112-65f1-4725-b29b-442d9ba8ed4e" target="_blank" rel="noreferrer noopener">蝦皮購物</a></p>



<p>CAN bus發送端接線方式:<br>NodeMCU-32S(GPIO5)–SPI訊號–醬是創客CAN bus模組(CS)<br>NodeMCU-32S(GPIO18)–SPI訊號–醬是創客CAN bus模組(SCK)<br>NodeMCU-32S(GPIO19)–SPI訊號–醬是創客CAN bus模組(SO)<br>NodeMCU-32S(GPIO23)–SPI訊號–醬是創客CAN bus模組(SI)<br>DC 5V(+)–醬是創客CAN bus模組(VCC)<br>DC 0V(-)–醬是創客CAN bus模組(GND)<br>發送端醬是創客CAN bus模組(H)-CAN訊號–接收端醬是創客CAN bus模組(H)<br>發送端醬是創客CAN bus模組(L)-CAN訊號–接收端醬是創客CAN bus模組(L)</p>



<p>CAN bus接收端接線方式:<br>NodeMCU-32S(GPIO5)–SPI訊號–醬是創客CAN bus模組(CS)<br>NodeMCU-32S(GPIO18)–SPI訊號–醬是創客CAN bus模組(SCK)<br>NodeMCU-32S(GPIO19)–SPI訊號–醬是創客CAN bus模組(SO)<br>NodeMCU-32S(GPIO21)–DI訊號–醬是創客CAN bus模組(INT)<br>NodeMCU-32S(GPIO23)–SPI訊號–醬是創客CAN bus模組(SI)<br>DC 5V(+)–醬是創客CAN bus模組(VCC)<br>DC 0V(-)–醬是創客CAN bus模組(GND)<br>發送端醬是創客CAN bus模組(H)-CAN訊號–接收端醬是創客CAN bus模組(H)<br>發送端醬是創客CAN bus模組(L)-CAN訊號–接收端醬是創客CAN bus模組(L)</p>



<p>Ai-Thinker安信可NodeMCU-32S的腳位圍(資料來源:安信可)</p>



<figure class="wp-block-image"><img loading="lazy" width="868" height="923" src="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png" alt="" class="wp-image-261" srcset="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png 868w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-282x300.png 282w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-768x817.png 768w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-329x350.png 329w" sizes="(max-width: 868px) 100vw, 868px" /></figure>



<p>醬是創客CAN bus模組相關資料<br>CAN bus的速率是依靠晶片與振盪器而定，以MCP2515這顆晶片來說它理論可以達到1Mbps，這個前提是配合16MHz或20MHz振盪器，如果需要跑到1Mbps需求者，需自行將振盪器元件轉焊換成16MHz或20MHz，一般來說這個模組使用8MHz振盪器，速度會選用125Kbps，以我們做過的專案來說125Kbps其實就很夠用</p>



<p>Arduino IDE mcp2515.h 安裝說明:<br>1. 下載此ZIP檔案<a aria-label="undefined (opens in a new tab)" href="https://github.com/autowp/arduino-mcp2515/archive/master.zip" target="_blank" rel="noreferrer noopener">https://github.com/autowp/arduino-mcp2515/archive/master.zip</a><br>2. 打開Arduino IDE &gt;&gt; 草稿碼 &gt;&gt; 匯入程式庫 &gt;&gt; 加入.ZIP程式庫，並選擇剛剛下載的ZIP檔案<br>3. 安裝好後，關閉Arduino IDE，並再重新啟動Arduino IDE</p>



<p>Arduino CAN bus發送端範例程式碼如下，<span style="color:#ff2200" class="has-inline-color">請注意程式碼中的 &amp;amp; 需自行轉換成&amp;符號</span></p>


<pre class="brush: cpp; title: ; notranslate">
//醬是創客 開發實作的好夥伴
#include &quot;WiFi.h&quot;
#include &lt;SPI.h&gt;
#include &lt;mcp2515.h&gt;

struct can_frame canMsg1;
struct can_frame canMsg2;
//定義使用GPIO5當SPI的CS
MCP2515 mcp2515(5);


void setup() {
  //standard frame
  canMsg1.can_id  = 0x0F6;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x8E;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  //extended frame
  canMsg2.can_id  = 0x12345678 | CAN_EFF_FLAG;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x0E;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;
  
  
  Serial.begin(115200);
  
  mcp2515.reset();
  //使用8MHz振盪器並搭配125Kbps速度
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  //使用CAN bus NormalMode
  mcp2515.setNormalMode();
  
  Serial.println(&quot;Chosemaker: Write to CAN&quot;);
}

void loop() {
  //送出standard frame
  mcp2515.sendMessage(&amp;amp;canMsg1);
  delay(1000);
  //送出extended frame
  mcp2515.sendMessage(MCP2515::TXB1,&amp;amp;canMsg2);  
  delay(1000);
}
</pre>


<p>Arduino CAN bus接收端範例程式碼如下，<span style="color:#ff2200" class="has-inline-color">請注意程式碼中的 &amp;amp; 需自行轉換成&amp;符號</span></p>


<pre class="brush: cpp; title: ; notranslate">
//醬是創客 開發實作的好夥伴
#include &quot;WiFi.h&quot;
#include &lt;SPI.h&gt;
#include &lt;mcp2515.h&gt;

struct can_frame canMsg;
//定義CAN_INT使用GPIO21
#define CAN_INT 21
//定義使用GPIO5當SPI的CS
MCP2515 mcp2515(5);
char msgString[128]; 


void setup() {
  Serial.begin(115200);
  
  mcp2515.reset();
  //使用8MHz振盪器並搭配125Kbps速度
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  //使用CAN bus NormalMode
  mcp2515.setNormalMode();
  //CAN_INT為INPUT模式
  pinMode(CAN_INT, INPUT);
  Serial.println(&quot;------- CAN Read ----------&quot;);
  Serial.println(&quot;ID  DLC   DATA&quot;);
}

void loop() {
  //CAN_INT低電位時開始收資料
  if(!digitalRead(CAN_INT))                         
  {
    //讀取CAN Frame資料
    mcp2515.readMessage(&amp;amp;canMsg);      
    //判斷ID是standard (11 bits) frame還是extended (29 bits)frame
    if((canMsg.can_id &amp;amp; 0x80000000) == 0x80000000)     
      sprintf(msgString, &quot;Extended ID: 0x%.8lX  DLC: %1d  Data:&quot;, (canMsg.can_id &amp;amp; 0x1FFFFFFF), canMsg.can_dlc);
    else
      sprintf(msgString, &quot;Standard ID: 0x%.3lX       DLC: %1d  Data:&quot;, canMsg.can_id, canMsg.can_dlc);
  
    Serial.print(msgString);
    //判斷ID是否為remote request frame
    if((canMsg.can_id &amp;amp; 0x40000000) == 0x40000000){    
      sprintf(msgString, &quot; REMOTE REQUEST FRAME&quot;);
      Serial.print(msgString);
    } else {
      //取出frame資料
      for(byte i = 0; i&lt;canMsg.can_dlc; i++){
        sprintf(msgString, &quot; 0x%.2X&quot;, canMsg.data[i]);
        Serial.print(msgString);
      }
    }
        
    Serial.println();
  }


}
</pre>


<p>我們在發送端每隔一秒鐘持續發出standard frame和extended frame，在CAN bus設計中standard frame ID有11 bits，extended frame ID有29 bits，DLC代表著資料的長度，DATA的部分常用都是8組0~255</p>


<pre class="brush: plain; title: ; notranslate">
entry 0x400806ac
------- CAN Read ----------
ID  DLC   DATA
Extended ID: 0x12345678  DLC: 8  Data: 0x0E 0x00 0x00 0x08 0x01 0x00 0x00 0xA0
Standard ID: 0x0F6       DLC: 8  Data: 0x8E 0x87 0x32 0xFA 0x26 0x8E 0xBE 0x86
</pre><p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-20%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2320%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E4%BB%8B%E9%9D%A2%E5%82%B3%E9%80%81%2F%E6%8E%A5%E6%94%B6CAN%20bus%E9%80%9A%E8%A8%8A%E5%8D%94%E8%AD%B0" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-20%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2320%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E4%BB%8B%E9%9D%A2%E5%82%B3%E9%80%81%2F%E6%8E%A5%E6%94%B6CAN%20bus%E9%80%9A%E8%A8%8A%E5%8D%94%E8%AD%B0" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-20%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2320%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E4%BB%8B%E9%9D%A2%E5%82%B3%E9%80%81%2F%E6%8E%A5%E6%94%B6CAN%20bus%E9%80%9A%E8%A8%8A%E5%8D%94%E8%AD%B0" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-20%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2320%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E4%BB%8B%E9%9D%A2%E5%82%B3%E9%80%81%2F%E6%8E%A5%E6%94%B6CAN%20bus%E9%80%9A%E8%A8%8A%E5%8D%94%E8%AD%B0" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-20%2F&#038;title=%5BESP32%E6%95%99%E5%AD%B8%2320%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E4%BB%8B%E9%9D%A2%E5%82%B3%E9%80%81%2F%E6%8E%A5%E6%94%B6CAN%20bus%E9%80%9A%E8%A8%8A%E5%8D%94%E8%AD%B0" data-a2a-url="https://www.chosemaker.com/board/esp32/lesson-20/" data-a2a-title="[ESP32教學#20] Arduino透過SPI介面傳送/接收CAN bus通訊協議"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-20/">[ESP32教學#20] Arduino透過SPI介面傳送/接收CAN bus通訊協議</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[ESP32教學#19] Arduino播放Micro SD MP3/WAV音樂語音檔案</title>
		<link>https://www.chosemaker.com/board/esp32/lesson-19/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Wed, 06 Jul 2022 02:39:01 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=639</guid>

					<description><![CDATA[<p>醬是創客的ESP32教學主題第19篇，以NodeMCU-32S(使用Arduino語言)來實作教學， &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-19/">[ESP32教學#19] Arduino播放Micro SD MP3/WAV音樂語音檔案</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的ESP32教學主題第19篇，以NodeMCU-32S(使用Arduino語言)來實作教學，本篇教學Arduino播放Micro SD MP3/WAV音樂語音檔案，還可以撥放指定MP3音樂</p>



<p>以下是我們今天的目標</p>



<ul><li>播放指定資料夾位置音樂</li><li>調高/調低聲音</li><li>暫停/播放/停止音樂</li></ul>



<p>設備:<br>安信可原廠/副廠NodeMCU-32S #<a href="https://www.ruten.com.tw/item/show?22030930136256" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/ESP32-S-NodeMCU-32S-WiFi-%E8%97%8D%E8%8A%BDBLE-%E9%99%84Arduino%E6%95%99%E5%AD%B8-%E5%AE%89%E4%BF%A1%E5%8F%AF%E7%89%A9%E8%81%AF%E7%B6%B2IoT-Wi-Fi%E9%96%8B%E7%99%BC%E6%9D%BF-i.293276804.6546028316" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>醬是創客MP3模組 #<a aria-label="undefined (opens in a new tab)" href="https://www.ruten.com.tw/item/show?22227650371186" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a aria-label="undefined (opens in a new tab)" href="https://shopee.tw/-%E9%86%AC%E6%98%AF%E5%89%B5%E5%AE%A2-Micro-SD-MP3-WAV%E9%9F%B3%E6%A8%82%E8%AA%9E%E9%9F%B3%E6%AA%94%E6%A1%88%E6%92%A5%E6%94%BE%E6%A8%A1%E7%B5%84-3.5mm%E9%9F%B3%E6%BA%90%E8%BC%B8%E5%87%BA-%E9%99%84%E6%95%99%E5%AD%B8-i.293276804.19720067196?sp_atk=c8aa4aa9-573b-48fe-ade2-46f25db8d291&amp;xptdk=c8aa4aa9-573b-48fe-ade2-46f25db8d291" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>Micro SD卡 32GB(FAT32檔案格式)</p>



<p>接線方式:<br>NodeMCU-32S(GPIO17)–TTL訊號–醬是創客MP3模組(RX)<br>NodeMCU-32S(GPIO16)–TTL訊號–醬是創客MP3模組(TX)<br>DC 5V(+)–醬是創客MP3模組(VCC)<br>DC 0V(-)–醬是創客MP3模組(GND)</p>



<p>Ai-Thinker安信可NodeMCU-32S的腳位圍(資料來源:安信可)</p>



<figure class="wp-block-image"><img loading="lazy" width="868" height="923" src="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png" alt="" class="wp-image-261" srcset="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png 868w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-282x300.png 282w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-768x817.png 768w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-329x350.png 329w" sizes="(max-width: 868px) 100vw, 868px" /></figure>



<p>醬是創客MP3模組相關資料</p>



<p>檔案位置須依指定位置擺放，XXXX請使用英文，不要使用中文或數字，最大只能用到32G的大小，僅建議使用FAT32檔案格式<br>EX: 第1資料夾第2首 -&gt; /01/002XXXX.mp3<br>EX: 第1資料夾第3首 -&gt; /01/003XXXX.mp3<br>EX: 第2資料夾第5首 -&gt; /02/005XXXX.mp3<br>更多規格資訊請參考https://github.com/0xcafed00d/yx5300/blob/master/docs/Serial%20MP3%20Player%20v1.0%20Manual.pdf</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="770" height="1024" src="https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1-770x1024.png" alt="" class="wp-image-640" srcset="https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1-770x1024.png 770w, https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1-226x300.png 226w, https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1-768x1021.png 768w, https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1-1155x1536.png 1155w, https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1-1540x2048.png 1540w, https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1-263x350.png 263w, https://www.chosemaker.com/wp-content/uploads/2022/07/esp32-19-1.png 1796w" sizes="(max-width: 770px) 100vw, 770px" /></figure>



<p>Arduino 範例程式碼如下</p>


<pre class="brush: cpp; title: ; notranslate">
//醬是創客 開發實作的好夥伴
#include &lt;WiFi.h&gt;
#define RXD2 16
#define TXD2 17
 
byte serial_8_byte_TX_payload[8];

 
void setup(void) {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);

  //重設晶片
  serial2_8byte_tx(0x0c, 0x00, 0x00);

  //選擇系統讀取TF卡資料
  serial2_8byte_tx(0x09, 0x00, 0x02);

  //讀取資料夾位置/01/002XXXX.mp3檔案
  serial2_8byte_tx(0x0f, 1, 2);

  //讀取資料夾位置/01/001XXXX.mp3檔案
  serial2_8byte_tx(0x0f, 1, 1);

  //讀取資料夾位置/01/003XXXX.mp3檔案
  serial2_8byte_tx(0x0f, 1, 3);
  
  //讀取資料夾位置/02/005XXXX.mp3檔案
  serial2_8byte_tx(0x0f, 2, 5);
  
  //讀取資料夾位置/02/006XXXX.mp3檔案
  serial2_8byte_tx(0x0f, 2, 6);
  
  //調低聲音一階
  serial2_8byte_tx(0x05, 0x00, 0x00);
  
  //調高聲音一階
  serial2_8byte_tx(0x04, 0x00, 0x00);
  
  //設定音量為30階(預設)
  serial2_8byte_tx(0x06, 0x00, 30);
  
  //設定音量為5階
  serial2_8byte_tx(0x06, 0x00, 5);

  //設定音量為30階
  serial2_8byte_tx(0x06, 0x00, 30);

  //暫停撥放音樂
  serial2_8byte_tx(0x0E, 0x00, 0x00);
  
  //繼續撥放音樂 
  serial2_8byte_tx(0x0D, 0x00, 0x00);
 
  //停止撥放音樂
  serial2_8byte_tx(0x16, 0x00, 0x00);
  
  //繼續撥放音樂(重新)
  serial2_8byte_tx(0x0D, 0x00, 0x00);    
}
 
void loop(void) {
}
 
void serial2_8byte_tx(int8_t command, int8_t data_1, int8_t data_2){
  if (command == 0x0c or command == 0x09) {
    delay(1500);
  }
  else {
    delay(500);
  }
  serial_8_byte_TX_payload[0] = 0x7e; //starting byte
  serial_8_byte_TX_payload[1] = 0xff; //version 
  serial_8_byte_TX_payload[2] = 0x06; //the number of bytes of the command without starting byte and ending byte 
  serial_8_byte_TX_payload[3] = command;
  serial_8_byte_TX_payload[4] = 0x00;//0x00 = no feedback, 0x01 = feedback 
  serial_8_byte_TX_payload[5] = data_1;
  serial_8_byte_TX_payload[6] = data_2;
  serial_8_byte_TX_payload[7] = 0xef; //ending byte
  Serial2.write(serial_8_byte_TX_payload, 8);
  Serial.print(&quot;tx:&quot;);
  for( byte b : serial_8_byte_TX_payload )Serial.print( b, HEX );
  Serial.println(&quot; created by chosemaker.com&quot;); 
}
</pre>


<p>Arduino 序列埠監控視窗 輸出如下，我們播放/01/002XXXX.mp3檔案、/01/001XXXX.mp3檔案、/01/003XXXX.mp3檔案、/02/005XXXX.mp3檔案、/02/006XXXX.mp3檔案、調低聲音一階、調高聲音一階、設定音量為30階(預設)、設定音量為5階、設定音量為30階、暫停撥放音樂、繼續撥放音樂、停止撥放音樂、繼續撥放音樂(重新)</p>


<pre class="brush: plain; title: ; notranslate">
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac
tx:7EFF6C000EF created by chosemaker.com
tx:7EFF69002EF created by chosemaker.com
tx:7EFF6F012EF created by chosemaker.com
tx:7EFF6F011EF created by chosemaker.com
tx:7EFF6F013EF created by chosemaker.com
tx:7EFF6F025EF created by chosemaker.com
tx:7EFF6F026EF created by chosemaker.com
tx:7EFF65000EF created by chosemaker.com
tx:7EFF64000EF created by chosemaker.com
tx:7EFF66001EEF created by chosemaker.com
tx:7EFF66005EF created by chosemaker.com
tx:7EFF66001EEF created by chosemaker.com
tx:7EFF6E000EF created by chosemaker.com
tx:7EFF6D000EF created by chosemaker.com
tx:7EFF616000EF created by chosemaker.com
tx:7EFF6D000EF created by chosemaker.com
</pre><p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-19%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2319%5D%20Arduino%E6%92%AD%E6%94%BEMicro%20SD%20MP3%2FWAV%E9%9F%B3%E6%A8%82%E8%AA%9E%E9%9F%B3%E6%AA%94%E6%A1%88" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-19%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2319%5D%20Arduino%E6%92%AD%E6%94%BEMicro%20SD%20MP3%2FWAV%E9%9F%B3%E6%A8%82%E8%AA%9E%E9%9F%B3%E6%AA%94%E6%A1%88" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-19%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2319%5D%20Arduino%E6%92%AD%E6%94%BEMicro%20SD%20MP3%2FWAV%E9%9F%B3%E6%A8%82%E8%AA%9E%E9%9F%B3%E6%AA%94%E6%A1%88" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-19%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2319%5D%20Arduino%E6%92%AD%E6%94%BEMicro%20SD%20MP3%2FWAV%E9%9F%B3%E6%A8%82%E8%AA%9E%E9%9F%B3%E6%AA%94%E6%A1%88" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-19%2F&#038;title=%5BESP32%E6%95%99%E5%AD%B8%2319%5D%20Arduino%E6%92%AD%E6%94%BEMicro%20SD%20MP3%2FWAV%E9%9F%B3%E6%A8%82%E8%AA%9E%E9%9F%B3%E6%AA%94%E6%A1%88" data-a2a-url="https://www.chosemaker.com/board/esp32/lesson-19/" data-a2a-title="[ESP32教學#19] Arduino播放Micro SD MP3/WAV音樂語音檔案"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-19/">[ESP32教學#19] Arduino播放Micro SD MP3/WAV音樂語音檔案</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[ESP32教學#18] Arduino透過SPI讀取/刪除/寫入/新增 Micro SD卡檔案</title>
		<link>https://www.chosemaker.com/board/esp32/lesson-18/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Wed, 06 Jul 2022 02:08:44 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=636</guid>

					<description><![CDATA[<p>醬是創客的ESP32教學主題第18篇，以NodeMCU-32S(使用Arduino語言)來實作教學， &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-18/">[ESP32教學#18] Arduino透過SPI讀取/刪除/寫入/新增 Micro SD卡檔案</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的ESP32教學主題第18篇，以NodeMCU-32S(使用Arduino語言)來實作教學，本篇教學Arduino透過SPI介面讀取/刪除/寫入/新增 Micro SD卡檔案，Arduino最多只能支援到32G大小、限定FAT32檔案格式</p>



<p>以下是我們今天的目標</p>



<ul><li>使用ESP32的SPI介面</li><li>計算SD卡大小</li><li>列出檔案列表</li><li>新增/移除資料夾</li><li>將 Hello World! 寫入檔案並讀取</li><li>讀取/刪除/重新命名檔案</li><li>測試檔案是否存在</li><li>計算該槽總空間/使用空間</li></ul>



<p>設備:<br>安信可原廠/副廠NodeMCU-32S #<a href="https://www.ruten.com.tw/item/show?22030930136256" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/ESP32-S-NodeMCU-32S-WiFi-%E8%97%8D%E8%8A%BDBLE-%E9%99%84Arduino%E6%95%99%E5%AD%B8-%E5%AE%89%E4%BF%A1%E5%8F%AF%E7%89%A9%E8%81%AF%E7%B6%B2IoT-Wi-Fi%E9%96%8B%E7%99%BC%E6%9D%BF-i.293276804.6546028316" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>醬是創客Micro SD卡模組 #<a aria-label="undefined (opens in a new tab)" href="https://www.ruten.com.tw/item/show?22227650354020" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a aria-label="undefined (opens in a new tab)" href="https://shopee.tw/-%E9%86%AC%E6%98%AF%E5%89%B5%E5%AE%A2-SPI%E4%BB%8B%E9%9D%A2-Micro-SD%E5%8D%A1%E6%AA%94%E6%A1%88%E8%AE%80%E5%8F%96%E5%AF%AB%E5%85%A5%E6%A8%A1%E7%B5%84-ESP32-Arduino-%E9%99%84%E6%95%99%E5%AD%B8-i.293276804.18220066380?sp_atk=d22c2f3a-91fa-4f0d-ad7f-62084af7a404&amp;xptdk=d22c2f3a-91fa-4f0d-ad7f-62084af7a404" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>Micro SD卡 32GB(FAT32檔案格式)</p>



<p>接線方式:<br>NodeMCU-32S(GPIO5)–SPI訊號–醬是創客Micro SD卡模組(CS)<br>NodeMCU-32S(GPIO18)–SPI訊號–醬是創客Micro SD卡模組(SCK)<br>NodeMCU-32S(GPIO19)–SPI訊號–醬是創客Micro SD卡模組(MISO)<br>NodeMCU-32S(GPIO23)–SPI訊號–醬是創客Micro SD卡模組(MOSI)<br>DC 5V(+)–醬是創客Micro SD卡模組(VCC)<br>DC 0V(-)–醬是創客Micro SD卡模組(GND)</p>



<p>Ai-Thinker安信可NodeMCU-32S的腳位圍(資料來源:安信可)</p>



<figure class="wp-block-image"><img loading="lazy" width="868" height="923" src="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png" alt="" class="wp-image-261" srcset="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png 868w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-282x300.png 282w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-768x817.png 768w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-329x350.png 329w" sizes="(max-width: 868px) 100vw, 868px" /></figure>



<p>Micro SD卡模組專業知識與教學</p>



<p>Arduino現階段因記憶體設計方式，最大只能用到32G的大小，僅建議使用FAT32檔案格式，SPI的方式是讀取寫入Micro SD最好的方式</p>



<p>Arduino 範例程式碼如下</p>


<pre class="brush: cpp; title: ; notranslate">
//醬是創客 開發實作的好夥伴
#include &quot;FS.h&quot;
#include &quot;SD.h&quot;
#include &quot;SPI.h&quot;
#include &quot;WiFi.h&quot;

void setup(){
    Serial.begin(115200);

    //初始化SD卡
    if(!SD.begin()){
        Serial.println(&quot;Card Mount Failed&quot;);
        return;
    }
    uint8_t cardType = SD.cardType();

    if(cardType == CARD_NONE){
        Serial.println(&quot;No SD card attached&quot;);
        return;
    }
    //找出SD卡類型
    Serial.print(&quot;SD Card Type: &quot;);
    if(cardType == CARD_MMC){
        Serial.println(&quot;MMC&quot;);
    } else if(cardType == CARD_SD){
        Serial.println(&quot;SDSC&quot;);
    } else if(cardType == CARD_SDHC){
        Serial.println(&quot;SDHC&quot;);
    } else {
        Serial.println(&quot;UNKNOWN&quot;);
    }
    //計算SD卡大小
    uint64_t cardSize = SD.cardSize() / (1024 * 1024);
    Serial.printf(&quot;SD Card Size: %lluMB\n&quot;, cardSize);

    //列出第1層內的檔案列表
    listDir(SD, &quot;/&quot;, 0);

    //建立一個資料夾mydir
    createDir(SD, &quot;/mydir&quot;);

    //列出第1層內的檔案列表
    listDir(SD, &quot;/&quot;, 0);

    //移除資料夾mydir
    removeDir(SD, &quot;/mydir&quot;);

    //列出第3層內的檔案列表
    listDir(SD, &quot;/&quot;, 2);

    //把 Hello 寫入hello.txt
    writeFile(SD, &quot;/hello.txt&quot;, &quot;Hello &quot;);

    //把 World! 寫入hello.txt
    appendFile(SD, &quot;/hello.txt&quot;, &quot;World!\n&quot;);

    //讀取hello.txt
    readFile(SD, &quot;/hello.txt&quot;);

    //刪除foo.txt
    deleteFile(SD, &quot;/foo.txt&quot;);

    //重新命名hello.txt為foo.txt
    renameFile(SD, &quot;/hello.txt&quot;, &quot;/foo.txt&quot;);

    //讀取foo.txt
    readFile(SD, &quot;/foo.txt&quot;);

    //測試test.txt是否存在
    testFileIO(SD, &quot;/test.txt&quot;);

    //印出該槽總空間大小
    Serial.printf(&quot;Total space: %lluMB\n&quot;, SD.totalBytes() / (1024 * 1024));

    //印出該槽已使用空間大小
    Serial.printf(&quot;Used space: %lluMB\n&quot;, SD.usedBytes() / (1024 * 1024));
}

void loop(){

}

void listDir(fs::FS &amp;amp;fs, const char * dirname, uint8_t levels){
    Serial.printf(&quot;Listing directory: %s\n&quot;, dirname);

    File root = fs.open(dirname);
    if(!root){
        Serial.println(&quot;Failed to open directory&quot;);
        return;
    }
    if(!root.isDirectory()){
        Serial.println(&quot;Not a directory&quot;);
        return;
    }

    File file = root.openNextFile();
    while(file){
        if(file.isDirectory()){
            Serial.print(&quot;  DIR : &quot;);
            Serial.println(file.name());
            if(levels){
                listDir(fs, file.name(), levels -1);
            }
        } else {
            Serial.print(&quot;  FILE: &quot;);
            Serial.print(file.name());
            Serial.print(&quot;  SIZE: &quot;);
            Serial.println(file.size());
        }
        file = root.openNextFile();
    }
}

void createDir(fs::FS &amp;amp;fs, const char * path){
    Serial.printf(&quot;Creating Dir: %s\n&quot;, path);
    if(fs.mkdir(path)){
        Serial.println(&quot;Dir created&quot;);
    } else {
        Serial.println(&quot;mkdir failed&quot;);
    }
}

void removeDir(fs::FS &amp;amp;fs, const char * path){
    Serial.printf(&quot;Removing Dir: %s\n&quot;, path);
    if(fs.rmdir(path)){
        Serial.println(&quot;Dir removed&quot;);
    } else {
        Serial.println(&quot;rmdir failed&quot;);
    }
}

void readFile(fs::FS &amp;amp;fs, const char * path){
    Serial.printf(&quot;Reading file: %s\n&quot;, path);

    File file = fs.open(path);
    if(!file){
        Serial.println(&quot;Failed to open file for reading&quot;);
        return;
    }

    Serial.print(&quot;Read from file: &quot;);
    while(file.available()){
        Serial.write(file.read());
    }
    file.close();
}

void writeFile(fs::FS &amp;amp;fs, const char * path, const char * message){
    Serial.printf(&quot;Writing file: %s\n&quot;, path);

    File file = fs.open(path, FILE_WRITE);
    if(!file){
        Serial.println(&quot;Failed to open file for writing&quot;);
        return;
    }
    if(file.print(message)){
        Serial.println(&quot;File written&quot;);
    } else {
        Serial.println(&quot;Write failed&quot;);
    }
    file.close();
}

void appendFile(fs::FS &amp;amp;fs, const char * path, const char * message){
    Serial.printf(&quot;Appending to file: %s\n&quot;, path);

    File file = fs.open(path, FILE_APPEND);
    if(!file){
        Serial.println(&quot;Failed to open file for appending&quot;);
        return;
    }
    if(file.print(message)){
        Serial.println(&quot;Message appended&quot;);
    } else {
        Serial.println(&quot;Append failed&quot;);
    }
    file.close();
}

void renameFile(fs::FS &amp;amp;fs, const char * path1, const char * path2){
    Serial.printf(&quot;Renaming file %s to %s\n&quot;, path1, path2);
    if (fs.rename(path1, path2)) {
        Serial.println(&quot;File renamed&quot;);
    } else {
        Serial.println(&quot;Rename failed&quot;);
    }
}

void deleteFile(fs::FS &amp;amp;fs, const char * path){
    Serial.printf(&quot;Deleting file: %s\n&quot;, path);
    if(fs.remove(path)){
        Serial.println(&quot;File deleted&quot;);
    } else {
        Serial.println(&quot;Delete failed&quot;);
    }
}

void testFileIO(fs::FS &amp;amp;fs, const char * path){
    File file = fs.open(path);
    static uint8_t buf[512];
    size_t len = 0;
    uint32_t start = millis();
    uint32_t end = start;
    if(file){
        len = file.size();
        size_t flen = len;
        start = millis();
        while(len){
            size_t toRead = len;
            if(toRead &gt; 512){
                toRead = 512;
            }
            file.read(buf, toRead);
            len -= toRead;
        }
        end = millis() - start;
        Serial.printf(&quot;%u bytes read for %u ms\n&quot;, flen, end);
        file.close();
    } else {
        Serial.println(&quot;Failed to open file for reading&quot;);
    }


    file = fs.open(path, FILE_WRITE);
    if(!file){
        Serial.println(&quot;Failed to open file for writing&quot;);
        return;
    }

    size_t i;
    start = millis();
    for(i=0; i&lt;2048; i++){
        file.write(buf, 512);
    }
    end = millis() - start;
    Serial.printf(&quot;%u bytes written for %u ms\n&quot;, 2048 * 512, end);
    file.close();
}
</pre>


<p>Arduino 序列埠監控視窗 輸出如下，我們拿已安裝Raspberry Pi(樹莓派)Micro SD卡接到Micro SD模組，且有一個磁碟槽用FAT32檔案格式，所以SD card大小有29007MB，該槽空間只有252MB</p>


<pre class="brush: plain; title: ; notranslate">
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac
SD Card Type: SDHC
SD Card Size: 29007MB
Listing directory: /
  DIR : /overlays
  FILE: /bcm2708-rpi-b-plus.dtb  SIZE: 24246
  FILE: /COPYING.linux  SIZE: 18693
  FILE: /LICENCE.broadcom  SIZE: 1594
  FILE: /bcm2708-rpi-zero-w.dtb  SIZE: 24424
  FILE: /bcm2708-rpi-b.dtb  SIZE: 23983
  FILE: /bcm2708-rpi-cm.dtb  SIZE: 23764
  FILE: /issue.txt  SIZE: 145
  FILE: /bcm2708-rpi-zero.dtb  SIZE: 23688
  FILE: /bcm2709-rpi-2-b.dtb  SIZE: 25310
  FILE: /bcm2710-rpi-2-b.dtb  SIZE: 25439
  FILE: /bcm2710-rpi-3-b-plus.dtb  SIZE: 27099
  FILE: /bcm2710-rpi-3-b.dtb  SIZE: 26480
  FILE: /bcm2710-rpi-cm3.dtb  SIZE: 25294
  FILE: /bcm2711-rpi-4-b.dtb  SIZE: 40988
  FILE: /bootcode.bin  SIZE: 52304
  FILE: /cmdline.txt  SIZE: 121
  FILE: /config.txt  SIZE: 1846
  FILE: /fixup.dat  SIZE: 6745
  FILE: /fixup4.dat  SIZE: 6200
  FILE: /fixup4cd.dat  SIZE: 3112
  FILE: /fixup4db.dat  SIZE: 9192
  FILE: /fixup4x.dat  SIZE: 9192
  FILE: /fixup_cd.dat  SIZE: 2656
  FILE: /fixup_db.dat  SIZE: 9817
  FILE: /fixup_x.dat  SIZE: 9819
  FILE: /kernel.img  SIZE: 5142912
  FILE: /kernel7.img  SIZE: 5424376
  FILE: /kernel7l.img  SIZE: 5757200
  FILE: /kernel8.img  SIZE: 13521408
  FILE: /start.elf  SIZE: 2883204
  FILE: /start4.elf  SIZE: 2784800
  FILE: /start4cd.elf  SIZE: 784316
  FILE: /start4db.elf  SIZE: 4593508
  FILE: /start4x.elf  SIZE: 3546468
  FILE: /start_cd.elf  SIZE: 690884
  FILE: /start_db.elf  SIZE: 4859912
  FILE: /start_x.elf  SIZE: 3797384
  DIR : /System Volume Information
Creating Dir: /mydir
Dir created
Listing directory: /
  DIR : /overlays
  FILE: /bcm2708-rpi-b-plus.dtb  SIZE: 24246
  FILE: /COPYING.linux  SIZE: 18693
  FILE: /LICENCE.broadcom  SIZE: 1594
  FILE: /bcm2708-rpi-zero-w.dtb  SIZE: 24424
  FILE: /bcm2708-rpi-b.dtb  SIZE: 23983
  FILE: /bcm2708-rpi-cm.dtb  SIZE: 23764
  FILE: /issue.txt  SIZE: 145
  DIR : /mydir
  FILE: /bcm2708-rpi-zero.dtb  SIZE: 23688
  FILE: /bcm2709-rpi-2-b.dtb  SIZE: 25310
  FILE: /bcm2710-rpi-2-b.dtb  SIZE: 25439
  FILE: /bcm2710-rpi-3-b-plus.dtb  SIZE: 27099
  FILE: /bcm2710-rpi-3-b.dtb  SIZE: 26480
  FILE: /bcm2710-rpi-cm3.dtb  SIZE: 25294
  FILE: /bcm2711-rpi-4-b.dtb  SIZE: 40988
  FILE: /bootcode.bin  SIZE: 52304
  FILE: /cmdline.txt  SIZE: 121
  FILE: /config.txt  SIZE: 1846
  FILE: /fixup.dat  SIZE: 6745
  FILE: /fixup4.dat  SIZE: 6200
  FILE: /fixup4cd.dat  SIZE: 3112
  FILE: /fixup4db.dat  SIZE: 9192
  FILE: /fixup4x.dat  SIZE: 9192
  FILE: /fixup_cd.dat  SIZE: 2656
  FILE: /fixup_db.dat  SIZE: 9817
  FILE: /fixup_x.dat  SIZE: 9819
  FILE: /kernel.img  SIZE: 5142912
  FILE: /kernel7.img  SIZE: 5424376
  FILE: /kernel7l.img  SIZE: 5757200
  FILE: /kernel8.img  SIZE: 13521408
  FILE: /start.elf  SIZE: 2883204
  FILE: /start4.elf  SIZE: 2784800
  FILE: /start4cd.elf  SIZE: 784316
  FILE: /start4db.elf  SIZE: 4593508
  FILE: /start4x.elf  SIZE: 3546468
  FILE: /start_cd.elf  SIZE: 690884
  FILE: /start_db.elf  SIZE: 4859912
  FILE: /start_x.elf  SIZE: 3797384
  DIR : /System Volume Information
Removing Dir: /mydir
Dir removed
Listing directory: /
  DIR : /overlays
Listing directory: /overlays
  FILE: /overlays/adau7002-simple.dtbo  SIZE: 1587
  FILE: /overlays/README  SIZE: 113431
  FILE: /overlays/act-led.dtbo  SIZE: 569
  FILE: /overlays/adau1977-adc.dtbo  SIZE: 1027
  FILE: /overlays/akkordion-iqdacplus.dtbo  SIZE: 1387
  FILE: /overlays/ads1015.dtbo  SIZE: 2425
  FILE: /overlays/ads1115.dtbo  SIZE: 2425
  FILE: /overlays/ads7846.dtbo  SIZE: 2402
  FILE: /overlays/adv7282m.dtbo  SIZE: 1952
  FILE: /overlays/adv728x-m.dtbo  SIZE: 2436
  FILE: /overlays/audioinjector-addons.dtbo  SIZE: 1866
  FILE: /overlays/anyspi.dtbo  SIZE: 3895
  FILE: /overlays/allo-boss-dac-pcm512x-audio.dtbo  SIZE: 1473
  FILE: /overlays/allo-digione.dtbo  SIZE: 1208
  FILE: /overlays/allo-katana-dac-audio.dtbo  SIZE: 1659
  FILE: /overlays/allo-piano-dac-pcm512x-audio.dtbo  SIZE: 1011
  FILE: /overlays/allo-piano-dac-plus-pcm512x-audio.dtbo  SIZE: 1585
  FILE: /overlays/apds9960.dtbo  SIZE: 1338
  FILE: /overlays/applepi-dac.dtbo  SIZE: 1454
  FILE: /overlays/at86rf233.dtbo  SIZE: 1632
  FILE: /overlays/audioinjector-ultra.dtbo  SIZE: 1890
  FILE: /overlays/audioinjector-wm8731-audio.dtbo  SIZE: 787
  FILE: /overlays/audiosense-pi.dtbo  SIZE: 2187
  FILE: /overlays/audremap.dtbo  SIZE: 833
  FILE: /overlays/balena-fin.dtbo  SIZE: 2927
  FILE: /overlays/bmp085_i2c-sensor.dtbo  SIZE: 449
  FILE: /overlays/dht11.dtbo  SIZE: 1019
  FILE: /overlays/dionaudio-loco-v2.dtbo  SIZE: 1027
  FILE: /overlays/dionaudio-loco.dtbo  SIZE: 663
  FILE: /overlays/disable-bt.dtbo  SIZE: 954
  FILE: /overlays/disable-wifi.dtbo  SIZE: 387
  FILE: /overlays/dpi18.dtbo  SIZE: 951
  FILE: /overlays/dpi24.dtbo  SIZE: 975
  FILE: /overlays/draws.dtbo  SIZE: 5869
  FILE: /overlays/dwc-otg.dtbo  SIZE: 293
  FILE: /overlays/dwc2.dtbo  SIZE: 801
  FILE: /overlays/enc28j60-spi2.dtbo  SIZE: 1279
  FILE: /overlays/enc28j60.dtbo  SIZE: 1403
  FILE: /overlays/exc3000.dtbo  SIZE: 1562
  FILE: /overlays/fe-pi-audio.dtbo  SIZE: 1932
  FILE: /overlays/goodix.dtbo  SIZE: 1437
  FILE: /overlays/googlevoicehat-soundcard.dtbo  SIZE: 1259
  FILE: /overlays/gpio-fan.dtbo  SIZE: 1259
  FILE: /overlays/gpio-ir-tx.dtbo  SIZE: 1096
  FILE: /overlays/gpio-ir.dtbo  SIZE: 1212
  FILE: /overlays/gpio-key.dtbo  SIZE: 1373
  FILE: /overlays/gpio-no-bank0-irq.dtbo  SIZE: 274
  FILE: /overlays/gpio-no-irq.dtbo  SIZE: 258
  FILE: /overlays/gpio-poweroff.dtbo  SIZE: 994
  FILE: /overlays/gpio-shutdown.dtbo  SIZE: 1345
  FILE: /overlays/hd44780-lcd.dtbo  SIZE: 1662
  FILE: /overlays/hifiberry-amp.dtbo  SIZE: 779
  FILE: /overlays/hifiberry-dac.dtbo  SIZE: 655
  FILE: /overlays/hifiberry-dacplus.dtbo  SIZE: 1762
  FILE: /overlays/hifiberry-dacplusadc.dtbo  SIZE: 2008
  FILE: /overlays/hifiberry-dacplusadcpro.dtbo  SIZE: 1925
  FILE: /overlays/hifiberry-dacplusdsp.dtbo  SIZE: 699
  FILE: /overlays/hifiberry-dacplushd.dtbo  SIZE: 2011
  FILE: /overlays/hifiberry-digi-pro.dtbo  SIZE: 1125
  FILE: /overlays/hifiberry-digi.dtbo  SIZE: 959
  FILE: /overlays/hy28a.dtbo  SIZE: 2444
  FILE: /overlays/hy28b-2017.dtbo  SIZE: 2893
  FILE: /overlays/hy28b.dtbo  SIZE: 2915
  FILE: /overlays/i-sabre-q2m.dtbo  SIZE: 893
  FILE: /overlays/i2c-bcm2708.dtbo  SIZE: 270
  FILE: /overlays/i2c-gpio.dtbo  SIZE: 1055
  FILE: /overlays/i2c-mux.dtbo  SIZE: 2185
  FILE: /overlays/i2c-pwm-pca9685a.dtbo  SIZE: 648
  FILE: /overlays/i2c-rtc-gpio.dtbo  SIZE: 5249
  FILE: /overlays/i2c-rtc.dtbo  SIZE: 4761
  FILE: /overlays/i2c-sensor.dtbo  SIZE: 5030
  FILE: /overlays/i2c0-bcm2708.dtbo  SIZE: 1674
  FILE: /overlays/i2c0.dtbo  SIZE: 1396
  FILE: /overlays/i2c1-bcm2708.dtbo  SIZE: 1283
  FILE: /overlays/i2c1.dtbo  SIZE: 1004
  FILE: /overlays/i2c3.dtbo  SIZE: 907
  FILE: /overlays/i2c4.dtbo  SIZE: 907
  FILE: /overlays/i2c5.dtbo  SIZE: 911
  FILE: /overlays/i2c6.dtbo  SIZE: 909
  FILE: /overlays/i2s-gpio28-31.dtbo  SIZE: 307
  FILE: /overlays/ilitek251x.dtbo  SIZE: 1373
  FILE: /overlays/imx219.dtbo  SIZE: 3293
  FILE: /overlays/iqaudio-codec.dtbo  SIZE: 895
  FILE: /overlays/iqaudio-dac.dtbo  SIZE: 1272
  FILE: /overlays/iqaudio-dacplus.dtbo  SIZE: 1511
  FILE: /overlays/iqaudio-digi-wm8804-audio.dtbo  SIZE: 1326
  FILE: /overlays/irs1125.dtbo  SIZE: 2433
  FILE: /overlays/jedec-spi-nor.dtbo  SIZE: 5188
  FILE: /overlays/justboom-both.dtbo  SIZE: 1640
  FILE: /overlays/justboom-dac.dtbo  SIZE: 1276
  FILE: /overlays/justboom-digi.dtbo  SIZE: 955
  FILE: /overlays/ltc294x.dtbo  SIZE: 1916
  FILE: /overlays/max98357a.dtbo  SIZE: 1933
  FILE: /overlays/mbed-dac.dtbo  SIZE: 1605
  FILE: /overlays/mcp23017.dtbo  SIZE: 1674
  FILE: /overlays/mcp23s17.dtbo  SIZE: 15205
  FILE: /overlays/mcp2515-can0.dtbo  SIZE: 1797
  FILE: /overlays/mcp2515-can1.dtbo  SIZE: 1797
  FILE: /overlays/mcp3008.dtbo  SIZE: 4213
  FILE: /overlays/mcp3202.dtbo  SIZE: 4213
  FILE: /overlays/mcp342x.dtbo  SIZE: 2854
  FILE: /overlays/media-center.dtbo  SIZE: 3414
  FILE: /overlays/midi-uart0.dtbo  SIZE: 720
  FILE: /overlays/midi-uart1.dtbo  SIZE: 857
  FILE: /overlays/miniuart-bt.dtbo  SIZE: 1446
  FILE: /overlays/mmc.dtbo  SIZE: 1221
  FILE: /overlays/mpu6050.dtbo  SIZE: 796
  FILE: /overlays/mz61581.dtbo  SIZE: 2826
  FILE: /overlays/ov5647.dtbo  SIZE: 2597
  FILE: /overlays/papirus.dtbo  SIZE: 2356
  FILE: /overlays/pi3-act-led.dtbo  SIZE: 569
  FILE: /overlays/pi3-disable-bt.dtbo  SIZE: 954
  FILE: /overlays/pi3-disable-wifi.dtbo  SIZE: 387
  FILE: /overlays/pi3-miniuart-bt.dtbo  SIZE: 1446
  FILE: /overlays/pibell.dtbo  SIZE: 2334
  FILE: /overlays/piglow.dtbo  SIZE: 1594
  FILE: /overlays/piscreen.dtbo  SIZE: 2689
  FILE: /overlays/piscreen2r.dtbo  SIZE: 2593
  FILE: /overlays/pisound.dtbo  SIZE: 2454
  FILE: /overlays/pitft22.dtbo  SIZE: 1520
  FILE: /overlays/pitft28-capacitive.dtbo  SIZE: 2361
  FILE: /overlays/pitft28-resistive.dtbo  SIZE: 2746
  FILE: /overlays/pitft35-resistive.dtbo  SIZE: 2766
  FILE: /overlays/pps-gpio.dtbo  SIZE: 1145
  FILE: /overlays/pwm-2chan.dtbo  SIZE: 1096
  FILE: /overlays/pwm-ir-tx.dtbo  SIZE: 1031
  FILE: /overlays/pwm.dtbo  SIZE: 985
  FILE: /overlays/qca7000.dtbo  SIZE: 1395
  FILE: /overlays/rotary-encoder.dtbo  SIZE: 1922
  FILE: /overlays/rpi-backlight.dtbo  SIZE: 489
  FILE: /overlays/rpi-cirrus-wm5102.dtbo  SIZE: 3542
  FILE: /overlays/rpi-dac.dtbo  SIZE: 643
  FILE: /overlays/rpi-display.dtbo  SIZE: 2574
  FILE: /overlays/rpi-ft5406.dtbo  SIZE: 1018
  FILE: /overlays/rpi-poe.dtbo  SIZE: 1995
  FILE: /overlays/rpi-proto.dtbo  SIZE: 771
  FILE: /overlays/rpi-sense.dtbo  SIZE: 893
  FILE: /overlays/rpi-tv.dtbo  SIZE: 567
  FILE: /overlays/rra-digidac1-wm8741-audio.dtbo  SIZE: 1298
  FILE: /overlays/sc16is750-i2c.dtbo  SIZE: 1219
  FILE: /overlays/sc16is752-i2c.dtbo  SIZE: 1356
  FILE: /overlays/sc16is752-spi1.dtbo  SIZE: 1851
  FILE: /overlays/sdhost.dtbo  SIZE: 968
  FILE: /overlays/sdio.dtbo  SIZE: 1889
  FILE: /overlays/sdtweak.dtbo  SIZE: 804
  FILE: /overlays/smi-dev.dtbo  SIZE: 404
  FILE: /overlays/smi-nand.dtbo  SIZE: 1476
  FILE: /overlays/smi.dtbo  SIZE: 981
  FILE: /overlays/spi-gpio35-39.dtbo  SIZE: 630
  FILE: /overlays/spi-gpio40-45.dtbo  SIZE: 795
  FILE: /overlays/spi-rtc.dtbo  SIZE: 635
  FILE: /overlays/spi0-cs.dtbo  SIZE: 895
  FILE: /overlays/spi0-hw-cs.dtbo  SIZE: 456
  FILE: /overlays/spi1-1cs.dtbo  SIZE: 1523
  FILE: /overlays/spi1-2cs.dtbo  SIZE: 1896
  FILE: /overlays/spi1-3cs.dtbo  SIZE: 2269
  FILE: /overlays/spi2-1cs.dtbo  SIZE: 1523
  FILE: /overlays/spi2-2cs.dtbo  SIZE: 1896
  FILE: /overlays/spi2-3cs.dtbo  SIZE: 2269
  FILE: /overlays/spi3-1cs.dtbo  SIZE: 1289
  FILE: /overlays/spi3-2cs.dtbo  SIZE: 1662
  FILE: /overlays/spi4-1cs.dtbo  SIZE: 1289
  FILE: /overlays/spi4-2cs.dtbo  SIZE: 1662
  FILE: /overlays/spi5-1cs.dtbo  SIZE: 1289
  FILE: /overlays/spi5-2cs.dtbo  SIZE: 1662
  FILE: /overlays/spi6-1cs.dtbo  SIZE: 1289
  FILE: /overlays/spi6-2cs.dtbo  SIZE: 1662
  FILE: /overlays/ssd1306.dtbo  SIZE: 1122
  FILE: /overlays/superaudioboard.dtbo  SIZE: 1968
  FILE: /overlays/sx150x.dtbo  SIZE: 35570
  FILE: /overlays/tc358743-audio.dtbo  SIZE: 1529
  FILE: /overlays/tc358743.dtbo  SIZE: 2465
  FILE: /overlays/tinylcd35.dtbo  SIZE: 4822
  FILE: /overlays/tpm-slb9670.dtbo  SIZE: 779
  FILE: /overlays/uart0.dtbo  SIZE: 928
  FILE: /overlays/uart1.dtbo  SIZE: 980
  FILE: /overlays/uart2.dtbo  SIZE: 589
  FILE: /overlays/uart3.dtbo  SIZE: 589
  FILE: /overlays/uart4.dtbo  SIZE: 589
  FILE: /overlays/uart5.dtbo  SIZE: 589
  FILE: /overlays/udrc.dtbo  SIZE: 3532
  FILE: /overlays/upstream.dtbo  SIZE: 2460
  FILE: /overlays/vc4-fkms-v3d.dtbo  SIZE: 1255
  FILE: /overlays/vc4-kms-kippah-7inch.dtbo  SIZE: 1112
  FILE: /overlays/vc4-kms-v3d.dtbo  SIZE: 2337
  FILE: /overlays/vga666.dtbo  SIZE: 758
  FILE: /overlays/w1-gpio-pullup.dtbo  SIZE: 1171
  FILE: /overlays/w1-gpio.dtbo  SIZE: 1036
  FILE: /overlays/w5500.dtbo  SIZE: 1558
  FILE: /overlays/wittypi.dtbo  SIZE: 1056
  FILE: /bcm2708-rpi-b-plus.dtb  SIZE: 24246
  FILE: /COPYING.linux  SIZE: 18693
  FILE: /LICENCE.broadcom  SIZE: 1594
  FILE: /bcm2708-rpi-zero-w.dtb  SIZE: 24424
  FILE: /bcm2708-rpi-b.dtb  SIZE: 23983
  FILE: /bcm2708-rpi-cm.dtb  SIZE: 23764
  FILE: /issue.txt  SIZE: 145
  FILE: /bcm2708-rpi-zero.dtb  SIZE: 23688
  FILE: /bcm2709-rpi-2-b.dtb  SIZE: 25310
  FILE: /bcm2710-rpi-2-b.dtb  SIZE: 25439
  FILE: /bcm2710-rpi-3-b-plus.dtb  SIZE: 27099
  FILE: /bcm2710-rpi-3-b.dtb  SIZE: 26480
  FILE: /bcm2710-rpi-cm3.dtb  SIZE: 25294
  FILE: /bcm2711-rpi-4-b.dtb  SIZE: 40988
  FILE: /bootcode.bin  SIZE: 52304
  FILE: /cmdline.txt  SIZE: 121
  FILE: /config.txt  SIZE: 1846
  FILE: /fixup.dat  SIZE: 6745
  FILE: /fixup4.dat  SIZE: 6200
  FILE: /fixup4cd.dat  SIZE: 3112
  FILE: /fixup4db.dat  SIZE: 9192
  FILE: /fixup4x.dat  SIZE: 9192
  FILE: /fixup_cd.dat  SIZE: 2656
  FILE: /fixup_db.dat  SIZE: 9817
  FILE: /fixup_x.dat  SIZE: 9819
  FILE: /kernel.img  SIZE: 5142912
  FILE: /kernel7.img  SIZE: 5424376
  FILE: /kernel7l.img  SIZE: 5757200
  FILE: /kernel8.img  SIZE: 13521408
  FILE: /start.elf  SIZE: 2883204
  FILE: /start4.elf  SIZE: 2784800
  FILE: /start4cd.elf  SIZE: 784316
  FILE: /start4db.elf  SIZE: 4593508
  FILE: /start4x.elf  SIZE: 3546468
  FILE: /start_cd.elf  SIZE: 690884
  FILE: /start_db.elf  SIZE: 4859912
  FILE: /start_x.elf  SIZE: 3797384
  DIR : /System Volume Information
Listing directory: /System Volume Information
  FILE: /System Volume Information/WPSettings.dat  SIZE: 12
  FILE: /System Volume Information/IndexerVolumeGuid  SIZE: 76
Writing file: /hello.txt
File written
Appending to file: /hello.txt
Message appended
Reading file: /hello.txt
Read from file: Hello World!
Deleting file: /foo.txt
Delete failed
Renaming file /hello.txt to /foo.txt
File renamed
Reading file: /foo.txt
Read from file: Hello World!
Failed to open file for reading
1048576 bytes written for 4301 ms
Total space: 252MB
Used space: 52MB
</pre><p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-18%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2318%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E8%AE%80%E5%8F%96%2F%E5%88%AA%E9%99%A4%2F%E5%AF%AB%E5%85%A5%2F%E6%96%B0%E5%A2%9E%20Micro%20SD%E5%8D%A1%E6%AA%94%E6%A1%88" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-18%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2318%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E8%AE%80%E5%8F%96%2F%E5%88%AA%E9%99%A4%2F%E5%AF%AB%E5%85%A5%2F%E6%96%B0%E5%A2%9E%20Micro%20SD%E5%8D%A1%E6%AA%94%E6%A1%88" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-18%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2318%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E8%AE%80%E5%8F%96%2F%E5%88%AA%E9%99%A4%2F%E5%AF%AB%E5%85%A5%2F%E6%96%B0%E5%A2%9E%20Micro%20SD%E5%8D%A1%E6%AA%94%E6%A1%88" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-18%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2318%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E8%AE%80%E5%8F%96%2F%E5%88%AA%E9%99%A4%2F%E5%AF%AB%E5%85%A5%2F%E6%96%B0%E5%A2%9E%20Micro%20SD%E5%8D%A1%E6%AA%94%E6%A1%88" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-18%2F&#038;title=%5BESP32%E6%95%99%E5%AD%B8%2318%5D%20Arduino%E9%80%8F%E9%81%8ESPI%E8%AE%80%E5%8F%96%2F%E5%88%AA%E9%99%A4%2F%E5%AF%AB%E5%85%A5%2F%E6%96%B0%E5%A2%9E%20Micro%20SD%E5%8D%A1%E6%AA%94%E6%A1%88" data-a2a-url="https://www.chosemaker.com/board/esp32/lesson-18/" data-a2a-title="[ESP32教學#18] Arduino透過SPI讀取/刪除/寫入/新增 Micro SD卡檔案"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-18/">[ESP32教學#18] Arduino透過SPI讀取/刪除/寫入/新增 Micro SD卡檔案</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[ESP32教學#17] Arduino多工處理使用超聲波模組量測物品距離</title>
		<link>https://www.chosemaker.com/board/esp32/lesson-17/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Wed, 06 Jul 2022 01:39:53 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=634</guid>

					<description><![CDATA[<p>醬是創客的ESP32教學主題第17篇，以NodeMCU-32S(使用Arduino語言)來實作教學， &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-17/">[ESP32教學#17] Arduino多工處理使用超聲波模組量測物品距離</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的ESP32教學主題第17篇，以NodeMCU-32S(使用Arduino語言)來實作教學，本篇教學Arduino多工處理使用超聲波模組量測物品距離，並透過DI接收，一般來說超聲波模組都會和紅外避障模組搭配一起使用這樣精準度會更高</p>



<p>以下是我們今天的目標</p>



<ul><li>使用pulseIn()讀取脈衝訊號，並計算</li><li>多工處理模組訊號</li></ul>



<p>設備:<br>安信可原廠/副廠NodeMCU-32S #<a href="https://www.ruten.com.tw/item/show?22030930136256" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/ESP32-S-NodeMCU-32S-WiFi-%E8%97%8D%E8%8A%BDBLE-%E9%99%84Arduino%E6%95%99%E5%AD%B8-%E5%AE%89%E4%BF%A1%E5%8F%AF%E7%89%A9%E8%81%AF%E7%B6%B2IoT-Wi-Fi%E9%96%8B%E7%99%BC%E6%9D%BF-i.293276804.6546028316" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>醬是創客超聲波模組 #<a aria-label="undefined (opens in a new tab)" href="https://www.ruten.com.tw/item/show?22227650336918" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a aria-label="undefined (opens in a new tab)" href="https://shopee.tw/-%E9%86%AC%E6%98%AF%E5%89%B5%E5%AE%A2-%E8%B6%85%E8%81%B2%E6%B3%A2%E6%A8%A1%E7%B5%84-400CM%E9%87%8F%E6%B8%AC%E7%89%A9%E5%93%81%E8%B7%9D%E9%9B%A2-ESP32-Arduino-%E9%99%84%E6%95%99%E5%AD%B8-i.293276804.19520064557?sp_atk=e45413b6-9fe3-4feb-8cd4-d604c8910505&amp;xptdk=e45413b6-9fe3-4feb-8cd4-d604c8910505" target="_blank" rel="noreferrer noopener">蝦皮購物</a></p>



<p>接線方式:<br>NodeMCU-32S(GPIO16)–脈衝訊號–醬是創客超聲波模組(Trig訊號)<br>NodeMCU-32S(GPIO17)–脈衝訊號–醬是創客超聲波模組(Echo訊號)<br>DC 5V(+)–醬是創客超聲波模組(VCC)<br>DC 0V(-)–醬是創客超聲波模組(GND)</p>



<p>Ai-Thinker安信可NodeMCU-32S的腳位圍(資料來源:安信可)</p>



<figure class="wp-block-image"><img loading="lazy" width="868" height="923" src="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png" alt="" class="wp-image-261" srcset="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png 868w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-282x300.png 282w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-768x817.png 768w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-329x350.png 329w" sizes="(max-width: 868px) 100vw, 868px" /></figure>



<p>超聲波專業知識與教學</p>



<p>當超聲波發送器送出時，如遇到物體，聲波經過物體的反射並使自身的接收器收到聲波<br>收到的聲波會以脈衝訊號的方式傳給ESP32，聲波的優點就是可以量測距離比較遠一些</p>



<p>Arduino 範例程式碼如下</p>


<pre class="brush: cpp; title: ; notranslate">
//醬是創客 開發實作的好夥伴
#include &quot;WiFi.h&quot;
 
//task
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
int interval = 1000;
 
//超音波感應器PIN
int trigPIN=16;
int echoPIN=17;
//超音波感應器
int distance;
long duration;
  
void setup() {
  Serial.begin(115200);
  //定義ESP32輸入輸出
  pinMode(echoPIN, INPUT);
  pinMode(trigPIN, OUTPUT);
}
  
void loop() {
   currentMillis = millis();
      
   if ((unsigned long)(currentMillis - previousMillis) &gt;= interval) {
      digitalWrite(trigPIN, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPIN, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPIN, LOW);
      //醬是創客開始讓ESP32開始讀取脈衝訊號
      duration= pulseIn(echoPIN, HIGH);
      distance= duration/29/2;
      if (duration==0) {
        Serial.println(&quot;No pulse is from sensor&quot;);
      }
      else {
        Serial.print(&quot;Chosemaker's ultrasonic sensor is shown distance:&quot;);
        Serial.print(distance);
        Serial.println(&quot;cm&quot;);
      }

      // previousMillis存入最後執行的時間
      previousMillis = currentMillis;
      Serial.print(&quot;In Current time:&quot;);
      Serial.println(previousMillis);
   }
}
</pre>


<p>Arduino 序列埠監控視窗 輸出如下，我們在大約第4秒時手離超聲波模組距離約172cm，慢慢地靠近超聲波模組</p>


<pre class="brush: plain; title: ; notranslate">
Chosemaker's ultrasonic sensor is shown distance:172cm
In Current time:4000
Chosemaker's ultrasonic sensor is shown distance:29cm
In Current time:5000
Chosemaker's ultrasonic sensor is shown distance:9cm
In Current time:6000
Chosemaker's ultrasonic sensor is shown distance:3cm
In Current time:7000
Chosemaker's ultrasonic sensor is shown distance:2cm
In Current time:8000
Chosemaker's ultrasonic sensor is shown distance:1cm
In Current time:9000
</pre><p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-17%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2317%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E8%B6%85%E8%81%B2%E6%B3%A2%E6%A8%A1%E7%B5%84%E9%87%8F%E6%B8%AC%E7%89%A9%E5%93%81%E8%B7%9D%E9%9B%A2" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-17%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2317%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E8%B6%85%E8%81%B2%E6%B3%A2%E6%A8%A1%E7%B5%84%E9%87%8F%E6%B8%AC%E7%89%A9%E5%93%81%E8%B7%9D%E9%9B%A2" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-17%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2317%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E8%B6%85%E8%81%B2%E6%B3%A2%E6%A8%A1%E7%B5%84%E9%87%8F%E6%B8%AC%E7%89%A9%E5%93%81%E8%B7%9D%E9%9B%A2" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-17%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2317%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E8%B6%85%E8%81%B2%E6%B3%A2%E6%A8%A1%E7%B5%84%E9%87%8F%E6%B8%AC%E7%89%A9%E5%93%81%E8%B7%9D%E9%9B%A2" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-17%2F&#038;title=%5BESP32%E6%95%99%E5%AD%B8%2317%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E8%B6%85%E8%81%B2%E6%B3%A2%E6%A8%A1%E7%B5%84%E9%87%8F%E6%B8%AC%E7%89%A9%E5%93%81%E8%B7%9D%E9%9B%A2" data-a2a-url="https://www.chosemaker.com/board/esp32/lesson-17/" data-a2a-title="[ESP32教學#17] Arduino多工處理使用超聲波模組量測物品距離"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-17/">[ESP32教學#17] Arduino多工處理使用超聲波模組量測物品距離</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[ESP32教學#16] Arduino多工處理使用避障模組透過紅外線偵測物品是否存在</title>
		<link>https://www.chosemaker.com/board/esp32/lesson-16/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Wed, 06 Jul 2022 01:17:59 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=632</guid>

					<description><![CDATA[<p>醬是創客的ESP32教學主題第16篇，以NodeMCU-32S(使用Arduino語言)來實作教學， &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-16/">[ESP32教學#16] Arduino多工處理使用避障模組透過紅外線偵測物品是否存在</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的ESP32教學主題第16篇，以NodeMCU-32S(使用Arduino語言)來實作教學，本篇教學Arduino多工處理使用避障模組透過紅外線偵測物品是否存在，並透過DI接收</p>



<p>以下是我們今天的目標</p>



<ul><li>pinMode須設定為INPUT來啟動DI功能</li><li>多工處理DI訊號</li></ul>



<p>設備:<br>安信可原廠/副廠NodeMCU-32S #<a href="https://www.ruten.com.tw/item/show?22030930136256" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/ESP32-S-NodeMCU-32S-WiFi-%E8%97%8D%E8%8A%BDBLE-%E9%99%84Arduino%E6%95%99%E5%AD%B8-%E5%AE%89%E4%BF%A1%E5%8F%AF%E7%89%A9%E8%81%AF%E7%B6%B2IoT-Wi-Fi%E9%96%8B%E7%99%BC%E6%9D%BF-i.293276804.6546028316" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>醬是創客紅外線避障模組 #<a href="https://www.ruten.com.tw/item/show?22227650302247" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/-%E9%86%AC%E6%98%AF%E5%89%B5%E5%AE%A2-%E7%B4%85%E5%A4%96%E7%B7%9A%E9%81%BF%E9%9A%9C%E6%A8%A1%E7%B5%84-20CM%E5%81%B5%E6%B8%AC%E7%89%A9%E5%93%81-ESP32-Arduino-%E9%99%84%E6%95%99%E5%AD%B8-i.293276804.19220063703?sp_atk=b1e93193-3652-4c04-bf00-03f27f49b3fa&amp;xptdk=b1e93193-3652-4c04-bf00-03f27f49b3fa" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">蝦皮購物</a></p>



<p>接線方式:<br>NodeMCU-32S(GPIO15)–DO訊號–醬是創客紅外線避障模組(OUT訊號)<br>DC 5V(+)–醬是創客紅外線避障模組(VCC)<br>DC 0V(-)–醬是創客紅外線避障模組(GND)</p>



<p>Ai-Thinker安信可NodeMCU-32S的腳位圍(資料來源:安信可)</p>



<figure class="wp-block-image"><img loading="lazy" width="868" height="923" src="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png" alt="" class="wp-image-261" srcset="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png 868w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-282x300.png 282w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-768x817.png 768w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-329x350.png 329w" sizes="(max-width: 868px) 100vw, 868px" /></figure>



<p>紅外線專業知識與教學</p>



<p>當紅外線發送器送出時，如遇到物體，光經過物體的反射並使自身的接收器收到光<br>收到光時，低電位<br>無收到光時，高電位</p>



<p>Arduino 範例程式碼如下</p>


<pre class="brush: cpp; title: ; notranslate">
//醬是創客 開發實作的好夥伴
#include &quot;WiFi.h&quot;
 
//task
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
int interval = 1000;
boolean GPIO15state = false; 
 
//IR Pin
int inPin = 15;
  
void setup() {
  Serial.begin(115200);
  //IR
  pinMode(inPin, INPUT);
}
  
void loop() {
   currentMillis = millis();
      
   if ((unsigned long)(currentMillis - previousMillis) &gt;= interval) {
      GPIO15state = digitalRead(inPin); 
      if (GPIO15state == HIGH) {
        //高電位時
        Serial.println(&quot;Chosemaker's IR is OFF&quot;);
      }
      else {
        //低電位時
        Serial.println(&quot;Chosemaker's IR is ON&quot;);
      }
      // previousMillis存入最後執行的時間
      previousMillis = currentMillis;
      Serial.print(&quot;In Current time:&quot;);
      Serial.println(previousMillis);
   }
}
</pre>


<p>Arduino 序列埠監控視窗 輸出如下，我們在大約第6秒時放一個物品至醬是創客紅外線避障模組前面，此時紅外線就偵測到有東西並產生變化</p>


<pre class="brush: plain; title: ; notranslate">
Chosemaker's IR is OFF
In Current time:5000
Chosemaker's IR is ON
In Current time:6000
Chosemaker's IR is OFF
In Current time:7000
</pre><p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-16%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2316%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E9%81%BF%E9%9A%9C%E6%A8%A1%E7%B5%84%E9%80%8F%E9%81%8E%E7%B4%85%E5%A4%96%E7%B7%9A%E5%81%B5%E6%B8%AC%E7%89%A9%E5%93%81%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-16%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2316%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E9%81%BF%E9%9A%9C%E6%A8%A1%E7%B5%84%E9%80%8F%E9%81%8E%E7%B4%85%E5%A4%96%E7%B7%9A%E5%81%B5%E6%B8%AC%E7%89%A9%E5%93%81%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-16%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2316%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E9%81%BF%E9%9A%9C%E6%A8%A1%E7%B5%84%E9%80%8F%E9%81%8E%E7%B4%85%E5%A4%96%E7%B7%9A%E5%81%B5%E6%B8%AC%E7%89%A9%E5%93%81%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-16%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2316%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E9%81%BF%E9%9A%9C%E6%A8%A1%E7%B5%84%E9%80%8F%E9%81%8E%E7%B4%85%E5%A4%96%E7%B7%9A%E5%81%B5%E6%B8%AC%E7%89%A9%E5%93%81%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-16%2F&#038;title=%5BESP32%E6%95%99%E5%AD%B8%2316%5D%20Arduino%E5%A4%9A%E5%B7%A5%E8%99%95%E7%90%86%E4%BD%BF%E7%94%A8%E9%81%BF%E9%9A%9C%E6%A8%A1%E7%B5%84%E9%80%8F%E9%81%8E%E7%B4%85%E5%A4%96%E7%B7%9A%E5%81%B5%E6%B8%AC%E7%89%A9%E5%93%81%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8" data-a2a-url="https://www.chosemaker.com/board/esp32/lesson-16/" data-a2a-title="[ESP32教學#16] Arduino多工處理使用避障模組透過紅外線偵測物品是否存在"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-16/">[ESP32教學#16] Arduino多工處理使用避障模組透過紅外線偵測物品是否存在</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[樹莓派教學#6] Raspberry Pi樹莓派使用USB外接SSD硬碟盒做系統booting開機</title>
		<link>https://www.chosemaker.com/board/raspberry-pi/pi-lesson-6/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Thu, 07 Jan 2021 05:28:52 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[樹莓派]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=577</guid>

					<description><![CDATA[<p>醬是創客的樹莓派教學主題第6篇，以Raspberry Pi開發板來實作教學，本篇教學將著重Raspb &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/raspberry-pi/pi-lesson-6/">[樹莓派教學#6] Raspberry Pi樹莓派使用USB外接SSD硬碟盒做系統booting開機</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的樹莓派教學主題第6篇，以Raspberry Pi開發板來實作教學，本篇教學將著重Raspberry Pi使用USB外接SSD硬碟盒做系統booting開機，如此一來就可以無需再插入SD卡，不用擔心SD卡容易壞，可以拿來跑NAS或網頁與資料庫的服務</p>



<p>設備:<br>一張Micro SD卡(請先安裝好樹莓派image)<br>樹莓派4B #<a href="https://www.ruten.com.tw/item/show?22051318422459" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/%E6%A8%B9%E8%8E%93%E6%B4%BE4B-%E8%8B%B1%E5%9C%8B%E8%A3%BD%E5%8E%9F%E5%BB%A0%E9%96%8B%E7%99%BC%E6%9D%BF-4G-8G-Raspberry-Pi-4B-AI%E5%BD%B1%E5%83%8F%E8%BE%A8%E8%AD%98-%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92%E5%B0%88%E7%94%A8-Linux-i.293276804.5269190409" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>2.5吋USB3.0轉SATA硬碟外接盒(樹莓派用) #<a aria-label="undefined (opens in a new tab)" href="https://www.ruten.com.tw/item/show?22101569774947" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a aria-label="undefined (opens in a new tab)" href="https://shopee.tw/USB3.0-2.5%E5%90%8BSATA-SSD%E7%A1%AC%E7%A2%9F%E5%A4%96%E6%8E%A5%E7%9B%92-Windows-%E6%A8%B9%E8%8E%93%E6%B4%BE%E7%95%B6NAS-%E6%94%AF%E6%8F%B4UASP-ASM1153E%E5%8F%B0%E7%81%A3%E6%99%B6%E7%89%87-i.293276804.4773143787" target="_blank" rel="noreferrer noopener">蝦皮購物</a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="500" height="556" src="https://www.chosemaker.com/wp-content/uploads/2021/01/144004.jpg" alt="" class="wp-image-588" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/144004.jpg 500w, https://www.chosemaker.com/wp-content/uploads/2021/01/144004-270x300.jpg 270w, https://www.chosemaker.com/wp-content/uploads/2021/01/144004-315x350.jpg 315w, https://www.chosemaker.com/wp-content/uploads/2021/01/144004-360x400.jpg 360w" sizes="(max-width: 500px) 100vw, 500px" /></figure></div>



<p>1. 將一張Micro SD卡(已安裝好樹莓派image)插入樹莓派4B開機，並SSH它先做系統更新</p>


<pre class="brush: plain; title: ; notranslate">
sudo apt update
sudo apt full-upgrade
sudo rpi-update
</pre>


<p>2. 更新後再重新開機，再SSH一次，接著更新Bootloader</p>


<pre class="brush: plain; title: ; notranslate">
sudo rpi-eeprom-update -d -a
</pre>


<p>3. 更新後再重新開機，再SSH一次，接著開始設定USB開機，先進入SSH的raspi-config&gt;&gt;6 Advanced Options&gt;&gt;A6 Boot Order&gt;&gt;B1 USB BOOT設定啟用USB開機</p>


<pre class="brush: plain; title: ; notranslate">
sudo raspi-config
</pre>


<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="641" height="382" src="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-1.jpg" alt="" class="wp-image-580" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-1.jpg 641w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-1-300x179.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-1-508x303.jpg 508w" sizes="(max-width: 641px) 100vw, 641px" /></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="639" height="382" src="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-2.jpg" alt="" class="wp-image-581" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-2.jpg 639w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-2-300x179.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-2-508x304.jpg 508w" sizes="(max-width: 639px) 100vw, 639px" /></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="641" height="382" src="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-3.jpg" alt="" class="wp-image-582" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-3.jpg 641w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-3-300x179.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-3-508x303.jpg 508w" sizes="(max-width: 641px) 100vw, 641px" /></figure></div>



<p>4. 進入樹莓派的GUI，並接上樹莓派專用的USB3.0轉2.5吋SATA SSD硬碟外接盒，我們裡面放美光Crucial BX500 2.5 SSD 120GB的硬碟，接著我們要將目前的SD卡作業系統檔案Copy至USB3.0的硬碟外接盒，點左上角的樹莓圓圈&gt;&gt;Accessories&gt;&gt;SD Card Copier，Copy from device就選目前開機的SD卡，Copy to device就選樹莓派專用的USB3.0轉2.5吋SATA SSD硬碟外接盒，在點擊Start</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="794" height="500" src="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-4.jpg" alt="" class="wp-image-583" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-4.jpg 794w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-4-300x189.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-4-768x484.jpg 768w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-4-508x320.jpg 508w" sizes="(max-width: 794px) 100vw, 794px" /></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="441" height="236" src="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-5.jpg" alt="" class="wp-image-584" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-5.jpg 441w, https://www.chosemaker.com/wp-content/uploads/2021/01/rpi-6-5-300x161.jpg 300w" sizes="(max-width: 441px) 100vw, 441px" /></figure></div>



<p>5. 先關機並關閉樹莓派電源，移除SD卡，插上電後就可以改SSD開機了</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fraspberry-pi%2Fpi-lesson-6%2F&amp;linkname=%5B%E6%A8%B9%E8%8E%93%E6%B4%BE%E6%95%99%E5%AD%B8%236%5D%20Raspberry%20Pi%E6%A8%B9%E8%8E%93%E6%B4%BE%E4%BD%BF%E7%94%A8USB%E5%A4%96%E6%8E%A5SSD%E7%A1%AC%E7%A2%9F%E7%9B%92%E5%81%9A%E7%B3%BB%E7%B5%B1booting%E9%96%8B%E6%A9%9F" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fraspberry-pi%2Fpi-lesson-6%2F&amp;linkname=%5B%E6%A8%B9%E8%8E%93%E6%B4%BE%E6%95%99%E5%AD%B8%236%5D%20Raspberry%20Pi%E6%A8%B9%E8%8E%93%E6%B4%BE%E4%BD%BF%E7%94%A8USB%E5%A4%96%E6%8E%A5SSD%E7%A1%AC%E7%A2%9F%E7%9B%92%E5%81%9A%E7%B3%BB%E7%B5%B1booting%E9%96%8B%E6%A9%9F" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fraspberry-pi%2Fpi-lesson-6%2F&amp;linkname=%5B%E6%A8%B9%E8%8E%93%E6%B4%BE%E6%95%99%E5%AD%B8%236%5D%20Raspberry%20Pi%E6%A8%B9%E8%8E%93%E6%B4%BE%E4%BD%BF%E7%94%A8USB%E5%A4%96%E6%8E%A5SSD%E7%A1%AC%E7%A2%9F%E7%9B%92%E5%81%9A%E7%B3%BB%E7%B5%B1booting%E9%96%8B%E6%A9%9F" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fraspberry-pi%2Fpi-lesson-6%2F&amp;linkname=%5B%E6%A8%B9%E8%8E%93%E6%B4%BE%E6%95%99%E5%AD%B8%236%5D%20Raspberry%20Pi%E6%A8%B9%E8%8E%93%E6%B4%BE%E4%BD%BF%E7%94%A8USB%E5%A4%96%E6%8E%A5SSD%E7%A1%AC%E7%A2%9F%E7%9B%92%E5%81%9A%E7%B3%BB%E7%B5%B1booting%E9%96%8B%E6%A9%9F" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fraspberry-pi%2Fpi-lesson-6%2F&#038;title=%5B%E6%A8%B9%E8%8E%93%E6%B4%BE%E6%95%99%E5%AD%B8%236%5D%20Raspberry%20Pi%E6%A8%B9%E8%8E%93%E6%B4%BE%E4%BD%BF%E7%94%A8USB%E5%A4%96%E6%8E%A5SSD%E7%A1%AC%E7%A2%9F%E7%9B%92%E5%81%9A%E7%B3%BB%E7%B5%B1booting%E9%96%8B%E6%A9%9F" data-a2a-url="https://www.chosemaker.com/board/raspberry-pi/pi-lesson-6/" data-a2a-title="[樹莓派教學#6] Raspberry Pi樹莓派使用USB外接SSD硬碟盒做系統booting開機"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/raspberry-pi/pi-lesson-6/">[樹莓派教學#6] Raspberry Pi樹莓派使用USB外接SSD硬碟盒做系統booting開機</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[NanoPi R2S教學#3] NanoPi R2S DIY自製套房宿舍網路QoS頻寬管理路由器</title>
		<link>https://www.chosemaker.com/board/nano-pi-r2s/r2s-3/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Thu, 07 Jan 2021 02:48:45 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[NanoPi R2S]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=571</guid>

					<description><![CDATA[<p>醬是創客的NanoPi R2S教學主題第3篇，以NanoPi R2S來實作教學，本篇將著重於使用友善 &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/nano-pi-r2s/r2s-3/">[NanoPi R2S教學#3] NanoPi R2S DIY自製套房宿舍網路QoS頻寬管理路由器</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的NanoPi R2S教學主題第3篇，以NanoPi R2S來實作教學，本篇將著重於使用友善NanoPi R2S DIY自製套房宿舍網路QoS頻寬管理路由器。我們使用OpenWrt SQM QoS的功能達到此需求，只要簡單設定上下傳輸速度即可，以R2S的高CP值來說跑頻寬管理剛剛好，未開QoS可以跑滿中華電信500M/250M</p>



<p>如果還沒有安裝image至你的Micro SD卡，請先閱讀<a aria-label="undefined (opens in a new tab)" href="https://www.chosemaker.com/board/nano-pi-r2s/r2s-2/" target="_blank" rel="noreferrer noopener">[NanoPi R2S教學#2] 友善NanoPi R2S 安裝官方版本OpenWrt與客製Complie實作</a></p>



<p>設備:<br>NanoPi R2S&nbsp;#<a href="https://www.ruten.com.tw/item/show?22101569693419" target="_blank" rel="noreferrer noopener">露天拍賣</a>&nbsp;#<a href="https://shopee.tw/%E5%8F%8B%E5%96%84NanoPi-R2S-RK3328-OpenWrt-Linux%E9%96%8B%E7%99%BC%E6%9D%BF-%E8%87%AA%E8%A3%BDGiga%E8%B7%AF%E7%94%B1%E5%99%A8-VPN%E7%BF%BB%E7%89%86-%E9%87%91%E5%B1%AC%E5%A4%96%E6%AE%BC-i.293276804.6173358747" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>自備8G以上Class 10 Micro SD卡</p>



<p>注意: 我們會建議用戶登入192.168.2.1自行限制WebU只從LAN存取、限制SSH只從LAN存取、關閉IPv6功能，或透過SSH/WebUI進入輸入以下</p>



<p>1. WebU只從LAN存取，進入/etc/config/uhttpd 將0.0.0.0改成LAN IP</p>


<pre class="brush: plain; title: ; notranslate">
# HTTP listen addresses, multiple allowed
list listen_http	192.168.2.1:80
list listen_http	[fd00:ab:cd::1]:80
 
# HTTPS listen addresses, multiple allowed
list listen_https	192.168.2.1:443
list listen_https	[fd00:ab:cd::1]:443
</pre>


<p>2. 限制SSH只從LAN存取，進入 系統&gt;&gt;管理&gt;&gt;SSH存取&gt;&gt;介面 選擇lan的介面</p>



<p>3. 關閉IPv6功能</p>


<pre class="brush: plain; title: ; notranslate">
sed -i -e &quot;s/DISABLE_IPV6=0/DISABLE_IPV6=1/g&quot; /root/setup.sh
rm -f /etc/board.json /etc/config/system /etc/config/network /etc/config/wireless /etc/firstboot_*
reboot
</pre>


<p>我們使用PPPoE的WAN對中華電信撥接，接著進入 網路&gt;&gt;SQM QoS&gt;&gt;基礎設定打開SQM instance、選擇介面pppoe-wan，由於使用中華電信35M/6M，Download下載設為35000、Upload上傳設為6000</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="650" height="475" src="https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-1.jpg" alt="" class="wp-image-572" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-1.jpg 650w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-1-300x219.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-1-479x350.jpg 479w" sizes="(max-width: 650px) 100vw, 650px" /></figure></div>



<p>進入 網路&gt;&gt;SQM QoS&gt;&gt;Queue Discipline設定QoS類型，OpenWrt在2016年底時已經解決CAKE或fq_codel的bufferbloat，CAKE+Piece of CAKE/CAKE其實適合X86/X64系統下去使用，ARM因為CPU的因素要跑fq_codel會比較恰當，我們選擇fq_codel+simplest_tbf.qos，fq_codel是透過session hash下去分配進入queue，TBF是透過token來決定是否放行該封包，演算法部分請自行查詢，這些就足夠當頻寬管理器使用了</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="645" height="379" src="https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-2.jpg" alt="" class="wp-image-573" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-2.jpg 645w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-2-300x176.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-3-2-508x298.jpg 508w" sizes="(max-width: 645px) 100vw, 645px" /></figure></div>



<p>設定完以後即可直接使用!</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-3%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%233%5D%20NanoPi%20R2S%20DIY%E8%87%AA%E8%A3%BD%E5%A5%97%E6%88%BF%E5%AE%BF%E8%88%8D%E7%B6%B2%E8%B7%AFQoS%E9%A0%BB%E5%AF%AC%E7%AE%A1%E7%90%86%E8%B7%AF%E7%94%B1%E5%99%A8" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-3%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%233%5D%20NanoPi%20R2S%20DIY%E8%87%AA%E8%A3%BD%E5%A5%97%E6%88%BF%E5%AE%BF%E8%88%8D%E7%B6%B2%E8%B7%AFQoS%E9%A0%BB%E5%AF%AC%E7%AE%A1%E7%90%86%E8%B7%AF%E7%94%B1%E5%99%A8" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-3%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%233%5D%20NanoPi%20R2S%20DIY%E8%87%AA%E8%A3%BD%E5%A5%97%E6%88%BF%E5%AE%BF%E8%88%8D%E7%B6%B2%E8%B7%AFQoS%E9%A0%BB%E5%AF%AC%E7%AE%A1%E7%90%86%E8%B7%AF%E7%94%B1%E5%99%A8" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-3%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%233%5D%20NanoPi%20R2S%20DIY%E8%87%AA%E8%A3%BD%E5%A5%97%E6%88%BF%E5%AE%BF%E8%88%8D%E7%B6%B2%E8%B7%AFQoS%E9%A0%BB%E5%AF%AC%E7%AE%A1%E7%90%86%E8%B7%AF%E7%94%B1%E5%99%A8" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-3%2F&#038;title=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%233%5D%20NanoPi%20R2S%20DIY%E8%87%AA%E8%A3%BD%E5%A5%97%E6%88%BF%E5%AE%BF%E8%88%8D%E7%B6%B2%E8%B7%AFQoS%E9%A0%BB%E5%AF%AC%E7%AE%A1%E7%90%86%E8%B7%AF%E7%94%B1%E5%99%A8" data-a2a-url="https://www.chosemaker.com/board/nano-pi-r2s/r2s-3/" data-a2a-title="[NanoPi R2S教學#3] NanoPi R2S DIY自製套房宿舍網路QoS頻寬管理路由器"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/nano-pi-r2s/r2s-3/">[NanoPi R2S教學#3] NanoPi R2S DIY自製套房宿舍網路QoS頻寬管理路由器</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[NanoPi R2S教學#2] 友善NanoPi R2S 安裝官方版本OpenWrt與客製Complie實作</title>
		<link>https://www.chosemaker.com/board/nano-pi-r2s/r2s-2/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Tue, 05 Jan 2021 08:14:01 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[NanoPi R2S]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=563</guid>

					<description><![CDATA[<p>醬是創客的NanoPi R2S教學主題第二篇，以NanoPi R2S來實作教學，本篇將著重於安裝官方 &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/nano-pi-r2s/r2s-2/">[NanoPi R2S教學#2] 友善NanoPi R2S 安裝官方版本OpenWrt與客製Complie實作</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的NanoPi R2S教學主題第二篇，以NanoPi R2S來實作教學，本篇將著重於安裝官方版本OpenWrt(FriendlyWrt)至R2S與客製Complie實作，你可以自行build與make一個客製化Firmware。在安裝之前，請先準備一片8G以上Class 10 Micro SD卡</p>



<p>設備:<br>NanoPi R2S&nbsp;#<a href="https://www.ruten.com.tw/item/show?22101569693419" target="_blank" rel="noreferrer noopener">露天拍賣</a>&nbsp;#<a href="https://shopee.tw/%E5%8F%8B%E5%96%84NanoPi-R2S-RK3328-OpenWrt-Linux%E9%96%8B%E7%99%BC%E6%9D%BF-%E8%87%AA%E8%A3%BDGiga%E8%B7%AF%E7%94%B1%E5%99%A8-VPN%E7%BF%BB%E7%89%86-%E9%87%91%E5%B1%AC%E5%A4%96%E6%AE%BC-i.293276804.6173358747" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>自備8G以上Class 10 Micro SD卡</p>



<ol><li>至<a aria-label="undefined (opens in a new tab)" href="http://download.friendlyarm.com/nanopir2s" target="_blank" rel="noreferrer noopener">download.friendlyarm.com/nanopir2s</a><br>下載rk3328-sd-friendlywrt-5.4-YYYYMMDD.img.zip<br>解壓縮後取得rk3328-sd-friendlywrt.img檔案</li><li>使用Win32DiskImager燒入.img檔案到你的Micro SD卡</li><li>系統預設IP為192.168.2.1/24 帳號: root 密碼: 無</li></ol>



<figure class="wp-block-image size-large"><img loading="lazy" width="799" height="800" src="https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-2-1.jpg" alt="" class="wp-image-564" srcset="https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-2-1.jpg 799w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-2-1-300x300.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-2-1-150x150.jpg 150w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-2-1-768x769.jpg 768w, https://www.chosemaker.com/wp-content/uploads/2021/01/r2s-2-1-350x350.jpg 350w" sizes="(max-width: 799px) 100vw, 799px" /></figure>



<p>以上這些為簡易使用，對只要有基本OpenWrt路由器的用戶就竹夠了</p>



<p>==========以下為高深困難區，專業用戶限定==========</p>



<p>接著我們要進入如何下載官方的code來自己make build，建議專業玩家看</p>



<p>首先請你準備好Linux環境，並安裝好OpenWrt必要build的套件，你可以先自行測試make原生的OpenWrt，如果OK就可以繼續</p>



<p>首先先下載code</p>


<pre class="brush: bash; title: ; notranslate">
mkdir friendlywrt-rk3328
cd friendlywrt-rk3328
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v19.07.1 -m rk3328.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
repo sync -c  --no-clone-bundle
</pre>


<p>接著就可以make build了</p>


<pre class="brush: bash; title: ; notranslate">
./build.sh nanopi_r2.mk
</pre>


<p>如果需要更細部的調整</p>



<ul><li>輸入 &#8220;./scripts/feeds update -a&#8221; 更新 package並定義於 feeds.conf / feeds.conf.default</li><li>輸入 &#8220;./scripts/feeds install -a&#8221; 安裝packages至 package/feeds/</li><li>輸入 &#8220;make menuconfig&#8221; 選擇你要的toolchain, target system &amp; firmware packages.</li><li>輸入 &#8220;make&#8221; build你的firmware</li></ul>



<p>友善官方Friendlywrt Github<br><a aria-label="undefined (opens in a new tab)" href="https://github.com/friendlyarm/friendlywrt" target="_blank" rel="noreferrer noopener">https://github.com/friendlyarm/friendlywrt</a></p>



<p>更多的友善官方NanoPi R2S詳細說明書與教學<br><a href="http://wiki.friendlyarm.com/wiki/index.php/NanoPi_R2S" target="_blank" rel="noreferrer noopener">http://wiki.friendlyarm.com/wiki/index.php/NanoPi_R2S</a></p>



<p></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-2%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%232%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E5%AE%89%E8%A3%9D%E5%AE%98%E6%96%B9%E7%89%88%E6%9C%ACOpenWrt%E8%88%87%E5%AE%A2%E8%A3%BDComplie%E5%AF%A6%E4%BD%9C" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-2%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%232%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E5%AE%89%E8%A3%9D%E5%AE%98%E6%96%B9%E7%89%88%E6%9C%ACOpenWrt%E8%88%87%E5%AE%A2%E8%A3%BDComplie%E5%AF%A6%E4%BD%9C" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-2%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%232%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E5%AE%89%E8%A3%9D%E5%AE%98%E6%96%B9%E7%89%88%E6%9C%ACOpenWrt%E8%88%87%E5%AE%A2%E8%A3%BDComplie%E5%AF%A6%E4%BD%9C" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-2%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%232%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E5%AE%89%E8%A3%9D%E5%AE%98%E6%96%B9%E7%89%88%E6%9C%ACOpenWrt%E8%88%87%E5%AE%A2%E8%A3%BDComplie%E5%AF%A6%E4%BD%9C" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-2%2F&#038;title=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%232%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E5%AE%89%E8%A3%9D%E5%AE%98%E6%96%B9%E7%89%88%E6%9C%ACOpenWrt%E8%88%87%E5%AE%A2%E8%A3%BDComplie%E5%AF%A6%E4%BD%9C" data-a2a-url="https://www.chosemaker.com/board/nano-pi-r2s/r2s-2/" data-a2a-title="[NanoPi R2S教學#2] 友善NanoPi R2S 安裝官方版本OpenWrt與客製Complie實作"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/nano-pi-r2s/r2s-2/">[NanoPi R2S教學#2] 友善NanoPi R2S 安裝官方版本OpenWrt與客製Complie實作</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[NanoPi R2S教學#1] 友善NanoPi R2S 開發板硬體介紹</title>
		<link>https://www.chosemaker.com/board/nano-pi-r2s/r2s-1/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Wed, 23 Dec 2020 07:47:41 +0000</pubDate>
				<category><![CDATA[NanoPi R2S]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=542</guid>

					<description><![CDATA[<p>醬是創客的NanoPi R2S教學主題第一篇，以NanoPi R2S來實作教學，本篇將著重於友善Fr &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/nano-pi-r2s/r2s-1/">[NanoPi R2S教學#1] 友善NanoPi R2S 開發板硬體介紹</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的NanoPi R2S教學主題第一篇，以NanoPi R2S來實作教學，本篇將著重於友善FriendlyARM NanoPi R2S開發板硬體介紹。友善是使用RK3328開發板，可以使用Ubuntu-Core、OpenWrt(FriendlyWrt)，大多數人都把R2S拿來OpenWrt路由器，因為1G的RAM和RK3328就足夠SOHO使用</p>



<p>R2S的WAN使用RK3328的Ethernet搭配RTL8211E、LAN使用RK3328的USB3.0搭配RTL8153B，整體效能都可以達到940Mbps。記憶體有1G DRR4對OpenWrt來說是非常足夠。AES硬體加速的部份大概是樹莓派4B的10倍左右。這台的缺點就是金屬機殼會比較燙，因為RK3328是28奈米製程再加上Rockchip本來就比較燙，OS基本上都在github可以看到，都是開源的，OpenWrt的Hardware也有將NanoPi R2S放入support清單，有些人會用Ubuntu-Core搭配docker跑些服務，也有些人只專攻OpenWrt，要深度玩它前提都是要對Linux有一定知識或喜歡try and error的人</p>



<p class="has-text-align-left">設備:<br>NanoPi R2S&nbsp;#<a href="https://www.ruten.com.tw/item/show?22101569693419" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">露天拍賣</a>&nbsp;#<a href="https://shopee.tw/%E5%8F%8B%E5%96%84NanoPi-R2S-RK3328-OpenWrt-Linux%E9%96%8B%E7%99%BC%E6%9D%BF-%E8%87%AA%E8%A3%BDGiga%E8%B7%AF%E7%94%B1%E5%99%A8-VPN%E7%BF%BB%E7%89%86-%E9%87%91%E5%B1%AC%E5%A4%96%E6%AE%BC-i.293276804.6173358747" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">蝦皮購物</a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="500" height="500" src="https://www.chosemaker.com/wp-content/uploads/2020/12/r2s-1-1.jpg" alt="" class="wp-image-544" srcset="https://www.chosemaker.com/wp-content/uploads/2020/12/r2s-1-1.jpg 500w, https://www.chosemaker.com/wp-content/uploads/2020/12/r2s-1-1-300x300.jpg 300w, https://www.chosemaker.com/wp-content/uploads/2020/12/r2s-1-1-150x150.jpg 150w, https://www.chosemaker.com/wp-content/uploads/2020/12/r2s-1-1-350x350.jpg 350w" sizes="(max-width: 500px) 100vw, 500px" /></figure></div>



<p>效能測試:<br>NAT(DHCP/Static IP): 940M(CPU使用率35%)<br>NAT(PPPoE): 750M(CPU使用率60%)<br>QoS(使用OpenWrt SQM的piece of cake): 465M(WAN-to-LAN)/750M(LAN-to-WAN)<br>不開QoS適用中華電信速率: 500M/250M以下<br>開QoS適用中華電信速率: 300M/100M以下</p>



<p>溫度與電源:<br>NanoPi R2S金屬外殼的CPU溫度會落在70度左右，金屬外殼大約是5X度，且需要品質穩定5V2A的Type-C電源。</p>



<p>產品規格<br>CPU: Rockchip RK3328(4 x Cortex-A53 Up to 1.3GHz)<br>RAM: 1GB DDR4<br>MicroSD開機槽: 需自行放入MicroSD(最大支援128G)<br>WAN: 10/100/1000Mbps RJ45(RTL8211E)<br>LAN: 10/100/1000Mbps RJ45(RK3328 USB3.0介面轉RTL8153B)<br>USB: 1 x USB 2.0<br>Serial Debug Port: 1 x 2.54mm pitch 3pin-header(3.3V TTL)<br>LED: SYS LED(Red)、WAN LED(Green) 、LAN LED(Green) x1<br>按鈕: 1 x User button<br>電源輸入: 5V2A USB-C<br>消耗功率: 10W(max)<br>尺寸: 60 x 62 x 28mm<br>工作溫度: 0~80度C</p>



<p>NanoPi R2S原廠相關資源:</p>



<p>友善NanoPi R2S詳細說明書與教學<br><a href="http://wiki.friendlyarm.com/wiki/index.php/NanoPi_R2S" target="_blank" rel="noreferrer noopener">http://wiki.friendlyarm.com/wiki/index.php/NanoPi_R2S</a></p>



<p>系统韌體和系統相關下載<br><a href="http://download.friendlyarm.com/nanopir2s" target="_blank" rel="noreferrer noopener">http://download.friendlyarm.com/nanopir2s</a></p>



<p>原理圖<br><a href="http://wiki.friendlyarm.com/wiki/images/5/59/SCH_NanoPi_R2S_V1.0-1912.pdf" target="_blank" rel="noreferrer noopener">http://wiki.friendlyarm.com/wiki/images/5/59/SCH_NanoPi_R2S_V1.0-1912.pdf</a></p>



<p>PCB尺寸圖<br><a href="http://wiki.friendlyarm.com/wiki/index.php/File:Dimension_NanoPi_R2S_V1.0-1912_PCB.rar" target="_blank" rel="noreferrer noopener">http://wiki.friendlyarm.com/wiki/index.php/File:Dimension_NanoPi_R2S_V1.0-1912_PCB.rar</a></p>



<p>RKA3328晶片手冊<br><a href="http://wiki.friendlyarm.com/wiki/images/d/d7/Rockchip_RK3328_Datasheet_V1.1-20170309.pdf" target="_blank" rel="noreferrer noopener">http://wiki.friendlyarm.com/wiki/images/d/d7/Rockchip_RK3328_Datasheet_V1.1-20170309.pdf</a></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-1%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%231%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E9%96%8B%E7%99%BC%E6%9D%BF%E7%A1%AC%E9%AB%94%E4%BB%8B%E7%B4%B9" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-1%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%231%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E9%96%8B%E7%99%BC%E6%9D%BF%E7%A1%AC%E9%AB%94%E4%BB%8B%E7%B4%B9" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-1%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%231%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E9%96%8B%E7%99%BC%E6%9D%BF%E7%A1%AC%E9%AB%94%E4%BB%8B%E7%B4%B9" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-1%2F&amp;linkname=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%231%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E9%96%8B%E7%99%BC%E6%9D%BF%E7%A1%AC%E9%AB%94%E4%BB%8B%E7%B4%B9" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fnano-pi-r2s%2Fr2s-1%2F&#038;title=%5BNanoPi%20R2S%E6%95%99%E5%AD%B8%231%5D%20%E5%8F%8B%E5%96%84NanoPi%20R2S%20%E9%96%8B%E7%99%BC%E6%9D%BF%E7%A1%AC%E9%AB%94%E4%BB%8B%E7%B4%B9" data-a2a-url="https://www.chosemaker.com/board/nano-pi-r2s/r2s-1/" data-a2a-title="[NanoPi R2S教學#1] 友善NanoPi R2S 開發板硬體介紹"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/nano-pi-r2s/r2s-1/">[NanoPi R2S教學#1] 友善NanoPi R2S 開發板硬體介紹</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[ESP32教學#15] Arduino使用DO連動控制繼電器開啟、關閉110V LED電燈</title>
		<link>https://www.chosemaker.com/board/esp32/lesson-15/</link>
		
		<dc:creator><![CDATA[pyclifecom]]></dc:creator>
		<pubDate>Thu, 22 Oct 2020 06:38:15 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[程式語言分類]]></category>
		<category><![CDATA[開發板分類]]></category>
		<guid isPermaLink="false">https://www.chosemaker.com/?p=491</guid>

					<description><![CDATA[<p>醬是創客的ESP32教學主題第15篇，以Ai-Thinker安信可NodeMCU-32S(使用Ard &#8230;</p>
<p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-15/">[ESP32教學#15] Arduino使用DO連動控制繼電器開啟、關閉110V LED電燈</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>醬是創客的ESP32教學主題第15篇，以Ai-Thinker安信可NodeMCU-32S(使用Arduino語言)來實作教學，本篇教學Arduino使用DO連動控制訊號線，並透過繼電器開啟、關閉110V LED電燈實作</p>



<p>以下是我們今天的目標</p>



<ul><li>pinMode須設定為OUTPUT來啟動DO功能</li><li>digitalWrite(lampPin, LOW); 代表將lampPin設為低電位</li><li>digitalWrite(lampPin, HIGH); 代表將lampPin設為高電位</li></ul>



<p>設備:<br>安信可NodeMCU-32S #<a href="https://www.ruten.com.tw/item/show?22030930136256" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/ESP32-S-NodeMCU-32S-WiFi-%E8%97%8D%E8%8A%BDBLE-%E9%99%84Arduino%E6%95%99%E5%AD%B8-%E5%AE%89%E4%BF%A1%E5%8F%AF%E7%89%A9%E8%81%AF%E7%B6%B2IoT-Wi-Fi%E9%96%8B%E7%99%BC%E6%9D%BF-i.293276804.6546028316" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>DC5V控制AC110V繼電器 #<a href="https://www.ruten.com.tw/item/show?22042646619226" target="_blank" rel="noreferrer noopener">露天拍賣</a> #<a href="https://shopee.tw/DC-5V%E7%B9%BC%E9%9B%BB%E5%99%A8%E6%8E%A7%E5%88%B6AC110V-220V-%E5%8F%AF%E8%87%AA%E9%81%B8%E9%AB%98%E4%BD%8E%E9%9B%BB%E4%BD%8D%E8%A7%B8%E7%99%BC-%E6%9C%89%E9%9B%BB%E6%BA%90-%E8%A8%8A%E8%99%9F%E7%87%88%E8%99%9F-ESP32-Arduino%E7%94%A8-i.293276804.5356886103" target="_blank" rel="noreferrer noopener">蝦皮購物</a><br>110V LED燈</p>



<p>接線方式:<br>NodeMCU-32S(GPIO22)–DO訊號–DC5V控制AC110V繼電器(IN訊號)<br>DC 5V(+)–DC5V控制AC110V繼電器(DC+)<br>DC 0V(-)–DC5V控制AC110V繼電器(DC-)<br>DC5V控制AC110V繼電器(COM)-2.0白扁線-110V市電火線<br>DC5V控制AC110V繼電器(NO)-2.0白扁線-110V LED電燈-110V市電水線<br>DC5V控制AC110V繼電器(H)使用高電位觸發</p>



<p>Ai-Thinker安信可NodeMCU-32S的腳位圍(資料來源:安信可)</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" width="868" height="923" src="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png" alt="" class="wp-image-261" srcset="https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin.png 868w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-282x300.png 282w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-768x817.png 768w, https://www.chosemaker.com/wp-content/uploads/2020/07/nodemcu_32s_pin-329x350.png 329w" sizes="(max-width: 868px) 100vw, 868px" /></figure></div>



<p>繼電器專業知識與教學</p>



<p>繼電器線圈無電壓時，NC與COM導通<br>繼電器線圈有電壓時，NO與COM導通<br>COM部分都會接火線或DC的正極<br>NO與NC部分都會接水線或DC的負極</p>



<p>EX: 使用高電位觸發，當訊號線0V時不觸發: NC與COM導通，NO與COM不導通<br>EX: 使用高電位觸發，當訊號線高電位時觸發: NC與COM不導通，NO與COM導通</p>



<p>Arduino 範例程式碼如下</p>


<pre class="brush: arduino; title: ; notranslate">
//醬是創客 開發實作的好夥伴
#include &lt;WiFi.h&gt;

//Output Pin
const int lampPin = 22;

void setup()
{
  Serial.begin(115200);
  //Pin22設定為DO
  pinMode(lampPin, OUTPUT);
  //預設關燈
  digitalWrite(lampPin, LOW); 
}
   
void loop()
{
  //開燈
  delay(10000);
  digitalWrite(lampPin, HIGH);  
  //關燈
  delay(10000);
  digitalWrite(lampPin, LOW);  
}
</pre>


<p>實際行為: 每10秒鐘打開/關閉LED電燈</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-15%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2315%5D%20Arduino%E4%BD%BF%E7%94%A8DO%E9%80%A3%E5%8B%95%E6%8E%A7%E5%88%B6%E7%B9%BC%E9%9B%BB%E5%99%A8%E9%96%8B%E5%95%9F%E3%80%81%E9%97%9C%E9%96%89110V%20LED%E9%9B%BB%E7%87%88" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook_messenger" href="https://www.addtoany.com/add_to/facebook_messenger?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-15%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2315%5D%20Arduino%E4%BD%BF%E7%94%A8DO%E9%80%A3%E5%8B%95%E6%8E%A7%E5%88%B6%E7%B9%BC%E9%9B%BB%E5%99%A8%E9%96%8B%E5%95%9F%E3%80%81%E9%97%9C%E9%96%89110V%20LED%E9%9B%BB%E7%87%88" title="Facebook Messenger" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-15%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2315%5D%20Arduino%E4%BD%BF%E7%94%A8DO%E9%80%A3%E5%8B%95%E6%8E%A7%E5%88%B6%E7%B9%BC%E9%9B%BB%E5%99%A8%E9%96%8B%E5%95%9F%E3%80%81%E9%97%9C%E9%96%89110V%20LED%E9%9B%BB%E7%87%88" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-15%2F&amp;linkname=%5BESP32%E6%95%99%E5%AD%B8%2315%5D%20Arduino%E4%BD%BF%E7%94%A8DO%E9%80%A3%E5%8B%95%E6%8E%A7%E5%88%B6%E7%B9%BC%E9%9B%BB%E5%99%A8%E9%96%8B%E5%95%9F%E3%80%81%E9%97%9C%E9%96%89110V%20LED%E9%9B%BB%E7%87%88" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.chosemaker.com%2Fboard%2Fesp32%2Flesson-15%2F&#038;title=%5BESP32%E6%95%99%E5%AD%B8%2315%5D%20Arduino%E4%BD%BF%E7%94%A8DO%E9%80%A3%E5%8B%95%E6%8E%A7%E5%88%B6%E7%B9%BC%E9%9B%BB%E5%99%A8%E9%96%8B%E5%95%9F%E3%80%81%E9%97%9C%E9%96%89110V%20LED%E9%9B%BB%E7%87%88" data-a2a-url="https://www.chosemaker.com/board/esp32/lesson-15/" data-a2a-title="[ESP32教學#15] Arduino使用DO連動控制繼電器開啟、關閉110V LED電燈"></a></p><p>這篇文章 <a rel="nofollow" href="https://www.chosemaker.com/board/esp32/lesson-15/">[ESP32教學#15] Arduino使用DO連動控制繼電器開啟、關閉110V LED電燈</a> 最早出現於 <a rel="nofollow" href="https://www.chosemaker.com">醬是創客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
