ESP8266 / ESP32 & Mesh Network ตอนที่ 1: Introduction & Painlessmesh

จั่วหัวตอนที่ 1 แล้ว แสดงว่าต้องมีมากกว่า 1 ตอนแน่ แต่ไม่ต้องห่วงว่าจะนาน มีคนปรามาสไว้ว่าให้เวลาตั้ง 6 เดือนแหนะ และคงทำไม่ได้ ป้าดดดด ไหนๆก็ไหนๆแระ เขียนซะเลยเรื่อง Mesh Network ซึ่งก็ไม่ใช่เรื่องใหม่อะไร ซึ่งเรื่อง Mesh Network ที่จะเขียนนี้ก็จะแบ่งออกเป็น 4 ตอนด้วยกัน ไหนๆเขียนแล้วก็เล่นใหญ่ไปเลยนะออเจ้า บทความนี้เขียนเอามันส์ล้วนๆ ถือว่าทบทวนความรู้กัน ไม่ดราม่า มาม่า ใดๆทั้งสิ้น คนอ่านควรมีความรู้การใช้งาน Arduino IDE และบอร์ด MCU โดยเฉพาะ ESP8266 และ ESP32 มาบ้าง

ตอนที่ 1: Mesh Network กับ Introduction to Painlessmesh โดยใช้ ESP8266 / ESP32

 

Introduction

อะมาดูนิยามกันซะหน่อยเค้าบอกว่า ​Mesh Network เนี่ยมันก็คือโครงสร้างของ Network แบบหนึ่งแหละที่มีลักษณะเป็น Node ซึ่งเชื่อมต่อถึงกันหมดและทำงานร่วมกันในการส่งผ่านข้อมูลจาก node นึงไปยังอีก node นึง ซึ่งการทำงานในการส่งผ่านข้อมูลตรงนี้แหละที่ไม่ขึ้นตรงต่อกันแบบตายตัว นั่นหมายความว่าโครงสร้างของ mesh นั้นสามารถปรับเปลี่ยนได้ตลอดเวลา คุยกันตลอด เช่นถ้าจะส่งข้อมูลจากจุด A ไปจุด B จะไปเส้นทางไหน ถ้าเส้นทางจาก A –>B–>C–>D แล้วถ้า Node B ล่ม จะ route ข้อมูลไปที่ Node ไหนต่อเพื่อให้ถึงปลายทาง (Self-Organize / Self-Configure) ซึ่งมันจะดีมากๆเลยในการติดตั้งๆ โยนอุปกรณ์เข้าไปใน Mesh แล้วมันก็คุยกันเองได้ เจ๋งปะหละ

ซึ่ง Concept ของ Mesh Network คร่าวๆก็อย่างที่อธิบายไปข้างต้นในเนตมีให้อ่านเพียบทั้งไทยและเทศ ซึ่งที่ตอนนี้เราเห็นใกล้ตัวเรากันมาก ก็จะเป็นอุปกรณ์ประเภท Home Automation ซึ่งเริ่มเข้ามาทำการตลาดในบ้านเราเยอะขึ้น ในตลาดก็จะมีมาตรฐานของการสื่อสารผ่านอุปกรณ์พวกนี้อยู่ 2 ค่ายใหญ่นั่นก็คือ Zigbee และ Z-Wave โดยคุณสมบัติของทั้งสองค่ายนี้เลยก็คือ Mesh Network และ Low power Consumption ฉะนั้นในการติดตั้งอุปกรณ์ไม่ว่าจะ Zigbee หรือ Z-Wave เข้ากับ Gateway นั้น สามารถทำได้ง่ายมาก ไม่ต้อง config routing หรือเดินสายอะไรให้ยุ่งยาก แถมยังขยายพื้นที่การใช้งานออกไปได้ไกลขึ้นตาม node ปลายทางที่เชื่อมถึงกันด้วย

คราวนี้เรามาดูฝั่งของตัว micro controller กันบ้างซึ่งในตลาดก็มีหลายค่าย ถ้าใครอยากได้ mcu ที่มี z-wave ในตัว ใช้ Arduino IDE พัฒนาและรองรับการทำงานแบบ Mesh Network ของค่าย z-wave ได้ก็มี แต่วันนี้เราจะคุยกันถึงพระเอกตัวหลักของเรานั่นก็คือ ESP8266 กับ ESP32 จากค่าย Espressif

