<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pawat Saengduan</title>
    <description>The latest articles on DEV Community by Pawat Saengduan (@pawatsaengduan).</description>
    <link>https://dev.to/pawatsaengduan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F308745%2F1363e645-1c05-41ab-9c94-7c7d6f1d0d3b.jpg</url>
      <title>DEV Community: Pawat Saengduan</title>
      <link>https://dev.to/pawatsaengduan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pawatsaengduan"/>
    <language>en</language>
    <item>
      <title>ใช้ rclone ซิงค์ข้อมูลกับ Google Drive</title>
      <dc:creator>Pawat Saengduan</dc:creator>
      <pubDate>Thu, 09 Jul 2020 10:40:30 +0000</pubDate>
      <link>https://dev.to/pawatsaengduan/rclone-google-drive-1156</link>
      <guid>https://dev.to/pawatsaengduan/rclone-google-drive-1156</guid>
      <description>&lt;p&gt;&lt;strong&gt;สวัสดีคร้าบบ!!&lt;/strong&gt; 😁 &lt;strong&gt;บทความ&lt;/strong&gt;นี้ก็จะบอกวิธีที่จะ..... ใช้ &lt;strong&gt;rclone ซิงค์ข้อมูลกับ Google Drive&lt;/strong&gt; 😮&lt;/p&gt;

&lt;p&gt;แล้ว &lt;strong&gt;rclone&lt;/strong&gt; คืออะไร.. &lt;br&gt;
มันคือ &lt;strong&gt;Open-source tools&lt;/strong&gt; ที่เราสามารถ &lt;strong&gt;Copy file&lt;/strong&gt; ของเราหรืออะไรก็แล้วแต่ ไปเก็บไว้บน &lt;strong&gt;Cloud Storage&lt;/strong&gt; ต่างๆ ได้&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://network.cmu.ac.th/wiki/index.php/BackUp_Data_to_Google_Drive#:~:text=rclone%20%E0%B9%80%E0%B8%9B%E0%B9%87%E0%B8%99%20open%20source%20tool,%E0%B8%97%E0%B8%B3%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%88%E0%B8%B0%E0%B8%84%E0%B8%A5%E0%B9%89%E0%B8%B2%E0%B8%A2%E0%B8%81%E0%B8%B1%E0%B8%9A%20rsync"&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;งั้นเราก็มาเริ่มกันเลยดีกว่า 😁 แต่ก่อนจะไปเริ่ม.. เรามาลง &lt;strong&gt;Software&lt;/strong&gt; ก่อนดีกว่า&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://rclone.org/downloads/"&gt;&lt;strong&gt;rclone&lt;/strong&gt;&lt;/a&gt; ( &lt;a href="https://rclone.org/"&gt;เป็นตัวหลักเลย&lt;/a&gt; )&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ต่อไปก็ Google Accounts และ Google Drive แล้วก็มาลองดูกันดีกว่าครับ&lt;/p&gt;


&lt;h1&gt;
  
  
  CLI
&lt;/h1&gt;

&lt;p&gt;มาถึงเราก็ &lt;strong&gt;run&lt;/strong&gt; คำสั่ง &lt;strong&gt;rclone config&lt;/strong&gt; ก่อนเลย &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mHb2vtev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wzyjjpz6hmhcebn7wmh4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mHb2vtev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wzyjjpz6hmhcebn7wmh4.png" alt="rclone config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ต่อไปก็จะมีตัวเลือกอยู่ &lt;strong&gt;3&lt;/strong&gt; อย่างซึ่งเราจะเลือก&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;New remote&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BRMqdkd4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j6hap862lfbl3s3yipql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BRMqdkd4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j6hap862lfbl3s3yipql.png" alt="New Remote"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เสร็จแล้ว.. เราก็ตั้งชื่อ &lt;strong&gt;Remote&lt;/strong&gt; ของเรา 😮 เพื่อไม่ให้เข้าถึงยากก็ใช้คำง่ายๆ เอาครับ อย่างเช่น &lt;strong&gt;remote, gdrive, drive, etc..&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R1iLJXtb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gqxkwmdfp0atqd7xdxir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R1iLJXtb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gqxkwmdfp0atqd7xdxir.png" alt="Remote Name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;คราวนี้มันจะมี&lt;strong&gt;หัวข้อ&lt;/strong&gt;ให้เราเลือก&lt;strong&gt;เต็มไปหมดเลยย!! 😕&lt;/strong&gt; เราก็ลองหาคำว่า &lt;code&gt;Google Drive&lt;/code&gt; ซึ่งมันอยู่ในเลขที่ 13&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ih9GyBAv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pkh899ejauejnszde6j1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ih9GyBAv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pkh899ejauejnszde6j1.png" alt="Select Storage Type"&gt;&lt;/a&gt;&lt;br&gt;
แล้วเราก็พิมพ์คำว่า &lt;strong&gt;&lt;code&gt;drive&lt;/code&gt;&lt;/strong&gt; หรือเลข &lt;strong&gt;13&lt;/strong&gt; แล้วกด &lt;strong&gt;ENTER&lt;/strong&gt; ไปได้เลย!! 😀&lt;/p&gt;

&lt;p&gt;ต่อไปเขาก็จะให้เราใส่ &lt;code&gt;Client ID&lt;/code&gt;  อ้าวว.. แล้วจะเอา ID นั้นมาจากไหนละ 🙄&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yuhGRRmh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/67locp7yx0a051dn4288.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yuhGRRmh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/67locp7yx0a051dn4288.png" alt="rclone need client id"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ซึ่งก็ต้องไปเอา &lt;strong&gt;ID&lt;/strong&gt; จาก &lt;a href="https://console.developers.google.com/"&gt;&lt;strong&gt;Google API&lt;/strong&gt;&lt;/a&gt; 😮 ครับผม!&lt;/p&gt;

