<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>nxpop</title>
    <link>https://nxpop.tistory.com/</link>
    <description>이것저것 인기상품, 아이디어상품, 기프트추천, 재미있는선물</description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 17:35:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>SmartPop</managingEditor>
    <image>
      <title>nxpop</title>
      <url>https://tistory1.daumcdn.net/tistory/3233783/attach/909e26ef1f37484fb199bbbbe385c478</url>
      <link>https://nxpop.tistory.com</link>
    </image>
    <item>
      <title>서브루나 200W 미니벨로 접이식 자전거 20인치</title>
      <link>https://nxpop.tistory.com/32</link>
      <description>&lt;div style=&quot;text-align: center; width: 100%;&quot;&gt;&lt;img src=&quot;https://thumbnail10.coupangcdn.com/thumbnails/remote/492x492ex/image/vendor_inventory/ff52/41ec361b5f4523f8b972fd6ee4e962c30e14b17d0826603f3177e1f90a52.jpg&quot; alt=&quot;서브루나 미니벨로 접이식 자전거 경량 가벼운 폴딩 20인치 시마노 7단 반조립&quot; width=&quot;512&quot; height=&quot;512&quot; /&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;서브루나 200W 미니벨로 접이식 자전거 20인치 반조립 알루미늄 프레임 시마노 7단&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;274,000원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#미니벨로 #서브루나 #접이식 자전거 #200W&lt;/p&gt;
&lt;div class=&quot;myDiv&quot; style=&quot;background-color: #e40e4e;&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;서브루나 200W 미니벨로 접이식 자전거 20인치 반조립 알루미늄 프레임 시마노 7단&quot; href=&quot;https://link.coupang.com/a/bMJK0i&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;text-align: center; width: 100%;&quot;&gt;&lt;img src=&quot;https://thumbnail8.coupangcdn.com/thumbnails/remote/492x492ex/image/vendor_inventory/9a4c/6c52b434d259abeb62d308d9211d5d14582ec4196cbde2c35a46c1288625.jpg&quot; alt=&quot;키후 폰드 미니벨로 자전거 40.64cm 경량미니벨로 접이식자전거 7단&quot; width=&quot;512&quot; height=&quot;512&quot; /&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;키후 폰드 미니벨로 자전거 16인치(40.64cm) 바퀴 경량 접이식자전거 7단 변속기 완조립&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;340,200원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#미니벨로 #키후 #폰드 #접이식 자전거 #16인치&lt;/p&gt;
&lt;div class=&quot;myDiv&quot; style=&quot;background-color: #e40e4e;&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;키후 폰드 미니벨로 자전거 40.64cm 경량미니벨로 접이식자전거&quot; href=&quot;https://link.coupang.com/a/bMJ3en&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;text-align: center; width: 100%;&quot;&gt;&lt;img src=&quot;https://thumbnail10.coupangcdn.com/thumbnails/remote/492x492ex/image/retail/images/2023/06/21/14/8/fd0312bd-add7-43f7-9047-40fdaf3f03f0.jpg&quot; alt=&quot;닥터바이크 미니벨로 스틸프레임 기어 6단 자전거 F-16&quot; width=&quot;512&quot; height=&quot;512&quot; /&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;닥터바이크 미니벨로 F-16 접이식 자전거 16인치 바퀴 6단 변속기&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;175,000원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#미니벨로 #닥터바이크 #접이식 자전거 #F-16 #16인치 #빠른배송&lt;/p&gt;
&lt;div class=&quot;myDiv&quot; style=&quot;background-color: #e40e4e;&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;닥터바이크 미니벨로 F-16 접이식 자전거 16인치 바퀴 6단 변속기&quot; href=&quot;https://link.coupang.com/a/bMJ9CH&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;파트너스&amp;nbsp;활동의&amp;nbsp;일환으로,&amp;nbsp;이에&amp;nbsp;따른&amp;nbsp;일정액의&amp;nbsp;수수료를&amp;nbsp;제공받을&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>아이디어상품</category>
      <author>SmartPop</author>
      <guid isPermaLink="true">https://nxpop.tistory.com/32</guid>
      <comments>https://nxpop.tistory.com/32#entry32comment</comments>
      <pubDate>Wed, 7 Aug 2024 01:50:19 +0900</pubDate>
    </item>
    <item>
      <title>젤 시트 쿠션, 통기성 벌집 디자인 압력 완화 쿠션</title>
      <link>https://nxpop.tistory.com/29</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;젤 시트 쿠션.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5ijrF/btsIUA6dINN/Kb2Pe4aUZXJmGpjYPNdkzK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5ijrF/btsIUA6dINN/Kb2Pe4aUZXJmGpjYPNdkzK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5ijrF/btsIUA6dINN/Kb2Pe4aUZXJmGpjYPNdkzK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5ijrF%2FbtsIUA6dINN%2FKb2Pe4aUZXJmGpjYPNdkzK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;800&quot; data-filename=&quot;젤 시트 쿠션.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;젤&amp;nbsp;시트&amp;nbsp;쿠션,&amp;nbsp;통기성&amp;nbsp;벌집&amp;nbsp;디자인&amp;nbsp;압력&amp;nbsp;완화&amp;nbsp;쿠션&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;7,068원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#젤 시트 쿠션 #벌집 디자인 쿠션&lt;/p&gt;