เจ้า ESP8266 / ESP32 ที่บางคนเรียกว่าเป็น Arduino Killer นี้มาพร้อมคุณสมบัติ WiFi ในตัวซึ่งเหมาะมากที่จะมาทำอุปกรณ์ประเภทค iot โดยที่สามารถทำตัวเองเป็นได้ทั้ง Client/Server ที่มี Built-in WebServer ในตัว เป็น Access Point ก็ได้ สารพัดประโยชน์จะใช้งานจากการที่เป็น WiFi Enabled  ซึ่งทาง Espressif ที่เป็นคนพัฒนา ESP8266/ESP32 ก็เล็งเห็นเหมือนที่หลายๆท่านเห็นแหละว่า Mesh Network มันเจ๋งนะ ก็เลยพัฒนา ESP-Mesh Protocol ขึ้นมา

 

ซึ่งถ้าดูจากเอกสารของ ESP8266 แล้วเนี่ย สามารถที่จะเชื่อมต่ออุปกรณ์กันได้ถึง 87 ตัวเลยทีเดียวแล้วลองคิดดูถ้าในแต่ละ hop ของ Node อย่าว่าแต่ 100 เมตรเลย แค่ 50 เมตรก็พอ อุปกรณ์ 87 ตัวนี่ครอบคลุมพื้นที่ได้เยอะมากๆ ฟังดูดีอีกแล้ว แต่ถ้าไปดูในส่วนของ การใช้งาน ESP-Mesh บอกได้เลยว่ามึนตึ้บ รวมถึงจากข้อมูลที่หามามีคนเจอปัญหาค่อนข้างเยอะในการใช้งานโดยเฉพาะเรื่อง Self-Organize/Self-Configure ฉะนั้นเราจะข้าม ESP-Mesh Protocol กันไป

ใครอยากอ่านเรื่อง ESP-Mesh Protocol อ่านได้จากที่ลิงค์นี้เลย “ESP-Mesh Protocol by Espressif”

 

จากการศึกษาค้นคว้าอย่างหนัก (จริงๆก็ไม่เท่าไหร่หรอก แค่ Google แล้วก็อ่านไปเรื่อยๆแค่นั้นแหละ ยุคนี้ดีกว่าสมัย 2540 ที่ผมเรียน MCS51 อีก) เลยทำให้พบว่าก็มีคนเจอปัญหาจาก ESP-Mesh Protocol จริงๆและใช้งานค่อนข้างยาก อย่าไปเชื่อครับลองเปิด pdf ดู มีมึนอะครับ ก็เลยหาอ่านมาเรื่อยๆมาพบกับ library ที่ชื่อว่า EasyMesh กับ Painlessmesh อ่านแค่ชื่อก็รู้สึกใจชื้นขึ้นมาแล้วทั้งสองตัว ตัวนึงง่ายๆอีซี่ อีกตัวไม่ปวดหัว พออ่านไปเรื่อยๆอีกเลยพบว่า Painlessmesh เนี่ยทางคุณ BlackEdder (อันนี้ไม่รู้นามสมมติหรือชื่อจริงนะ) พัฒนาต่อเนื่องมาจาก EasyMesh ซึ่งหยุดการพัฒนาไปแล้ว ที่สำคัญ Painlessmesh ใช้ได้ทั้ง ESP8266 และ ESP32 อีกด้วย

ว่าแล้วก็มาเริ่มกันเลยดีกว่า เกริ่น Intro ซะเยอะเลย ไปค้นกระป๋องของเล่นที่พอเหลือๆไม่ได้ต่อกับเซนเซอร์อื่นๆ หรือทดลองงานอื่น ได้มา 17 ตัว เดี่ยวเราจะเอา 17 ตัวนี้แหละมาลองทำ Mesh Network กัน ก็มี ESP8266 15 ตัว (Nodemcu 4 ตัว Wemos D1 6 ตัว ESP-01 อีก 5 ตัว) กับ ESP32 อีก 2 ตัว (WRoom32 กับ Heltec Lora)

 

เตรียมความพร้อม

ซึ่งอันนี้สมมติว่าผู้อ่านได้ติดตั้ง board esp32 และ esp8266 ไว้เรียบร้อยแล้วนะครับ ขั้นแรกก็ Download/Clone Library จาก Github มาไว้ที่เครื่องก่อน โดยเข้าไปที่ Painlessmesh ที่ Github

 