&lt;p&gt;พอเข้าไปเราก็ &lt;strong&gt;Create Projects&lt;/strong&gt; เพื่อที่จะสร้าง &lt;strong&gt;ID&lt;/strong&gt; 🙂&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bW0j3xM---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2uy0mgiwyv548nx67gom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bW0j3xM---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2uy0mgiwyv548nx67gom.png" alt="CREATE PROJECTS | Google Cloud Platform"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วตั้งชื่อ&lt;strong&gt;โปรเจกต์&lt;/strong&gt; พอตั้งชื่อแล้วก็กด &lt;code&gt;CREATE&lt;/code&gt; &lt;strong&gt;ไปเลย!!&lt;/strong&gt; 😁&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mVJ4xOK8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oypbqpf1c3lysu24sqtu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mVJ4xOK8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oypbqpf1c3lysu24sqtu.png" alt="CREATE PROJECTS 2 | Google Cloud Platform"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากนั้นก็กด &lt;code&gt;+ ENABLE APIS AND SERVICES&lt;/code&gt; 👍&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vGi3pj5e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ai2qhht4ngjyvt6mw5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vGi3pj5e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ai2qhht4ngjyvt6mw5j.png" alt="ADD API +"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากนั้นก็หา &lt;strong&gt;Google Drive API&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M2dtaRUM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ubnsrb7bl5u3af6tekzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M2dtaRUM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ubnsrb7bl5u3af6tekzl.png" alt="HOME API"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tcy2iSTM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x2rk6pz1wee8625e9pg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tcy2iSTM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x2rk6pz1wee8625e9pg2.png" alt="API SEARCH"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากนั้นก็กด &lt;code&gt;ENABLE&lt;/code&gt; เลย!! ✨ &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aL1_B-_V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/scb6gg0veh29ifhl0ev4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aL1_B-_V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/scb6gg0veh29ifhl0ev4.png" alt="ENABLE APIS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากนั้นพอเสร็จแล้ว ก็กดไปที่ &lt;code&gt;Credentials&lt;/code&gt; ไม่ใช่ &lt;code&gt;Create Credentials&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nlYkgpX8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/be9flmq5r7qy7phs7ag8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nlYkgpX8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/be9flmq5r7qy7phs7ag8.png" alt="WHEN APIS FETCH FINISH"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;พอกดไปที่ &lt;code&gt;Credentials&lt;/code&gt; แล้วให้กด &lt;code&gt;CONFIGURE CONSENT SCREEN&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zo9lmczY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b342dwqxq49h5bw6pz1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zo9lmczY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b342dwqxq49h5bw6pz1l.png" alt="CONFIGURE CONSENT SCREEN"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วก็เลือก &lt;code&gt;External&lt;/code&gt; แล้วกด  &lt;code&gt;CREATE&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4IdU0vXD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1tec1y5t3l55mt1t9v0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4IdU0vXD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1tec1y5t3l55mt1t9v0s.png" alt="Configure External"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากนั้นมันก็จะแสดงหน้า &lt;strong&gt;OAuth consent screen&lt;/strong&gt; ซึ่งเราจะใส่แค่ชื่อ &lt;strong&gt;App&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tXn-GpLM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i8qzgwly9dyt3r7dcv0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tXn-GpLM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i8qzgwly9dyt3r7dcv0w.png" alt="Edit OAuth App"&gt;&lt;/a&gt;&lt;br&gt;
หลังจากนั้นก็กด &lt;code&gt;Save&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eoFat3Cl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/silc30b58a67sy65ye3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eoFat3Cl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/silc30b58a67sy65ye3y.png" alt="Save APP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ต่อไปก็เลือกเมนู &lt;code&gt;Credentials&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JdkzqWv6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g4wsxrsnoxyvqqyv3gjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JdkzqWv6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g4wsxrsnoxyvqqyv3gjt.png" alt="Credentials Menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วกด &lt;code&gt;+ CREATE CREDENTIALS&lt;/code&gt; แล้วเลือก OAuth Client ID&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---m2cfCPJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/egdnzwgrp68yrp42skj3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---m2cfCPJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/egdnzwgrp68yrp42skj3.png" alt="Create CREDENTIALS OAuth"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วเลือก &lt;code&gt;Application type&lt;/code&gt; เป็น &lt;code&gt;Desktop app&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NbC0RFvT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6iojrut3z56bsd10z3fl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NbC0RFvT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6iojrut3z56bsd10z3fl.png" alt="App type"&gt;&lt;/a&gt;&lt;br&gt;
แล้วกด &lt;code&gt;CREATE&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;หลังจากนั้นเราจะได้ &lt;strong&gt;Client ID&lt;/strong&gt; และ &lt;strong&gt;Client Secret&lt;/strong&gt; แล้ว 🎉✨&lt;br&gt;
แล้วเราก็เอา &lt;strong&gt;Client ID&lt;/strong&gt; ไปใส่ใน Terminal&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E4d954Hd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tebzxix9kx6uwwl2bu2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E4d954Hd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tebzxix9kx6uwwl2bu2y.png" alt="Insert CID"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วก็ตามด้วย Client Secret&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q5OHyiCO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n041rjhvycmkucy5lhe4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q5OHyiCO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n041rjhvycmkucy5lhe4.png" alt="Insert CSID"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วเราก็กำหนดว่าให้ rclone เข้าถึงไดร์ฟได้แบบไหน&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KYuzCweM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6zgzxv4hj9rhm9jr5xm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KYuzCweM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6zgzxv4hj9rhm9jr5xm.png" alt="Drive Access"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ต่อไปเขาก็จะให้เรากำหนดค่าต่างๆ ซึ่งผมเองก็กำหนดออกมาแล้ว&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jZa2g9p3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t9egjwtrnvu6piloz41m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jZa2g9p3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t9egjwtrnvu6piloz41m.png" alt="Settings Wizard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เมื่อเสร็จแล้ว มันก็จะเปิด &lt;strong&gt;Browser&lt;/strong&gt; ขึ้นมาแล้วเราก็เลือก &lt;strong&gt;Google Accounts&lt;/strong&gt; เลย!! ✨&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bNu894hj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7bpvev0eno4qbyj4fx0m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bNu894hj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7bpvev0eno4qbyj4fx0m.png" alt="Select Google Accounts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ถ้ามันขึ้นเตือนว่า&lt;strong&gt;อันตราย เราก็กดอนุญาติต่อเลยครับ!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HN-tm0-t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1c3uvjnq9fc0r7rj894f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HN-tm0-t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1c3uvjnq9fc0r7rj894f.png" alt="Is Danger?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วก็ทำตาม &lt;strong&gt;Step ไปเรื่อยๆ&lt;/strong&gt; เลยย!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AhVBWSt5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0kchinc799umyz9luf0c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AhVBWSt5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0kchinc799umyz9luf0c.png" alt="1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dqj3J5hK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/frv1cciuz8gjk4w0kgkh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dqj3J5hK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/frv1cciuz8gjk4w0kgkh.png" alt="2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ในตอนนี้ &lt;strong&gt;remote&lt;/strong&gt; ของเราก็พร้อมใช้งานแล้ว
&lt;/h2&gt;