&lt;div class=&quot;myDiv&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;젤 시트 쿠션, 통기성 벌집 디자인, 압력 완화, 등 꼬리뼈 통증&quot; href=&quot;https://s.click.aliexpress.com/e/_DlyLo2B&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Aula F99 게임용 기계식 키보드.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eHO57Q/btsIVIicl4l/sMyBE0tlMdc8RiBrZaUTf1/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eHO57Q/btsIVIicl4l/sMyBE0tlMdc8RiBrZaUTf1/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eHO57Q/btsIVIicl4l/sMyBE0tlMdc8RiBrZaUTf1/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeHO57Q%2FbtsIVIicl4l%2FsMyBE0tlMdc8RiBrZaUTf1%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;800&quot; data-filename=&quot;Aula F99 게임용 기계식 키보드.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;Aula F99 게임용 기계식 키보드, 3 가지 모드, 무선 블루투스, 유선 핫 스왑, PBT 개스킷, PC 노트북 게이머용 RGB 99 키, 2.4g&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;57,410원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#기계식 키보드 #무선 블루투스 #99 키 #유선 핫 스왑&lt;/p&gt;
&lt;div class=&quot;myDiv&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;Aula F99 게임용 기계식 키보드, 3 가지 모드, 무선 블루투스, 유선 핫 스왑, PBT 개스킷, PC 노트북 게이머용 RGB 99 키, 2.4g&quot; href=&quot;https://s.click.aliexpress.com/e/_msBAQrO&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;LENCENT EU 플러그 멀티탭.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqp0x8/btsIVGSlCte/qGwSyQJBms7KIpVVyOJ2xK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqp0x8/btsIVGSlCte/qGwSyQJBms7KIpVVyOJ2xK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqp0x8/btsIVGSlCte/qGwSyQJBms7KIpVVyOJ2xK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqp0x8%2FbtsIVGSlCte%2FqGwSyQJBms7KIpVVyOJ2xK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;800&quot; data-filename=&quot;LENCENT EU 플러그 멀티탭.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;LENCENT EU 플러그 멀티탭, AC 콘센트 4 개, USB 포트 3 개, 1 타입 C, 2M, 3M 편조 케이블, 가정용 스위치 포함 멀티 소켓&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;15,246원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#멀티탭 #콘센트 4 개 #USB 포트 3 개&lt;/p&gt;
&lt;div class=&quot;myDiv&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;LENCENT EU 플러그 멀티탭, AC 콘센트 4 개, USB 포트 3 개, 1 타입 C, 2M, 3M 편조 케이블, 가정용 스위치 포함 멀티 소켓&quot; href=&quot;https://s.click.aliexpress.com/e/_Ez5U8JR&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;고속 충전 USB C 타입 충전기.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOXEX/btsIUSS8IRz/DyxwMWecInIgTvoyof32i0/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOXEX/btsIUSS8IRz/DyxwMWecInIgTvoyof32i0/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOXEX/btsIUSS8IRz/DyxwMWecInIgTvoyof32i0/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkOXEX%2FbtsIUSS8IRz%2FDyxwMWecInIgTvoyof32i0%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;1000&quot; data-filename=&quot;고속 충전 USB C 타입 충전기.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;Toocki 데스크탑 고속 충전 USB C 타입 충전기, 아이폰 샤오미 스마트폰 노트북용 LED 디스플레이 충전기, 140W GaN, 5 in 1&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;42,727원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#고속 충전 #140W #5 in 1&lt;/p&gt;
&lt;div class=&quot;myDiv&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;Toocki 데스크탑 고속 충전 USB C 타입 충전기, 아이폰 샤오미 스마트폰 노트북용 LED 디스플레이 충전기, 140W GaN, 5 in 1&quot; href=&quot;https://s.click.aliexpress.com/e/_EGYWE6l&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4WD RC 자동차.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chUYRn/btsIWDHez7v/wvo97gCYlKAFKrqkpdHVaK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chUYRn/btsIWDHez7v/wvo97gCYlKAFKrqkpdHVaK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chUYRn/btsIWDHez7v/wvo97gCYlKAFKrqkpdHVaK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchUYRn%2FbtsIWDHez7v%2Fwvo97gCYlKAFKrqkpdHVaK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;800&quot; data-filename=&quot;4WD RC 자동차.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;1:12 / 1:16 4WD RC 자동차, LED 조명 포함, 2.4G 라디오 리모컨, 버기 카&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;23,980원&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;#RC 자동차 #4WD&lt;/p&gt;
&lt;div class=&quot;myDiv&quot;&gt;&lt;a style=&quot;text-decoration-line: none; color: white; font-weight: bold;&quot; title=&quot;1:12 / 1:16 4WD RC 자동차, LED 조명 포함, 2.4G 라디오 리모컨, 버기 카&quot; href=&quot;https://s.click.aliexpress.com/e/_EGgo9Df&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;상품 자세히보기&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>아이디어상품</category>
      <category>RC 자동차</category>
      <category>usb 고속 충전기</category>
      <category>기계식 키보드</category>
      <category>멀티탭</category>
      <category>젤 쿠션</category>
      <author>SmartPop</author>
      <guid isPermaLink="true">https://nxpop.tistory.com/29</guid>
      <comments>https://nxpop.tistory.com/29#entry29comment</comments>
      <pubDate>Tue, 6 Aug 2024 21:34:52 +0900</pubDate>
    </item>
    <item>
      <title>DFcontroller - DFPlayer mini 원격제어 안드로이드 앱 버전 2.2</title>
      <link>https://nxpop.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DFplayer 원격제어 앱 v 2.2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 버전업에 따라 안드로이드 특정버전에서만 와이이파이 및 블루투스 연결이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;*** 와이파이 연결은 안드로이드8 [갤럭시S7]이하 버전에서만 작동합니다 ***&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;*** 블루투스 연결은 안드로이드10 이하 버전에서만 작동합니다 ***&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.appybuilder.dfcontroller.DFcontroller&quot;&gt;https://play.google.com/store/apps/details?id=com.appybuilder.dfcontroller.DFcontroller&lt;/a&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Arduino Bluetooth controller PWM 앱을 기반으로 프로그램되어 Arduino Bluetooth controller PWM기능을 똑같이 사용할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Arduino Bluetooth controller PWM 기능 살펴보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postman.tistory.com/13&quot;&gt;https://postman.tistory.com/13&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블루투스 2.0 또는 BLE 모듈을 이용하여 직접 dfplayer를 제어하거나 아두이노 또는 ESP8266 개발보드, ESP32 개발보드의 블루투스 또는 와이파이 연결을 통해 dfplayer를 제어할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. SD카드에 사운드 파일 저장 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFplayer 모듈 메뉴얼상 저장방법중 99개까지의 폴더를 사용하고 각 폴더당 255개까지의 사운드 파일을 저장하는 방식을 사용합니다. ADVERT폴더의 사용 유무에 따라 아래 저장 방식을 사용하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A. 저장방식 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더명: 01 ~ 99까지 각 폴더별 파일갯수 1 ~ 255&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일명: 숫자 3자리 001 ~ 255 반드시 포함하는 파일명으로, 최대 파일갯수 255개 까지 각 폴더에 저장된 파일 인식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 폴더&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/&amp;nbsp; &amp;nbsp; &amp;nbsp;001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 02&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/&amp;nbsp; &amp;nbsp; &amp;nbsp;001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B. 저장방식 2 (저장방식 1에 추가로 ADVERT 폴더 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더명: 01 ~ 99까지 각 폴더별 파일갯수 1 ~ 255&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일명: 숫자 3자리 001 ~ 255 반드시 포함하는 파일명으로, 최대 파일갯수 255개 까지 각 폴더에 저장된 파일 인식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ADVERT 폴더: mp3 또는 wave파일의 이름은 4자리 이하 숫자로만 저장되어야만 한다. 1 ~ 3000&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 폴더&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /&amp;nbsp; &amp;nbsp; 001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 02&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /&amp;nbsp; &amp;nbsp; 001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ADVERT&amp;nbsp; /&amp;nbsp; &amp;nbsp; 0001.mp3/wav, 0002.mp3/wav, 0003 시크릿a.mp3/wav, .......3000.mp3/wav.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 블루투스 연결 옵션에서 ADVERT 체크항목에 체크를 하고 연결해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 기능&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1. 메인화면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;811&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99D2C83D5D6837D719?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99D2C83D5D6837D719?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D2C83D5D6837D719&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D2C83D5D6837D719&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;562&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;811&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-2. 통신연결 / 옵션 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99CEE2385D68383508?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99CEE2385D68383508?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CEE2385D68383508&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CEE2385D68383508&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;530&quot; height=&quot;570&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;807&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;체크박스 옵션&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 901px;&quot; border=&quot;0&quot; width=&quot;901&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 141px; height: 48px; border: 1px solid #ffffff;&quot;&gt;&lt;span&gt;- Used saved Data:&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 759px; height: 48px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-top: 1px solid #ffffff;&quot;&gt;&lt;span&gt;DFplayer로 부터 수신한 트랙 정보가 있을 경우 저장된 데이터를 이용하여 DFplayer를 제어합니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;통신모듈 연결시 자동으로 실행되는 트랙 정보 질의 및 수신 과정을 생략합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 141px; height: 54px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff;&quot;&gt;&lt;span&gt;- ADVERT:&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 759px; height: 54px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;SD카드에 ADVERT폴더가 있을경우 반드시 체크가 되어 있어야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;ADVERT 체크 변경시 초기화를 시작합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 141px; height: 118px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff;&quot;&gt;&lt;span&gt;-&amp;nbsp;Custom Shuffle:&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 759px; height: 118px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;DFplayer의 랜덤 재생 기능을 사용하지 않고 안드로이드 프로그램에서 셔플 재생을 실행하는&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;옵션입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;옵션이 체크되어 있을 경우 전체 트랙 반복시 ADVERT폴더의 트랙은 재생되지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;또한, 폴더 1회 재생기능이 활성화됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 141px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff;&quot;&gt;&lt;span&gt;- No Use&amp;nbsp;Arduino:&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 759px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;아두이노 제어를 위한 프로그램(버튼/PWM제어)을&amp;nbsp;사용하지 않을 경우 체크합니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;아두이노를 통한 DFplayer 연결과는 상관없습니다.&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통신 연결 세부 옵션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블루투스 4.0 BLE 연결을 위한 Custom UUID 설정 및 아두이노 제어를 위한 PWM 제어 간격 및 데이터 수신 간격을 설정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-3. 아이콘별 기능&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse;&quot; border=&quot;0&quot; width=&quot;864&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; background-color: #a6a6a6; border: 1px solid #ffffff;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9918703B5D6839210A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9918703B5D6839210A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9918703B5D6839210A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9918703B5D6839210A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-top: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;ADVERT 폴더 리스트 보기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99E5E5345D68393F09?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99E5E5345D68393F09?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E5E5345D68393F09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E5E5345D68393F09&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;EQ 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 41px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9992623C5D68394F09?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9992623C5D68394F09?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9992623C5D68394F09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9992623C5D68394F09&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 41px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;DCmode&amp;nbsp;- 폴더번호와 트랙번호를 이용해서 제어하는 화면&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/995A82405D683A0C0A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/995A82405D683A0C0A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995A82405D683A0C0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995A82405D683A0C0A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;사용자 트랙 목록 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse;&quot; border=&quot;0&quot; width=&quot;864&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; background-color: #a6a6a6; border: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9983534B5D686CD022?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9983534B5D686CD022?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9983534B5D686CD022&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9983534B5D686CD022&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-top: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;폴더별 트랙 목록 보기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9913BA4E5D686CE522?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9913BA4E5D686CE522?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9913BA4E5D686CE522&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9913BA4E5D686CE522&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;폴더별 트랙 목록 불러오기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 41px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/992D914D5D686CF322?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/992D914D5D686CF322?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992D914D5D686CF322&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992D914D5D686CF322&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 41px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;폴더 목록&amp;nbsp;불러오기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/997432455D686D0022?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/997432455D686D0022?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997432455D686D0022&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997432455D686D0022&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;사용자 트랙 목록&amp;nbsp;사용 유무 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BD54505D686D0E1F?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BD54505D686D0E1F?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BD54505D686D0E1F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BD54505D686D0E1F&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;사용자 트랙 목록&amp;nbsp;삭제&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 35px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99ED444F5D686D1B24?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99ED444F5D686D1B24?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ED444F5D686D1B24&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ED444F5D686D1B24&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 828px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;앱 전용 데이터 베이스 삭제 - 초기화시 저장된 폴더 및 트랙 숫자 포함 전체 데이터가 삭제 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse;&quot; border=&quot;0&quot; width=&quot;864&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; background-color: #a6a6a6; border: 1px solid #ffffff;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99EF134F5D686D2F24?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99EF134F5D686D2F24?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EF134F5D686D2F24&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EF134F5D686D2F24&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-top: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;재생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9934EE485D686D3C23?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9934EE485D686D3C23?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9934EE485D686D3C23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9934EE485D686D3C23&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;이전 곡 재생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99EFCB4F5D686D4824?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99EFCB4F5D686D4824?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EFCB4F5D686D4824&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EFCB4F5D686D4824&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;다음 곡 재생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 45px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9926F04C5D686D5624?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9926F04C5D686D5624?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9926F04C5D686D5624&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9926F04C5D686D5624&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 45px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;첫번째 트랙 재생 - 폴더에서는 폴더 첫번째, Root에서는 전체 트랙 첫번째&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9926F84C5D686D6324?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9926F84C5D686D6324?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9926F84C5D686D6324&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9926F84C5D686D6324&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;마지막 트랙 재생 - 폴더에서는 폴더 마지막, Root에서는 전체 트랙 마지막&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/993913435D686D7221?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/993913435D686D7221?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993913435D686D7221&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993913435D686D7221&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;재생중인 곡 반복재생 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/991B474A5D686D8223?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/991B474A5D686D8223?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991B474A5D686D8223&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991B474A5D686D8223&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;ADVERT폴더내 트랙 포함 전체 트랙 반복(Custom shuffle 사용 안할경우&amp;nbsp;)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/993258435D686D9022?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/993258435D686D9022?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993258435D686D9022&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993258435D686D9022&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;ADVERT폴더내 트랙 포함 전체 트랙 랜덤 재생(Custom shuffle 사용 안할경우&amp;nbsp;)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/991B9F4A5D686D9D23?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/991B9F4A5D686D9D23?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991B9F4A5D686D9D23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991B9F4A5D686D9D23&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;Custom shuffle 사용할 때만 활성화 되며, 폴더내 셔플 재생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 34px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; background-color: #a6a6a6;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9912364E5D686DA823?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9912364E5D686DA823?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9912364E5D686DA823&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9912364E5D686DA823&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 829px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;Custom shuffle 사용할 때만 활성화 되며, 폴더내 전체 트랙 한번 재생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-4 DCmode&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;817&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9970F5455D686DF223?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9970F5455D686DF223?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9970F5455D686DF223&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9970F5455D686DF223&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;595&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;817&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더내 사운드 파일&amp;nbsp;번호 또는 ADVERT 파일 번호를 입력하여 제어할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더제어 : 폴더를 기준으로 제어할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 폴더 반복재생, 폴더 셔플 / 폴더 1회 재생(Custom Shuffle이 체크된 경우 활성화 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 모듈 연결 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-1. DFplayer + Bluetooth 2.0 연결&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특별한 설정없이 DFcontroller를 실행하고 블루투스에 연결하면 초기화를 시작하여 SD카드내 트랙정보를 자동으로 저장하게 됩니다. 트랙정보(폴더 갯수 및 트랙 갯수)가 생성되면 mp3 플레이어처럼 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/995A5A4B5D8457D72D?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/995A5A4B5D8457D72D?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995A5A4B5D8457D72D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995A5A4B5D8457D72D&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;300&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9989314B5D8457D832?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9989314B5D8457D832?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9989314B5D8457D832&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9989314B5D8457D832&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;205&quot; height=&quot;300&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-2. DFplayer + Bluetooth 2.0 / Bluetooth 4.0 BLE + Arduino 연결&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Bluetooth 2.0: HC-06,&amp;nbsp;Bluetooth 4.0 BLE: AT-09)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아두이노 하드웨어 시리얼과 소프트웨어 시리얼을 이용하여 DFplayer를 제어할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFplayer는 소프트웨어 시리얼을 사용하고 블루투스 모듈을 하드웨어 시리얼을 사용하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아두이노에 아래 첨부된 스케치를 업로드 해야만 정상적으로 제어를 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 시리얼은 아두이노에 스케치를 업로드 하는데에도 사용되므로 스케치를 업로드 할 경우에는 아두이노 RX / TX핀에서 블루투스 TX / RX핀을 제거한 상태에서 업로드 해야만 정상적으로 스케치를 업로드 할 수 있습니다. 업로드가 완료된 뒤에는 다시 연결하고 앱에서 블루투스에 연결후 제어할 수 있습니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99B360465D84580831?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99B360465D84580831?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B360465D84580831&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B360465D84580831&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;500&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;194&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99B5683F5D686E7222?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99B5683F5D686E7222?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B5683F5D686E7222&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B5683F5D686E7222&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;117&quot; height=&quot;500&quot; data-origin-width=&quot;194&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/9926F2395D686ECD20?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DFplayer_bluetooth_basic.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_rxPin 2 // DFplayer RX -&amp;gt; arduino 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_txPin 3 // DFplayer TX -&amp;gt; arduino 3&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoftwareSerial dfSerial(DF_txPin, DF_rxPin); // (RX, TX)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool send_df = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void setup() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.begin(9600);&amp;nbsp; &amp;nbsp;// bluetooth Serial&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; dfSerial.begin(9600); // DFplayer Serial&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void loop() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (dfSerial.available()) {&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.write(dfSerial.read());&amp;nbsp; // send to android via bluetooth&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (Serial.available()) {&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (Serial.peek() == 0x7E) send_df = true;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (send_df == true) {&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = Serial.read();&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xEF) send_df = false;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dfSerial.write(temp);&amp;nbsp; // send to DFplayer&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFplayer와 아두이노의 LED, pwm 동시에 제어하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/995C0B345DA2E31631?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DFplayer_bluetooth_basic_with_pin_control_RGB_LED.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_rxPin 2 // DFplayer RX -&amp;gt; arduino 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_txPin 3 // DFplayer TX -&amp;gt; arduino 3&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoftwareSerial dfSerial(DF_txPin, DF_rxPin); // (RX, TX)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define ledPin 13&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 디지털 핀 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool get_pin_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_a[3] = {0, };&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 PWM 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool get_pwm_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_a[5] = {0, };&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm1 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm2 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm3 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool send_df = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void setup() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.begin(9600);&amp;nbsp; &amp;nbsp;// bluetooth Serial&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; dfSerial.begin(9600); // DFplayer Serial&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pinMode(ledPin, OUTPUT);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void loop() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (dfSerial.available()) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.write(dfSerial.read());&amp;nbsp; // send to android via bluetooth&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (Serial.available()) {&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (Serial.peek() == 0x7E) send_df = true;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (Serial.peek() == 0xF3) get_pwm_val = true;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (Serial.peek() == 0xF0) get_pin_val = true;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (send_df == true) {&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = Serial.read();&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xEF) send_df = false;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dfSerial.write(temp);&amp;nbsp; // send to DFplayer&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (get_pwm_val == true ) { // pwm 제어값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = Serial.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_a[pwm_count] = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_count++;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xF1) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; get_pwm_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_control();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (get_pin_val == true) {&amp;nbsp; // 디지털 핀 제어값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = Serial.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pin_a[pin_count] = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pin_count++;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xF1) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; get_pin_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_control();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (Serial.peek() == 0xF8) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String temp = Serial.readStringUntil('\n');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (Serial.peek() == 0xF9) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String temp = Serial.readStringUntil('\n');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char text = Serial.read();&amp;nbsp; // text value for some purpose.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (text &amp;gt; 0 &amp;amp;&amp;amp; text != 0x7E) Serial.write(text); // print text to Serial Monitor&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pin_control() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_val = pin_a[1];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pin_val != 0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; switch (pin_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 11: digitalWrite(ledPin, true); // button 1 : on&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Serial.println(&quot;LED ON&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 10: digitalWrite(ledPin, false); // button 1 : off&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Serial.println(&quot;LED OFF&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pin_val = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pwm_control() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; uint16_t temp = pwm_a[3];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; temp = temp &amp;lt;&amp;lt; 8 | pwm_a[2];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pwm_a[1] == 1) {&amp;nbsp; // 슬라이드 1번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm1 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else if (pwm_a[1] == 2) { // 슬라이드 2번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm2 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else if (pwm_a[1] == 3) {&amp;nbsp; // 슬라이드 3번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm3 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-3.&amp;nbsp;DFplayer +&amp;nbsp;NodeMcu(esp8266) + 내장 wifi 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NodeMcu에 기본 장치된 wifi의 soft AP 접속을 통해&amp;nbsp;DFplayer를 제어합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99D6B34D5D8458282B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99D6B34D5D8458282B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D6B34D5D8458282B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D6B34D5D8458282B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;300&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99D871425D686FAD23?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DFcontroller_esp8266_wifi_basic.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;ESP8266WiFi.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define AP_SSID&amp;nbsp; &quot;Esp12&quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; // AP 이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define AP_PASS&amp;nbsp; &quot;1234test&quot;&amp;nbsp; &amp;nbsp;// AP 비밀번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WiFiServer server(80);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WiFiClient client;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_rxPin 4 // DFplayer RX -&amp;gt; NodeMcu D2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_txPin 5 // DFplayer TX -&amp;gt; NodeMcu D1&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoftwareSerial dfSerial(DF_txPin, DF_rxPin); // (RX, TX)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String income_wifi = &quot;&quot;; // 와이파이 수신 스트링 저장 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t received_df[10] = {0, }; // DFplayer에서 받은 데이터 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String df_value1 = &quot;&quot;;&amp;nbsp; // 안드로이드에 전송할 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String df_value2 = &quot;&quot;;&amp;nbsp; // 안드로이드에 전송할 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;char buf[5]; // 스트링 헥사값 십진수 변경용 변수, FF -&amp;gt; 255&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_count = 0;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 연속된 값 받기위한 카운트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool wait_receive = false;&amp;nbsp; // dfplayer에 질의후 대기시에만 dfSerial 확인용 플래그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool convert = false;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// dfplayer의 데이터수신후 스트링 변환 진입 플래그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// DFplayer command 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t cmd_d;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t ack_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t msb_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t lsb_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_command[] = {0x7E, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xEF};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_command(uint8_t cmd, uint8_t ack, uint8_t msb, uint8_t lsb) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[3] = cmd;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[4] = ack;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[5] = msb;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[6] = lsb;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; for(int i = 0; i &amp;lt; sizeof(df_command); i++){&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; dfSerial.write(df_command[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void setup() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.begin(115200); // 시리얼 모니터 보드레이트 -&amp;gt; 115200&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; WiFi.softAP(AP_SSID, AP_PASS);&amp;nbsp; // WiFi.softAP(ssid, password);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; IPAddress myIP = WiFi.softAPIP();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.print(&quot;AP IP address: &quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.println(myIP);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; server.begin();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; dfSerial.begin(9600); // DFplayer Serial baud rate: 9600&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void loop() {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (wait_receive == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (dfSerial.available()) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (dfSerial.peek() == 0x7E) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t dump = dfSerial.readBytes(received_df, 10);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count++;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_count == 2) wait_receive = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; convert = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t dump = dfSerial.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (convert == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (df_count == 1) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0; i &amp;lt; 10; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (received_df[i] &amp;lt; 16) df_value1 += String('0') + String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else df_value1 += String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; received_df[10] = {0,};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (df_count == 2) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0; i &amp;lt; 10; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (received_df[i] &amp;lt; 16) df_value2 += String('0') + String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else df_value2 += String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; received_df[10] = {0,};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; convert = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; wifi_delay(); // 와이파이 데이터 읽기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unsigned long int one_millis = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void wifi_delay() { // 30 밀리초 마다 client 연결 확인 및 데이터 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (millis() - one_millis &amp;gt; 30) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; one_millis = millis();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; wifi_read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void wifi_read() { // wifi 데이터 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; client = server.available(); // 서버가 작동하고 있으면 client 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if(client.available()) {&amp;nbsp; &amp;nbsp; &amp;nbsp;// 클라이언트에 데이터가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; income_wifi = client.readStringUntil('\r');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (income_wifi.indexOf(&quot;7EFF06&quot;) != -1) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 종료문자가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+6, income_wifi.indexOf(&quot;7EFF06&quot;)+8);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cmd_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+8, income_wifi.indexOf(&quot;7EFF06&quot;)+10);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ack_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+10, income_wifi.indexOf(&quot;7EFF06&quot;)+12);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; msb_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+12, income_wifi.indexOf(&quot;7EFF06&quot;)+14);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; lsb_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; send_command(cmd_d, ack_d, msb_d, lsb_d);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wait_receive = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(wait_receive);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(cmd_d); Serial.print(ack_d); Serial.print(msb_d); Serial.println(lsb_d);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F5&quot;) != -1) { // 스케쥴 접속확인 응답, 텍스트 및 로컬값 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; client.println(&quot;HTTP/1.1 200 OK\r\n&quot;);&amp;nbsp; &amp;nbsp; &amp;nbsp; // 스케쥴 웹요청시 응답 헤더&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_value1 != &quot;&quot;) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(df_value1);&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_value1 = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_value2 != &quot;&quot;) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(df_value2);&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_value2 = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else {&amp;nbsp; // 텍스트 시리얼 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;GET /&quot;)+5, income_wifi.indexOf(&quot;HTTP/1.1&quot;)-1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (wifi_temp.indexOf(&quot;%20&quot;) != -1) { // 웹브라우저 공백문자 %20을 공백문자로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String space = &quot;%20&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String space_convert = &quot; &quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.replace(space, space_convert);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; income_wifi = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFplayer와 아두이노의 LED, pwm 동시에 제어하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/9972CB455D686FC624?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DFcontroller_esp8266_wifi_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;ESP8266WiFi.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define AP_SSID&amp;nbsp; &quot;Esp12&quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; // AP 이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define AP_PASS&amp;nbsp; &quot;1234test&quot;&amp;nbsp; &amp;nbsp;// AP 비밀번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WiFiServer server(80);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WiFiClient client;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_rxPin 4 // DFplayer RX -&amp;gt; NodeMcu D2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_txPin 5 // DFplayer TX -&amp;gt; NodeMcu D1&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoftwareSerial dfSerial(DF_txPin, DF_rxPin); // (RX, TX)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String income_wifi = &quot;&quot;; // 와이파이 수신 스트링 저장 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t received_df[10] = {0, }; // DFplayer에서 받은 데이터 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String df_value1 = &quot;&quot;;&amp;nbsp; // 안드로이드에 전송할 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String df_value2 = &quot;&quot;;&amp;nbsp; // 안드로이드에 전송할 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;char buf[5]; // 스트링 헥사값 십진수 변경용 변수, FF -&amp;gt; 255&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_count = 0;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 연속된 값 받기위한 카운트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool wait_receive = false;&amp;nbsp; // dfplayer에 질의후 대기시에만 dfSerial 확인용 플래그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool convert = false;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// dfplayer의 데이터수신후 스트링 변환 진입 플래그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// DFplayer command 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t cmd_d;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t ack_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t msb_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t lsb_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_command[] = {0x7E, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xEF};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_command(uint8_t cmd, uint8_t ack, uint8_t msb, uint8_t lsb) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[3] = cmd;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[4] = ack;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[5] = msb;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[6] = lsb;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; for(int i = 0; i &amp;lt; sizeof(df_command); i++){&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; dfSerial.write(df_command[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void setup() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.begin(115200); // 시리얼 모니터 보드레이트 -&amp;gt; 115200&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; WiFi.softAP(AP_SSID, AP_PASS);&amp;nbsp; // WiFi.softAP(ssid, password);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; IPAddress myIP = WiFi.softAPIP();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.print(&quot;AP IP address: &quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.println(myIP);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; server.begin();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; dfSerial.begin(9600); // DFplayer Serial baud rate: 9600&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void loop() {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (wait_receive == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (dfSerial.available()) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (dfSerial.peek() == 0x7E) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t dump = dfSerial.readBytes(received_df, 10);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count++;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_count == 2) wait_receive = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; convert = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t dump = dfSerial.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (convert == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (df_count == 1) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0; i &amp;lt; 10; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (received_df[i] &amp;lt; 16) df_value1 += String('0') + String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else df_value1 += String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; received_df[10] = {0,};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (df_count == 2) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0; i &amp;lt; 10; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (received_df[i] &amp;lt; 16) df_value2 += String('0') + String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else df_value2 += String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; received_df[10] = {0,};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; convert = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; wifi_delay(); // 와이파이 데이터 읽기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unsigned long int one_millis = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void wifi_delay() { // 30 밀리초 마다 client 연결 확인 및 데이터 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (millis() - one_millis &amp;gt; 30) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; one_millis = millis();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; wifi_read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void wifi_read() { // wifi 데이터 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; client = server.available(); // 서버가 작동하고 있으면 client 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if(client.available()) {&amp;nbsp; &amp;nbsp; &amp;nbsp;// 클라이언트에 데이터가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; income_wifi = client.readStringUntil('\r');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (income_wifi.indexOf(&quot;7EFF06&quot;) != -1) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 종료문자가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+6, income_wifi.indexOf(&quot;7EFF06&quot;)+8);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cmd_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+8, income_wifi.indexOf(&quot;7EFF06&quot;)+10);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ack_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+10, income_wifi.indexOf(&quot;7EFF06&quot;)+12);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; msb_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+12, income_wifi.indexOf(&quot;7EFF06&quot;)+14);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; lsb_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; send_command(cmd_d, ack_d, msb_d, lsb_d);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wait_receive = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(wait_receive);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(cmd_d); Serial.print(ack_d); Serial.print(msb_d); Serial.println(lsb_d);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F1&quot;) != -1) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 종료문자가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (income_wifi.indexOf(&quot;%%F0&quot;) != -1) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 디지털 핀 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F0&quot;)+4, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_val = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_control();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F31&quot;) != -1) {&amp;nbsp; // 슬라이드1, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F31&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm1 = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F32&quot;) != -1) {&amp;nbsp; // 슬라이드2, PWM 값 수신&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F32&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm2 = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F33&quot;) != -1) {&amp;nbsp; // 슬라이드3, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F33&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm3 = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F5&quot;) != -1) { // 스케쥴 접속확인 응답, 텍스트 및 로컬값 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; client.println(&quot;HTTP/1.1 200 OK\r\n&quot;);&amp;nbsp; &amp;nbsp; &amp;nbsp; // 스케쥴 웹요청시 응답 헤더&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_value1 != &quot;&quot;) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(df_value1);&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_value1 = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_value2 != &quot;&quot;) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(df_value2);&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_value2 = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_pin != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 전송할 핀 상태 값이 있으면 &quot;/ HTTP/1.1&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_pin);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_Pwm_echo != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 전송할 PWM 상태(echo) 값이 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_Pwm_echo);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_Pwm_echo = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_Pwm_slide != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 전송할 PWM 슬라이브 바 상태 값이 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_Pwm_slide);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_Pwm_slide = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_text != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 전송할 텍스트가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_text);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_text = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else{&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (income_wifi.indexOf(&quot;%%F8&quot;) != -1) {&amp;nbsp; // 슬라이드3, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F8&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;Date/Time: &quot;); Serial.println(wifi_temp);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F9&quot;) != -1) {&amp;nbsp; // 슬라이드3, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F9&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;Alarm set: &quot;); Serial.println(wifi_temp);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&amp;nbsp; // 텍스트 시리얼 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;GET /&quot;)+5, income_wifi.indexOf(&quot;HTTP/1.1&quot;)-1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (wifi_temp.indexOf(&quot;%20&quot;) != -1) { // 웹브라우저 공백문자 %20을 공백문자로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String space = &quot;%20&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String space_convert = &quot; &quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.replace(space, space_convert);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(wifi_temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; income_wifi = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;soft AP 접속방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통신연결 설정 화면으로 이동한 뒤 No Use Arduino 옵션을 체크해제 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블루투스 아이콘을 클릭하여 설정화면을 빠져나갑니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99E4CB345D68700A25?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99E4CB345D68700A25?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E4CB345D68700A25&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E4CB345D68700A25&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;160&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wifi 아이콘을 클릭합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99C324415D68702825?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99C324415D68702825?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C324415D68702825&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C324415D68702825&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;85&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스마트폰 와이파이 세팅에서 NodeMcu의 soft AP에 접속을 한뒤 뒤로 가기를 클릭하면 soft AP입력 창이 표시되어 있습니다. 그 곳에 AP 주소를 입력하고 confirm 버튼을 클릭합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99B0FD375D68704224?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99B0FD375D68704224?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B0FD375D68704224&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B0FD375D68704224&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;85&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결이 되면 초기화를 시작하고&amp;nbsp;SD카드내 트랙정보를 자동으로 저장하게 됩니다. 트랙정보(폴더 갯수 및 트랙 갯수)가 생성되면 mp3 플레이어처럼 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-4.&amp;nbsp;DFplayer +&amp;nbsp;ESP32 + 내장 Bluetooth 2.0 / Bluetooth BLE /&amp;nbsp;wifi 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Esp32 개발보드는 블루투스와 와이파이 기본 장착되어 있습니다. 장착된 블루투스와 와이파이를 이용해 제어할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99B2B6505D84584A2F?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99B2B6505D84584A2F?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B2B6505D84584A2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B2B6505D84584A2F&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;518&quot; height=&quot;300&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP32 Bluetooth 2.0 코드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99BA0C3F5D6870AE24?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DFcontroller_esp32_BT_uart_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;HardwareSerial.h&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_rxPin 17 // DFplayer RX -&amp;gt; arduino 17&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_txPin 16 // DFplayer TX -&amp;gt; arduino 16&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HardwareSerial dfSerial(2);&amp;nbsp; // 이름 정의, 시리얼 이름이 Serial1, 2 가 아닌경우 사용&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &quot;BluetoothSerial.h&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BluetoothSerial SerialBT;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 디지털 핀 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool get_pin_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_a[3] = {0, };&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 PWM 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool get_pwm_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_a[5] = {0, };&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm1 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm2 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm3 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool send_df = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 상태표시 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_echo[] = {0xF0, 0, 0xF1};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_echo[] = {0xF3, 0, 0, 0, 0xF1};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_slide[] = {0xF4, 0, 0, 0, 0xF1};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void setup() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.begin(115200);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; dfSerial.begin(9600,SERIAL_8N1, DF_txPin, DF_rxPin);&amp;nbsp; // (통신속도, UART모드, RX핀번호, TX핀번호) - 핀번호 지정가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; SerialBT.begin(&quot;ESP32test&quot;); //Bluetooth device name&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void loop() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (dfSerial.available()) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; uint8_t temp = dfSerial.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; SerialBT.write(temp);&amp;nbsp; // send to android via bluetooth&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; SerialBT_read(); // 블루투스 시리얼 읽기 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if(Serial.available()) { // 시리얼 버퍼에 데이터 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; char c = Serial.read();&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if(c != '\n') {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; s += c;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; } else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(&quot;LED ON&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin_echo(11); // 블루투스 앱 버튼 상태: on&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SerialBT.print(&quot;LED ON&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(&quot;LED OFF&quot;);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin_echo(10); // 블루투스 앱 버튼 상태: off&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SerialBT.print(&quot;LED OFF&quot;);&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SerialBT.println(s);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void general_use() {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; char text = SerialBT.read();&amp;nbsp; // text value for some purpose.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.write(text);&amp;nbsp; &amp;nbsp; &amp;nbsp; // print text to Serial Monitor&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pin_control() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_val = pin_a[1];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pin_val != 0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; switch (pin_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 11: Serial.println(&quot;button 1 : on&quot;);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 10: Serial.println(&quot;button 1 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 21: Serial.println(&quot;button 2 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;send_pin_echo(pin_val); // 버튼 상태 echo&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 20: Serial.println(&quot;button 2 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;send_pin_echo(pin_val); // 버튼 상태 echo&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 31: Serial.println(&quot;button 3 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 30: Serial.println(&quot;button 3 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 41: Serial.println(&quot;button 4 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 40: Serial.println(&quot;button 4 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 51: Serial.println(&quot;button 5 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 50: Serial.println(&quot;button 5 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 61: Serial.println(&quot;button 6 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 60: Serial.println(&quot;button 6 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 71: Serial.println(&quot;button 7 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 70: Serial.println(&quot;button 7 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 81: Serial.println(&quot;button 8 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 80: Serial.println(&quot;button 8 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 91: Serial.println(&quot;button 9 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 90: Serial.println(&quot;button 9 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 101: Serial.println(&quot;button 10 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 100: Serial.println(&quot;button 10 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 111: Serial.println(&quot;button 11 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 110: Serial.println(&quot;button 11 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 121: Serial.println(&quot;button 12 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 120: Serial.println(&quot;button 12 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_val = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pwm_control() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; uint16_t temp = pwm_a[3];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; temp = temp &amp;lt;&amp;lt; 8 | pwm_a[2];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pwm_a[1] == 1) {&amp;nbsp; // 슬라이드 1번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm1 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp; &amp;nbsp; send_pwm_echo(1, pwm1); // PWM 값 echo&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else if (pwm_a[1] == 2) { // 슬라이드 2번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm2 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else if (pwm_a[1] == 3) {&amp;nbsp; // 슬라이드 3번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm3 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void SerialBT_read() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (SerialBT.available()) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (SerialBT.peek() == 0x7E) send_df = true;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (SerialBT.peek() == 0xF3) get_pwm_val = true;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (SerialBT.peek() == 0xF0) get_pin_val = true;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (send_df == true) {&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = SerialBT.read();&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xEF) send_df = false;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dfSerial.write(temp);&amp;nbsp; // send to DFplayer&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (get_pwm_val == true ) { // pwm 제어값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = SerialBT.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_a[pwm_count] = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_count++;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xF1) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; get_pwm_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_control();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (get_pin_val == true) {&amp;nbsp; // 디지털 핀 제어값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = SerialBT.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pin_a[pin_count] = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pin_count++;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xF1) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; get_pin_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_control();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (SerialBT.peek() == 0xF8) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String temp = SerialBT.readStringUntil('\n');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (SerialBT.peek() == 0xF9) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String temp = SerialBT.readStringUntil('\n');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; general_use();&amp;nbsp; // 텍스트 출력함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pin_echo(uint8_t pin_val){&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_echo[1] = pin_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; for (int i = 0; i &amp;lt; 3; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; SerialBT.write(pin_echo[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pwm_echo(uint8_t slide, uint16_t pwm_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pwm_echo[1] = slide;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pwm1 &amp;lt; 256) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[3] = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[3] = pwm_val &amp;gt;&amp;gt; 8;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; for (int i = 0; i &amp;lt; 5; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; SerialBT.write(pwm_echo[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pwm_slide(uint8_t slide, uint16_t pwm_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pwm_slide[1] = slide;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pwm1 &amp;lt; 256) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[3] = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[3] = pwm_val &amp;gt;&amp;gt; 8;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; for (int i = 0; i &amp;lt; 5; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; SerialBT.write(pwm_slide[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP32 Wifi Soft AP&amp;nbsp;코드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99F2AF3D5D6870E403?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DFcontroller_esp32_wifi_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;WiFi.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;WiFiClient.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;WiFiAP.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define AP_SSID&amp;nbsp; &quot;Esp32&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define AP_PASS&amp;nbsp; &quot;1234test&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 디지털 핀 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_val = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// PWM 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm1 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm2 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm3 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String income_wifi = &quot;&quot;; // 와이파이 수신 스트링 저장 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 웹요청 응답용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String send_pin = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String send_Pwm_echo = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String send_Pwm_slide = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String send_text = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WiFiServer server(80);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WiFiClient client;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;HardwareSerial.h&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_rxPin 17 // DFplayer RX -&amp;gt; arduino 17&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_txPin 16 // DFplayer TX -&amp;gt; arduino 16&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HardwareSerial dfSerial(2);&amp;nbsp; // 이름 정의, 시리얼 이름이 Serial1, 2 가 아닌경우 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t received_df[10] = {0, }; // DFplayer에서 받은 데이터 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String df_value1 = &quot;&quot;;&amp;nbsp; // 안드로이드에 전송할 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String df_value2 = &quot;&quot;;&amp;nbsp; // 안드로이드에 전송할 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;char buf[5]; // 스트링 헥사값 십진수 변경용 변수, FF -&amp;gt; 255&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_count = 0;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 연속된 값 받기위한 카운트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool wait_receive = false;&amp;nbsp; // dfplayer에 질의후 대기시에만 dfSerial 확인용 플래그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool convert = false;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// dfplayer의 데이터수신후 스트링 변환 진입 플래그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// DFplayer command 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t cmd_d;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t ack_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t msb_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t lsb_d;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_command[] = {0x7E, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xEF};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_command(uint8_t cmd, uint8_t ack, uint8_t msb, uint8_t lsb) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[3] = cmd;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[4] = ack;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[5] = msb;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; df_command[6] = lsb;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; for(int i = 0; i &amp;lt; sizeof(df_command); i++){&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; dfSerial.write(df_command[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void setup() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.begin(115200);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; WiFi.softAP(AP_SSID, AP_PASS);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; IPAddress myIP = WiFi.softAPIP();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.print(&quot;AP IP address: &quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.println(myIP);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; server.begin();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; dfSerial.begin(9600); // DFplayer Serial baud rate: 9600&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void loop() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (wait_receive == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (dfSerial.available()) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (dfSerial.peek() == 0x7E) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t dump = dfSerial.readBytes(received_df, 10);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count++;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_count == 2) wait_receive = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; convert = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t dump = dfSerial.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (convert == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (df_count == 1) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0; i &amp;lt; 10; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (received_df[i] &amp;lt; 16) df_value1 += String('0') + String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else df_value1 += String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; received_df[10] = {0,};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (df_count == 2) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0; i &amp;lt; 10; i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (received_df[i] &amp;lt; 16) df_value2 += String('0') + String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else df_value2 += String(received_df[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; received_df[10] = {0,};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; convert = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; wifi_delay(); // 와이파이 데이터 읽기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (Serial.available()) {&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; char c = Serial.read();&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if(c != '\n') {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; s += c;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; } else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(&quot;LED ON&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin_echo(11);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 스케쥴 웹요청 응답, 블루투스 앱 버튼 상태: on&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_text = &quot;LED ON&quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp;// 스케쥴 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(&quot;LED OFF&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin_echo(10);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 스케쥴 웹요청 응답, 블루투스 앱 버튼 상태: off&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_text = &quot;LED OFF&quot;;&amp;nbsp; &amp;nbsp; // 스케쥴 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_text = s;&amp;nbsp; // 스케쥴 웹요청시 응답변수에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pin_control() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pin_val != 0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; switch (pin_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 11: Serial.println(&quot;button 1 : on&quot;);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;client.println(&quot;HTTP/1.1 200 OK\r\n&quot;); // 사용자 웹요청시 응답 헤더&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;send_pin_echo(pin_val);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;client.print(&quot;LED_ON_11&quot;);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 10: Serial.println(&quot;button 1 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;client.println(&quot;HTTP/1.1 200 OK\r\n&quot;); // 사용자 웹요청시 응답 헤더&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;send_pin_echo(pin_val);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;client.print(&quot;LED_ON_10&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 21: Serial.println(&quot;button 2 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 20: Serial.println(&quot;button 2 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 31: Serial.println(&quot;button 3 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 30: Serial.println(&quot;button 3 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 41: Serial.println(&quot;button 4 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 40: Serial.println(&quot;button 4 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 51: Serial.println(&quot;button 5 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 50: Serial.println(&quot;button 5 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 61: Serial.println(&quot;button 6 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 60: Serial.println(&quot;button 6 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 71: Serial.println(&quot;button 7 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 70: Serial.println(&quot;button 7 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 81: Serial.println(&quot;button 8 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 80: Serial.println(&quot;button 8 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 91: Serial.println(&quot;button 9 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 90: Serial.println(&quot;button 9 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 101: Serial.println(&quot;button 10 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 100: Serial.println(&quot;button 10 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 111: Serial.println(&quot;button 11 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 110: Serial.println(&quot;button 11 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 121: Serial.println(&quot;button 12 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 120: Serial.println(&quot;button 12 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_val = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unsigned long int one_millis = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void wifi_delay() { // 30 밀리초 마다 client 연결 확인 및 데이터 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (millis() - one_millis &amp;gt; 30) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; one_millis = millis();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; wifi_read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void wifi_read() { // wifi 데이터 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; client = server.available(); // 서버가 작동하고 있으면 client 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if(client.available()) {&amp;nbsp; &amp;nbsp; &amp;nbsp;// 클라이언트에 데이터가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; income_wifi = client.readStringUntil('\r');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (income_wifi.indexOf(&quot;7EFF06&quot;) != -1) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 종료문자가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+6, income_wifi.indexOf(&quot;7EFF06&quot;)+8);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cmd_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+8, income_wifi.indexOf(&quot;7EFF06&quot;)+10);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ack_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+10, income_wifi.indexOf(&quot;7EFF06&quot;)+12);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; msb_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp = &quot;0x&quot; + income_wifi.substring(income_wifi.indexOf(&quot;7EFF06&quot;)+12, income_wifi.indexOf(&quot;7EFF06&quot;)+14);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.toCharArray(buf, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; lsb_d = strtol(buf, NULL, 16);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; send_command(cmd_d, ack_d, msb_d, lsb_d);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wait_receive = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(wait_receive);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(cmd_d); Serial.print(ack_d); Serial.print(msb_d); Serial.println(lsb_d);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F1&quot;) != -1) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 종료문자가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (income_wifi.indexOf(&quot;%%F0&quot;) != -1) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 디지털 핀 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F0&quot;)+4, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_val = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_control();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F31&quot;) != -1) {&amp;nbsp; // 슬라이드1, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F31&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm1 = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F32&quot;) != -1) {&amp;nbsp; // 슬라이드2, PWM 값 수신&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F32&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm2 = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F33&quot;) != -1) {&amp;nbsp; // 슬라이드3, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F33&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm3 = wifi_temp.toInt();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F5&quot;) != -1) { // 스케쥴 접속확인 응답, 텍스트 및 로컬값 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; client.println(&quot;HTTP/1.1 200 OK\r\n&quot;);&amp;nbsp; &amp;nbsp; &amp;nbsp; // 스케쥴 웹요청시 응답 헤더&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_value1 != &quot;&quot;) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(df_value1);&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_value1 = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (df_value2 != &quot;&quot;) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(df_value2);&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_value2 = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_pin != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 전송할 핀 상태 값이 있으면 &quot;/ HTTP/1.1&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_pin);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_Pwm_echo != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 전송할 PWM 상태(echo) 값이 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_Pwm_echo);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_Pwm_echo = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_Pwm_slide != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 전송할 PWM 슬라이브 바 상태 값이 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_Pwm_slide);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_Pwm_slide = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (send_text != &quot;&quot;) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 전송할 텍스트가 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.print(send_text);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_text = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else{&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (income_wifi.indexOf(&quot;%%F8&quot;) != -1) {&amp;nbsp; // 슬라이드3, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F8&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;Date/Time: &quot;); Serial.println(wifi_temp);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (income_wifi.indexOf(&quot;%%F9&quot;) != -1) {&amp;nbsp; // 슬라이드3, PWM 값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F9&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(&quot;Alarm set: &quot;); Serial.println(wifi_temp);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&amp;nbsp; // 텍스트 시리얼 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;GET /&quot;)+5, income_wifi.indexOf(&quot;HTTP/1.1&quot;)-1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (wifi_temp.indexOf(&quot;%20&quot;) != -1) { // 웹브라우저 공백문자 %20을 공백문자로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String space = &quot;%20&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String space_convert = &quot; &quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wifi_temp.replace(space, space_convert);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(wifi_temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; income_wifi = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pin_echo(uint8_t pin_val){&amp;nbsp; // 디지털 버튼 상태값 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; String s_temp =&quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += &quot;%%F0&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += pin_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += &quot;%%P1&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (client.connected())&amp;nbsp; client.print(s_temp); // 사용자 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else&amp;nbsp; send_pin = s_temp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 스케쥴 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pwm_echo(uint8_t slide, uint16_t pwm_val) { // PWM값 echo 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; String s_temp =&quot;&quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += &quot;%%F3&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += slide;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += &quot;%%E1&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (client.connected())&amp;nbsp; client.print(s_temp); // 사용자 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else&amp;nbsp; send_Pwm_echo = s_temp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 스케쥴 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pwm_slide(uint8_t slide, uint16_t pwm_val) { // 슬라이더 상태값 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; String s_temp =&quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += &quot;%%F4&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += slide;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; s_temp += &quot;%%S1&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (client.connected())&amp;nbsp; client.print(s_temp); // 사용자 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else&amp;nbsp; send_Pwm_slide = s_temp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 스케쥴 웹요청 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP32 Bluetooth 4.0 BLE 코드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/999A75355D68710223?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DFcontroller_esp32_ble_uart_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;접기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;HardwareSerial.h&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_rxPin 17 // DFplayer RX -&amp;gt; arduino 17&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define DF_txPin 16 // DFplayer TX -&amp;gt; arduino 16&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HardwareSerial dfSerial(2);&amp;nbsp; // 이름 정의, 시리얼 이름이 Serial1, 2 가 아닌경우 사용&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;BLEDevice.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;BLEServer.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;BLEUtils.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;BLE2902.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BLEServer *pServer = NULL;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BLECharacteristic * pTxCharacteristic;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool deviceConnected = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool rx_received = false;&amp;nbsp; &amp;nbsp; &amp;nbsp; // BLE 수신시 함수 실행 플래그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::string rxValue; // BLE 클래스 수신 데이터 값 전역변수 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define SERVICE_UUID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;0000FFE0-0000-1000-8000-00805F9B34FB&quot; // UART service UUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define CHARACTERISTIC_UUID_RX &quot;0000FFE1-0000-1000-8000-00805F9B34FB&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#define CHARACTERISTIC_UUID_TX &quot;0000FFE2-0000-1000-8000-00805F9B34FB&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 디지털 핀 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool get_pin_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_a[3] = {0, };&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 PWM 제어용 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool get_pwm_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_a[5] = {0, };&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm1 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm2 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint16_t pwm3 = 0;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 블루투스 앱 상태표시 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pin_echo[] = {0xF0, 0, 0xF1};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_echo[] = {0xF3, 0, 0, 0, 0xF1};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t pwm_slide[] = {0xF4, 0, 0, 0, 0xF1};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// DFplayer 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool receive_df = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_val[10] = {0,};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint8_t df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool date_time = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bool alarm_set = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;class MyServerCallbacks: public BLEServerCallbacks {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; void onConnect(BLEServer* pServer) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; deviceConnected = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; };&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; void onDisconnect(BLEServer* pServer) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; deviceConnected = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;class MyCallbacks: public BLECharacteristicCallbacks {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; void onWrite(BLECharacteristic *pCharacteristic) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; rxValue = pCharacteristic-&amp;gt;getValue();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp; &amp;nbsp; if (rxValue.length() &amp;gt; 0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; rxValue.length(); i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.print(i); Serial.print(&quot;: &quot;); Serial.println(rxValue[i], HEX);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; rx_received = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void setup() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.begin(115200);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; dfSerial.begin(9600,SERIAL_8N1, DF_txPin, DF_rxPin);&amp;nbsp; // (통신속도, UART모드, RX핀번호, TX핀번호) - 핀번호 지정가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; BLEDevice::init(&quot;ESP32 BLE&quot;);&amp;nbsp; // Create the BLE Device&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pServer = BLEDevice::createServer();&amp;nbsp; // Create the BLE Server&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pServer-&amp;gt;setCallbacks(new MyServerCallbacks());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; BLEService *pService = pServer-&amp;gt;createService(SERVICE_UUID);&amp;nbsp; // Create the BLE Service&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pTxCharacteristic = pService-&amp;gt;createCharacteristic (&amp;nbsp; // Create a BLE Characteristic&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; CHARACTERISTIC_UUID_TX,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; BLECharacteristic::PROPERTY_NOTIFY&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; );&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pTxCharacteristic-&amp;gt;addDescriptor(new BLE2902());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; BLECharacteristic * pRxCharacteristic = pService-&amp;gt;createCharacteristic (&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CHARACTERISTIC_UUID_RX,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BLECharacteristic::PROPERTY_WRITE&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pRxCharacteristic-&amp;gt;setCallbacks(new MyCallbacks());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pService-&amp;gt;start();&amp;nbsp; // Start the service&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pServer-&amp;gt;getAdvertising()-&amp;gt;start();&amp;nbsp; // Start advertising&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Serial.println(&quot;Waiting a client connection to notify...&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void loop() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (dfSerial.available()) {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (dfSerial.peek() == 0x7E) receive_df = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (receive_df == true){&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t temp = dfSerial.read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; df_val[df_count] = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; df_count++;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp == 0xEF) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; df_count = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; receive_df = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;setValue((uint8_t*)&amp;amp;df_val,10);&amp;nbsp; // print text to App&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;notify();&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; BLE_read();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if(Serial.available()) { // 시리얼 버퍼에 데이터 있으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; char c = Serial.read();&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if(c != '\n') {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; s += c;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; } else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(&quot;LED ON&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin_echo(11); // 블루투스 앱 버튼 상태: on&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;setValue(&quot;LED ON&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;notify();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(&quot;LED OFF&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_pin_echo(10); // 블루투스 앱 버튼 상태: off&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;setValue(&quot;LED OFF&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;notify();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char temp [21];&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s.toCharArray(temp, s.length()+1);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;setValue(temp);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;notify();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void general_use() {&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; for (int i = 0; i &amp;lt; rxValue.length(); i++) Serial.write(rxValue[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pin_control() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_val = pin_a[1];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pin_val != 0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; switch (pin_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 11: Serial.println(&quot;button 1 : on&quot;);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 10: Serial.println(&quot;button 1 : off&quot;);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 21: Serial.println(&quot;button 2 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;send_pin_echo(pin_val); // 버튼 상태 echo&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 20: Serial.println(&quot;button 2 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;send_pin_echo(pin_val); // 버튼 상태 echo&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 31: Serial.println(&quot;button 3 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 30: Serial.println(&quot;button 3 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 41: Serial.println(&quot;button 4 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 40: Serial.println(&quot;button 4 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 51: Serial.println(&quot;button 5 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 50: Serial.println(&quot;button 5 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 61: Serial.println(&quot;button 6 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 60: Serial.println(&quot;button 6 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 71: Serial.println(&quot;button 7 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 70: Serial.println(&quot;button 7 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 81: Serial.println(&quot;button 8 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 80: Serial.println(&quot;button 8 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 91: Serial.println(&quot;button 9 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 90: Serial.println(&quot;button 9 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 101: Serial.println(&quot;button 10 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 100: Serial.println(&quot;button 10 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 111: Serial.println(&quot;button 11 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 110: Serial.println(&quot;button 11 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 121: Serial.println(&quot;button 12 : on&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case 120: Serial.println(&quot;button 12 : off&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_val = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pwm_control() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; uint16_t temp = pwm_a[3];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; temp = temp &amp;lt;&amp;lt; 8 | pwm_a[2];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pwm_a[1] == 1) {&amp;nbsp; // 슬라이드 1번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm1 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp; &amp;nbsp; send_pwm_echo(1, pwm1); // PWM 값 echo&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else if (pwm_a[1] == 2) { // 슬라이드 2번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm2 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else if (pwm_a[1] == 3) {&amp;nbsp; // 슬라이드 3번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm3 = temp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void BLE_read() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (rx_received == true) {&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (rxValue[0] == 0x7E) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; rxValue.length(); i++) dfSerial.write(rxValue[i]);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (rxValue[0] == 0xF0) get_pin_val = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (rxValue[0] == 0xF3) get_pwm_val = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; if (get_pin_val == true) {&amp;nbsp; // 디지털 핀 제어값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pin_a[0] = rxValue[0];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pin_a[1] = rxValue[1];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pin_a[2] = rxValue[2];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (pin_a[0] == 0xF0 &amp;amp;&amp;amp; pin_a[2] == 0xF1) { // 수신값 검증 완료시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pin_control();&amp;nbsp; &amp;nbsp; // 디지털 핀 출력함수 실행}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; get_pin_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else if (get_pwm_val == true) { // pwm 제어값 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_a[0] = rxValue[0];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_a[1] = rxValue[1];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_a[2] = rxValue[2];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_a[3] = rxValue[3];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_a[4] = rxValue[4];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (pwm_a[0] == 0xF3 &amp;amp;&amp;amp; pwm_a[4] == 0xF1) { // 수신값 검증 완료시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pwm_control(); // PWM 출력함수 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; get_pwm_val = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (rxValue[0] == 0xF8) date_time = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (rxValue[0] == 0xF9) alarm_set = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (date_time == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String temp = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; rxValue.length(); i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rxValue[i] != '\n') temp += rxValue[i];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else if (alarm_set == true) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String temp = &quot;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; rxValue.length(); i++) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rxValue[i] != '\n') temp += rxValue[i];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else break;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Serial.println(temp);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; general_use();&amp;nbsp; // 텍스트 출력함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; rx_received = false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pin_echo(uint8_t pin_val){&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pin_echo[1] = pin_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pTxCharacteristic-&amp;gt;setValue((uint8_t*)&amp;amp;pin_echo, 3);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pTxCharacteristic-&amp;gt;notify();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pwm_echo(uint8_t slide, uint16_t pwm_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pwm_echo[1] = slide;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pwm1 &amp;lt; 256) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[3] = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_echo[3] = pwm_val &amp;gt;&amp;gt; 8;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;setValue((uint8_t*)&amp;amp;pwm_echo, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;notify();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void send_pwm_slide(uint8_t slide, uint16_t pwm_val) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; pwm_slide[1] = slide;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; if (pwm1 &amp;lt; 256) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[3] = 0;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[2] = pwm_val;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pwm_slide[3] = pwm_val &amp;gt;&amp;gt; 8;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;setValue((uint8_t*)&amp;amp;pwm_slide, 5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; pTxCharacteristic-&amp;gt;notify();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. App 스크린샷&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99CB0B385D68717526?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99CB0B385D68717526?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CB0B385D68717526&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CB0B385D68717526&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99C985385D68717626?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99C985385D68717626?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C985385D68717626&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C985385D68717626&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9994AA355D6871A425?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9994AA355D6871A425?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9994AA355D6871A425&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9994AA355D6871A425&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/999777355D6871A525?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/999777355D6871A525?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999777355D6871A525&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999777355D6871A525&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9998CB355D6871A624?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9998CB355D6871A624?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9998CB355D6871A624&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9998CB355D6871A624&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/999802355D6871A625?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/999802355D6871A625?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999802355D6871A625&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999802355D6871A625&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/999749355D6871A525?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/999749355D6871A525?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999749355D6871A525&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999749355D6871A525&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/999777355D6871A525?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/999777355D6871A525?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999777355D6871A525&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999777355D6871A525&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;355&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 사용자 트랙 목록 만들기 및 불러오기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFcontroller는 스마트폰에 저장된 사운드 트랙 목록을 불러와 트랙 번호와 매칭시켜 번호 대신 이름을 표시 할 수 있는 기능이 있습니다. 이를 이용하기 위해서는 사운드 트랙 목록 텍스트 파일이 필요하고 스마트폰의 내장 메모리 Download 폴더에 그 텍스트 파일을 저장한 뒤&amp;nbsp;DFcontroller 앱에서 목록을 불러와 매칭시켜 이용할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5-1. 사용자 목록&amp;nbsp;만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모장에서 트랙목록을 작성한뒤 텍스트 파일로 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목록의 행 번호가 트랙번호입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 526px;&quot; border=&quot;0&quot; width=&quot;526&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 28px; height: 24px; border: 1px solid #ffffff;&quot;&gt;&lt;span&gt;예)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 497px; height: 24px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-top: 1px solid #ffffff;&quot;&gt;&lt;span&gt;001&amp;nbsp; 테스트 폴더1.mp3 - 1행 - 트랙번호 1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;002&amp;nbsp; 테스트 폴더1.mp3 - 2행 - 트랙번호 2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;003&amp;nbsp; 테스트 폴더1.mp3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;004&amp;nbsp; 테스트 폴더1.mp3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;005&amp;nbsp; 테스트 폴더1.mp3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;006&amp;nbsp; 테스트 폴더1.mp3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;007&amp;nbsp; 테스트 폴더1.mp3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;008&amp;nbsp; 테스트 폴더1.mp3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;009&amp;nbsp; 테스트 폴더1.mp3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;한글이 포함된 경우에는 저장시 인코딩을 &quot;UTF-8&quot;로 지정하고 저장해야 앱에서 한글이 깨지지 않습니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yuooW/btrmgsWV08O/1Njx69xNVtaCGhks18AFMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yuooW/btrmgsWV08O/1Njx69xNVtaCGhks18AFMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yuooW/btrmgsWV08O/1Njx69xNVtaCGhks18AFMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyuooW%2FbtrmgsWV08O%2F1Njx69xNVtaCGhks18AFMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;433&quot; height=&quot;50&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** &lt;span style=&quot;color: #ff0000;&quot;&gt;주의: SD카드 폴더내 트랙 갯수 보다 사용자 목록상의 갯수가 적을 경우 오류가 발생됩니다.&amp;nbsp; 최소 같거나 많아야 합니다. 많을 경우&amp;nbsp;SD카드 폴더내 트랙 갯수 만큼만 표시됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;예제파일&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/991A043B5D68734F28?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;list01.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99B75F3F5D68735F28?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;list02.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99105B4E5D68736E28?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;folder.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99AC57365D68737A2A?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ADlist.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;저장된 사용자 목록 파일을 스마트폰의 내장메모리&amp;nbsp;&lt;/a&gt;&lt;a class=&quot;txc-file&quot;&gt;Download 폴더에 저장합니다. (SD카드의&amp;nbsp;&lt;/a&gt;&lt;a class=&quot;txc-file&quot;&gt;Download 폴더가 아닙니다.)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;예) Samsung Galaxy S7\Phone\Download&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFcontroller 앱에서 저장된 목록 불러오기 - DFplayer의 SD카드내 트랙 정보가 저장된 상태에서만 불러올 수 있습니다.&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse;&quot; border=&quot;0&quot; width=&quot;864&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;font-size: 16px; width: 108px; height: 14px; border: 1px solid #ffffff;&quot;&gt;&lt;span&gt;메인화면에서&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 50px; height: 14px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-top: 1px solid #ffffff; background-color: #d5d5d5;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99B806505D6873BE24?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99B806505D6873BE24?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B806505D6873BE24&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B806505D6873BE24&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;font-size: 16px; width: 705px; height: 14px; border-bottom: 1px solid #ffffff; border-right: 1px solid #ffffff; border-top: 1px solid #ffffff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;을 선택하여 사용자 목록 화면으로 이동한 뒤 아래 그림처럼 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9913C04E5D6873E628?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9913C04E5D6873E628?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9913C04E5D6873E628&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9913C04E5D6873E628&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;191&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랙목록 불러오기 - Select File을 선택하면 스마트폰&amp;nbsp;Download 폴더내의 모든 텍스트&amp;nbsp;파일을 표시합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/990D5B4A5D68740B2A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/990D5B4A5D68740B2A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990D5B4A5D68740B2A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990D5B4A5D68740B2A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;149&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99122F4A5D68740C29?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99122F4A5D68740C29?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99122F4A5D68740C29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99122F4A5D68740C29&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;250&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9914844A5D68740C29?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9914844A5D68740C29?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9914844A5D68740C29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9914844A5D68740C29&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;330&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 목록을 성공적으로 불러오면 아래 그림처럼 목록이 표시됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99EB854F5D6874452A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99EB854F5D6874452A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EB854F5D6874452A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EB854F5D6874452A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;300&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더 및 ADVERT목록 불러오기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9925B34C5D68746D29?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9925B34C5D68746D29?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9925B34C5D68746D29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9925B34C5D68746D29&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;197&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9927594C5D68746E29?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9927594C5D68746E29?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9927594C5D68746E29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9927594C5D68746E29&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;330&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불러온 폴더 목록이 표시됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/992BA04D5D68749A28?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/992BA04D5D68749A28?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992BA04D5D68749A28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992BA04D5D68749A28&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;253&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/992C714D5D68749B28?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/992C714D5D68749B28?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992C714D5D68749B28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992C714D5D68749B28&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;379&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불러온 ADVERT목록이 표시됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9910B14A5D6874C12A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9910B14A5D6874C12A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9910B14A5D6874C12A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9910B14A5D6874C12A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;292&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 베이스에 저장되어 있는 목록 리스트 확인하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99687E455D68750C28?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99687E455D68750C28?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99687E455D68750C28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99687E455D68750C28&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;187&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더를 선택하면 목록이 표시됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/992E4D4C5D6874DD29?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/992E4D4C5D6874DD29?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992E4D4C5D6874DD29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992E4D4C5D6874DD29&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;294&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 베이스에 저장되어 있는 사용자 목록 사용하기 - 체크표시가 녹색이면 메인화면의 트랙 목록에 사용자 목록이 표시됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9923DE475D68752A27?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9923DE475D68752A27?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9923DE475D68752A27&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9923DE475D68752A27&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;85&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 베이스에서 사용자 목록 관련 데이터 삭제하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9907494E5D6875412B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9907494E5D6875412B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9907494E5D6875412B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9907494E5D6875412B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;85&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱 전용 데이터 베이스 삭제하기 - 앱에서 사용하는 모든 데이이터가 삭제됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99335E485D68755829?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99335E485D68755829?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99335E485D68755829&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99335E485D68755829&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;85&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 화면으로 나가기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9934EA485D68755929?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9934EA485D68755929?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9934EA485D68755929&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9934EA485D68755929&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;85&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 사운드 파일에 일련번호 편하게 추가하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사운드 파일에 001 또는 0001 형식의 3자리, 4자리 번호를 추가해주는 방법으로 곰오디오 프로그램을 사용해보자. 수동으로 추가할 경우 사운드 파일이 몇개 안된다면 문제 없지만, 파일 수가 많다면 인내를 필요로하는 단순 반복 작업이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곰오디오를 실행한 뒤 환경설정에 들어가서 제목표시 -&amp;gt; 제목 표시 방법 -&amp;gt; 파일명 -&amp;gt; 확인 을 클릭한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/991E52475D6875C728?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/991E52475D6875C728?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991E52475D6875C728&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991E52475D6875C728&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;310&quot; height=&quot;439&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99265A475D6875C827?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99265A475D6875C827?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99265A475D6875C827&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99265A475D6875C827&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;471&quot; height=&quot;439&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래쪽 + 아이콘(추가)를 클릭하고 폴더 추가를 선택하고 사운드 파일이 저장된 폴더를 선택한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BDC13F5D6876072A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BDC13F5D6876072A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BDC13F5D6876072A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BDC13F5D6876072A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;420&quot; height=&quot;440&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BE1F3F5D6876082A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BE1F3F5D6876082A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BE1F3F5D6876082A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BE1F3F5D6876082A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;367&quot; height=&quot;306&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;파일 목록이 표시되면 아래 맨오른쪽 재생목록 아이콘을 클릭하고 재생목록 내보내기를 클릭한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BDFB3F5D6876082A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BDFB3F5D6876082A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BDFB3F5D6876082A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BDFB3F5D6876082A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;483&quot; height=&quot;631&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;631&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 순서대로 파일명 앞에 번호 붙임 이라는 항목이 체크된 상태에서 시작번호 란에 001을 넣으면 001, 002, .... 순서대로 3자리 숫자가 추가되어 저장위치에 숫자가 추가된 파일이 새롭게 저장된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BD693F5D6876092A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BD693F5D6876092A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BD693F5D6876092A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BD693F5D6876092A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;476&quot; height=&quot;502&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장 위치의 폴더에는 목록형식의 데이터 파일이 아니라 원본파일의 이름이 변경된 파일이 복사된것을 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름이 수정된 파일을 DFplayer에 사용할 저장장치에 복사하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/991E253B5D6876582B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/991E253B5D6876582B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991E253B5D6876582B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991E253B5D6876582B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;504&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작번호를 0001로 변경하고 내보내기를 클릭하면 0001, 0002 ....&amp;nbsp; 이렇게 4자리 숫자가 추가되어 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** DarkNamer 프로그램을&amp;nbsp;이용하여 사용자 목록 쉽게 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/9994FE355D68767A2B?original&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;DarkNamer.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;다운로드&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게시자를 알수없다는 경고 메세지가 표시됩니다. 무시하고 실행을 클릭합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/992439395D6876A228?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/992439395D6876A228?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992439395D6876A228&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992439395D6876A228&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;505&quot; height=&quot;312&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 -&amp;gt; 경로목록에 파일 추가하기 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BAC93F5D6876BD2B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BAC93F5D6876BD2B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BAC93F5D6876BD2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BAC93F5D6876BD2B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;492&quot; height=&quot;434&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랙이 저장된 폴더로 가서 전체 파일을 지정해 주고 열기를 클릭합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BA6D3F5D6876BE2B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BA6D3F5D6876BE2B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BA6D3F5D6876BE2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BA6D3F5D6876BE2B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;555&quot; height=&quot;426&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목록이 불러와지면 파일 -&amp;gt; 문서파일로 바꿀이름 저장을 클릭합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BB2F3F5D6876BE2B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BB2F3F5D6876BE2B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BB2F3F5D6876BE2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BB2F3F5D6876BE2B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;490&quot; height=&quot;432&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 위치에 저장을 하면 트랙 목록이 저장된 텍스트 파일이 생성됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BB813F5D6876BF2B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BB813F5D6876BF2B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BB813F5D6876BF2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BB813F5D6876BF2B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;555&quot; height=&quot;425&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BB253F5D6876C02B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BB253F5D6876C02B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BB253F5D6876C02B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BB253F5D6876C02B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;564&quot; height=&quot;377&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장된 파일을 불러와서 확인합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;376&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99BCB53F5D6876C02B?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99BCB53F5D6876C02B?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BCB53F5D6876C02B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BCB53F5D6876C02B&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;376&quot; height=&quot;183&quot; data-origin-width=&quot;376&quot; data-origin-height=&quot;183&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한글이 포함된 트랙목록은 다른이름으로 저장을 클릭하신다음에 인코딩을 &quot;UTF-8&quot;로 지정한뒤 다시 저장해 주어야 앱에서 한글이 깨지지 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99B3D6365D6876EE2D?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99B3D6365D6876EE2D?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B3D6365D6876EE2D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B3D6365D6876EE2D&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;433&quot; height=&quot;50&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFPlayer 사용 예제 글&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/28&quot;&gt;[arduino] - DFplayer - 아두이노 사운드 모듈&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/34&quot;&gt;[arduino] - NodeMcu(ESP8266)에서 DFplayer를 제어하는 코드&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/36&quot;&gt;[arduino] - ESP32(DevKit)로 DFplayer 제어하기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/37&quot;&gt;[arduino] - 안드로이드 앱 DFcontroller를 이용하여 DFplayer 제어&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/39&quot;&gt;[arduino] - 아두이노시계 예제, ESP01 WiFi 이용 시간 동기화 하기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/40&quot;&gt;[arduino] - 아두이노 말하는알람시계 예제 - DFPlayer&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/43&quot;&gt;[arduino] - 말하는알람시계 - 블루투스 연결 및 시간 동기화, DFPlayer 제어&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://postpop.tistory.com/44&quot;&gt;[arduino] - NodeMcu - 말하는 알람시계, wifi이용 시간 동기화 및 DFPlayer 원격제어&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot;&gt;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1671390274363&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ADUCON - Google Play 앱&quot; data-og-description=&quot;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 앱&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&amp;amp;hl=ko&amp;amp;gl=KR&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dH215F/hyQWuPdJyB/MAVs8qVa10KxkzQyvX0rzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/7akjy/hyQWtpe5yw/eOzlBx5PDPWihd36IgzfAK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/bZx16d/hyQWA9JYIP/1uIEwi74NliHsSpaNCMic0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dH215F/hyQWuPdJyB/MAVs8qVa10KxkzQyvX0rzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/7akjy/hyQWtpe5yw/eOzlBx5PDPWihd36IgzfAK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/bZx16d/hyQWA9JYIP/1uIEwi74NliHsSpaNCMic0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ADUCON - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 앱&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;※ 특징&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 블루투스 2.0 / 블루투스 4.0 BLE 연결 : HC-05, HC-06, HM-10, AT-09, BT05&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- WiFi를 통해 모듈의 Access Point 또는 공용 네트워크의 IP에 연결&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 15개의 디지털 버튼: 토글 및 푸시 버튼 속성 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 6개의 아날로그 컨트롤러(SeekBar): 최소 및 최대 값 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 메인 화면 표시 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 버튼 레이블 사용자 정의&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 설정값 저장 기능&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- RGB LED 제어를 위한 색상 선택기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- PWM 제어를 위한 다이얼 노브&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- Arduino Sketch의 HTML 페이지용 웹 뷰어&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 비밀번호를 이용하여 제어권한을 설정할 수 있는 대화창 제공&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 사용자 정의 대화창 제공(라디오박스, 체크박스, 텍스트 입력 등)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 앱이 실행되는 동안 화면이 계속 켜져 있음(화면이 꺼지는 것을 방지)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ARCON00.jpg&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJcmA/btrTRB1jhmw/CraQbPTXWps4uBsQBQWTkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJcmA/btrTRB1jhmw/CraQbPTXWps4uBsQBQWTkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJcmA/btrTRB1jhmw/CraQbPTXWps4uBsQBQWTkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJcmA%2FbtrTRB1jhmw%2FCraQbPTXWps4uBsQBQWTkK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1206&quot; height=&quot;617&quot; data-filename=&quot;ARCON00.jpg&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Setting up Wi-Fi module ESP01 and basic code for Arduino remote control&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - Arduino WiFi remote control with ADUCON and ESP-01&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/184&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for bluetooth remote contol with HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/185&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - Arduino Bluetooth remote control with ADUCON and HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/187&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for BLE remote contol with BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/188&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - Arduino BLE remote control with ADUCON and BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/190&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - ESP32/NodeMcu Basic code for WiFi remote contol&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/191&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - ESP32/NodeMcu WiFi remote control with ADUCON&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/193&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - ESP32 Bluetooth remote control with ADUCON&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - ESP32 BLE remote control with ADUCON&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot;&gt;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1671390318551&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ADUPAD - Google Play 앱&quot; data-og-description=&quot;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 PAD&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&amp;amp;hl=ko&amp;amp;gl=KR&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Jj91w/hyQWFb99co/q8RCXgpnl8KkAyuMFIlVzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/oIsrI/hyQWG3bVzY/FbX059Ki7Og9Kbivv24fk1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/btiuyu/hyQWuuUME1/hY1leXZVH10hwzD3EJNui0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Jj91w/hyQWFb99co/q8RCXgpnl8KkAyuMFIlVzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/oIsrI/hyQWG3bVzY/FbX059Ki7Og9Kbivv24fk1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/btiuyu/hyQWuuUME1/hY1leXZVH10hwzD3EJNui0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ADUPAD - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 PAD&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 조이스틱 2개.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 1개의 중력 센서 컨트롤러.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 제어용 20개 버튼: 토글 및 푸시 버튼 속성 설정 기능.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;일부 버튼 레이블은 사용자 정의할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 비밀번호를 이용하여 제어권한을 설정할 수 있는 대화창 제공&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 사용자 정의 대화창 제공(라디오박스, 체크박스, 텍스트 입력 등)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 앱이 실행되는 동안 화면이 계속 켜져 있음(화면이 꺼지는 것을 방지)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;adupadOverview.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ2cmR/btrTRCMDOk7/lRKIYwkLKAEszb9JHIWir1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ2cmR/btrTRCMDOk7/lRKIYwkLKAEszb9JHIWir1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ2cmR/btrTRCMDOk7/lRKIYwkLKAEszb9JHIWir1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ2cmR%2FbtrTRCMDOk7%2FlRKIYwkLKAEszb9JHIWir1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;594&quot; height=&quot;868&quot; data-filename=&quot;adupadOverview.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Setting up Wi-Fi module ESP01 and basic code for Arduino remote control&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/183&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - Arduino WiFi remote control with ADUPAD and ESP-01&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/184&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for bluetooth remote contol with HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/186&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - Arduino Bluetooth remote control with ADUPAD and HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/187&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for BLE remote contol with BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/189&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - Arduino BLE remote control with ADUPAD and BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/190&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - ESP32/NodeMcu Basic code for WiFi remote contol&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/192&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - ESP32/NodeMcu WiFi remote control with ADUPAD&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/194&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - ESP32 Bluetooth remote control with ADUPAD&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - ESP32 BLE remote control with ADUPAD&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>arduino</category>
      <category>dfplayer</category>
      <category>soft AP 원격제어</category>
      <category>블루투스 원격제어</category>
      <category>아두이노 사운드 모듈</category>
      <category>와이파이 원격제어</category>
      <author>SmartPop</author>
      <guid isPermaLink="true">https://nxpop.tistory.com/5</guid>
      <comments>https://nxpop.tistory.com/5#entry5comment</comments>
      <pubDate>Fri, 30 Aug 2019 05:31:25 +0900</pubDate>
    </item>
    <item>
      <title>arduino bluetooth controller PWM - 아두이노 원격제어 안드로이드 앱 버전 3.5</title>
      <link>https://nxpop.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;arduino bluetooth controller PWM v3.5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 버전업에 따라 안드로이드 특정버전에서만 와이이파이 및 블루투스 연결이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;*** 와이파이 연결은 안드로이드8 [갤럭시S7]이하 버전에서만 작동합니다 ***&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;*** 블루투스 연결은 안드로이드10 이하 버전에서만 작동합니다 ***&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.appybuilder.arduino_appy.arduino_BT_controller_PWM&quot;&gt;https://play.google.com/store/apps/details?id=com.appybuilder.arduino_appy.arduino_BT_controller_PWM&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이&amp;nbsp;스토어에서&amp;nbsp;&quot;아두이노&amp;nbsp;pwm&quot;이나&amp;nbsp;&quot;arduino&amp;nbsp;pwm&quot;을&amp;nbsp;검색하시면&amp;nbsp;빠르게&amp;nbsp;찾을&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Bluetooth 2.0 / Bluetooth 4.0 BLE 연결 : HC-05, HC-06, HM-10, AT-09, BT05&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ESP8266 NodeMcu 와이파이 / ESP32 Bluetooth 2.0, BLE, 와이파이 연결 가능&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 디지털 버튼 12개 : 토글 및 푸쉬 버튼 속성 설정 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아날로그 콘트롤러 3개(PWM) : Min 및 Max 값 설정 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; RGB LED 제어용 Color Picker 모드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; PWM 제어용 디지털 노브 모드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 텍스트 입력 기능 및&amp;nbsp;전송 옵션 설정 기능(NO-없음, NL-새 줄, CR-캐리지 리턴, BOTH-캐리지 리턴+새 줄)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 표시 설정 화면:&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 메인화면의 버튼 및 PWM 슬라이드 표시 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 버튼 라벨 사용자 지정 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;라벨 외부 파일 저장 기능:&amp;nbsp; /arduino_BT_button_label.txt&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 통신 연결 시 안드로이드 시스템 날짜 및 시간 자동 전송 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 플로팅 버튼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 푸시버튼 4개(13, 14, 15, 16)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;안드로이드 시스템 날짜 및 시간 수동 전송 버튼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 시간 설정값 전송 버튼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY8kxw/btqxPSDi7iU/mP7JKEQ2f2qZF9WG6d2uqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY8kxw/btqxPSDi7iU/mP7JKEQ2f2qZF9WG6d2uqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY8kxw/btqxPSDi7iU/mP7JKEQ2f2qZF9WG6d2uqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY8kxw%2FbtqxPSDi7iU%2FmP7JKEQ2f2qZF9WG6d2uqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인화면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw01Fm/btqxSPrTKD8/k4S66LiYWaq6FZIznk6bu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw01Fm/btqxSPrTKD8/k4S66LiYWaq6FZIznk6bu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw01Fm/btqxSPrTKD8/k4S66LiYWaq6FZIznk6bu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw01Fm%2FbtqxSPrTKD8%2Fk4S66LiYWaq6FZIznk6bu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;561&quot; height=&quot;800&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw2xq0/btqxShvp9f2/cxYsnUugnmS5kn9Bg9oksK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw2xq0/btqxShvp9f2/cxYsnUugnmS5kn9Bg9oksK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw2xq0/btqxShvp9f2/cxYsnUugnmS5kn9Bg9oksK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw2xq0%2FbtqxShvp9f2%2FcxYsnUugnmS5kn9Bg9oksK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표시 설정 화면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1990A/btqxRwsPc7k/azx8Vd7UHx4JAlcpvR4mWk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1990A/btqxRwsPc7k/azx8Vd7UHx4JAlcpvR4mWk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1990A/btqxRwsPc7k/azx8Vd7UHx4JAlcpvR4mWk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1990A%2FbtqxRwsPc7k%2Fazx8Vd7UHx4JAlcpvR4mWk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;583&quot; height=&quot;764&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FXDiH/btqxOJtpP83/JkP7cK5WJkNvIA9qeEd4YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FXDiH/btqxOJtpP83/JkP7cK5WJkNvIA9qeEd4YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FXDiH/btqxOJtpP83/JkP7cK5WJkNvIA9qeEd4YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFXDiH%2FbtqxOJtpP83%2FJkP7cK5WJkNvIA9qeEd4YK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼 속성 설정 화면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/em0IWP/btqxOIaaWdr/KmzvobkEEd3X6XfUX7Kwi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/em0IWP/btqxOIaaWdr/KmzvobkEEd3X6XfUX7Kwi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/em0IWP/btqxOIaaWdr/KmzvobkEEd3X6XfUX7Kwi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fem0IWP%2FbtqxOIaaWdr%2FKmzvobkEEd3X6XfUX7Kwi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;760&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/siyAy/btqxOJ09veR/mQfw2UXHTv2o9hjIf5MKoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/siyAy/btqxOJ09veR/mQfw2UXHTv2o9hjIf5MKoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/siyAy/btqxOJ09veR/mQfw2UXHTv2o9hjIf5MKoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsiyAy%2FbtqxOJ09veR%2FmQfw2UXHTv2o9hjIf5MKoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;40&quot; height=&quot;40&quot; data-origin-width=&quot;40&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결 옵션 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;619&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D9Z0N/btqxN6vx4zi/ov1dzJhRchq1eTSYAbfhZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D9Z0N/btqxN6vx4zi/ov1dzJhRchq1eTSYAbfhZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D9Z0N/btqxN6vx4zi/ov1dzJhRchq1eTSYAbfhZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD9Z0N%2FbtqxN6vx4zi%2Fov1dzJhRchq1eTSYAbfhZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;580&quot; height=&quot;619&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;619&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Send Date/Time : 통신 연결 시 안드로이드 시스템의 현재&amp;nbsp;날짜 및 시간을 1회만 전송합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SERVICE UUID : Bluetooth 4.0 BLE의 Custom UUID를 설정할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wifi PWM / Bluetooth PWM : PWM 제어를 위한 데이터 전송 간격, 단위-밀리초&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;값이 클수록 배터리 소모를 줄일 수 있지만 아두이노의 응답은 느려집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;값이 너무 작으면 아두이노 및 모듈의 성능에 따라 리셋될 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Read data from arduino : 체크 해제 시 아두이노로부터 오는 데이터를 받지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Bluetooth 2.0 Classic, Wifi 연결 시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;배터리 소모를 줄일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Reading Interval : Read data from arduino가 체크된 상태에서 데이터를 읽어오는 간격을 설정합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 값이 클수록 &lt;span style=&quot;color: #333333;&quot;&gt;배터리&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;소모를 줄일 수 있지만 데이터 수신에 대한 표시는 느려집니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Bluetooth 접속 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블루투스 아이콘 클릭 -&amp;gt;&amp;nbsp;Bluetooth 2.0 / Bluetooth 4.0 BLE 선택 -&amp;gt; Bluetooth 버튼 클릭 -&amp;gt; 모듈 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFJqQR/btqxQUOeJjf/jnuWhWB9wkJv3EzMvqFk80/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFJqQR/btqxQUOeJjf/jnuWhWB9wkJv3EzMvqFk80/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFJqQR/btqxQUOeJjf/jnuWhWB9wkJv3EzMvqFk80/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFJqQR%2FbtqxQUOeJjf%2FjnuWhWB9wkJv3EzMvqFk80%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;141&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSU40i/btqxN4R11zc/Kf0CjpoC2WaMnltdn5ga90/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSU40i/btqxN4R11zc/Kf0CjpoC2WaMnltdn5ga90/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSU40i/btqxN4R11zc/Kf0CjpoC2WaMnltdn5ga90/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSU40i%2FbtqxN4R11zc%2FKf0CjpoC2WaMnltdn5ga90%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;140&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/myUoe/btqxRvHsJqa/1dM2193NDnN75f7VKFhzY1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/myUoe/btqxRvHsJqa/1dM2193NDnN75f7VKFhzY1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/myUoe/btqxRvHsJqa/1dM2193NDnN75f7VKFhzY1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmyUoe%2FbtqxRvHsJqa%2F1dM2193NDnN75f7VKFhzY1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;290&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Npnye/btqxOIBc4ue/pYVqwEWeYDN7aFrRKrdKXk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Npnye/btqxOIBc4ue/pYVqwEWeYDN7aFrRKrdKXk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Npnye/btqxOIBc4ue/pYVqwEWeYDN7aFrRKrdKXk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNpnye%2FbtqxOIBc4ue%2FpYVqwEWeYDN7aFrRKrdKXk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;174&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 와이파이 연결 : 와이파이 아이콘 클릭 -&amp;gt; Soft AP 접속 및 확인 -&amp;gt; Soft IP 주소 입력 -&amp;gt; Confirm 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0mfE5/btqxPd16L4v/btAPwKBI1CGP8DpOQxnkd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0mfE5/btqxPd16L4v/btAPwKBI1CGP8DpOQxnkd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0mfE5/btqxPd16L4v/btAPwKBI1CGP8DpOQxnkd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0mfE5%2FbtqxPd16L4v%2FbtAPwKBI1CGP8DpOQxnkd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;107&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvAgTm/btqxPSJ64YM/T1Xe6IElKY9VpaRnfNAcMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvAgTm/btqxPSJ64YM/T1Xe6IElKY9VpaRnfNAcMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvAgTm/btqxPSJ64YM/T1Xe6IElKY9VpaRnfNAcMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvAgTm%2FbtqxPSJ64YM%2FT1Xe6IElKY9VpaRnfNAcMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;302&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zi4oP/btqxQp1ZrmX/tyCCSeDUlLcpJj1TCTfrNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zi4oP/btqxQp1ZrmX/tyCCSeDUlLcpJj1TCTfrNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zi4oP/btqxQp1ZrmX/tyCCSeDUlLcpJj1TCTfrNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzi4oP%2FbtqxQp1ZrmX%2FtyCCSeDUlLcpJj1TCTfrNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;108&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXCZ4Q/btqxSgpIvg4/gcNAD7wabsjgqia77ZkRk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXCZ4Q/btqxSgpIvg4/gcNAD7wabsjgqia77ZkRk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXCZ4Q/btqxSgpIvg4/gcNAD7wabsjgqia77ZkRk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXCZ4Q%2FbtqxSgpIvg4%2FgcNAD7wabsjgqia77ZkRk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;108&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;제어용 PROTOCOL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 블루투스 : 앱 송신 -&amp;gt; 아두이노 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 디지털 버튼:&amp;nbsp;0xF0 + 1byte number + 0xF1&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; PWM :&amp;nbsp;0xF3 + 1byte number + 2byte number + 0xF1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Date / Time: 0xF8 +&amp;nbsp;07/24/2019(String) + 0x7C + 15:55:32(String) + \n(새 줄)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Alarm: 0xF9 + 21:20(String)&amp;nbsp;+ \n(새 줄)&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567108705240&quot; class=&quot;c++ cpp arduino&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uint8_t pin_a[3] = {0, };