จากนั้นก็ติดตั้งลงใน Arduino IDE โดยเข้าไปที่ Sketch –> Include Library –> Add .zip library แล้วเลือก zip file ที่เรา Download มา

 

ติดตั้ง Library Dependencies ซึ่งจำเป็นต่อการใช้ Painlessmesh

ก่อนการใช้งานเรายังต้องใช้ Library อีกสองตัวนั่นก็คือ ArduinoJson และ TaskScheduler ซึ่งการ Install Library ก็สามารถทำได้ไม่ยากเลยสำหรับสองตัวนี้ เข้าไปที่ Sketch –> Include Library –> Manage Libraries จากนั้นในช่อง Filter Your Search ก็สามารถใส่ชื่อของ Library ทั้งสองตัวนี้ได้เลย

ArduinoJson

 

TaskScheduler

 

สิ่งที่ต้องรู้และข้อจำกัด

ทางผู้พัฒนา Painlessmesh เค้าเคลมเอาไว้ว่า library ชุดนี้นั้นเป็น True Adhoc Networking นั่นก็คือไม่ต้องมีการออกแบบว่า node ไหนจะเชื่อมต่อ node ไหน โครงสร้างของ mesh จะเป็นยังไง ไม่ต้องมี router ศูนย์กลาง ซึ่งแค่ 2 node ก็สามารถทำงานได้แล้ว ทำให้คนพัฒนาไม่ต้องมายุ่งวุ่นวายในเรื่องของการจัดการกับ Self-Organize / Self-Configure ไปสนใจในส่วนของ Business Logic / Operation Logic ว่าจะใช้งาน Mesh นี้อย่างไรดีกว่า

ซึ่งคำถามของคนใช้ที่มักจะถามบ่อยๆ เรียกได้ว่าเป็น FAQ ของ Painlessmess เลยก็ว่าได้นั่นก็คือ จำนวน Maximum Node ที่รองรับ โดยที่ทางทีมผู้พัฒนาก็บอกไว้ว่า

“The maximum size of the mesh is limited (we think) by the amount of memory in the heap that can be allocated to the sub-connections buffer and so should be really quite high.”

 

นั่นก็คือ ขึ้นอยู่กับ memory ของแต่ละ node นั่นเอง เพราะมันจะต้องใช้ในการเก็บสถานะของแต่ละ node เพื่อที่จะได้ทำ routing config ต่างๆ ฉะนั้นถ้าแต่ละ Node อ่านค่าจาก Sensor ตามรอบเวลาที่กำหนด แล้วส่งผ่าน Mesh Network ไปเก็บไว้ที่ Server จำนวน memory ที่ใช้ก็ไม่น่ามาก ซึ่งเดี่ยวเราจะมาดูกันว่า memory นั้นจะถูกใช้ไปเท่าไหร่เมื่อเพิ่ม node เข้าไปใน Mesh Network

 

  • non-ip networking: ในระบบ Network เรามักจะคุ้นชินกับระบบ IP หรืออย่างน้อยก็ mac address แต่ว่า Painlessmesh นั้นไม่ใช้ tcp/ip ในการสื่อสารและไม่ได้อ้างอิงโดยใช้ ip หรือ mac address แต่จะใช้ chipid ซึ่งก็เป็นหมายเลขเฉพาะในแต่ละชิปของ esp8266/esp32 โดยใน library จะถูกเรียกว่า nodeid แทน

 

  • JSON Based: painlessmesh ใช้ระบบการส่งผ่านข้อมูลในรูปแบบของ JSON ถ้าใครไม่คุ้นก็อาจจะงงๆหน่อย แต่รับรองไม่ยากแน่นอน ซึ่งข้อดีของมันก็คือ Node ที่รับข้อมูลแล้วต้องการส่งต่อไปยัง webserver หรือระบบงานอื่นทีรองรับ json อยู่แล้วก็จะง่ายเลยทีเดียว

 

  • Delay: เริ่มเข้าสู่เรื่องข้อจำกัดละ ข้อจำกัดแรกเลยก็คือเรื่องของ delay ซึ่งผู้พัฒนา Painlessmesh เค้าแนะนำให้หลีกเลี่ยง เพราะภายในตัว library เองจะมีวงรอบในการคุยกับ node ต่างๆ เพื่ออัพเดทสถานะของ mesh ตลอดเวลา node ไหนอยู่ node ไหนหลุดไป ถ้าเรามีการใช้งาน delay ภายใน loop อาจทำให้ mesh ของเราไม่เสถียร ซึ่งทางแก้เค้าก็แนะนำให้ใช้ task scheduler แทน

 

  • อัตราการส่งข้อมูล: ทางผู้พัฒนาเค้าแนะนำมาให้คิดคำนวนอัตราการส่งข้อมูลแบบ conservative ซะหน่อย ต้องดูให้เหมาะสมกับ application ด้วย เช่นถ้าจะ monitor temp/humid ในดินแต่ส่งข้อมูลทุก 5 วินาทีก็อาจจะได้ไม่ค่อยสมเหตุสมผลเท่าไหร่ เพราะจะทำให้ตัว esp8266/esp32 ที่มีข้อจำกัดเรื่องของการประมวลผลและหน่วยความจำอาจต้องทำงานหนักขึ้น

 

  • Message Dropped​: ถึงแม้ระบบ Mesh Network มันจะเป็นอะไรที่เจ๋งมากจนดูเหมือนเป็น fault tolerance / high availability network แต่ก็มีโอกาสทำงานผิดพลาดได้ ฉะนั้น message ที่ส่งผ่านก็อาจจะหายไปได้บ้างในบางโอกาส ฉะนั้นก็ขึ้นอยู่กับ logic ของ application ที่เราพัฒนาว่าจะ handle ยังไง

 

