นับตั้งแต่ทีม NETPIE ได้พัฒนาแอปปลิเคชันบนโทรศัพท์มือถือมาได้ระยะหนึ่ง โดยมีส่วนแจ้งเตือนแบบพุช (push notification) เมื่อเกิดเหตุการณ์ที่ผู้ใช้สนใจและกำหนดให้มีการแจ้งเตือน แต่ในช่วงเริ่มต้นบุคคลทั่วไปยังไม่ทราบวิธีการใช้งาน จนกระทั่ง NETPIE ได้ออกบทความอธิบายในส่วนนี้เพิ่มเติมในเวลาต่อมา ดังนั้นในบทความนี้เราจะมาศึกษากันว่า ส่วนแจ้งเตือนนี้มีประโยชน์อย่างไรรวมถึงการประยุกต์ใช้ในงานควบคุมอุตสาหกรรม
หมายเหตุ : เพื่อการเรียนรู้อย่างเป็นรูปธรรม การทดสอบนี้จะกระทำกับระบบควบคุมถังน้ำ 3 ระดับ เดิมต้องอาศัยบอร์ด LAG3-ESP32 ที่แจกให้กับผู้เข้าอบรม แต่ปัจจุบันผู้อ่านสามารถทดสอบได้โดยอาศัยการจำลองพลานต์นี้บนผลิตภัณฑ์ ESP32 ที่ท่านมีอยู่โดยไม่ต้องมีฮาร์ดแวร์เพิ่มเติมใดๆ รายละเอียดเพิ่มเติมอ่านได้จากบทความ
"การจำลองฟังก์ชันถ่ายโอนของพลานต์บน ESP32" โปรแกรมประกอบบทความนี้จะตั้งให้ใช้พลานต์จำลอง หากต้องการเปลี่ยนเป็นใช้บอร์ด LAG3 ให้ใช้คำสั่ง psim=off ผ่านพอร์ตอนุกรม
การใช้งานส่วนแจ้งเตือนแบบพุช
หลักการทำงานของส่วนแจ้งเตือนแบบพุชคือ ผู้ส่ง (publishers) จะส่งข้อความไปยังอุปกรณ์โมบายที่ติดตั้งแอปปลิเคชันไว้ เพื่อส่งข่าวสารที่สำคัญโดยที่ผู้ใช้ไม่จำเป็นต้องเปิดแอปหรือใช้อุปกรณ์อยู่ ข้อความแจ้งเตือนจะมีลักษณะคล้าย SMS เพียงแต่ส่งผ่านอินเทอร์เน็ต ในกรณีของ NETPIE ผู้ส่งอาจจะเป็นตัวอุปกรณ์หรือเป็นซอฟต์แวร์เช่นสวิตช์บน Freeboard ทางด้านผู้รับคือโทรศัพท์หรือแทบเล็ตที่ติดตั้งแอป NETPIE และมีบัญชีที่ใช้ APP ID เดียวกับทางด้านส่ง (เชื่อมต่อกันโดย key และ secret ตามพื้นฐานการใช้งานเบื้องต้นที่ได้เคยกล่าวถึงแล้ว)
ข้อแนะนำโดยทั่วไปในการใช้งานส่วนแจ้งเตือนแบบพุช
โดยลักษณะข้อความที่จะแจ้งเตือนบนโทรศัพท์แม้ไม่ได้เปิด NETPIE App ทำให้อาจสร้างความรำคาญแก่ผู้ใช้ได้ ดังนั้นจึงควรเลือกส่งข้อความที่มีความสำคัญจริงๆ เช่นความผิดปกติของระบบที่สามารถก่อให้เกิดความเสียหายหรืออันตราย
ควรเลือกส่งเพียงครั้งเดียวหรือเท่าที่จำเป็น ขณะที่โปรแกรมบนอุปกรณ์ทำหน้าที่สั่งงานเพื่อป้องกันระบบเบื้องต้น เช่นรีเซ็ตเอาต์พุตเป็นศูนย์ หยุดการทำงานของตัวควบคุม แสดงสถานะบน Freeboard ซึ่งเป็นหน้าที่ของผู้ใช้ที่จะเข้าไปดูข้อมูลเพิ่มเติมสำหรับเหตุการณ์นั้น
ข้อความเตือนไม่ควรยาวมากแต่สื่อความหมายที่ต้องการได้อย่างถูกต้อง อย่างไรก็ตามการสอดแทรกข้อมูลเช่นค่าของตัวแปรลงในข้อความเป็นแนวทางที่ดี ตัวอย่างเช่นแทนที่จะส่งข้อความเตือนแต่เพียงว่า "อุณหภูมิสูงเกิน" ซึ่งไม่ทราบว่าเกินไปมากน้อยเพียงใด ควรให้ข้อมูลเพิ่มเติมว่า "อุณหภูมิวัดได้ 53 องศา สูงกว่าค่าที่กำหนด (40 องศา)" จะทำให้ผู้ใช้สามารถตัดสินใจเบื้องต้นได้ว่าเหตุการณ์ที่เกิดขึ้นร้ายแรงเพียงใด
คำสั่งสำหรับส่งข้อความ
จากบทความที่เผยแพร่โดยทีมพัฒนา NETPIE คำสั่งหลักสำหรับการส่งข้อความพุชคือ
microgear.pushOwner("message");
ผู้อ่านที่ใช้อุปกรณ์ที่รองรับโดย microgear ของ NETPIE เช่น ESP8266 และติดตั้งไลบรารีที่อัพเดทแล้วสามารถสอดแทรกคำสั่งนี้ในโปรแกรม ณ จุดที่ต้องการส่งข้อความ แต่ในกรณีที่ใช้อุปกรณ์ที่ไลบรารีของ NETPIE ยังไม่รองรับ ให้ใช้คำสั่ง
microgear.publish("/@push/owner","message");
แทน ตัวอย่างโปรแกรมในบทความนี้จะใช้คำสั่งที่สองเนื่องจากใช้บอร์ด ESP32 ซึ่งไลบรารีของแล่มเลยยังไม่อัพเดทคำสั่งใหม่นี้
การทดสอบ
เราจะทดสอบการใช้งานข้อความแจ้งเตือนแบบพุชกับระบบควบคุมถังน้ำ 3 ระดับตามรูปที่ 1 ซึ่งใช้เป็นตัวอย่างมาอย่างต่อเนื่องในบทความก่อนหน้า แต่ผู้อ่านไม่จำเป็นต้องมีบอร์ดวงจรอิเล็กทรอนิกส์ LAG3-ESP32 เนื่องจากในโปรแกรมตัวอย่าง (ดาวน์โหลดได้จากด้านล่างของบทความ) จะเพิ่มการจำลองพลานต์นี้โดยซอฟต์แวร์
รูปที่ 1 ระบบถังน้ำ 3 ระดับที่จำลองโดยวงจรอิเล็กทรอนิกส์และอัลกอริทึมซอฟต์แวร์
ดังนั้นอุปกรณ์ฮาร์ดแวร์เพียงอย่างเดียวที่ต้องใช้คือบอร์ด ESP32 ใดก็ได้ ผู้เขียนได้ทดลองกับผลิตภัณฑ์ ESP32 จากบริษัท www.doit.am ในรูปที่ 2 (นอกจากข้อมูลของ WiFi router และ NETPIE แล้ว หากจะมีส่วนที่ผู้อ่านอยากแก้ไขก็คงเป็น ขาของ LED บนบอร์ดเพื่อให้มันกระพริบขณะตัวควบคุมทำงาน บอร์ดนี้อยู่ที่ขา GPIO5)
รูปที่ 2 ผลิตภัณฑ์บอร์ด ESP32 จาก www.doit.am
ในระบบจริงแรงดันที่อ่านได้จากเซนเซอร์วัดอัตราการไหลจะถูกแปลงเป็นหน่วยที่เหมาะสม เช่น ลบ.ซม หรือ ลบ.ม ต่อวินาที ซึ่งการแปลงนี้จะขึ้นอยู่กับเซนเซอร์ที่ใช้ ดังนั้นเพื่อความเป็นทั่วไป ในการศึกษานี้เราจะยึดหน่วยเป็นแรงดันที่อ่านได้จากเซนเซอร์ (โวลต์) และหน่วยที่ใช้ในการส่งค่าเอาต์พุตออกจากตัวควบคุมคือแรงดัน (โวลต์) เช่นเดียวกัน ค่าทั้งหมดถูกจำกัดโดยไฟเลี้ยง 3.3 โวลต์ เมื่อเผื่อค่าออฟเซ็ตของออปแอมป์แล้วจะจำกัดค่าอยู่ในช่วง 0.1 – 3 โวลต์
เลือกเหตุการณ์ที่ต้องการแจ้งเตือน
ในการใช้งานส่วนแจ้งเตือนแบบพุชนี้ ส่วนของคำสั่งที่ใช้ในโปรแกรมไม่มีอะไรที่ต้องศึกษาเพิ่มเติมเพราะใช้
microgear.publish() เหมือนที่ใช้ส่งค่าให้ Freeboard งานที่ยากที่สุดคือพิจารณาว่าเหตุการณ์ใดที่เหมาะสมกับการแจ้งเตือน และเขียนโปรแกรมเพื่อตรวจสอบเหตุการณ์นั้น ในงานที่มีเพียงการอ่านค่าจากเซนเซอร์และแสดงผล การโปรแกรมในส่วนนี้ต้องการเพียงเปรียบเทียบค่าที่อ่านได้กับค่าที่กำหนด แต่สำหรับงานควบคุมแล้วอาจต้องการตรวจสอบเงื่อนไขที่ซับซ้อนกว่า
สำหรับการควบคุมอัตราไหลของถังน้ำ 3 ระดับ ตัวอย่างของเหตุการณ์ที่เหมาะสมกับการแจ้งเตือนมีดังนี้
ระบบป้อนกลับไม่เสถียร
ค่าผิดพลาดในสถานะนิ่ง (steady-state error) มากกว่าค่าที่กำหนด
ผลตอบสนองขั้นบันไดมีการพุ่งเกินสูง
เอาต์พุตของตัวควบคุมมีค่าสูงทำให้เกิดการอิ่มตัว
ระบบเข้าสู่สถานะนิ่งช้ากว่าค่าที่กำหนด
ความผิดพลาดของฟังก์ชันเสริม เช่น การปรับแต่งพารามิเตอร์ PID อัตโนมัติ
จุดมุ่งหมายของบทความเพียงเพื่อสาธิตการแจ้งเตือนแบบพุชเบื้องต้นเท่านั้น ดังนั้นจะจำกัดความซับซ้อนของปัญหาไว้เพียง 2 เหตุการณ์ คือ 2 (ซึ่งจะครอบคลุม 1.) และ 3 และเพื่อความยืดหยุ่นในการใช้งาน จะเพิ่มคำสั่งสำหรับกำหนดค่าต่างๆ ที่เกี่ยวข้องผ่านพอร์ตอนุกรม เช่น ค่าผิดพลาดสูงสุด เปอร์เซนต์การพุ่งเกินสูงสุด ค่าเวลาในการเข้าสู่สถานะนิ่ง
ผลตอบสนองขั้นบันไดของระบบถังน้ำ 3 ระดับ
การตรวจสอบผลตอบสนองขั้นบันได (step response) เป็นการวัดสมรรถนะด้านการคุมค่า (regulation) และการตามรอย (tracking) ของระบบป้อนกลับที่นิยมใช้ทั่วไป เพราะสามารถเก็บข้อมูลได้ง่าย และเป็นข้อมูลในโดเมนเวลาที่ไม่ต้องมีการคำนวณหรือประมวลผลที่ยุ่งยาก ผลตอบสนองขั้นบันไดขึ้นกับหลายปัจจัย เช่น แบนด์วิดท์ของระบบป้อนกลับ การปรับแต่งพารามิเตอร์ตัวควบคุม การอิ่มตัวในระบบ
ในการที่จะวิเคราะห์เหตุการณ์ที่ควรแก่การแจ้งเตือน จำเป็นต้องมีผลตอบสนองที่ใช้เป็นแม่แบบ (baseline) จากระบบที่ทำงานปกติ และมีการปรับแต่งตัวควบคุมอย่างเหมาะสม ในที่นี้จะใช้ผลตอบสนองตามรูปที่ 3 ซึ่งได้จากการปรับแต่งพารามิเตอร์ PID โดยวิธี ZNFD (Ziegler-Nichols แบบโดเมนความถี่) รายละเอียดศึกษาได้จากหนังสือ
"ระบบควบคุมฝังตัว" โดยจากรูปแสดงผลตอบสนองที่ได้จากบอร์ด LAG3-ESP32 และจากอัลกอริทึมจำลองบน ESP32 เปรียบเทียบกัน ซึ่งจะใกล้เคียงกัน
สังเกตว่าโดยธรรมชาติของวิธีการปรับแต่ง ZNFD จะให้การพุ่งเกินที่ค่อนข้างสูง และผลตอบสนองโดยรวมจะค่อนข้างช้าเนื่องจากข้อจำกัดของพลานต์มีแบนด์วิดท์ต่ำ หากต้องการสมรรถนะตามรอยที่เร็วกว่านี้จะต้องใช้ตัวควบคุมอัตราขยายสูงทำให้เกิดปัญหาการอิ่มตัวในระบบป้อนกลับ ดังนั้นผลตอบสนองตามรูปที่ 3 จึงเหมาะสมที่จะใช้เป็นแม่แบบของระบบที่ทำงานปกติ จากรูปเราได้ข้อกำหนดโดยประมาณว่าการพุ่งเกินมีค่าน้อยกว่า 60% และค่าผิดพลาดในสถานะนิ่งน้อยกว่า 0.1 โวลต์หลังจาก 8 วินาที
รูปที่ 3 ผลตอบสนองขั้นบันไดจากระบบควบคุมถังน้ำ 3 ระดับ
การเขียนโปรแกรมเพื่อวัดค่าการพุ่งเกินและค่าผิดพลาดสถานะนิ่งมีรายละเอียดค่อนข้างมากและไม่ใช่ประเด็นสำคัญของบทความ ผู้อ่านสามารถศึกษาเพิ่มเติมได้จากตัวโปรแกรม โครงสร้างโดยรวมคือการวัดค่า คำนวณ และตรวจสอบเหตุการณ์จะถูกสอดแทรกไว้ในอัลกอริทึมควบคุม โดยต้องครอบคลุมทุกรูปแบบของการส่งคำสั่งอ้างอิง เช่นหากสั่งลดอัตราการไหลลงจากค่าเดิม ผลตอบสนองจะลดจากค่ามากสู่ค่าน้อย และจะเกิดการพุ่งใต้ (undershoot) แทน ตัวอย่างโค้ดที่สอดแทรกไว้ในอัลกอริทึมควบคุมเพื่อคำนวณค่าพุ่งเกินและตรวจสอบว่าเกินค่าที่กำหนดหรือไม่เป็นดังนี้
// overshoot measurement
if (overshootcheck) {
if ((stepdir==UP)&(y>=r)) {
overshoott = y-r;
}
if ((stepdir==DOWN)&(y<=r)) {
overshoott = r-y; // undershoot, actually
}
if (overshoott>=overshoot) overshoot=overshoott;
// replace previous overhoot value
else { // stop checking overshoot
overshootcheck=OFF;
overshootp = 100*overshoot/stepsize;
// compute percent overshoot
if (overshootp > overshootlim) osfault = TRUE;
// set overshoot error flag
}
}
ส่วนค่าผิดพลาดในสถานะนิ่งจะเริ่มตรวจสอบหลังจากช่วงเวลาที่ตั้งไว้ (กำหนดเริ่มต้น 8 วินาที) และจะวัดค่าต่อเนื่องกัน 4 ครั้งก่อนจะตัดสินใจว่าเป็นผลตอบสนองของระบบจริง ไม่ใช่ค่าผิดพลาดที่เกิดจากสัญญาณรบกวนความถี่สูง
ในกรณีที่เกิดเหตุการณ์ที่ต้องมีการแจ้งเตือน ไม่ควรใส่คำสั่ง
microgear.publish() ไว้ในทาสก์ตัวควบคุมเพราะในทาสก์นั้นต้องการให้มีคำสั่งที่ใช้เวลาน้อยที่สุด แต่จะตั้งค่าตัวแปรแฟลก และให้ทาสก์ 5 ที่ทำหน้าที่สื่อสารกับ NETPIE เป็นตัวส่งข้อความแจ้งเตือนแทน ซึ่งจะส่งเพียงครั้งเดียว ในข้อความเตือนจะมีค่าของตัวแปรที่วัดได้จริงและค่าที่ตั้งไว้รวมอยู่ด้วยเพื่อเป็นข้อมูลประกอบการตัดสินใจของผู้ใช้
การใส่ข้อมูลค่าของตัวแปรลงในข้อความแจ้งเตือนทำได้โดยวิธีเดียวกับการพับลิชค่าให้กับ Freeboard ตัวอย่างการส่งข้อความแจ้งเตือนการพุ่งเกินเขียนได้ดังนี้
if (osfault) {
String oserrorstring = "Overshoot "+(String)overshootp+
"% exceeding spec ("+(String)overshootlim+" %)";
microgear.publish("/@push/owner",oserrorstring);
// for debug purpose
Serial.print("Push notification sent -->");
Serial.println(oserrorstring);
osfault = 0; // reset flag;
}
โดยค่าการพุ่งเกินที่คำนวณได้และค่าที่กำหนดไว้ถูกเก็บในตัวแปร overshootp และ overshootlim ตามลำดับ มีหน่วยเป็นเปอร์เซนต์ หลังจากส่งข้อความแล้วตัวแปรแฟลก osfault จะถูกรีเซ็ตเพื่อมิให้ข้อความเดิมถูกส่งซ้ำอีก
ผลการทดสอบ
ตรวจสอบข้อมูล WiFi และ NETPIE ว่าถูกต้องหรือไม่ก่อนคอมไพล์และโหลดลงบนบอร์ด ESP32 เปิด Serial Monitor เพื่อตรวจสอบว่าการเชื่อมต่อ NETPIE สำเร็จ เปิดแอป NETPIE ในโทรศัพท์จะไม่เห็นการแจ้งเตือนใดๆ เพราะเหตุการณ์ที่ตั้งไว้ไม่เกิดขึ้น
พารามิเตอร์ตัวควบคุม PID ที่ตั้งไว้ตอนเริ่มต้นคือ kp = 4.8, ki = 2.74, kd = 2.1 จากการศึกษาระบบควบคุมเราทราบว่าเมื่อเพื่มค่า ki จะทำให้การพุ่งเกินสูงขึ้น ทดลองปรับค่า ki = 4 และสั่งคำสั่ง step=1.5 ดังแสดงในรูปที่ 4 เมื่อโปรแกรมคำนวณการพุ่งเกินได้เท่ากับ 81.76 % ซึ่งมีมีค่ามากกว่าค่าสูงสุดที่กำหนดไว้ (60%) การแจ้งเตือนจะถูกส่งไปที่โทรศัพท์ทันที โดยได้เขียนโปรแกรมให้แสดงในหน้าต่าง Serial Monitor ด้วย
รูปที่ 4 การพุ่งเกินมีค่าเกินกว่ากำหนดเมื่อปรับค่า ki
ข้อความที่ส่งจากอุปกรณ์จะปรากฏขึ้นที่หน้าจอโทรศัพท์ดังในรูปที่ 5 โดยมีสัญลักษณ์ [new] แสดงว่ายังไม่ได้ถูกเปิดอ่าน
รูปที่ 5 ข้อความแจ้งเตือนว่าการพุ่งเกินมาค่ามากกว่ากำหนด
เมื่อแตะเพื่อเปิดข้อความจะเป็นดังรูปที่ 6 โดยมีข้อมูลวัน เวลา ที่ข้อความถูกส่ง และข้อมูลของ NETPIE
รูปที่ 6 รายละเอียดของข้อความแจ้งเตือน
ต่อมาจะทดสอบเหตุการณ์เมื่อค่าผิดพลาดในสถานะนิ่งมีค่ามากกว่าที่กำหนด กรณีนี้ไม่จำเป็นต้องใช้คำสั่ง step เพียงแต่เพิ่มอัตราขยายตัวควบคุมให้มีค่าสูงมาก เช่น kp=100, ki=50 ระบบป้อนกลับจะเริ่มเสถียรน้อยลง ส่งผลให้ค่าผิดพลาดในสถานะนิ่งมากขึ้นจนกระทั่งเกินค่าที่ตั้งไว้ ข้อความแจ้งเตือนก็จะถูกส่งมาที่โทรศัพท์ดังแสดงในรูปที่ 7
รูปที่ 7 ข้อความแจ้งเตือนเมื่อค่าผิดพลาดในสถานะนิ่งมากกว่าที่กำหนด
สังเกตว่าการตรวจสอบค่าผิดพลาดในสถานะนิ่งสามารถครอบคลุมการเสียเสถียรภาพของระบบป้อนกลับและสมรรถนะการตามรอยที่ไม่ได้ตามข้อกำหนด ผู้อ่านอาจทดลองใช้ตัวควบคุมที่มีแต่พจน์สัดส่วนอย่างเดียว (ปรับ ki=0, kd=0) ก็จะเห็นข้อความแจ้งเตือนเช่นกัน ถึงแม้ว่าที่ค่า kp น้อยๆ ระบบจะมีเสถียรภาพดี แต่เอาต์พุตจะไม่ลู่เข้าสู่ค่าคำสั่งอ้างอิง
ในโปรแกรมจะใช้ตัวแปรแฟลกเพื่อป้องกันมิให้ข้อความเตือนถูกส่งซ้ำ เป็นหน้าที่ของผู้ใช้งานที่จะต้องแก้ไขปัญหาที่ทำให้ระบบทำงานผิดปกติ หลังจากนั้นจึงรีเซ็ตตัวแปรที่เกี่ยวข้องเพื่อให้ระบบตรวจสอบค่าผิดพลาดกลับมาทำงานอีกครั้งหนึ่ง
สำหรับในกรณีที่มีการสั่ง step ค่าผิดพลาดในสถานะนิ่งจะถูกคำนวณหลังจากเวลาผ่านไป 8 วินาที ซึ่งค่านี้สามารถตั้งได้ผ่านพอร์ตอนุกรมโดยคำสั่ง tsettle เช่น tsettle=10
ประโยชน์หลักของการแจ้งเตือนแบบพุชคือ ผู้ใช้ไม่จำเป็นต้องเปิดแอป NETPIE หรือต้องใช้โทรศัพท์อยู่ตลอดเพื่อรับข้อความ เพราะเมื่อมีข้อความแจ้งเตือนจะสังเกตได้จากไอคอนเล็กๆที่มุมบนซ้ายของโทรศัพท์ตามจำนวนของข้อความ ดังเช่นบริเวณที่มีลูกศรชี้ในรูปที่ 8
รูปที่ 8 ไอคอนแสดงว่ามีข้อความแจ้งเตือนจาก NETPIE
และเมื่อใช้นิ้วลากลงมาจากขอบบนของจอ ก็จะเห็นข้อความเตือนที่สามารถเปิดดูได้ทันที (รูปที่ 9)
รูปที่ 9 การเลื่อนดูข้อความเตือนแบบพุชจาก NETPIE โดยไม่ต้องเปิดแอป
สรุป
การส่งข้อความเตือนแบบพุชบนแอป NETPIE ช่วยให้ผู้ใช้งานสามารถได้รับข้อความสำคัญทางโทรศัพท์ได้โดยไม่จำเป็นต้องเปิดแอป นับว่าเป็นฟังก์ชันใหม่ที่มีประโยชน์มากหากใช้อย่างเหมาะสม อยู่ที่วิจารณญาณของผู้พัฒนา IoT ว่าเหตุการณ์ใดควรส่งเป็นข้อความแจ้งเตือน ข้อมูลที่ไม่สำคัญมากควรให้ผู้ใช้เปิดดูเองจากหน้า Freeboard มากกว่า การส่งข้อความที่ไม่สำคัญเป็นจำนวนมากๆ จะทำให้ข้อความเต็มโทรศัพท์ในเวลาไม่นาน (จะถูกส่งไปทุกเครื่องที่มีแอปและบัญชี NETPIE เดียวกัน) และที่สำคัญ ในช่วงเริ่มต้นนี้ข้อความบนโทรศัพท์ยังไม่สามารถลบได้
ข้อควรระวังสำหรับผู้ใช้งานคือการคาดหวัง หรือไว้วางใจกับการแจ้งเตือนทางโทรศัพท์นี้มากจนเกินไป จนละเลยการตรวจสอบจากช่องทางอื่นโดยคิดว่าเมื่อไม่มีข้อความเตือนใดๆ ก็คือระบบเป็นปกติ ต้องไม่ลืมว่าหากฮาร์ดแวร์มีปัญหา โปรแกรมหยุดทำงาน การสื่อสารขัดข้อง ล้วนมีผลให้ข้อความแจ้งเตือนไม่สามารถส่งได้ นอกจากนั้นบั๊กในโปรแกรมที่รอดจากการตรวจพบอาจทำให้ไม่มีข้อความเตือน หรือส่งข้อความที่ผิดพลาด
โปรแกรมที่ใช้ในบทความ
lag3_freertos_netpiepush.ino
No comments:
Post a Comment