uint8_t pwm_a[5] = {0, };

void btSerial_read() {
  if (btSerial.available()) {  
    if (btSerial.peek() == 0xF3) get_pwm_val = true; 
    else if (btSerial.peek() == 0xF0) get_pin_val = true; 
    if (get_pwm_val == true ) { // pwm 제어값 수신
      uint8_t temp = btSerial.read();
      pwm_a[pwm_count] = temp;
      pwm_count++; 
      if (temp == 0xF1) {
        get_pwm_val = false;
        pwm_count = 0;
        pwm_control();
      }
    }
    else if (get_pin_val == true) {  // 디지털 핀 제어값 수신
      uint8_t temp = btSerial.read();
      pin_a[pin_count] = temp;
      pin_count++;
      if (temp == 0xF1) {
        get_pin_val = false;
        pin_count = 0;
        pin_control();
      }
    }
    else {
      if (btSerial.peek() == 0xF8) {
        String temp = btSerial.readStringUntil('\n');
        Serial.println(temp);
      }
      else if (btSerial.peek() == 0xF9) {
        String temp = btSerial.readStringUntil('\n');
        Serial.println(temp);
      } 
      else {
        general_use();  // 텍스트 출력함수
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 블루투스&amp;nbsp;: 아두이노 송신 -&amp;gt; 앱 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 디지털 버튼:&amp;nbsp;0xF0 + 1byte number + 0xF1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; PWM echo(pwm 값 확인)&amp;nbsp;:&amp;nbsp;0xF3+1byte number+2byte number+0xF1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; PWM slide(슬라이드 위치 변경):&amp;nbsp;&amp;nbsp;0xF4&amp;nbsp;+&amp;nbsp;1byte number + 2byte number + 0xF1&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567108773382&quot; class=&quot;c++ cpp arduino&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uint8_t pin_echo[] = {0xF0, 0, 0xF1};

void send_pin_echo(uint8_t pin_val){
  pin_echo[1] = pin_val;
  for (int i = 0; i &amp;lt; 3; i++) {
    SerialBT.write(pin_echo[i]);
  }
}

uint8_t pwm_echo[] = {0xF3, 0, 0, 0, 0xF1};

void send_pwm_echo(uint8_t slide, uint16_t pwm_val) {
  pwm_echo[1] = slide;
  if (pwm1 &amp;lt; 256) {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = 0;
  }
  else {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
  for (int i = 0; i &amp;lt; 5; i++) {
    SerialBT.write(pwm_echo[i]);
  }
}

uint8_t pwm_slide[] = {0xF4, 0, 0, 0, 0xF1};

void send_pwm_slide(uint8_t slide, uint16_t pwm_val) {
  pwm_slide[1] = slide;
  if (pwm1 &amp;lt; 256) {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = 0;
  }
  else {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
  for (int i = 0; i &amp;lt; 5; i++) {
    SerialBT.write(pwm_slide[i]);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 와이파이 : 앱 송신 -&amp;gt; 아두이노 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 디지털 버튼: %%F0 + 1byte number + %%F1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; PWM1 : %%F31 + String&amp;nbsp;+ %%F1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; PWM2&amp;nbsp;: %%F32 + String&amp;nbsp;+ %%F1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; PWM3&amp;nbsp;: %%F33 + String&amp;nbsp;+ %%F1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Date / Time:&amp;nbsp;%%F8 +&amp;nbsp;07/24/2019 + %7C + 15:55:32&amp;nbsp;+ \n(새 줄)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Alarm:&amp;nbsp;%%F9 + 21:20&amp;nbsp;+ \n(새 줄)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 아두이노 응답 요청:&amp;nbsp;%%F5&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567108828776&quot; class=&quot;c++ cpp arduino&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void wifi_read() { // wifi 데이터 수신
  client = server.available(); // 서버가 작동하고 있으면 client 생성
  if(client.available()) {     // 클라이언트에 데이터가 있으면
    income_wifi = client.readStringUntil('\r');
    if (income_wifi.indexOf(&quot;%%F1&quot;) != -1) {          // 종료문자가 있으면
      if (income_wifi.indexOf(&quot;%%F0&quot;) != -1) {        // 디지털 핀 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F0&quot;)+4, income_wifi.indexOf(&quot;%%F1&quot;));
        pin_val = wifi_temp.toInt();
        pin_control();
      }
      else if (income_wifi.indexOf(&quot;%%F31&quot;) != -1) {  // 슬라이드1, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F31&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm1 = wifi_temp.toInt();
        Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);
      }
      else if (income_wifi.indexOf(&quot;%%F32&quot;) != -1) {  // 슬라이드2, PWM 값 수신 
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F32&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm2 = wifi_temp.toInt();
        Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);
      }
      else if (income_wifi.indexOf(&quot;%%F33&quot;) != -1) {  // 슬라이드3, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F33&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm3 = wifi_temp.toInt();
        Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3); 
      }
    }
    else if (income_wifi.indexOf(&quot;%%F5&quot;) != -1) { // 스케쥴 접속확인 응답, 텍스트 및 로컬값 전송
      client.println(&quot;HTTP/1.1 200 OK\r\n&quot;);      // 스케쥴 웹요청시 응답 헤더 &quot;%%F5&quot;
      if (send_pin != &quot;&quot;) {                       // 전송할 핀 상태 값이 있으면 &quot;/ HTTP/1.1&quot;
        client.print(send_pin); 
        send_pin = &quot;&quot;;
      }
      if (send_Pwm_echo != &quot;&quot;) {                  // 전송할 PWM 상태(echo) 값이 있으면
        client.print(send_Pwm_echo);
        send_Pwm_echo = &quot;&quot;;
      }
      if (send_Pwm_slide != &quot;&quot;) {                 // 전송할 PWM 슬라이브 바 상태 값이 있으면
        client.print(send_Pwm_slide);
        send_Pwm_slide = &quot;&quot;;
      }
      if (send_text != &quot;&quot;) {                      // 전송할 텍스트가 있으면
        client.print(send_text);
        send_text = &quot;&quot;;
      }
    }
    else{
      if (income_wifi.indexOf(&quot;%%F8&quot;) != -1) {  // 날짜 및 시간 정보 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F8&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));
        Serial.print(&quot;Date/Time: &quot;); Serial.println(wifi_temp); 
      }
      else if (income_wifi.indexOf(&quot;%%F9&quot;) != -1) {  // 알람 설정값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F9&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));
        Serial.print(&quot;Alarm set: &quot;); Serial.println(wifi_temp); 
      }
      else {  // 텍스트 시리얼 출력
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;GET /&quot;)+5, income_wifi.indexOf(&quot;HTTP/1.1&quot;)-1);
        if (wifi_temp.indexOf(&quot;%20&quot;) != -1) { // 웹브라우저 공백문자 %20을 공백문자로 변경
          String space = &quot;%20&quot;;
          String space_convert = &quot; &quot;;
          wifi_temp.replace(space, space_convert);
        }
        Serial.println(wifi_temp);
      }
    }
    income_wifi = &quot;&quot;;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 와이파이: 아두이노 송신 -&amp;gt; 앱 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 디지털 버튼:&amp;nbsp;%%F0&amp;nbsp;+ 스트링 값 +&amp;nbsp;%%P1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; PWM1 echo(pwm 값 확인):&amp;nbsp;%%F31 + String&amp;nbsp;+&amp;nbsp;%%E1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;PWM2&amp;nbsp;echo(pwm 값 확인):&amp;nbsp;%%F32&amp;nbsp;+ String&amp;nbsp;+&amp;nbsp;%%E1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;PWM3&amp;nbsp;echo(pwm 값 확인):&amp;nbsp;%%F33&amp;nbsp;+ String&amp;nbsp;+&amp;nbsp;%%E1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;PWM1 slide(슬라이드 위치 변경):&amp;nbsp;%%F41&amp;nbsp;+ String +&amp;nbsp;%%S1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;PWM2&amp;nbsp;slide(슬라이드 위치 변경):&amp;nbsp;%%F42&amp;nbsp;+ String +&amp;nbsp;%%S1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;PWM3&amp;nbsp;slide(슬라이드 위치 변경):&amp;nbsp;%%F43&amp;nbsp;+ String +&amp;nbsp;%%S1&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567108907103&quot; class=&quot;c++ cpp arduino&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String send_pin = &quot;&quot;;
String send_Pwm_echo = &quot;&quot;;
String send_Pwm_slide = &quot;&quot;;

void send_pin_echo(uint8_t pin_val){  // 디지털 버튼 상태값 전송
  String s_temp =&quot;&quot;;
  s_temp += &quot;%%F0&quot;;
  s_temp += pin_val;
  s_temp += &quot;%%P1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_pin = s_temp;                       // 스케쥴 웹요청 응답
}

void send_pwm_echo(uint8_t slide, uint16_t pwm_val) { // PWM값 echo 전송
  String s_temp =&quot;&quot;;                                  
  s_temp += &quot;%%F3&quot;;
  s_temp += slide;
  s_temp += pwm_val;
  s_temp += &quot;%%E1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_Pwm_echo = s_temp;                  // 스케쥴 웹요청 응답
}

void send_pwm_slide(uint8_t slide, uint16_t pwm_val) { // 슬라이더 상태값 전송
  String s_temp =&quot;&quot;;
  s_temp += &quot;%%F4&quot;;
  s_temp += slide;
  s_temp += pwm_val;
  s_temp += &quot;%%S1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_Pwm_slide = s_temp;                 // 스케쥴 웹요청 응답
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 디지털 버튼 1byte number 값 (토글 버튼 on/off, 푸시버튼 down/up)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Button1 on: 11, off: 10 또는 down: 11, up: 10&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Button2 on: 21, off: 20&amp;nbsp;또는 down: 21, up: 20&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Button12 on: 121, off: 120&amp;nbsp;또는 down: 121, up: 120&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Button13 down: 131, up: 130&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Button14&amp;nbsp;down: 141, up: 140&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Button15 down: 151, up: 150&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Button16 down: 161, up: 160&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. PWM 1byte number 값: slide 번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;PWM&amp;nbsp;2byte number 값: PWM 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- RGB LED 제어용 Color Picker 모드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 색상 휠 상의 점을 드래그하거나 색상 휠의 특정 지점을 터치하면 그때의 색상 RGB 값을 송신하여 LED 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; PWM 최대 최솟값 강제 고정: 0 ~ 255&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; PWM 라벨 강제 고정: Red / Green / Blue&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpCZE9/btqxPcvrloD/77knwiTTx1uTBaTfU8KiKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpCZE9/btqxPcvrloD/77knwiTTx1uTBaTfU8KiKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpCZE9/btqxPcvrloD/77knwiTTx1uTBaTfU8KiKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpCZE9%2FbtqxPcvrloD%2F77knwiTTx1uTBaTfU8KiKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;533&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- PWM 디지털 노브 모드&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 디지털 노브를 이용하여 PWM의 제어를 더 편하게 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 우측 1/2/3 버튼: 슬라이드 선택 버튼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 좌측 + - 버튼: 미세조정 및 길게 누를 경우 빠르게 이동&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4KiYH/btqxPRYKLnh/Vu7bCQHEZ9G8rCqsshH2X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4KiYH/btqxPRYKLnh/Vu7bCQHEZ9G8rCqsshH2X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4KiYH/btqxPRYKLnh/Vu7bCQHEZ9G8rCqsshH2X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4KiYH%2FbtqxPRYKLnh%2FVu7bCQHEZ9G8rCqsshH2X1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;324&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아두이노 + 통신 모듈(HC-06&amp;nbsp;블루투스 2.0 CLASSIC / AT-09 블루투스 4.0 BLE)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/KZLMD/btrAQQQiPcs/wk3Srp8Ayrk9KQ6DruGky0/arduino_uart_full.ino?attach=1&amp;amp;knm=tfile.ino&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;arduino_uart_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567108946759&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt; 
#define BT_rxPin 3 // Bluetooth RX -&amp;gt; 3(arduino TX)
#define BT_txPin 2 // Bluetooth TX -&amp;gt; 2(arduino RX)
SoftwareSerial btSerial(BT_txPin, BT_rxPin); // (arduino RX, arduino TX)

String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수

// 블루투스 앱 디지털 핀 제어용 변수
bool get_pin_val = false;
uint8_t pin_count = 0;
uint8_t pin_a[3] = {0, };
uint8_t pin_val;

// 블루투스 앱 PWM 제어용 변수
bool get_pwm_val = false;
uint8_t pwm_count = 0;
uint8_t pwm_a[5] = {0, };
uint16_t pwm1 = 0;  
uint16_t pwm2 = 0;  
uint16_t pwm3 = 0;  

// 블루투스 앱 상태표시 변수
uint8_t pin_echo[] = {0xF0, 0, 0xF1};
uint8_t pwm_echo[] = {0xF3, 0, 0, 0, 0xF1};
uint8_t pwm_slide[] = {0xF4, 0, 0, 0, 0xF1};

void setup() {
  Serial.begin(9600);
  btSerial.begin(9600); //Bluetooth 
}

void loop() {
  btSerial_read(); // 블루투스 시리얼 읽기 함수
  if(Serial.available()) { // 시리얼 버퍼에 데이터 있으면
    char c = Serial.read();  
    if(c != '\n') {
      s += c;
    } else {
      if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on
        Serial.println(&quot;LED ON&quot;);
        send_pin_echo(11); // 블루투스 앱 버튼 상태: on
        btSerial.print(&quot;LED ON&quot;);
        s = &quot;&quot;;  
      }
      else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off 
        Serial.println(&quot;LED OFF&quot;); 
        send_pin_echo(10); // 블루투스 앱 버튼 상태: off
        btSerial.print(&quot;LED OFF&quot;);  
        s = &quot;&quot;;
      }
      else {
        btSerial.println(s); 
        s = &quot;&quot;;
      }
    }
  }
}

void general_use() { 
  char text = btSerial.read();  // text value for some purpose.
  Serial.write(text);      // print text to Serial Monitor
}

void pin_control() {
  pin_val = pin_a[1];
  if (pin_val != 0) {
    switch (pin_val) {
      case 11: Serial.println(&quot;button 1 : on&quot;); 
                  break;
      case 10: Serial.println(&quot;button 1 : off&quot;);
                  break;
      case 21: Serial.println(&quot;button 2 : on&quot;);
               send_pin_echo(pin_val); // 버튼 상태 echo 
                  break;
      case 20: Serial.println(&quot;button 2 : off&quot;);
               send_pin_echo(pin_val); // 버튼 상태 echo 
                  break;
      case 31: Serial.println(&quot;button 3 : on&quot;);
                  break;
      case 30: Serial.println(&quot;button 3 : off&quot;);
                  break;
      case 41: Serial.println(&quot;button 4 : on&quot;);
                  break;
      case 40: Serial.println(&quot;button 4 : off&quot;);
                  break;
      case 51: Serial.println(&quot;button 5 : on&quot;);
                  break;
      case 50: Serial.println(&quot;button 5 : off&quot;);
                  break;
      case 61: Serial.println(&quot;button 6 : on&quot;);
                  break;
      case 60: Serial.println(&quot;button 6 : off&quot;);
                  break;
      case 71: Serial.println(&quot;button 7 : on&quot;);
                  break;
      case 70: Serial.println(&quot;button 7 : off&quot;);
                  break;
      case 81: Serial.println(&quot;button 8 : on&quot;);
                  break;
      case 80: Serial.println(&quot;button 8 : off&quot;);
                  break;
      case 91: Serial.println(&quot;button 9 : on&quot;);
                  break;
      case 90: Serial.println(&quot;button 9 : off&quot;);
                  break;  
      case 101: Serial.println(&quot;button 10 : on&quot;);
                  break;
      case 100: Serial.println(&quot;button 10 : off&quot;);
                  break;  
      case 111: Serial.println(&quot;button 11 : on&quot;);
                  break;
      case 110: Serial.println(&quot;button 11 : off&quot;);
                  break;  
      case 121: Serial.println(&quot;button 12 : on&quot;);
                  break;
      case 120: Serial.println(&quot;button 12 : off&quot;);
                  break;  
    }
  pin_val = 0;
  }
}

void pwm_control() {
  uint16_t temp = pwm_a[3];
  temp = temp &amp;lt;&amp;lt; 8 | pwm_a[2];
  if (pwm_a[1] == 1) {  // 슬라이드 1번
    pwm1 = temp;
//    send_pwm_echo(1, pwm1); // PWM 값 echo
    Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);
  }
  else if (pwm_a[1] == 2) { // 슬라이드 2번
    pwm2 = temp;
    Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);
  }
  else if (pwm_a[1] == 3) {  // 슬라이드 3번
    pwm3 = temp;
    Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);
  }
}

void btSerial_read() {
  if (btSerial.available()) {  
    if (btSerial.peek() == 0xF3) get_pwm_val = true; 
    else if (btSerial.peek() == 0xF0) get_pin_val = true; 
    if (get_pwm_val == true ) { // pwm 제어값 수신
      uint8_t temp = btSerial.read();
      pwm_a[pwm_count] = temp;
      pwm_count++; 
      if (temp == 0xF1) {
        get_pwm_val = false;
        pwm_count = 0;
        pwm_control();
      }
    }
    else if (get_pin_val == true) {  // 디지털 핀 제어값 수신
      uint8_t temp = btSerial.read();
      pin_a[pin_count] = temp;
      pin_count++;
      if (temp == 0xF1) {
        get_pin_val = false;
        pin_count = 0;
        pin_control();
      }
    }
    else {
      if (btSerial.peek() == 0xF8) {
        String temp = btSerial.readStringUntil('\n');
        Serial.println(temp);
      }
      else if (btSerial.peek() == 0xF9) {
        String temp = btSerial.readStringUntil('\n');
        Serial.println(temp);
      } 
      else {
        general_use();  // 텍스트 출력함수
      }
    }
  }
}

void send_pin_echo(uint8_t pin_val){
  pin_echo[1] = pin_val;
  for (int i = 0; i &amp;lt; 3; i++) {
    btSerial.write(pin_echo[i]);
  }
}

void send_pwm_echo(uint8_t slide, uint16_t pwm_val) {
  pwm_echo[1] = slide;
  if (pwm_val &amp;lt; 256) {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = 0;
  }
  else {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
  for (int i = 0; i &amp;lt; 5; i++) {
    btSerial.write(pwm_echo[i]);
  }
}

void send_pwm_slide(uint8_t slide, uint16_t pwm_val) {
  pwm_slide[1] = slide;
  if (pwm_val &amp;lt; 256) {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = 0;
  }
  else {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
  for (int i = 0; i &amp;lt; 5; i++) {
    btSerial.write(pwm_slide[i]);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ESP8266, NodeMcu wifi_Soft_AP&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ccL2Sd/btrA3h5WHRn/kxGfuJX1wQLiAwJS8ElJcK/arduino_remote_control_esp8266.ino?attach=1&amp;amp;knm=tfile.ino&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;arduino_remote_control_esp8266.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567108977520&quot; class=&quot;c++ cpp arduino&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;ESP8266WiFi.h&amp;gt;
#define AP_SSID  &quot;Esp12&quot;
#define AP_PASS  &quot;1234test&quot;

String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수

// 디지털 핀 제어용 변수
uint8_t pin_val = 0;

// PWM 제어용 변수
uint16_t pwm1 = 0;  
uint16_t pwm2 = 0;  
uint16_t pwm3 = 0;  

String income_wifi = &quot;&quot;; // 와이파이 수신 스트링 저장 변수

// 웹요청 응답용 변수
String send_pin = &quot;&quot;;
String send_Pwm_echo = &quot;&quot;;
String send_Pwm_slide = &quot;&quot;;
String send_text = &quot;&quot;;

WiFiServer server(80);
WiFiClient client;

void setup() {
  Serial.begin(115200);
  WiFi.softAP(AP_SSID, AP_PASS);  // WiFi.softAP(ssid, password);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print(&quot;AP IP address: &quot;);
  Serial.println(myIP);
  server.begin();
}

void loop() {
  wifi_delay(); // 와이파이 데이터 읽기
  if (Serial.available()) {   
    char c = Serial.read();  
    if(c != '\n') {
      s += c;
    } else {
      if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on
        Serial.println(&quot;LED_ON&quot;);
        send_pin_echo(11);        // 스케쥴 웹요청 응답, 블루투스 앱 버튼 상태: on
        send_text = &quot;LED ON&quot;;     // 스케쥴 웹요청 응답
        s = &quot;&quot;;  
      }
      else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off 
        Serial.println(&quot;LED_OFF&quot;);
        send_pin_echo(10);        // 스케쥴 웹요청 응답, 블루투스 앱 버튼 상태: off
        send_text = &quot;LED OFF&quot;;    // 스케쥴 웹요청 응답
        s = &quot;&quot;;
      }
      else {
        send_text = s;  // 스케쥴 웹요청시 응답변수에 저장
        s = &quot;&quot;;
      }
    }      
  }
}

void pin_control() {
  if (pin_val != 0) {
    switch (pin_val) {
      case 11: Serial.println(&quot;button 1 : on&quot;); // button 1 : on
               client.println(&quot;HTTP/1.1 200 OK\r\n&quot;); // 사용자 웹요청시 응답 헤더
               send_pin_echo(pin_val);
               client.print(&quot;LED_ON_11&quot;); 
                  break;
      case 10: Serial.println(&quot;button 1 : off&quot;); // button 1 : off
               client.println(&quot;HTTP/1.1 200 OK\r\n&quot;); // 사용자 웹요청시 응답 헤더
               send_pin_echo(pin_val);
               client.print(&quot;LED_ON_10&quot;);
                  break;
      case 21: Serial.println(&quot;button 2 : on&quot;);
                  break;
      case 20: Serial.println(&quot;button 2 : off&quot;);
                  break;
      case 31: Serial.println(&quot;button 3 : on&quot;);
                  break;
      case 30: Serial.println(&quot;button 3 : off&quot;);
                  break;
      case 41: Serial.println(&quot;button 4 : on&quot;);
                  break;
      case 40: Serial.println(&quot;button 4 : off&quot;);
                  break;
      case 51: Serial.println(&quot;button 5 : on&quot;);
                  break;
      case 50: Serial.println(&quot;button 5 : off&quot;);
                  break;
      case 61: Serial.println(&quot;button 6 : on&quot;);
                  break;
      case 60: Serial.println(&quot;button 6 : off&quot;);
                  break;
      case 71: Serial.println(&quot;button 7 : on&quot;);
                  break;
      case 70: Serial.println(&quot;button 7 : off&quot;);
                  break;
      case 81: Serial.println(&quot;button 8 : on&quot;);
                  break;
      case 80: Serial.println(&quot;button 8 : off&quot;);
                  break;
      case 91: Serial.println(&quot;button 9 : on&quot;);
                  break;
      case 90: Serial.println(&quot;button 9 : off&quot;);
                  break;  
      case 101: Serial.println(&quot;button 10 : on&quot;);
                  break;
      case 100: Serial.println(&quot;button 10 : off&quot;);
                  break;  
      case 111: Serial.println(&quot;button 11 : on&quot;);
                  break;
      case 110: Serial.println(&quot;button 11 : off&quot;);
                  break;  
      case 121: Serial.println(&quot;button 12 : on&quot;);
                  break;
      case 120: Serial.println(&quot;button 12 : off&quot;);
                  break;  
    }
  pin_val = 0;
  }
}

unsigned long int one_millis = 0;

void wifi_delay() { // 30 밀리초 마다 client 연결 확인 및 데이터 수신
  if (millis() - one_millis &amp;gt; 30) {
    one_millis = millis();
    wifi_read();
  }
}

void wifi_read() { // wifi 데이터 수신
  client = server.available(); // 서버가 작동하고 있으면 client 생성
  if(client.available()) {     // 클라이언트에 데이터가 있으면
    income_wifi = client.readStringUntil('\r');
    if (income_wifi.indexOf(&quot;%%F1&quot;) != -1) {          // 종료문자가 있으면
      if (income_wifi.indexOf(&quot;%%F0&quot;) != -1) {        // 디지털 핀 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F0&quot;)+4, income_wifi.indexOf(&quot;%%F1&quot;));
        pin_val = wifi_temp.toInt();
        pin_control();
      }
      else if (income_wifi.indexOf(&quot;%%F31&quot;) != -1) {  // 슬라이드1, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F31&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm1 = wifi_temp.toInt();
        Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);
      }
      else if (income_wifi.indexOf(&quot;%%F32&quot;) != -1) {  // 슬라이드2, PWM 값 수신 
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F32&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm2 = wifi_temp.toInt();
        Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);
      }
      else if (income_wifi.indexOf(&quot;%%F33&quot;) != -1) {  // 슬라이드3, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F33&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm3 = wifi_temp.toInt();
        Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3); 
      }
    }
    else if (income_wifi.indexOf(&quot;%%F5&quot;) != -1) { // 스케쥴 접속확인 응답, 텍스트 및 로컬값 전송
      client.println(&quot;HTTP/1.1 200 OK\r\n&quot;);      // 스케쥴 웹요청시 응답 헤더 &quot;%%F5&quot;
      if (send_pin != &quot;&quot;) {                       // 전송할 핀 상태 값이 있으면 &quot;/ HTTP/1.1&quot;
        client.print(send_pin); 
        send_pin = &quot;&quot;;
      }
      if (send_Pwm_echo != &quot;&quot;) {                  // 전송할 PWM 상태(echo) 값이 있으면
        client.print(send_Pwm_echo);
        send_Pwm_echo = &quot;&quot;;
      }
      if (send_Pwm_slide != &quot;&quot;) {                 // 전송할 PWM 슬라이브 바 상태 값이 있으면
        client.print(send_Pwm_slide);
        send_Pwm_slide = &quot;&quot;;
      }
      if (send_text != &quot;&quot;) {                      // 전송할 텍스트가 있으면
        client.print(send_text);
        send_text = &quot;&quot;;
      }
    }
    else{
      if (income_wifi.indexOf(&quot;%%F8&quot;) != -1) {  // 슬라이드3, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F8&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));
        Serial.print(&quot;Date/Time: &quot;); Serial.println(wifi_temp); 
      }
      else if (income_wifi.indexOf(&quot;%%F9&quot;) != -1) {  // 슬라이드3, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F9&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));
        Serial.print(&quot;Alarm set: &quot;); Serial.println(wifi_temp); 
      }
      else {  // 텍스트 시리얼 출력
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;GET /&quot;)+5, income_wifi.indexOf(&quot;HTTP/1.1&quot;)-1);
        if (wifi_temp.indexOf(&quot;%20&quot;) != -1) { // 웹브라우저 공백문자 %20을 공백문자로 변경
          String space = &quot;%20&quot;;
          String space_convert = &quot; &quot;;
          wifi_temp.replace(space, space_convert);
        }
        Serial.println(wifi_temp);
      }
    }
    income_wifi = &quot;&quot;;
  }
}