ไอ้ข้อกำหนดข้างบนหนะ ผมก็ไม่ได้เก่งเขียนขึ้นมาเองหรอกครับ ทีมพัฒนา Painlessmesh เนี่ยแหละแนะนำมา ผมว่าก็ยึดไว้เป็น best practice บ้างก็ดีครับ เวลาจะหาข้อผิดพลาดจะได้ไม่ต้องวนหาตั้งแต่ศูนย์ จะได้มาเช็คได้ว่าเอ๊ะที่มันส่งข้อมูลไม่ผ่านเป็นเพราะอะไร memory overflow มั้ย หรือเป็นปัญหาจากกายภาพที่ไม่ join เข้า mesh หรือว่าเรามีเขียน delay ไว้

 

Hello Mesh Network

หลังจากเตรียม environment ในการทำงานเรียบร้อยแล้วเราก็จะมาเริ่มทดลองสร้าง Mesh Network แรกของเรากันนะออเจ้า เขียนร่ายมาซะยาว เริ่มซัก 5 node ก่อนละกัน โดยที่ Node ของเราจะประกอบด้วย

Wemos D1 Mini, ESP32 Wroom, ESP-01, แล้วก็ Nodemcu อีกสองตัว

ขั้นแรกเลยก็เปิดไฟล์ startHere กันก่อนเลยครับ ที่ Arduino IDE ก็เข้าไปที่ File–>Examples–>Painless Mesh–> startHere

มาดูการตั้งค่าคร่าวๆของ Mesh Network เรากัน

#define MESH_SSID "HelloMyMesh"
#define MESH_PASSWORD "hellomymeshnetwork"
#define MESH_PORT 5555

 

จากไฟล์ startHere ที่มากับตัวอย่าง เราสามารถที่จะแยกวงของ Mesh รวมถึงเพิ่ม Security ในส่วนของ Mesh Network เราได้จาก 3 บรรทัดบนนี้เลยครับ ซึ่ง help ของ painlessmesh รวมถึงคำอธิบายที่อยู่ใน code นั้นค่อนข้างดีเลยทีเดียว ซึ่งการทำงาน Mesh Network โดยใช้ Painlessmesh นั้นจะแบ่งการทำงานเป็นลักษณะของ task โดยการกำหนดจาก task scheduler อย่างเช่น task ที่ใช้ในการส่ง message
mesh.scheduler.addTask( taskSendMessage );
taskSendMessage.enable() ;

และในส่วนของ loop ก็จะมีแค่ การ update mesh เป็นหลัก พวก logic ต่างๆจะไปอยู่ที่ task scheduler หมด

mesh.update();

 

ในส่วนของ CallBack นั้นหลักที่ใช้งานจริงๆเลยก็คือ receivedCallback เพื่อที่จะดูว่า message ที่เราได้รับมา ไม่ว่าจะมาจาก Broadcast หรือมาแบบระบุ NodeID นั้นเราจะนำไปทำอะไรต่อซึ่งในตัวอย่างนี้ก็คือ Print ออกมาผ่านทาง Serial Port
void receivedCallback(uint32_t from, String & msg) {
Serial.printf("startHere: Received from %u msg=%s\n", from, msg.c_str());
}