&lt;h3&gt;
  
  
  แสดงโฟล์เดอร์ปกติใน &lt;strong&gt;Remote (Google Drive)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CE_rnygO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/922uosb77xgfdsrkrji8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CE_rnygO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/922uosb77xgfdsrkrji8.png" alt="List Directory (top-level)"&gt;&lt;/a&gt;&lt;br&gt;
โดยคำว่า &lt;strong&gt;remote&lt;/strong&gt; จะเป็นชื่อ &lt;strong&gt;remote&lt;/strong&gt; ที่เรา &lt;strong&gt;set&lt;/strong&gt; เอาไว้&lt;/p&gt;

&lt;p&gt;ถ้าหากเราต้องการเข้าโฟล์เดอร์อื่น&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g59TetCW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hgfzhfyw0jmbxpm1npp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g59TetCW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hgfzhfyw0jmbxpm1npp2.png" alt="List in folder"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;ก็จะประมาณนี้นะครับ สำหรับการใช้ &lt;strong&gt;rclone&lt;/strong&gt; เพื่อซิงค์กับ &lt;strong&gt;Google Drive&lt;/strong&gt; ก็จบไปแล้วนะครับ &lt;strong&gt;เจอกันบทความหน้าครับ  สวัสดีคร้าาาบบบบ!!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rclone</category>
      <category>googledrive</category>
      <category>cli</category>
    </item>
    <item>
      <title>เปิดใช้งาน ngrok เมื่อเปิดเครื่อง (Linux)</title>
      <dc:creator>Pawat Saengduan</dc:creator>
      <pubDate>Thu, 09 Jul 2020 06:06:17 +0000</pubDate>
      <link>https://dev.to/pawatsaengduan/ngrok-linux-3om5</link>
      <guid>https://dev.to/pawatsaengduan/ngrok-linux-3om5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;เปิดใช้งาน &lt;strong&gt;ngrok&lt;/strong&gt; เมื่อเปิดเครื่อง&lt;br&gt;