void send_pin_echo(uint8_t pin_val){  // 디지털 버튼 상태값 전송
  String s_temp =&quot;&quot;;
  s_temp += &quot;%%F0&quot;;
  s_temp += pin_val;
  s_temp += &quot;%%P1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_pin = s_temp;                       // 스케쥴 웹요청 응답
}

void send_pwm_echo(uint8_t slide, uint16_t pwm_val) { // PWM값 echo 전송
  String s_temp =&quot;&quot;;                                  
  s_temp += &quot;%%F3&quot;;
  s_temp += slide;
  s_temp += pwm_val;
  s_temp += &quot;%%E1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_Pwm_echo = s_temp;                  // 스케쥴 웹요청 응답
}

void send_pwm_slide(uint8_t slide, uint16_t pwm_val) { // 슬라이더 상태값 전송
  String s_temp =&quot;&quot;;
  s_temp += &quot;%%F4&quot;;
  s_temp += slide;
  s_temp += pwm_val;
  s_temp += &quot;%%S1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_Pwm_slide = s_temp;                 // 스케쥴 웹요청 응답
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ESP32 DevKit Blutooth 2.0&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/LkOeY/btrAZdwMpPu/k4FqV6A8gWcpVCky3mjzb0/esp32_BT_uart_full.ino?attach=1&amp;amp;knm=tfile.ino&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;esp32_BT_uart_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567109007543&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#include &quot;BluetoothSerial.h&quot;
BluetoothSerial SerialBT;

String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수

// 블루투스 앱 디지털 핀 제어용 변수
bool get_pin_val = false;
uint8_t pin_count = 0;
uint8_t pin_a[3] = {0, };
uint8_t pin_val;

// 블루투스 앱 PWM 제어용 변수
bool get_pwm_val = false;
uint8_t pwm_count = 0;
uint8_t pwm_a[5] = {0, };
uint16_t pwm1 = 0;  
uint16_t pwm2 = 0;  
uint16_t pwm3 = 0;  

// 블루투스 앱 상태표시 변수
uint8_t pin_echo[] = {0xF0, 0, 0xF1};
uint8_t pwm_echo[] = {0xF3, 0, 0, 0, 0xF1};
uint8_t pwm_slide[] = {0xF4, 0, 0, 0, 0xF1};

void setup() {
  Serial.begin(115200);
  SerialBT.begin(&quot;ESP32test&quot;); //Bluetooth device name
}

void loop() {
  SerialBT_read(); // 블루투스 시리얼 읽기 함수
  if(Serial.available()) { // 시리얼 버퍼에 데이터 있으면
    char c = Serial.read();  
    if(c != '\n') {
      s += c;
    } else {
      if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on
        Serial.println(&quot;LED ON&quot;);
        send_pin_echo(11); // 블루투스 앱 버튼 상태: on
        SerialBT.print(&quot;LED ON&quot;);
        s = &quot;&quot;;  
      }
      else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off 
        Serial.println(&quot;LED OFF&quot;); 
        send_pin_echo(10); // 블루투스 앱 버튼 상태: off
        SerialBT.print(&quot;LED OFF&quot;);  
        s = &quot;&quot;;
      }
      else {
        SerialBT.println(s); 
        s = &quot;&quot;;
      }
    }
  }
}