ซึ่งที่ผมแก้หลักๆเลยก็คือตัว SSID และ Password แค่นั้นจากนั้นก็ทำการ Flash เลยครับ เลือก Board ให้ตรงรุ่นแค่นั้น

ซึ่งจุดประสงค์หลักของตัวอย่างนี้ก็ตามด้านล่างนี้เลย กระพริบ led ตามช่วงเวลาที่กำหนด แล้วก็ส่งข้อความแบบ broadcast ไปยังทุกๆ node ต้องลองทำตามครับตัวอย่างนี้ตัวอย่างเดียวได้อะไรเยอะ

// 1. blinks led once for every node on the mesh
// 2. blink cycle repeats every BLINK_PERIOD
// 3. sends a silly message to every node on the mesh at a random time betweew 1 and 5 seconds
// 4. prints anything it recieves to Serial.print

เมื่อทำการ flash nodemcu ตัวแรกไปแล้วเปิดที่ Serial Monitor ดู ข้อมูลมันก็จะเยอะๆหน่อย เพราะมีการ enable debug ไว้ในตอน setup mesh.setDebugMsgTypes(ERROR | DEBUG | CONNECTION); ซึ่งระดับของการ debug ก็มีหลายแบบให้ลองเลือกใช้งานตามที่เหมาะสมดูครับ

ซึ่งเมื่อ flash เสร็จและเริ่มทำงาน nodemcu ตัวแรกในวง Mesh Network (มีตัวเดียวจะเรียก Mesh ทำมายยย) ก็จะเริ่มหา AP ที่ชื่อเดียวกัน บ้านใกล้เรือนเคียงของ node อื่นๆละ เพื่อที่จะดึงมาเข้าสู่ Mesh นี้โดยข้อมูลจากการ Debug ก็จะได้ nodeid รวมถึง memory ที่เหลืออยู่ละ

คราวนี้เรามา flash nodemcu อีกสองตัวเข้าไปดูบ้างว่าผลลัพท์ที่ได้เป็นอย่างไร (note ไว้ก่อนว่า nodeid ของตัวแรกคือ 5851 เอาแค่ 4 ตัวสุดท้ายพอจะได้ไม่ต้องจำเยอะ และ memory ที่เหลือคือ 35728 byte)

คราวนี้เรามี Node ที่อยู่ใน Mesh นี้ 3 ตัวละนั่นคือ 5851, 4414 และ 9003 ซึ่งแต่ละตัวก็จะ Broadcast Message ออกมาตามเวลาที่สุ่มได้ในแต่ละตัว แต่ในขั้นตอนการกระพริบไฟ Led นั้นจะมีการตั้ง time synchronize เมื่อมี node ใหม่เพิ่มเข้ามาใน mesh ซึ่งจะมี CallBack ไว้รองรับและทำงานร่วมกับ MeshUpdate ที่วน loop หาว่ามี Node ไหน drop connection ไปหรือมี node ไหน join เข้ามาและมีค่าความแรงของสัญญาณเท่าไหร่ เพื่อใช้ในการจัดเส้นทางในการส่งข้อมูล

 

แค่ 3 Node ยังดูน้อยไป เรามาเพิ่ม Node เข้าไปใน Mesh Network เรากันอีกดีกว่า ถ้าดูจากตอนมี 3 Node Memory ของ Node ที่ memory เหลือน้อยสุดจะอยู่ที่ 27856 Byte เท่านั้น โดยผมจะเพิ่ม ESP32 Wroom, Wemos D1 Mini และ ESP-01 เข้าไปแล้วมาดูว่า Memory จะเหลือกันมากน้อยขนาดไหนเมื่อขนาดของ Mesh Network โตขึ้น (Built-in LED pin ของ ESP-01 อยูที่ Pin 1)

 

 