ตามนั้นแหละครับ...  🤨 &lt;strong&gt;มาเริ่มกันเลยดีกว่า!!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;เราก็มาเตรียม &lt;strong&gt;Software&lt;/strong&gt; กันดีกว่า:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.linux.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;Linux OS&lt;/strong&gt;&lt;/a&gt; ( มันต้องใช้อยู่แล้วแหละ )&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ngrok.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;ngrok&lt;/strong&gt;&lt;/a&gt; ( เพราะว่าวันนี้จะให้ &lt;a href="https://ngrok.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;ngrok&lt;/strong&gt;&lt;/a&gt; ทำงาน )&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text Editor&lt;/strong&gt; เช่น &lt;strong&gt;Vim&lt;/strong&gt;, &lt;strong&gt;VS Code&lt;/strong&gt;, &lt;strong&gt;Nano&lt;/strong&gt;, &lt;strong&gt;etc..&lt;/strong&gt; ( เอามาเขียนไฟล์ &lt;strong&gt;Services&lt;/strong&gt; )&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;มาดู&lt;strong&gt;วิธีสร้าง Services&lt;/strong&gt; กันดีกว่า&lt;strong&gt;!!!&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;เปิดมาก็&lt;strong&gt;สร้างไฟล์&lt;/strong&gt;ก่อนเลย ใช้ &lt;strong&gt;Text Editor&lt;/strong&gt; ตัวไหนก็ได้
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx3s5m6ux26rntp29p24z.png" alt="Service code template"&gt;
Code:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=(Service Descriptions)
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=(Start Execution)

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เปลี่ยน &lt;strong&gt;(Service Descriptions)&lt;/strong&gt; และ &lt;strong&gt;(Start Execution)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Service Descriptions → คำอธิบายของ Services&lt;/li&gt;
&lt;li&gt;Start Execution → คำสั่งที่ต้องการที่จะรัน&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;แล้ว Save ไปที่&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/etc/systemd/system/(ชื่ออะไรก็ได ้แต่อย่าซ้ำกับที่มีอยู่แล้ว).service&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fja1wwq5x9mr6mmax97r7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fja1wwq5x9mr6mmax97r7.png" alt="Create a service file"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo vi /etc/systemd/system/ngrok-auto.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9ayntiss8c8utxz13eoj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9ayntiss8c8utxz13eoj.png" alt="Code"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=ngrok auto-open
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/opt/ngrok-linux64 --proto=tcp cnx 22

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;เปิดใช้งาน &lt;strong&gt;Service&lt;/strong&gt; แล้วให้เปิดใช้งานเมื่อ&lt;strong&gt;บูต&lt;/strong&gt;
เปิดใช้งาน &lt;strong&gt;Service&lt;/strong&gt;:
&lt;a href="https://dev-to-uploads.s3.amazonaws.com/i/b2hm45aym46aeoixfwhh.png" rel="noopener noreferrer"&gt;!Start Service&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ให้&lt;strong&gt;เปิดทำงาน&lt;/strong&gt;เมื่อเครื่อง&lt;strong&gt;บูต&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp65bu2txw6m2137ejxj5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp65bu2txw6m2137ejxj5.png" alt="Enable Service to startup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuzeuu7n11ivq5m157i1g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuzeuu7n11ivq5m157i1g.png" alt="Start service &amp;amp; Check the status"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgtdx3yohdtmcok1l37bf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgtdx3yohdtmcok1l37bf.png" alt="Enable the service"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;พอเรา &lt;strong&gt;Enable&lt;/strong&gt; มัน มันก็จะ &lt;strong&gt;Ouput Symlink&lt;/strong&gt; ออกมา&lt;br&gt;
&lt;strong&gt;จบแล้วครับ สวัสดีคร้าบบ!!!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ngrok</category>
      <category>service</category>
    </item>
    <item>
      <title>เปิด-ปิดไฟผ่านบอร์ด ESP32 โดยใช้ ESP-BLE-MESH ร่วมกับ nRF Mesh</title>
      <dc:creator>Pawat Saengduan</dc:creator>
      <pubDate>Sat, 13 Jun 2020 08:16:30 +0000</pubDate>
      <link>https://dev.to/pawatsaengduan/esp32-esp-ble-mesh-nrf-mesh-5gkc</link>
      <guid>https://dev.to/pawatsaengduan/esp32-esp-ble-mesh-nrf-mesh-5gkc</guid>
      <description>&lt;p&gt;&lt;strong&gt;สวัสดีคร้าบบผม..!?!!&lt;/strong&gt; กลับมากันอีกแล้วนะครับ วันนี้มาทำอะไร.?? 😕&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YqCrIm7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i9qec4bimvl8vibh4s2k.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YqCrIm7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i9qec4bimvl8vibh4s2k.jpg" alt="หน้าปก"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  เปิด-ปิดไฟผ่านบอร์ด &lt;strong&gt;ESP32&lt;/strong&gt; โดยใช้ &lt;strong&gt;ESP-BLE-MESH&lt;/strong&gt; ร่วมกับ &lt;strong&gt;nRF Mesh&lt;/strong&gt;
&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;นั่นเองครับผม..  &lt;strong&gt;เอาเป็นว่ามาเริ่มกันเลยดีกว่าครับผม!!&lt;/strong&gt; 😁&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aSzWwLOO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.espressif.com/projects/esp-idf/en/latest/_images/mesh-bidirectional-data-stream.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aSzWwLOO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.espressif.com/projects/esp-idf/en/latest/_images/mesh-bidirectional-data-stream.png" alt="ESP-MESH Network"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ESP Mesh&lt;/strong&gt; คืออะไร&lt;strong&gt;..?!??&lt;/strong&gt; 🤔 ด้วยความที่ว่ามันค่อนข้างละเอียด.. ให้ไปอ่านใน &lt;a href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/esp-ble-mesh/ble-mesh-index.html"&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/a&gt; เอาเองน่าจะเข้าใจมากกว่า.. ถ้าผม&lt;strong&gt;สรุป&lt;/strong&gt;เองน่าจะ&lt;strong&gt;งงมากๆ 5555+&lt;/strong&gt; 😂&lt;/p&gt;

&lt;p&gt;มาๆ เริ่มลง&lt;strong&gt;ซอฟต์แวร์&lt;/strong&gt;ที่ต้องใช้บนคอมพิวเตอร์ก่อนนะครับ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#installation-step-by-step"&gt;ESP-IDF&lt;/a&gt; ( &lt;strong&gt;ESP-IDF&lt;/strong&gt; เป็น&lt;strong&gt;เฟรมเวิร์ค&lt;/strong&gt;ที่ทำโดย &lt;strong&gt;Espressif&lt;/strong&gt; ลงถึงขั้นตอนที่ 4 )&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ต่อไป.. ก็&lt;strong&gt;ซอฟต์แวร์&lt;/strong&gt;ที่ใช้ในโทรศัพท์ ( แนะนำ Android ):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ANDROID ] &lt;a href="https://github.com/NordicSemiconductor/Android-nRF-Mesh-Library/releases/download/v2.1.4/nRF.Mesh.-.V.-.2.1.4.apk"&gt;nRF Mesh&lt;/a&gt; &lt;strong&gt;(v.2.1.4)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;[ IOS ] &lt;a href="https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/releases/tag/2.1.0"&gt;nRF Mesh&lt;/a&gt; &lt;strong&gt;(v.2.0.0 | Build เองนะจ้า)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;nRF Mesh&lt;/strong&gt; สำหรับควบคุม &lt;strong&gt;Node&lt;/strong&gt; นะครับ ใช้ได้แค่ &lt;strong&gt;Version 2.0.0 -- 2.1.4&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;ต่อไปก็.. &lt;strong&gt;เขียนโค้ด&lt;/strong&gt;ฮะ... ซึ่งเราจะ&lt;strong&gt;ใช้ Example&lt;/strong&gt; ที่ &lt;strong&gt;ESP-IDF&lt;/strong&gt; มีมาให้นะครับ&lt;/p&gt;




&lt;h2&gt;
  
  
  เขียนโค้ด
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connect กับ Node
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;มาถึงเราก็ลง &lt;a href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/"&gt;&lt;strong&gt;ESP-IDF&lt;/strong&gt;&lt;/a&gt; เลยย...  ( ลงที่ &lt;strong&gt;Home Folder&lt;/strong&gt; จะดีที่สุด )&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;เปิด &lt;strong&gt;Terminal&lt;/strong&gt; มาแล้ว.. ก็ &lt;code&gt;cd&lt;/code&gt; เข้า&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Phf89pme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9azjsd9d97h6dq71jhri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Phf89pme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9azjsd9d97h6dq71jhri.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;เราก็มา &lt;strong&gt;Config ว่าเราใช้บอร์ด&lt;/strong&gt;อะไร&lt;strong&gt;ซึ่งใน Examples นี้ใช้บอร์ด ESP32&lt;/strong&gt; นั้นเอง&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ilbUAg8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/in5vtu8jy7ie7mrptqu4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ilbUAg8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/in5vtu8jy7ie7mrptqu4.png" alt="idf.py menuconfig"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;พอรันแล้วก็รอสักครู่ แล้วสักพักจะขึ้น &lt;strong&gt;Menu&lt;/strong&gt; ให้&lt;strong&gt;เลือกตามนี้&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eTOU6WDK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/isezguwonj37zplztwkl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eTOU6WDK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/isezguwonj37zplztwkl.png" alt="Root Menuconfig"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;กด &lt;strong&gt;ลูกศรขึ้นหรือลง&lt;/strong&gt; เพื่อขยับ &lt;strong&gt;Options&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;กด &lt;strong&gt;RETURN&lt;/strong&gt; เพื่อเลือก &lt;strong&gt;Options&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ซึ่งเราจะเลือก &lt;strong&gt;Examples Configuration&lt;/strong&gt; แล้วเราก็จะได้แบบนี้&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7SFfbrqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b2mujlggsbo4bfjmwvet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7SFfbrqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b2mujlggsbo4bfjmwvet.png" alt="'Example Configuration' Menuconfig"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;เราก็เลือก &lt;strong&gt;Board selection for BLE Mesh (ESP32-xxxx)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QYhB5b0k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t9rjp9zt1mkw9q248ddw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QYhB5b0k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t9rjp9zt1mkw9q248ddw.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ต่อไปเราก็เลือกบอร์ดโดยการกด &lt;strong&gt;RETURN (ENTER)&lt;/strong&gt; เสร็จแล้วเราก็ &lt;strong&gt;RETURN&lt;/strong&gt; ออกมาแล้วก็ &lt;strong&gt;Save&lt;/strong&gt; โดยการ&lt;strong&gt;กด S แล้วกด RETURN (ENTER)&lt;/strong&gt; แล้วก็กด &lt;strong&gt;Q&lt;/strong&gt; เพื่อออก&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ต่อไปเราก็จะไปตั้งค่าว่า &lt;strong&gt;Pin&lt;/strong&gt; ไหนที่เราต้องการ&lt;strong&gt;เปิดปิด Pin ซึ่งจะอยู่ใน root/main/board.h&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KWdp1AL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p6kt1b20rckc3x9wiviv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KWdp1AL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p6kt1b20rckc3x9wiviv.png" alt="Code"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ต่อไป Build โค้ดของเราโดยพิมพ์คำว่า&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;idf.py build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;หลังจาก Build เราก็มา Flash กันซึ่งเราก็เสียบบอร์ดกับคอมพิวเตอร์ก่อนแล้ว พิมพ์คำว่า
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;idf.py flash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;พอพิมพ์เสร็จแล้วก็&lt;strong&gt;รัน&lt;/strong&gt;เลย หลังจากนั้นมันก็จะ &lt;strong&gt;Flash&lt;/strong&gt; ทันที&lt;br&gt;
ถ้ามัน Flash ผ่านก็ไปดูในส่วนของ &lt;strong&gt;nRF Mesh กันต่อเลยคร้าบบ!!&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  nRF Mesh
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;nRF Mesh (v2.1.4)&lt;/strong&gt; เป็นแอพสำหรับ &lt;strong&gt;Interface&lt;/strong&gt; กับ&lt;strong&gt;เน็ตเวิร์คประเภท Mesh&lt;/strong&gt; นะครับ&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;มาถึงก็เปิด&lt;strong&gt;แอพ nRF Mesh&lt;/strong&gt; เลยก่อนเลยครับผม..&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ljJqViwg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7g75bkn503d09edp94rf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ljJqViwg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7g75bkn503d09edp94rf.jpg" alt="nRF Mesh 2.1.4"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;กดปุ่มสีฟ้ารูปบวกด้านขวาล่างเพื่อเพิ่ม &lt;strong&gt;Node&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zaKKpd5G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xdbr3mi7exibyvg077g4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zaKKpd5G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xdbr3mi7exibyvg077g4.jpg" alt="Add Node Buttons"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;เปิด &lt;strong&gt;Bluetooth&lt;/strong&gt; แล้วหา Device ที่ชื่อว่า &lt;strong&gt;ESP-BLE-MESH&lt;/strong&gt; แล้วกดเข้าไปได้เลย&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EW67V02q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ve7tf08y8afrk6fvuq35.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EW67V02q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ve7tf08y8afrk6fvuq35.jpg" alt="Add Node Device"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ต่อไปมันก็จะขึ้น ข้อมูลของ &lt;strong&gt;Mesh Device&lt;/strong&gt; ที่เราเลือกครับ แต่เป็นเพียงข้อมูลเล็กๆ&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KLavCBIc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j1dd45y5utv8iwnwjsm4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KLavCBIc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j1dd45y5utv8iwnwjsm4.jpg" alt="Device"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เราสามารถเปลี่ยนชื่อ &lt;strong&gt;Device&lt;/strong&gt; ได้นะครับ แสดงบนแอพเท่านั้น บนรายชื่อที่ให้ &lt;strong&gt;Add Node&lt;/strong&gt; จะเป็นชื่อเดิม
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Duwjnuql--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2ww718b740qz98rtbxbq.jpg" alt="Rename Mesh Device"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ต่อไปเราก็กด &lt;strong&gt;Identify&lt;/strong&gt; มันก็จะแสดงผลข้อมูลของ &lt;strong&gt;Mesh Device&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9riKUvMe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jd9y50j9am6ljdzjur6a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9riKUvMe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jd9y50j9am6ljdzjur6a.jpg" alt="Identify Button"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DOR_rV57--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/54dwbcwinhmjfz5kue2n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DOR_rV57--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/54dwbcwinhmjfz5kue2n.jpg" alt="Mesh Info"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ต่อไปเราก็กด &lt;strong&gt;Provision&lt;/strong&gt; เพื่อ &lt;strong&gt;Connect&lt;/strong&gt; กับ &lt;strong&gt;Node&lt;/strong&gt; เลยครับ&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PeDe85Rl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e02bgsil6ooilfv0olg4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PeDe85Rl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e02bgsil6ooilfv0olg4.jpg" alt="Provision Button"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yJkXzKt2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/je6ry6ediad6t8t9dfcm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yJkXzKt2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/je6ry6ediad6t8t9dfcm.jpg" alt="While Provision"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ถ้าไม่มี Error อะไรขึ้นก็จะเป็นแบบนี้ครับ&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eSJRlnw1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4392l3da3na43umgfi3c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eSJRlnw1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4392l3da3na43umgfi3c.jpg" alt="Provision Success"&gt;&lt;/a&gt;&lt;br&gt;
แต่ถ้าหากมี แล้วขึ้นคำว่า &lt;strong&gt;Initial Configuration Failed&lt;/strong&gt; ก็ให้&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;กด &lt;strong&gt;CONNECT&lt;/strong&gt; ซึ่งอยู่ด้านขวาบน
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eBG-TeGw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7v2rzpkml2qlss8nkbwe.jpg" alt="CONNECT Button"&gt;
&lt;/li&gt;
&lt;li&gt;หลังจากนั้นก็กดเข้า Device ที่ปรากฎหน้า Network
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lp9kzYvC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n58wtvdsl531qelac4ue.jpg" alt="Click the Device"&gt;
&lt;/li&gt;
&lt;li&gt;หลังจากนั้นก็กด &lt;strong&gt;'GET COMPOSITION DATA'&lt;/strong&gt; ที่อยู่ใต้ Elements
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BzZzJYJK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mv1tx28779neg5b540ys.png" alt="Click GET COMPOSITION DATA"&gt;
&lt;/li&gt;
&lt;li&gt;กด &lt;strong&gt;'ADD'&lt;/strong&gt; ที่อยู่ใต้ &lt;strong&gt;Added App Keys&lt;/strong&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pgNBE6SU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j7fx9lvlw244auifi0cq.png" alt="Click ADD"&gt;
&lt;/li&gt;
&lt;li&gt;หลังจากนั้นก็เลือกอันใดสักอันนึงก็เสร็จแล้วคร้าบบ&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ตั้งค่า Node
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;มาถึงเราก็มาที่ &lt;strong&gt;Elements&lt;/strong&gt; ในบล็อกแต่ละอันจะมี &lt;strong&gt;Generic On Off Server&lt;/strong&gt; อยู่&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tg6bsVCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q1wntecx3wtak7oe3ue6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tg6bsVCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q1wntecx3wtak7oe3ue6.jpg" alt="แสดง Elements"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;เราจะกดเข้าไปใน &lt;strong&gt;Generic On Off Server&lt;/strong&gt; อันแรก&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ต่อไปเราต้องเพิ่ม &lt;strong&gt;Keys&lt;/strong&gt; เพื่อให้มันสามารถทำงานได้ &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HGpFyS2u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3ia6tclffbohlocvo2tc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HGpFyS2u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3ia6tclffbohlocvo2tc.jpg" alt="Bound Keys"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;เราก็กดเข้าไปแล้วเลือก &lt;strong&gt;Keys&lt;/strong&gt; เลย.!!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gGwtqK8V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/43axvlym0nl3jxlfien5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gGwtqK8V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/43axvlym0nl3jxlfien5.jpg" alt="Bounds Keys Success"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เราก็ทำแบบนี้ ทุกอันที่เป็น &lt;strong&gt;Generic On Off Server&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ใช้งาน Node
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;หลังจากที่เราเสร็จ &lt;strong&gt;Config&lt;/strong&gt; เสร็จแล้ว เราก็เข้าไปที่ &lt;strong&gt;Elements&lt;/strong&gt; เลือก &lt;strong&gt;Generic On Off Server&lt;/strong&gt; หลังจากนั้นก็เลื่อนมาที่ **Generic On Off Controls&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jTavUvdG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e4k8706gaps8cl67ncs7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jTavUvdG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e4k8706gaps8cl67ncs7.jpg" alt="On Off Controls"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;เราก็กด &lt;strong&gt;READ STATE&lt;/strong&gt; เพื่อ Sync State ของ Device ได้แล้วเราก็กด ON/OFF ตามที่ต้องการได้เลยครับ&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ISy55MQN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j8sushfnkkzwyut8ep16.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ISy55MQN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j8sushfnkkzwyut8ep16.jpg" alt="On Off"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YqCrIm7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i9qec4bimvl8vibh4s2k.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YqCrIm7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i9qec4bimvl8vibh4s2k.jpg" alt="ผลลัพท์"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;คร้าบบ!! เสร็จแล้วนะครับ..&lt;/strong&gt; 😍 &lt;strong&gt;ก็สำหรับบทความนี้ก็มีแค่นี้แหละครับ เจอกันบทความหน้านะคร้าบบ..!!?! สวัสดีครับ!!?!!&lt;/strong&gt; ✌&lt;/p&gt;

</description>
      <category>mesh</category>
      <category>nrf</category>
      <category>esp32</category>
      <category>espidf</category>
    </item>
    <item>
      <title>วิธีการใช้ Visual Studio Code ร่วมกับ STM32CubeMX</title>
      <dc:creator>Pawat Saengduan</dc:creator>
      <pubDate>Sun, 31 May 2020 09:04:06 +0000</pubDate>
      <link>https://dev.to/pawatsaengduan/visual-studio-code-stm32cubemx-10e9</link>
      <guid>https://dev.to/pawatsaengduan/visual-studio-code-stm32cubemx-10e9</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rrl6kpIN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hh3i04mzmu1jn29y2iza.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rrl6kpIN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hh3i04mzmu1jn29y2iza.png" alt="ใช้งาน Visual Studio Code ในการเขียนบอร์ด STM32 และใช้งานร่วมกับ STM32CubeMX"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;สวัสดีคร้าบบ!!&lt;/strong&gt;  ผม&lt;strong&gt;นน&lt;/strong&gt;นะคร้าบ! 😁 วันนี้อาจจะมา&lt;strong&gt;แปลก&lt;/strong&gt;หน่อยนะครับ 🤔 เพราะว่าผมลองเปลี่ยนมาใช้&lt;strong&gt;เจ้า &lt;a href="https://dev.to/"&gt;&lt;strong&gt;dev.to&lt;/strong&gt;&lt;/a&gt; 😮&lt;/strong&gt; ครับผม... ซึ่งใน&lt;strong&gt;บทความ&lt;/strong&gt;นี้ก็ตาม&lt;strong&gt;หัวข้อ&lt;/strong&gt;เลยอะครับ&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;วิธีการใช้ Visual Studio Code ร่วมกับ STM32CubeMX&lt;/strong&gt; 😎
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ( Atom ก็ได้นะจ๊า ) 😍
&lt;/h4&gt;

&lt;p&gt;อย่าช้าเลยดีกว่า.. ไปเลย!! &lt;/p&gt;




&lt;p&gt;ซึ่งมาถึงเราก็ต้องลง &lt;strong&gt;Software&lt;/strong&gt; ที่ต้องใช้ก่อนนะครับ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt; ( &lt;strong&gt;VS Code นี่พระเอกเราเลยยย!!!&lt;/strong&gt; 😂 )&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.python.org/downloads/"&gt;Python 3.x&lt;/a&gt; ( น่าจะมีกันหมดแล้วมั้ง&lt;strong&gt;..!???&lt;/strong&gt; 😕 | &lt;strong&gt;ไม่ใช่ Python 3.8&lt;/strong&gt; )&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.st.com/en/development-tools/stm32cubemx.html"&gt;STM32CubeMX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://releases.llvm.org/download.html"&gt;LLVM Clang&lt;/a&gt; ( Version ล่าสุด )&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ต่อไปก็เป็น &lt;strong&gt;Extensions&lt;/strong&gt; ใน &lt;strong&gt;Visual Studio Code&lt;/strong&gt; ที่เราจะต้องใช้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode"&gt;Visual Studio IntelliCode&lt;/a&gt; ( ตัว&lt;strong&gt;ช่วย&lt;/strong&gt;ในการ&lt;strong&gt;เขียนโปรแกรม!!&lt;/strong&gt; )&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://platformio.org/"&gt;PlatformIO&lt;/a&gt; ( &lt;strong&gt;เครื่องมือ&lt;/strong&gt;หลักในการ &lt;strong&gt;Build&lt;/strong&gt; หรือ &lt;strong&gt;Flash&lt;/strong&gt; )&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools"&gt;C/C++&lt;/a&gt; ( ตัวเพิ่ม&lt;strong&gt;ภาษา C/C++&lt;/strong&gt; เข้า &lt;strong&gt;IntelliSense&lt;/strong&gt; )&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;พอเตรียมพวก &lt;strong&gt;Software&lt;/strong&gt; และ &lt;strong&gt;Extensions&lt;/strong&gt; เสร็จแล้ว.. &lt;strong&gt;ยังไม่หมดฮะ!!&lt;/strong&gt; 🤣 &lt;/p&gt;

&lt;p&gt;เราก็ลง &lt;strong&gt;Libraries&lt;/strong&gt; ใน &lt;strong&gt;Python&lt;/strong&gt; ต่ออีกสักนิด.. &lt;br&gt;
โดยปกติแล้วเจ้า &lt;strong&gt;Environment&lt;/strong&gt; ของ &lt;strong&gt;PlatformIO&lt;/strong&gt; ที่ลงมาจาก &lt;strong&gt;VS Code&lt;/strong&gt; จะเป็น &lt;strong&gt;Python 2.7&lt;/strong&gt; แต่ว่า &lt;strong&gt;lib&lt;/strong&gt; ที่เราจะลงเนี่ยมันจะต้องใช้ &lt;strong&gt;Python 3&lt;/strong&gt; &lt;br&gt;
เพราะฉะนั้นเจ้า &lt;strong&gt;PlatformIO&lt;/strong&gt; ที่เป็น &lt;strong&gt;2.7&lt;/strong&gt; จะเอาไว้สำหรับ&lt;strong&gt;Build, Flash, Debug&lt;/strong&gt; หรือทำได้มากกว่านั้น&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;เอาละ.. เอาละๆ พูดมาก&lt;/strong&gt;ไปละ &lt;strong&gt;555+ มาลงเลยดีกว่า!!&lt;/strong&gt; 😂&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Python 3&lt;/strong&gt;
&lt;/h4&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install platformio
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install stm32pio
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ส่วน &lt;strong&gt;PlatformIO&lt;/strong&gt; ที่เราลงไปเมื่อกี้.. 😶 ก็จะเอาไว้&lt;strong&gt;ใช้&lt;/strong&gt;สำหรับ&lt;strong&gt;สร้างโปรเจกต์ของ PlatformIO สำหรับเขียนบอร์ด STM32&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ส่วน &lt;strong&gt;stm32pio&lt;/strong&gt; จะเป็นตัวแปลงให้สามารถใช้งานร่วมกับ &lt;strong&gt;PlatformIO&lt;/strong&gt; ได้..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;โอเค!!..&lt;/strong&gt; ทุกอย่างพร้อม! &lt;strong&gt;มาเริ่มเลยดีกว่าครับ..!?!!&lt;/strong&gt; 😁&lt;/p&gt;


&lt;h2&gt;
  
  
  ส่วนของ &lt;strong&gt;STM32CubeMX&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;ก็เปิด &lt;strong&gt;STM32CubeMX&lt;/strong&gt; มาสร้างโปรเจกต์ตามปกติเลยครับ &lt;strong&gt;Config ตามปกติ&lt;/strong&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IMGXt4Oz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rbyanju2ccbxm2hfm7da.png" alt="ยกตัวอย่าง.. ผมใช้แค่ Timer"&gt;
&lt;/li&gt;
&lt;li&gt;แต่พอ &lt;strong&gt;Config&lt;/strong&gt; เสร็จแล้วก็ไปที่ &lt;strong&gt;Project Manager&lt;/strong&gt; แล้ว&lt;strong&gt;ปรับ settings ตามภาพด้านล่างเลย!!&lt;/strong&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWtbl-5q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/37undover4ehc8c7ih25.png" alt="ตั้งค่าตามนี้... แล้วปรับเองนิดหน่อยจ้า.."&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config&lt;/strong&gt; อีกสักนิด... ปรับตามนี้เลยครับ!!
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WHeMEB2---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xg75wnbotbj48isjdr44.png" alt="ปรับตามนี้เลยครับ"&gt;
&lt;/li&gt;
&lt;li&gt;แล้ว&lt;strong&gt;กด SAVE ( SAVE นะครับ! CTRL + S ) ไม่ใช่ GENERATE CODE&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;พอ &lt;strong&gt;Save ( ไม่ใช่ GENERATE CODE )&lt;/strong&gt; เสร็จแล้วก็&lt;strong&gt;ปิดโปรแกรมไปเลยคร้าบบ!!&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  ส่วนของ &lt;strong&gt;Terminal&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;เปิด &lt;strong&gt;Terminal&lt;/strong&gt; มาเลยครับ&lt;/li&gt;
&lt;li&gt;แล้ว พิมพ์ &lt;code&gt;cd&lt;/code&gt; แล้ววางข้อความที่ &lt;strong&gt;Copy&lt;/strong&gt; มาเลยครับ แล้วก็ &lt;strong&gt;cd เข้าไปซะ..!&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ต่อไปก็สร้างโปรเจกต์ครับ&lt;/li&gt;
&lt;li&gt;หาชื่อบอร์ดจาก
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pio boards
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ได้เลยครับ &lt;/p&gt;
&lt;h3&gt;
  
  
  หาบอร์ดประเภท STM32 ให้หาใน Categories &lt;code&gt;Platform: ststm32&lt;/code&gt;
&lt;/h3&gt;



&lt;p&gt;สำหรับสร้างโปรเจกต์แบบ&lt;strong&gt;ไม่มี Config สำหรับ IDE&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stm32pio new -d [วางข้อความ/ชื่อ Project Name จาก STM32CubeMX] -b [บอร์ด] --with-build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ยกตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stm32pio new -d C:\Users\Pawat\STM32-Projects\SampleProjects\ -b nucleo_f334r8 --with-build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;p&gt;สำหรับสร้างโปรเจกต์&lt;strong&gt;สำหรับ VS Code ( Visual Studio Code )&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stm32pio new -d [วางข้อความ/ชื่อ Project Name จาก STM32CubeMX] -b [บอร์ด] --start-editor=code --with-build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ยกตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stm32pio new -d C:\Users\Pawat\STM32-Projects\SampleProjects\ -b nucleo_f334r8 --start-editor=code --with-build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;p&gt;สำหรับสร้างโปรเจกต์&lt;strong&gt;สำหรับ Atom&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stm32pio new -d [วางข้อความ/ชื่อ Project Name จาก STM32CubeMX] -b [บอร์ด] --start-editor=atom --with-build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ยกตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stm32pio new -d C:\Users\Pawat\STM32-Projects\SampleProjects\ -b nucleo_f334r8 --start-editor=atom --with-build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;ได้แล้ววคร้าบบ!!!!&lt;/strong&gt; เราก็สามารถใช้งาน &lt;strong&gt;STM32&lt;/strong&gt; ผ่าน &lt;strong&gt;Visual Studio Code&lt;/strong&gt; หรือ &lt;strong&gt;Atom ได้แล้วว!!&lt;/strong&gt;&lt;br&gt;
เราสามารถเปลี่ยน &lt;strong&gt;Config&lt;/strong&gt; ได้&lt;strong&gt;แต่อย่ากด GENERATE CODE&lt;/strong&gt; &lt;strong&gt;ถ้า&lt;/strong&gt;จะ&lt;strong&gt;อัพเดท REGENRATE CODE&lt;/strong&gt; ก็&lt;strong&gt;เปิด Terminal ที่ติดมากับ IDE&lt;/strong&gt; แล้ว&lt;strong&gt;พิมพ์คำว่า&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stm32pio generate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ได้เลย!!&lt;/strong&gt; 😃&lt;/p&gt;




&lt;p&gt;ครับ.. &lt;strong&gt;ก็ได้แล้ววนะคร้าบบ!!&lt;/strong&gt; ✨🎉 เราก็สามารถเขียน STM32 บน Visual Studio Code ได้แล้วว.. ก็จบสำหรับบทความนี้แล้วนะครับ &lt;strong&gt;สวัสดีคร้าบบ!!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>stm32</category>
      <category>vscode</category>
      <category>atom</category>
      <category>platformio</category>
    </item>
  </channel>
</rss>