void general_use() { 
  char text = SerialBT.read();  // text value for some purpose.
  Serial.write(text);      // print text to Serial Monitor
}

void pin_control() {
  pin_val = pin_a[1];
  if (pin_val != 0) {
    switch (pin_val) {
      case 11: Serial.println(&quot;button 1 : on&quot;); 
                  break;
      case 10: Serial.println(&quot;button 1 : off&quot;);
                  break;
      case 21: Serial.println(&quot;button 2 : on&quot;);
               send_pin_echo(pin_val); // 버튼 상태 echo 
                  break;
      case 20: Serial.println(&quot;button 2 : off&quot;);
               send_pin_echo(pin_val); // 버튼 상태 echo 
                  break;
      case 31: Serial.println(&quot;button 3 : on&quot;);
                  break;
      case 30: Serial.println(&quot;button 3 : off&quot;);
                  break;
      case 41: Serial.println(&quot;button 4 : on&quot;);
                  break;
      case 40: Serial.println(&quot;button 4 : off&quot;);
                  break;
      case 51: Serial.println(&quot;button 5 : on&quot;);
                  break;
      case 50: Serial.println(&quot;button 5 : off&quot;);
                  break;
      case 61: Serial.println(&quot;button 6 : on&quot;);
                  break;
      case 60: Serial.println(&quot;button 6 : off&quot;);
                  break;
      case 71: Serial.println(&quot;button 7 : on&quot;);
                  break;
      case 70: Serial.println(&quot;button 7 : off&quot;);
                  break;
      case 81: Serial.println(&quot;button 8 : on&quot;);
                  break;
      case 80: Serial.println(&quot;button 8 : off&quot;);
                  break;
      case 91: Serial.println(&quot;button 9 : on&quot;);
                  break;
      case 90: Serial.println(&quot;button 9 : off&quot;);
                  break;  
      case 101: Serial.println(&quot;button 10 : on&quot;);
                  break;
      case 100: Serial.println(&quot;button 10 : off&quot;);
                  break;  
      case 111: Serial.println(&quot;button 11 : on&quot;);
                  break;
      case 110: Serial.println(&quot;button 11 : off&quot;);
                  break;  
      case 121: Serial.println(&quot;button 12 : on&quot;);
                  break;
      case 120: Serial.println(&quot;button 12 : off&quot;);
                  break;  
    }
  pin_val = 0;
  }
}