จากรูปด้านบนเมื่อทำงานไปได้ซักพักถ้าดู Memory ที่เหลืออยู่ต่ำสุด จะเป็นของ Nodemcu03 ซึ่งเหลืออยู่ 17408 Byte ส่วนที่เหลือมากสุดก็เดาไม่ยากเลย ย่อมเป็น ESP32 MCU ตัวใหม่แน่นอนอยู่แล้ว ดังที่ทางทีมผู้พัฒนาเค้าแจ้งเอาไว้ว่าตัว mesh network นั้นจะรองรับได้กี่ node นั้นอยู่ที่ memory เป็นหลักเลย ไว้มีเวลาตอนที่ 2 จะเพิ่ม node เข้ามาใน mesh network พร้อมกับเพิ่มการส่งข้อมูลที่อ่านได้จากเซนเซอร์ต่างๆ แล้วมาดูกันว่า ขนาดที่เพิ่มขึ้นพร้อมกับ operation logic ที่เพิ่มขึ้น จะทำให้โครงข่าย mesh นี้เปลี่ยนไปยังไงกันบ้าง รับรองว่าตอนต่อไปจะได้นำ mesh network มาใช้งานในการส่งข้อมูลกันจริงๆละ ส่วนตอนต่อๆไปอีกจะมีอะไรบ้างก็ลิสต์ขึ้นมาให้ดูกันเรียกแขกกันซะหน่อย

ตอนที่ 2: ภาคต่อของ Painlessmesh Client/Server

ตอนที่ 3: Painlessmesh Bridge

ตอนที่ 4: Painlessmesh Bridge with Lora

ตอนที่ 5: ของแถม เดี่ยวค่อยคิดจะเขียนอะไรดี อิอิ อาจจะเป็น การติดตั้ง MQTT Server / InfluxDB / Grafana บน Google Cloud แล้วแจ้ง Alert ผ่านทาง line ก็น่าสนใจดี ทำทิ้งไว้นานจนลืมละ จะได้เอามาทบทวน เผื่อไว้ให้ตัวเองกลับมาอ่าน

 

เรื่องเล่าท้ายตอน

คุณพิชญ์ แห่งอาณาจักรจัสมินฯเคยสอนผมไว้ว่า “คุณมีลูกน้องเก่งๆสิดี จะได้ทำงานสบาย” จะเรียกว่าเป็นประโยคเปลี่ยนชีวิตก็ได้มั้ง มันเหมือนทำให้เราคิดได้ ถ้าเราจะสอนคนก็อย่าไปกั้ก และจงให้โอกาสคน จงทำงานกับคนเก่งๆ ยิ่งเก่งกว่าเรายิ่งดี จะยิ่งทำให้เราพัฒนาขึ้น และหวังผลเลิศของงานได้

ถ้าใครจะเปิดคอร์สอบรมและถ้าคอร์สของคุณดีจริง ไม่ต้องห่วงหรอกว่าแค่ keyword เดียวที่คนเข้ามาหาข้อมูลคอร์สรู้ ถึงขั้นต้องลบออก แล้วจะทำให้ขายคอร์สไม่ได้นะ ผมก็มีไปเรียนเรื่อง iot ของอีกที่นึงไม่บอกแหละ เด่วหาว่าหน้าม้าดราม่าอีก ก่อนไปเรียนตัว workshop ที่ทำในห้องเรียนผมทำได้ 90% แล้วแหละ แต่ที่จ่ายตังค์ไปเรียนคืออยากไปเปิดโลก ไปแลกเปลี่ยนความคิดเห็น บางเรื่องอาจารย์ให้ข้อมูลผิดก็มีเราก็แย้ง บางเรื่องอาจารย์ให้ข้อมูลที่เราไม่รู้ หรือเข้าใจผิดเราก็น้อมรับ

ถ้าคอร์สที่จัดโดย ESP8266 Mesh Network หรือ ของคุณสุพจน์ แซ่เอีย ดีจริงอย่าไปกลัวเลยครับ บางครั้งผมก็เจอลูกน้องเก่งกว่า เจอรุ่นน้องเก่งกว่า เจอคนที่ผมสอนงานให้เก่งกว่า ดีซะอีกทำให้เราได้เปิดรับโลกใหม่ๆ ความรู้ใหม่ๆ อย่าตัดสินคนด้วยข้อมูลที่ไม่รอบด้านดีกว่า เนอะๆ

จบตอนที่หนึ่งละนะคุณสุพจน์ อย่าลืมติดตามตอนที่สองนะครับ จะพยายามไม่ให้เกิน 6 เดือนนะครับ Fighto Fighto

Author: Joe D.S.
Just a man on earth

3 thoughts on “ESP8266 / ESP32 & Mesh Network ตอนที่ 1: Introduction & Painlessmesh

  1. painlessmesh เป็นการส่งข้อมูลแบบ lora อยู่แล้วรึเปล่า

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.