เปิด-ปิดไฟผ่านบอร์ด ESP32 โดยใช้ ESP-BLE-MESH ร่วมกับ nRF Mesh
Tags: mesh, nrf, esp32, espidf
Published: 2020-06-13 08:16:30

**สวัสดีคร้าบบผม..!?!!** กลับมากันอีกแล้วนะครับ วันนี้มาทำอะไร.?? 😕

![หน้าปก](https://dev-to-uploads.s3.amazonaws.com/i/i9qec4bimvl8vibh4s2k.jpg)

> #### เปิด-ปิดไฟผ่านบอร์ด **ESP32** โดยใช้ **ESP-BLE-MESH** ร่วมกับ **nRF Mesh**

นั่นเองครับผม..  **เอาเป็นว่ามาเริ่มกันเลยดีกว่าครับผม!!** 😁

------

![ESP-MESH Network](https://docs.espressif.com/projects/esp-idf/en/latest/_images/mesh-bidirectional-data-stream.png)
**ESP Mesh** คืออะไร**..?!??** 🤔 ด้วยความที่ว่ามันค่อนข้างละเอียด.. ให้ไปอ่านใน [**Docs**](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/esp-ble-mesh/ble-mesh-index.html) เอาเองน่าจะเข้าใจมากกว่า.. ถ้าผม**สรุป**เองน่าจะ**งงมากๆ 5555+** 😂

มาๆ เริ่มลง**ซอฟต์แวร์**ที่ต้องใช้บนคอมพิวเตอร์ก่อนนะครับ:
- Git
- [ESP-IDF](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#installation-step-by-step) ( **ESP-IDF** เป็น**เฟรมเวิร์ค**ที่ทำโดย **Espressif** ลงถึงขั้นตอนที่ 4 )


ต่อไป.. ก็**ซอฟต์แวร์**ที่ใช้ในโทรศัพท์ ( แนะนำ Android ):
- [ ANDROID ] [nRF Mesh](https://github.com/NordicSemiconductor/Android-nRF-Mesh-Library/releases/download/v2.1.4/nRF.Mesh.-.V.-.2.1.4.apk) **(v.2.1.4)**
- [ IOS ] [nRF Mesh](https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/releases/tag/2.1.0) **(v.2.0.0 | Build เองนะจ้า)**

> **nRF Mesh** สำหรับควบคุม **Node** นะครับ ใช้ได้แค่ **Version 2.0.0 -- 2.1.4**

------

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

------

## เขียนโค้ด

### Connect กับ Node
0. มาถึงเราก็ลง [**ESP-IDF**](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/) เลยย...  ( ลงที่ **Home Folder** จะดีที่สุด )

1. เปิด **Terminal** มาแล้ว.. ก็ ``cd`` เข้า
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9azjsd9d97h6dq71jhri.png)

2. เราก็มา **Config ว่าเราใช้บอร์ด**อะไร**ซึ่งใน Examples นี้ใช้บอร์ด ESP32** นั้นเอง
![idf.py menuconfig](https://dev-to-uploads.s3.amazonaws.com/i/in5vtu8jy7ie7mrptqu4.png)

3. พอรันแล้วก็รอสักครู่ แล้วสักพักจะขึ้น **Menu** ให้**เลือกตามนี้**
![Root Menuconfig](https://dev-to-uploads.s3.amazonaws.com/i/isezguwonj37zplztwkl.png)

 1. กด **ลูกศรขึ้นหรือลง** เพื่อขยับ **Options**
 2. กด **RETURN** เพื่อเลือก **Options**

4. ซึ่งเราจะเลือก **Examples Configuration** แล้วเราก็จะได้แบบนี้
!['Example Configuration' Menuconfig](https://dev-to-uploads.s3.amazonaws.com/i/b2mujlggsbo4bfjmwvet.png)

5. เราก็เลือก **Board selection for BLE Mesh (ESP32-xxxx)**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/t9rjp9zt1mkw9q248ddw.png)

6. ต่อไปเราก็เลือกบอร์ดโดยการกด **RETURN (ENTER)** เสร็จแล้วเราก็ **RETURN** ออกมาแล้วก็ **Save** โดยการ**กด S แล้วกด RETURN (ENTER)** แล้วก็กด **Q** เพื่อออก

7. ต่อไปเราก็จะไปตั้งค่าว่า **Pin** ไหนที่เราต้องการ**เปิดปิด Pin ซึ่งจะอยู่ใน root/main/board.h**
![Code](https://dev-to-uploads.s3.amazonaws.com/i/p6kt1b20rckc3x9wiviv.png)

8. ต่อไป Build โค้ดของเราโดยพิมพ์คำว่า 
```bash
idf.py build
```

9. หลังจาก Build เราก็มา Flash กันซึ่งเราก็เสียบบอร์ดกับคอมพิวเตอร์ก่อนแล้ว พิมพ์คำว่า
```bash
idf.py flash
```

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

-------

## nRF Mesh
**nRF Mesh (v2.1.4)** เป็นแอพสำหรับ **Interface** กับ**เน็ตเวิร์คประเภท Mesh** นะครับ

1. มาถึงก็เปิด**แอพ nRF Mesh** เลยก่อนเลยครับผม..
![nRF Mesh 2.1.4](https://dev-to-uploads.s3.amazonaws.com/i/7g75bkn503d09edp94rf.jpg)

2. กดปุ่มสีฟ้ารูปบวกด้านขวาล่างเพื่อเพิ่ม **Node**
![Add Node Buttons](https://dev-to-uploads.s3.amazonaws.com/i/xdbr3mi7exibyvg077g4.jpg)

3. เปิด **Bluetooth** แล้วหา Device ที่ชื่อว่า **ESP-BLE-MESH** แล้วกดเข้าไปได้เลย
![Add Node Device](https://dev-to-uploads.s3.amazonaws.com/i/ve7tf08y8afrk6fvuq35.jpg)

4. ต่อไปมันก็จะขึ้น ข้อมูลของ **Mesh Device** ที่เราเลือกครับ แต่เป็นเพียงข้อมูลเล็กๆ
![Device](https://dev-to-uploads.s3.amazonaws.com/i/j1dd45y5utv8iwnwjsm4.jpg)
 * เราสามารถเปลี่ยนชื่อ **Device** ได้นะครับ แสดงบนแอพเท่านั้น บนรายชื่อที่ให้ **Add Node** จะเป็นชื่อเดิม
 ![Rename Mesh Device](https://dev-to-uploads.s3.amazonaws.com/i/2ww718b740qz98rtbxbq.jpg)

5. ต่อไปเราก็กด **Identify** มันก็จะแสดงผลข้อมูลของ **Mesh Device**
![Identify Button](https://dev-to-uploads.s3.amazonaws.com/i/jd9y50j9am6ljdzjur6a.jpg)
![Mesh Info](https://dev-to-uploads.s3.amazonaws.com/i/54dwbcwinhmjfz5kue2n.jpg)

6. ต่อไปเราก็กด **Provision** เพื่อ **Connect** กับ **Node** เลยครับ
![Provision Button](https://dev-to-uploads.s3.amazonaws.com/i/e02bgsil6ooilfv0olg4.jpg)
![While Provision](https://dev-to-uploads.s3.amazonaws.com/i/je6ry6ediad6t8t9dfcm.jpg)

7. ถ้าไม่มี Error อะไรขึ้นก็จะเป็นแบบนี้ครับ
![Provision Success](https://dev-to-uploads.s3.amazonaws.com/i/4392l3da3na43umgfi3c.jpg)
 แต่ถ้าหากมี แล้วขึ้นคำว่า **Initial Configuration Failed** ก็ให้
 1. กด **CONNECT** ซึ่งอยู่ด้านขวาบน
 ![CONNECT Button](https://dev-to-uploads.s3.amazonaws.com/i/7v2rzpkml2qlss8nkbwe.jpg)

 2. หลังจากนั้นก็กดเข้า Device ที่ปรากฎหน้า Network
 ![Click the Device](https://dev-to-uploads.s3.amazonaws.com/i/n58wtvdsl531qelac4ue.jpg)
 3. หลังจากนั้นก็กด **'GET COMPOSITION DATA'** ที่อยู่ใต้ Elements
 ![Click GET COMPOSITION DATA](https://dev-to-uploads.s3.amazonaws.com/i/mv1tx28779neg5b540ys.png)
 4. กด **'ADD'** ที่อยู่ใต้ **Added App Keys**
 ![Click ADD](https://dev-to-uploads.s3.amazonaws.com/i/j7fx9lvlw244auifi0cq.png)
 5. หลังจากนั้นก็เลือกอันใดสักอันนึงก็เสร็จแล้วคร้าบบ

### ตั้งค่า Node
1. มาถึงเราก็มาที่ **Elements** ในบล็อกแต่ละอันจะมี **Generic On Off Server** อยู่
![แสดง Elements](https://dev-to-uploads.s3.amazonaws.com/i/q1wntecx3wtak7oe3ue6.jpg)

2. เราจะกดเข้าไปใน **Generic On Off Server** อันแรก

3. ต่อไปเราต้องเพิ่ม **Keys** เพื่อให้มันสามารถทำงานได้ 
![Bound Keys](https://dev-to-uploads.s3.amazonaws.com/i/3ia6tclffbohlocvo2tc.jpg)

4. เราก็กดเข้าไปแล้วเลือก **Keys** เลย.!!
![Bounds Keys Success](https://dev-to-uploads.s3.amazonaws.com/i/43axvlym0nl3jxlfien5.jpg)
 * เราก็ทำแบบนี้ ทุกอันที่เป็น **Generic On Off Server**

### ใช้งาน Node
1. หลังจากที่เราเสร็จ **Config** เสร็จแล้ว เราก็เข้าไปที่ **Elements** เลือก **Generic On Off Server** หลังจากนั้นก็เลื่อนมาที่ **Generic On Off Controls
![On Off Controls](https://dev-to-uploads.s3.amazonaws.com/i/e4k8706gaps8cl67ncs7.jpg)

2. เราก็กด **READ STATE** เพื่อ Sync State ของ Device ได้แล้วเราก็กด ON/OFF ตามที่ต้องการได้เลยครับ
![On Off](https://dev-to-uploads.s3.amazonaws.com/i/j8sushfnkkzwyut8ep16.jpg)

![ผลลัพท์](https://dev-to-uploads.s3.amazonaws.com/i/i9qec4bimvl8vibh4s2k.jpg)

**คร้าบบ!! เสร็จแล้วนะครับ..** 😍 **ก็สำหรับบทความนี้ก็มีแค่นี้แหละครับ เจอกันบทความหน้านะคร้าบบ..!!?! สวัสดีครับ!!?!!** ✌