void pwm_control() {
  uint16_t temp = pwm_a[3];
  temp = temp &amp;lt;&amp;lt; 8 | pwm_a[2];
  if (pwm_a[1] == 1) {  // 슬라이드 1번
    pwm1 = temp;
//    send_pwm_echo(1, pwm1); // PWM 값 echo
    Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);
  }
  else if (pwm_a[1] == 2) { // 슬라이드 2번
    pwm2 = temp;
    Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);
  }
  else if (pwm_a[1] == 3) {  // 슬라이드 3번
    pwm3 = temp;
    Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);
  }
}

void SerialBT_read() {
  if (SerialBT.available()) {  
    if (SerialBT.peek() == 0xF3) get_pwm_val = true; 
    else if (SerialBT.peek() == 0xF0) get_pin_val = true; 
    if (get_pwm_val == true ) { // pwm 제어값 수신
      uint8_t temp = SerialBT.read();
      pwm_a[pwm_count] = temp;
      pwm_count++; 
      if (temp == 0xF1) {
        get_pwm_val = false;
        pwm_count = 0;
        pwm_control();
      }
    }
    else if (get_pin_val == true) {  // 디지털 핀 제어값 수신
      uint8_t temp = SerialBT.read();
      pin_a[pin_count] = temp;
      pin_count++;
      if (temp == 0xF1) {
        get_pin_val = false;
        pin_count = 0;
        pin_control();
      }
    }
    else {
      if (SerialBT.peek() == 0xF8) {
        String temp = SerialBT.readStringUntil('\n');
        Serial.println(temp);
      }
      else if (SerialBT.peek() == 0xF9) {
        String temp = SerialBT.readStringUntil('\n');
        Serial.println(temp);
      } 
      else {
        general_use();  // 텍스트 출력함수
      }
    }
  }
}

void send_pin_echo(uint8_t pin_val){
  pin_echo[1] = pin_val;
  for (int i = 0; i &amp;lt; 3; i++) {
    SerialBT.write(pin_echo[i]);
  }
}

void send_pwm_echo(uint8_t slide, uint16_t pwm_val) {
  pwm_echo[1] = slide;
  if (pwm_val &amp;lt; 256) {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = 0;
  }
  else {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
  for (int i = 0; i &amp;lt; 5; i++) {
    SerialBT.write(pwm_echo[i]);
  }
}

void send_pwm_slide(uint8_t slide, uint16_t pwm_val) {
  pwm_slide[1] = slide;
  if (pwm_val &amp;lt; 256) {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = 0;
  }
  else {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
  for (int i = 0; i &amp;lt; 5; i++) {
    SerialBT.write(pwm_slide[i]);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ESP32 DevKit Blutooth 4.0 BLE&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/GEVS2/btrAXCcZqdC/wDk4VQkkou0IGVCOmNz34k/esp32_ble_uart_full.ino?attach=1&amp;amp;knm=tfile.ino&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;esp32_ble_uart_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567109059608&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#include &amp;lt;BLEDevice.h&amp;gt;
#include &amp;lt;BLEServer.h&amp;gt;
#include &amp;lt;BLEUtils.h&amp;gt;
#include &amp;lt;BLE2902.h&amp;gt;

BLEServer *pServer = NULL;
BLECharacteristic * pTxCharacteristic;
bool deviceConnected = false;
bool rx_received = false;      // BLE 수신시 함수 실행 플래그
std::string rxValue; // BLE 클래스 수신 데이터 값 전역변수 설정

#define SERVICE_UUID           &quot;0000FFE0-0000-1000-8000-00805F9B34FB&quot; // UART service UUID
#define CHARACTERISTIC_UUID_RX &quot;0000FFE1-0000-1000-8000-00805F9B34FB&quot;
#define CHARACTERISTIC_UUID_TX &quot;0000FFE2-0000-1000-8000-00805F9B34FB&quot;

String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수

// 블루투스 앱 디지털 핀 제어용 변수
bool get_pin_val = false;
uint8_t pin_a[3] = {0, };
uint8_t pin_val;

// 블루투스 앱 PWM 제어용 변수
bool get_pwm_val = false;
uint8_t pwm_a[5] = {0, };
uint16_t pwm1 = 0;  
uint16_t pwm2 = 0;  
uint16_t pwm3 = 0;  

// 블루투스 앱 상태표시 변수
uint8_t pin_echo[] = {0xF0, 0, 0xF1};
uint8_t pwm_echo[] = {0xF3, 0, 0, 0, 0xF1};
uint8_t pwm_slide[] = {0xF4, 0, 0, 0, 0xF1};

bool date_time = false;
bool alarm_set = false;

class MyServerCallbacks: public BLEServerCallbacks {
  void onConnect(BLEServer* pServer) {
    deviceConnected = true;
  };
  void onDisconnect(BLEServer* pServer) {
    deviceConnected = false;
    pServer-&amp;gt;getAdvertising()-&amp;gt;start();
  }
};

class MyCallbacks: public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
    rxValue = pCharacteristic-&amp;gt;getValue();
//    if (rxValue.length() &amp;gt; 0) {
//      for (int i = 0; i &amp;lt; rxValue.length(); i++) {
//        Serial.print(i); Serial.print(&quot;: &quot;); Serial.println(rxValue[i], HEX);
//      }
//    }
    rx_received = true;
  }
};

void setup() {
  Serial.begin(115200);
  BLEDevice::init(&quot;ESP32 BLE&quot;);  // Create the BLE Device
  pServer = BLEDevice::createServer();  // Create the BLE Server
  pServer-&amp;gt;setCallbacks(new MyServerCallbacks());
  BLEService *pService = pServer-&amp;gt;createService(SERVICE_UUID);  // Create the BLE Service
  pTxCharacteristic = pService-&amp;gt;createCharacteristic (  // Create a BLE Characteristic
                      CHARACTERISTIC_UUID_TX,
                      BLECharacteristic::PROPERTY_NOTIFY
                    );
  pTxCharacteristic-&amp;gt;addDescriptor(new BLE2902());
  BLECharacteristic * pRxCharacteristic = pService-&amp;gt;createCharacteristic (
                                          CHARACTERISTIC_UUID_RX,
                                          BLECharacteristic::PROPERTY_WRITE
                                        );
  pRxCharacteristic-&amp;gt;setCallbacks(new MyCallbacks());
  pService-&amp;gt;start();  // Start the service
  pServer-&amp;gt;getAdvertising()-&amp;gt;start();  // Start advertising
  Serial.println(&quot;Waiting a client connection to notify...&quot;);
}

void loop() {
  BLE_read();
  if(Serial.available()) { // 시리얼 버퍼에 데이터 있으면
    char c = Serial.read();  
    if(c != '\n') {
      s += c;
    } else {
      if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on
        Serial.println(&quot;LED ON&quot;);
        send_pin_echo(11); // 블루투스 앱 버튼 상태: on
        pTxCharacteristic-&amp;gt;setValue(&quot;LED ON&quot;);
        pTxCharacteristic-&amp;gt;notify();
        s = &quot;&quot;;  
      }
      else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off 
        Serial.println(&quot;LED OFF&quot;);
        send_pin_echo(10); // 블루투스 앱 버튼 상태: off
        pTxCharacteristic-&amp;gt;setValue(&quot;LED OFF&quot;);
        pTxCharacteristic-&amp;gt;notify();
        s = &quot;&quot;;
      }
      else {
        char temp [21]; 
        s.toCharArray(temp, s.length()+1); 
        pTxCharacteristic-&amp;gt;setValue(temp); 
        pTxCharacteristic-&amp;gt;notify();
        s = &quot;&quot;;
      }
    }
  }
}

void general_use() { 
  for (int i = 0; i &amp;lt; rxValue.length(); i++) Serial.write(rxValue[i]);
}

void pin_control() {
  pin_val = pin_a[1];
  if (pin_val != 0) {
    switch (pin_val) {
      case 11: Serial.println(&quot;button 1 : on&quot;); 
                  break;
      case 10: Serial.println(&quot;button 1 : off&quot;); 
                  break;
      case 21: Serial.println(&quot;button 2 : on&quot;);
               send_pin_echo(pin_val); // 버튼 상태 echo 
                  break;
      case 20: Serial.println(&quot;button 2 : off&quot;);
               send_pin_echo(pin_val); // 버튼 상태 echo 
                  break;
      case 31: Serial.println(&quot;button 3 : on&quot;);
                  break;
      case 30: Serial.println(&quot;button 3 : off&quot;);
                  break;
      case 41: Serial.println(&quot;button 4 : on&quot;);
                  break;
      case 40: Serial.println(&quot;button 4 : off&quot;);
                  break;
      case 51: Serial.println(&quot;button 5 : on&quot;);
                  break;
      case 50: Serial.println(&quot;button 5 : off&quot;);
                  break;
      case 61: Serial.println(&quot;button 6 : on&quot;);
                  break;
      case 60: Serial.println(&quot;button 6 : off&quot;);
                  break;
      case 71: Serial.println(&quot;button 7 : on&quot;);
                  break;
      case 70: Serial.println(&quot;button 7 : off&quot;);
                  break;
      case 81: Serial.println(&quot;button 8 : on&quot;);
                  break;
      case 80: Serial.println(&quot;button 8 : off&quot;);
                  break;
      case 91: Serial.println(&quot;button 9 : on&quot;);
                  break;
      case 90: Serial.println(&quot;button 9 : off&quot;);
                  break;  
      case 101: Serial.println(&quot;button 10 : on&quot;);
                  break;
      case 100: Serial.println(&quot;button 10 : off&quot;);
                  break;  
      case 111: Serial.println(&quot;button 11 : on&quot;);
                  break;
      case 110: Serial.println(&quot;button 11 : off&quot;);
                  break;  
      case 121: Serial.println(&quot;button 12 : on&quot;);
                  break;
      case 120: Serial.println(&quot;button 12 : off&quot;);
                  break;  
    }
  pin_val = 0;
  }
}

void pwm_control() {
  uint16_t temp = pwm_a[3];
  temp = temp &amp;lt;&amp;lt; 8 | pwm_a[2];
  if (pwm_a[1] == 1) {  // 슬라이드 1번
    pwm1 = temp;
//    send_pwm_echo(1, pwm1); // PWM 값 echo
    Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);
  }
  else if (pwm_a[1] == 2) { // 슬라이드 2번
    pwm2 = temp;
    Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);
  }
  else if (pwm_a[1] == 3) {  // 슬라이드 3번
    pwm3 = temp;
    Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);
  }
}

void BLE_read() {
  if (rx_received == true) {         
    if (rxValue[0] == 0xF0) get_pin_val = true;
    else if (rxValue[0] == 0xF3) get_pwm_val = true;
    if (get_pin_val == true) {  // 디지털 핀 제어값 수신
      pin_a[0] = rxValue[0];
      pin_a[1] = rxValue[1];
      pin_a[2] = rxValue[2];
      if (pin_a[0] == 0xF0 &amp;amp;&amp;amp; pin_a[2] == 0xF1) { // 수신값 검증 완료시
        pin_control();    // 디지털 핀 출력함수 실행}
      }
      get_pin_val = false;
    }
    else if (get_pwm_val == true) { // pwm 제어값 수신
      pwm_a[0] = rxValue[0];
      pwm_a[1] = rxValue[1];
      pwm_a[2] = rxValue[2];
      pwm_a[3] = rxValue[3];
      pwm_a[4] = rxValue[4];
      if (pwm_a[0] == 0xF3 &amp;amp;&amp;amp; pwm_a[4] == 0xF1) { // 수신값 검증 완료시
        pwm_control(); // PWM 출력함수 실행
      }
      get_pwm_val = false;
    }
    else {
      if (rxValue[0] == 0xF8) date_time = true;
      else if (rxValue[0] == 0xF9) alarm_set = true;
      if (date_time == true) {
        String temp = &quot;&quot;;
        for (int i = 0; i &amp;lt; rxValue.length(); i++) {
          if (rxValue[i] != '\n') temp += rxValue[i];
          else break;
        }
        Serial.println(temp);
      }
      else if (alarm_set == true) {
        String temp = &quot;&quot;;
        for (int i = 0; i &amp;lt; rxValue.length(); i++) {
          if (rxValue[i] != '\n') temp += rxValue[i];
          else break;
        }
        Serial.println(temp);
      } 
      else {
        general_use();  // 텍스트 출력함수
      }
    }
    rx_received = false;
  }
}

void send_pin_echo(uint8_t pin_val){
  pin_echo[1] = pin_val;
  pTxCharacteristic-&amp;gt;setValue((uint8_t*)&amp;amp;pin_echo, 3);
  pTxCharacteristic-&amp;gt;notify();
}

void send_pwm_echo(uint8_t slide, uint16_t pwm_val) {
  pwm_echo[1] = slide;
  if (pwm_val &amp;lt; 256) {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = 0;
  }
  else {
    pwm_echo[2] = pwm_val;
    pwm_echo[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
    pTxCharacteristic-&amp;gt;setValue((uint8_t*)&amp;amp;pwm_echo, 5);
    pTxCharacteristic-&amp;gt;notify();
}

void send_pwm_slide(uint8_t slide, uint16_t pwm_val) {
  pwm_slide[1] = slide;
  if (pwm_val &amp;lt; 256) {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = 0;
  }
  else {
    pwm_slide[2] = pwm_val;
    pwm_slide[3] = pwm_val &amp;gt;&amp;gt; 8;
  }
    pTxCharacteristic-&amp;gt;setValue((uint8_t*)&amp;amp;pwm_slide, 5);
    pTxCharacteristic-&amp;gt;notify();
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ESP32 DevKit wifi_Soft_AP&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bGdQ33/btrA2CbxmXR/tzLHZasQqYkbJQK5z11G11/arduino_remote_control_esp32_full.ino?attach=1&amp;amp;knm=tfile.ino&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;arduino_remote_control_esp32_full.ino&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1567109123723&quot; class=&quot;c++ cpp arduino&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;WiFi.h&amp;gt;
#include &amp;lt;WiFiClient.h&amp;gt;
#include &amp;lt;WiFiAP.h&amp;gt;
#define AP_SSID  &quot;Esp32&quot;
#define AP_PASS  &quot;1234test&quot;

String s =&quot;&quot;; // 시리얼 모니터 텍스트 제어용 변수

// 디지털 핀 제어용 변수
uint8_t pin_val = 0;

// PWM 제어용 변수
uint16_t pwm1 = 0;  
uint16_t pwm2 = 0;  
uint16_t pwm3 = 0;  

String income_wifi = &quot;&quot;; // 와이파이 수신 스트링 저장 변수

// 웹요청 응답용 변수
String send_pin = &quot;&quot;;
String send_Pwm_echo = &quot;&quot;;
String send_Pwm_slide = &quot;&quot;;
String send_text = &quot;&quot;;

WiFiServer server(80);
WiFiClient client;

void setup() {
  Serial.begin(115200);
  WiFi.softAP(AP_SSID, AP_PASS);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print(&quot;AP IP address: &quot;);
  Serial.println(myIP);
  server.begin();
}

void loop() {
  wifi_delay(); // 와이파이 데이터 읽기
  if (Serial.available()) {   
    char c = Serial.read();  
    if(c != '\n') {
      s += c;
    } else {
      if(s == &quot;on&quot;){ // 시리얼 모니터 제어 led on
        Serial.println(&quot;LED ON&quot;);
        send_pin_echo(11);        // 스케쥴 웹요청 응답, 블루투스 앱 버튼 상태: on
        send_text = &quot;LED ON&quot;;     // 스케쥴 웹요청 응답
        s = &quot;&quot;;  
      }
      else if(s == &quot;off&quot;){ // 시리얼 모니터 제어 led off 
        Serial.println(&quot;LED OFF&quot;);
        send_pin_echo(10);        // 스케쥴 웹요청 응답, 블루투스 앱 버튼 상태: off
        send_text = &quot;LED OFF&quot;;    // 스케쥴 웹요청 응답
        s = &quot;&quot;;
      }
      else {
        send_text = s;  // 스케쥴 웹요청시 응답변수에 저장
        s = &quot;&quot;;
      }
    }      
  }
}

void pin_control() {
  if (pin_val != 0) {
    switch (pin_val) {
      case 11: Serial.println(&quot;button 1 : on&quot;); 
               client.println(&quot;HTTP/1.1 200 OK\r\n&quot;); // 사용자 웹요청시 응답 헤더
               send_pin_echo(pin_val);
               client.print(&quot;LED_ON_11&quot;); 
                  break;
      case 10: Serial.println(&quot;button 1 : off&quot;);
               client.println(&quot;HTTP/1.1 200 OK\r\n&quot;); // 사용자 웹요청시 응답 헤더
               send_pin_echo(pin_val);
               client.print(&quot;LED_ON_10&quot;);
                  break;
      case 21: Serial.println(&quot;button 2 : on&quot;);
                  break;
      case 20: Serial.println(&quot;button 2 : off&quot;);
                  break;
      case 31: Serial.println(&quot;button 3 : on&quot;);
                  break;
      case 30: Serial.println(&quot;button 3 : off&quot;);
                  break;
      case 41: Serial.println(&quot;button 4 : on&quot;);
                  break;
      case 40: Serial.println(&quot;button 4 : off&quot;);
                  break;
      case 51: Serial.println(&quot;button 5 : on&quot;);
                  break;
      case 50: Serial.println(&quot;button 5 : off&quot;);
                  break;
      case 61: Serial.println(&quot;button 6 : on&quot;);
                  break;
      case 60: Serial.println(&quot;button 6 : off&quot;);
                  break;
      case 71: Serial.println(&quot;button 7 : on&quot;);
                  break;
      case 70: Serial.println(&quot;button 7 : off&quot;);
                  break;
      case 81: Serial.println(&quot;button 8 : on&quot;);
                  break;
      case 80: Serial.println(&quot;button 8 : off&quot;);
                  break;
      case 91: Serial.println(&quot;button 9 : on&quot;);
                  break;
      case 90: Serial.println(&quot;button 9 : off&quot;);
                  break;  
      case 101: Serial.println(&quot;button 10 : on&quot;);
                  break;
      case 100: Serial.println(&quot;button 10 : off&quot;);
                  break;  
      case 111: Serial.println(&quot;button 11 : on&quot;);
                  break;
      case 110: Serial.println(&quot;button 11 : off&quot;);
                  break;  
      case 121: Serial.println(&quot;button 12 : on&quot;);
                  break;
      case 120: Serial.println(&quot;button 12 : off&quot;);
                  break;  
    }
  pin_val = 0;
  }
}

unsigned long int one_millis = 0;

void wifi_delay() { // 30 밀리초 마다 client 연결 확인 및 데이터 수신
  if (millis() - one_millis &amp;gt; 30) {
    one_millis = millis();
    wifi_read();
  }
}

void wifi_read() { // wifi 데이터 수신
  client = server.available(); // 서버가 작동하고 있으면 client 생성
  if(client.available()) {     // 클라이언트에 데이터가 있으면
    income_wifi = client.readStringUntil('\r');
    if (income_wifi.indexOf(&quot;%%F1&quot;) != -1) {          // 종료문자가 있으면
      if (income_wifi.indexOf(&quot;%%F0&quot;) != -1) {        // 디지털 핀 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F0&quot;)+4, income_wifi.indexOf(&quot;%%F1&quot;));
        pin_val = wifi_temp.toInt();
        pin_control();
      }
      else if (income_wifi.indexOf(&quot;%%F31&quot;) != -1) {  // 슬라이드1, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F31&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm1 = wifi_temp.toInt();
        Serial.print(&quot;pwm1: &quot;); Serial.println(pwm1);
      }
      else if (income_wifi.indexOf(&quot;%%F32&quot;) != -1) {  // 슬라이드2, PWM 값 수신 
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F32&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm2 = wifi_temp.toInt();
        Serial.print(&quot;pwm2: &quot;); Serial.println(pwm2);
      }
      else if (income_wifi.indexOf(&quot;%%F33&quot;) != -1) {  // 슬라이드3, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F33&quot;)+5, income_wifi.indexOf(&quot;%%F1&quot;));
        pwm3 = wifi_temp.toInt();
        Serial.print(&quot;pwm3: &quot;); Serial.println(pwm3);
      }
    }
    else if (income_wifi.indexOf(&quot;%%F5&quot;) != -1) { // 스케쥴 접속확인 응답, 텍스트 및 로컬값 전송
      client.println(&quot;HTTP/1.1 200 OK\r\n&quot;);      // 스케쥴 웹요청시 응답 헤더 &quot;%%F5&quot;
      if (send_pin != &quot;&quot;) {                       // 전송할 핀 상태 값이 있으면 &quot;/ HTTP/1.1&quot;
        client.print(send_pin); 
        send_pin = &quot;&quot;;
      }
      if (send_Pwm_echo != &quot;&quot;) {                  // 전송할 PWM 상태(echo) 값이 있으면
        client.print(send_Pwm_echo);
        send_Pwm_echo = &quot;&quot;;
      }
      if (send_Pwm_slide != &quot;&quot;) {                 // 전송할 PWM 슬라이브 바 상태 값이 있으면
        client.print(send_Pwm_slide);
        send_Pwm_slide = &quot;&quot;;
      }
      if (send_text != &quot;&quot;) {                      // 전송할 텍스트가 있으면
        client.print(send_text);
        send_text = &quot;&quot;;
      }
    }
    else{
      if (income_wifi.indexOf(&quot;%%F8&quot;) != -1) {  // 슬라이드3, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F8&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));
        Serial.print(&quot;Date/Time: &quot;); Serial.println(wifi_temp); 
      }
      else if (income_wifi.indexOf(&quot;%%F9&quot;) != -1) {  // 슬라이드3, PWM 값 수신
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;%%F9&quot;)+4, income_wifi.indexOf(&quot;\n&quot;));
        Serial.print(&quot;Alarm set: &quot;); Serial.println(wifi_temp); 
      }
      else {  // 텍스트 시리얼 출력
        String wifi_temp = income_wifi.substring(income_wifi.indexOf(&quot;GET /&quot;)+5, income_wifi.indexOf(&quot;HTTP/1.1&quot;)-1);
        if (wifi_temp.indexOf(&quot;%20&quot;) != -1) { // 웹브라우저 공백문자 %20을 공백문자로 변경
          String space = &quot;%20&quot;;
          String space_convert = &quot; &quot;;
          wifi_temp.replace(space, space_convert);
        }
        Serial.println(wifi_temp);
      }
    }
    income_wifi = &quot;&quot;;
    client.stop();
  }
}

void send_pin_echo(uint8_t pin_val){  // 디지털 버튼 상태값 전송
  String s_temp =&quot;&quot;;
  s_temp += &quot;%%F0&quot;;
  s_temp += pin_val;
  s_temp += &quot;%%P1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_pin = s_temp;                       // 스케쥴 웹요청 응답
}

void send_pwm_echo(uint8_t slide, uint16_t pwm_val) { // PWM값 echo 전송
  String s_temp =&quot;&quot;;                                  
  s_temp += &quot;%%F3&quot;;
  s_temp += slide;
  s_temp += pwm_val;
  s_temp += &quot;%%E1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_Pwm_echo = s_temp;                  // 스케쥴 웹요청 응답
}

void send_pwm_slide(uint8_t slide, uint16_t pwm_val) { // 슬라이더 상태값 전송
  String s_temp =&quot;&quot;;
  s_temp += &quot;%%F4&quot;;
  s_temp += slide;
  s_temp += pwm_val;
  s_temp += &quot;%%S1&quot;;
  if (client.connected())  client.print(s_temp); // 사용자 웹요청 응답
  else  send_Pwm_slide = s_temp;                 // 스케쥴 웹요청 응답
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;arduino bluetooth controller PWM v3.5 &lt;span style=&quot;color: #333333;&quot;&gt;사용 예제 글&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/8&quot;&gt;[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 1편&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/9&quot;&gt;[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 2편&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/10&quot;&gt;[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 3편&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/11&quot;&gt;[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 4편&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/12&quot;&gt;[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 5편&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/17&quot;&gt;[arduino] - 블루투스 4.0 BLE 이용 아두이노 및 ESP32 원격제어&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/18&quot;&gt;[arduino] - 아두이노 - 시리얼통신 주요함수와 예제, String class&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/23&quot;&gt;[arduino] - 아두이노 - ESP01 wifi 모듈 무선 원격제어 그리고 시리얼 통신 - 6편&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/24&quot;&gt;[arduino] - ESP8266 - NodeMcu 1.0 와이파이 이용 원격제어(soft AP, wifi)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/25&quot;&gt;[arduino] - ESP32 - Dev Module 와이파이 이용 원격제어(soft AP, wifi)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 버전 유료앱(광고 제거)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot;&gt;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1671390274363&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ADUCON - Google Play 앱&quot; data-og-description=&quot;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 앱&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&amp;amp;hl=ko&amp;amp;gl=KR&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dH215F/hyQWuPdJyB/MAVs8qVa10KxkzQyvX0rzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/7akjy/hyQWtpe5yw/eOzlBx5PDPWihd36IgzfAK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/bZx16d/hyQWA9JYIP/1uIEwi74NliHsSpaNCMic0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.tistory.postpop.hmi&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dH215F/hyQWuPdJyB/MAVs8qVa10KxkzQyvX0rzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/7akjy/hyQWtpe5yw/eOzlBx5PDPWihd36IgzfAK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/bZx16d/hyQWA9JYIP/1uIEwi74NliHsSpaNCMic0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ADUCON - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 앱&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;※ 특징&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 블루투스 2.0 / 블루투스 4.0 BLE 연결 : HC-05, HC-06, HM-10, AT-09, BT05&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- WiFi를 통해 모듈의 Access Point 또는 공용 네트워크의 IP에 연결&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 15개의 디지털 버튼: 토글 및 푸시 버튼 속성 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 6개의 아날로그 컨트롤러(SeekBar): 최소 및 최대 값 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 메인 화면 표시 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 버튼 레이블 사용자 정의&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 설정값 저장 기능&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- RGB LED 제어를 위한 색상 선택기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- PWM 제어를 위한 다이얼 노브&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- Arduino Sketch의 HTML 페이지용 웹 뷰어&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 비밀번호를 이용하여 제어권한을 설정할 수 있는 대화창 제공&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 사용자 정의 대화창 제공(라디오박스, 체크박스, 텍스트 입력 등)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 앱이 실행되는 동안 화면이 계속 켜져 있음(화면이 꺼지는 것을 방지)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ARCON00.jpg&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s7SvH/btrTT7dTl7H/cJS5pIsQzHZCLkOyPRxf50/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s7SvH/btrTT7dTl7H/cJS5pIsQzHZCLkOyPRxf50/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s7SvH/btrTT7dTl7H/cJS5pIsQzHZCLkOyPRxf50/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs7SvH%2FbtrTT7dTl7H%2FcJS5pIsQzHZCLkOyPRxf50%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1206&quot; height=&quot;617&quot; data-filename=&quot;ARCON00.jpg&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Setting up Wi-Fi module ESP01 and basic code for Arduino remote control&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - Arduino WiFi remote control with ADUCON and ESP-01&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/184&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for bluetooth remote contol with HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/185&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - Arduino Bluetooth remote control with ADUCON and HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/187&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for BLE remote contol with BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/188&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - Arduino BLE remote control with ADUCON and BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/190&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - ESP32/NodeMcu Basic code for WiFi remote contol&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/191&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - ESP32/NodeMcu WiFi remote control with ADUCON&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/193&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - ESP32 Bluetooth remote control with ADUCON&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUCON] - ESP32 BLE remote control with ADUCON&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot;&gt;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1671390318551&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ADUPAD - Google Play 앱&quot; data-og-description=&quot;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 PAD&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&amp;amp;hl=ko&amp;amp;gl=KR&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Jj91w/hyQWFb99co/q8RCXgpnl8KkAyuMFIlVzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/oIsrI/hyQWG3bVzY/FbX059Ki7Og9Kbivv24fk1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/btiuyu/hyQWuuUME1/hY1leXZVH10hwzD3EJNui0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=io.kodular.skyship72.pad01&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Jj91w/hyQWFb99co/q8RCXgpnl8KkAyuMFIlVzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/oIsrI/hyQWG3bVzY/FbX059Ki7Og9Kbivv24fk1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/btiuyu/hyQWuuUME1/hY1leXZVH10hwzD3EJNui0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ADUPAD - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;무선(WiFi/Bluetooth/BLE)을 통한 Arduino 원격 제어 PAD&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 조이스틱 2개.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 1개의 중력 센서 컨트롤러.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 제어용 20개 버튼: 토글 및 푸시 버튼 속성 설정 기능.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;일부 버튼 레이블은 사용자 정의할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 비밀번호를 이용하여 제어권한을 설정할 수 있는 대화창 제공&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 사용자 정의 대화창 제공(라디오박스, 체크박스, 텍스트 입력 등)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 앱이 실행되는 동안 화면이 계속 켜져 있음(화면이 꺼지는 것을 방지)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;adupadOverview.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WtJVb/btrT0S04wa8/Ds0gttGFUM2yVkgAZwFAU1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WtJVb/btrT0S04wa8/Ds0gttGFUM2yVkgAZwFAU1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WtJVb/btrT0S04wa8/Ds0gttGFUM2yVkgAZwFAU1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWtJVb%2FbtrT0S04wa8%2FDs0gttGFUM2yVkgAZwFAU1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;594&quot; height=&quot;868&quot; data-filename=&quot;adupadOverview.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Setting up Wi-Fi module ESP01 and basic code for Arduino remote control&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/183&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - Arduino WiFi remote control with ADUPAD and ESP-01&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/184&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for bluetooth remote contol with HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/186&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - Arduino Bluetooth remote control with ADUPAD and HC-06&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/187&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - Arduino Basic code for BLE remote contol with BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/189&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - Arduino BLE remote control with ADUPAD and BT05&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/190&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino] - ESP32/NodeMcu Basic code for WiFi remote contol&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/192&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - ESP32/NodeMcu WiFi remote control with ADUPAD&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/194&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - ESP32 Bluetooth remote control with ADUPAD&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://postpop.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Arduino/ADUPAD] - ESP32 BLE remote control with ADUPAD&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>arduino</category>
      <category>BLE</category>
      <category>Bluetooth</category>
      <category>PWM</category>
      <category>soft ap</category>
      <category>아두이노</category>
      <category>원격제어</category>
      <author>SmartPop</author>
      <guid isPermaLink="true">https://nxpop.tistory.com/2</guid>
      <comments>https://nxpop.tistory.com/2#entry2comment</comments>
      <pubDate>Fri, 30 Aug 2019 04:54:04 +0900</pubDate>
    </item>
    <item>
      <title>개인정보처리방침</title>
      <link>https://nxpop.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 개인정보의 처리 목적&lt;/b&gt;&amp;nbsp;(&amp;lsquo;&lt;a href=&quot;https://nxpop.tistory.com&quot;&gt;https://nxpop.tistory.com&lt;/a&gt;&amp;rsquo;이하 'nxpop') 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.&lt;br /&gt;- 고객 가입의사 확인, 고객에 대한 서비스 제공에 따른 본인 식별.인증, 회원자격 유지.관리, 물품 또는 서비스 공급에 따른 금액 결제, 물품 또는 서비스의 공급.배송 등&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. 개인정보의 처리 및 보유 기간&lt;/b&gt;&lt;br /&gt;①&amp;nbsp;(&amp;lsquo;&lt;a href=&quot;https://nxpop.tistory.com&quot;&gt;https://nxpop.tistory.com&lt;/a&gt;&amp;rsquo;이하 'nxpop') 은(는) 정보주체로부터 개인정보를 수집할 때 동의 받은 개인정보 보유․이용기간 또는 법령에 따른 개인정보 보유․이용기간 내에서 개인정보를 처리․보유합니다.&lt;br /&gt;&lt;br /&gt;② 구체적인 개인정보 처리 및 보유 기간은 다음과 같습니다.&lt;br /&gt;☞ 아래 예시를 참고하여 개인정보 처리업무와 개인정보 처리업무에 대한 보유기간 및 관련 법령, 근거 등을 기재합니다.&lt;br /&gt;(예시)- 고객 가입 및 관리 : 서비스 이용계약 또는 회원가입 해지시까지, 다만 채권․채무관계 잔존시에는 해당 채권․채무관계 정산시까지&lt;br /&gt;- 전자상거래에서의 계약․청약철회, 대금결제, 재화 등 공급기록 : 5년&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 정보주체와 법정대리인의 권리&amp;middot;의무 및 그 행사방법 이용자는 개인정보주체로써 다음과 같은 권리를 행사할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 정보주체는 nxpop(&amp;lsquo;&lt;a href=&quot;https://nxpop.tistory.com&quot;&gt;https://nxpop.tistory.com&lt;/a&gt;&amp;rsquo;이하 &amp;lsquo;nxpop) 에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.&lt;br /&gt;1. 개인정보 열람요구&lt;br /&gt;2. 오류 등이 있을 경우 정정 요구&lt;br /&gt;3. 삭제요구&lt;br /&gt;4. 처리정지 요구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 처리하는 개인정보의 항목 작성&lt;/b&gt;&lt;br /&gt;①&amp;nbsp;('&lt;a href=&quot;https://nxpop.tistory.com'이하&quot;&gt;https://nxpop.tistory.com'이하&lt;/a&gt;&amp;nbsp;'nxpop')은(는) 다음의 개인정보 항목을 처리하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;lt;마케팅 및 광고에의 활용&amp;gt;&lt;br /&gt;- 필수항목 : 서비스 이용기록&lt;br /&gt;- 선택항목 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 개인정보의 파기('nxpop')은(는) 원칙적으로 개인정보 처리목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-파기절차&lt;br /&gt;이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.&lt;br /&gt;&lt;br /&gt;-파기기한&lt;br /&gt;이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 개인정보 자동 수집 장치의 설치&amp;bull;운영 및 거부에 관한 사항&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nxpop 은 정보주체의 이용정보를 저장하고 수시로 불러오는 &amp;lsquo;쿠키&amp;rsquo;를 사용하지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. 개인정보 보호책임자 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;① nxpop(&amp;lsquo;&lt;a href=&quot;https://nxpop.tistory.com&quot;&gt;https://nxpop.tistory.com&lt;/a&gt;&amp;rsquo;이하 &amp;lsquo;nxpop) 은(는) 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;▶ 개인정보 보호책임자&lt;br /&gt;성명 :홍성호&lt;br /&gt;직책 :작성자&lt;br /&gt;직급 :작성자&lt;br /&gt;연락처 :010-5725-3580, skyship72@gmail.com,&lt;br /&gt;※ 개인정보 보호 담당부서로 연결됩니다.&lt;br /&gt;&lt;br /&gt;▶ 개인정보 보호 담당부서&lt;br /&gt;부서명 :홍성호&lt;br /&gt;담당자 :작성자&lt;br /&gt;연락처 :01057253580, skyship72@gmail.com,&lt;br /&gt;② 정보주체께서는 nxpop(&amp;lsquo;&lt;a href=&quot;https://nxpop.tistory.com&quot;&gt;https://nxpop.tistory.com&lt;/a&gt;&amp;rsquo;이하 &amp;lsquo;nxpop) 의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의하실 수 있습니다. nxpop(&amp;lsquo;&lt;a href=&quot;https://nxpop.tistory.com&quot;&gt;https://nxpop.tistory.com&lt;/a&gt;&amp;rsquo;이하 &amp;lsquo;nxpop) 은(는) 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8. 개인정보 처리방침 변경&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;9. 개인정보의 안전성 확보 조치 ('nxpop')은(는) 개인정보보호법 제29조에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 및 물리적 조치를 하고 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 정기적인 자체 감사 실시&lt;br /&gt;개인정보 취급 관련 안정성 확보를 위해 정기적(분기 1회)으로 자체 감사를 실시하고 있습니다.&lt;br /&gt;&lt;br /&gt;2. 개인정보에 대한 접근 제한&lt;br /&gt;개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여 외부로부터의 무단 접근을 통제하고 있습니다.&lt;br /&gt;&lt;br /&gt;3. 문서보안을 위한 잠금장치 사용&lt;br /&gt;개인정보가 포함된 서류, 보조저장매체 등을 잠금장치가 있는 안전한 장소에 보관하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>SmartPop</author>
      <guid isPermaLink="true">https://nxpop.tistory.com/1</guid>
      <comments>https://nxpop.tistory.com/1#entry1comment</comments>
      <pubDate>Fri, 30 Aug 2019 04:27:00 +0900</pubDate>
    </item>
  </channel>
</rss>