สารบัญ:
วีดีโอ: แนวทางที่แตกต่างกับ Nextion: 3 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
ในโครงการแรกของฉันกับ Arduino Nano ที่เชื่อมต่อกับหน้าจอสัมผัส Nextion ฉันได้เขียนชุดคำสั่งยาวๆ เพื่อสื่อสารกับ Nextion ผ่านพอร์ตอนุกรม และสิ่งนี้หลีกเลี่ยงไม่ได้หากเราต้องส่งคำสั่งอิสระโดยสิ้นเชิงในช่วงเวลาสุ่ม
ฉันต้องยอมรับด้วยว่าฉันใช้เวลา 'ต่อสู้' กับห้องสมุดมากกว่าสิ่งอื่นใด ดังนั้นฉันจึงค่อยๆ มาทำงานโดยไม่มีไลบรารี่ ITEAD ที่หนักหน่วง
ในไม่ช้าฉันก็รู้ว่าฉันไม่มีความเร่งด่วนที่จะสื่อสารกับ Nextion ถึงการเปลี่ยนแปลงคุณสมบัติของวัตถุที่มองเห็นได้ แต่ฉันชอบที่จะรอจนกว่าฉันจะรวบรวมมันและส่งพวกเขาไปยัง Nextion โดยรวมเมื่อฉันได้กลุ่มที่สมบูรณ์
ฉันจะพยายามอธิบายตัวเองให้ดีขึ้น
เมื่อในโครงการของฉันประกอบด้วยข้อความบ่งชี้ที่เป็นข้อความ 16 รายการ ฉันต้องการเปิดหรือปิดบางรายการ ฉันทำได้โดยใช้ประโยชน์จากแอตทริบิวต์ 'bco' ที่เปิดใช้งาน ผ่าน (เช่น) จากสีเทาเข้มเป็นสีขาว (หากอยู่ใน สี่เหลี่ยมสีดำ) และในทางกลับกันเพื่อปิด
ในแอปพลิเคชันของฉัน ฉันพบว่าการส่ง 16 คำสั่งไปยังพอร์ตอนุกรมนั้นไร้ประโยชน์ในช่วงเวลาที่แตกต่างกัน 16 คำสั่ง โดยหนึ่งคำสั่งสำหรับ 'bco' ของสัญญาณ 16 ตัว
ฉันชอบให้ Arduino รวบรวมสัญญาณที่ต้อง 'เปิด' (สูง) และสัญญาณใดต้อง 'ปิด' (ต่ำ) ในการลงทะเบียน 16 บิต โดยที่แต่ละบิตสอดคล้องกับสัญญาณ Nextion 16 แบบ
หลังจากอัปเดตแต่ละบิตของรีจิสเตอร์ ฉันส่งค่าไปยัง Nextion ซึ่งเป็นข้อความเดียวที่มีข้อมูลรวมเกี่ยวกับ 16 องค์ประกอบ
ด้วยวิธีนี้ การสื่อสารจาก Arduino และ Nextion จะลดลงอย่างมาก เนื่องจากในข้อความเดียวที่ส่งบนซีเรียลไปยัง Nextion ข้อมูลจะถูกรวบรวมซึ่งมิฉะนั้นจะต้องส่ง 16 ข้อความ
จริงอยู่ ไม่จำเป็นต้องอัปเดตรายงานทั้งหมดเสมอไป แต่ฉันแน่ใจว่าหากไม่ทำเช่นนั้นจะทำให้เสียเวลามากขึ้น
โดยปกติแต่ละบิตที่มีอยู่ในจำนวนเต็มที่ได้รับโดย Arduino จอแสดงผล Nextion จะต้องเชื่อมโยงกับแอตทริบิวต์ที่ต้องการ
ซึ่งหมายความว่าต้องเขียนโค้ดในหน้าจอ Nextion แต่ไม่ต้องกลัว: ถ้าฉันทำสำเร็จ …
มีข้อได้เปรียบสองประการ: Arduino จะมีโค้ดที่เบากว่า และจะมีส่วนร่วมน้อยลงในการสื่อสารแบบอนุกรมกับ Nextion
Nextion หลังจากได้รับข้อมูลในข้อความเดียว จะใช้ได้เร็วกว่าการรอ 16 ข้อความ ดังนั้นการเปิดหรือปิดสัญญาณ 16 แบบจึงเกือบจะพร้อมกันเมื่อเทียบกับโหมดปกติที่สุด ซึ่งเวลาสำหรับข้อความที่ไม่ทราบจำนวนจะผ่านไประหว่างการดำเนินการของคำสั่งสำหรับการส่งสัญญาณครั้งแรกและคำสั่งสำหรับการส่งสัญญาณครั้งสุดท้าย
ในจอแสดงผล Nextion ฉันสร้างระบบนี้ในแบบคลาสสิก นั่นคือ การเปลี่ยน 'มาสก์' รีจิสเตอร์ในแต่ละครั้งจะทำให้คุณสามารถตรวจสอบ 16 บิตแต่ละอันได้ เมื่อตรวจสอบบิตเป็น HIGH สัญญาณที่เกี่ยวข้องกับบิตนั้นจะสว่างขึ้นบนจอแสดงผลและดับลงเมื่อบิตต่ำ
ด้าน 'ด้านลบ' ของระบบนี้คือโค้ดที่เขียนในจอแสดงผล Nextion ไม่สะดวกที่จะจัดทำเป็นเอกสารมากกว่าโค้ด Arduino นอกจากนี้ รหัส Nextion ยังเสี่ยงต่อการกระจัดกระจายไปทั่ววัตถุต่างๆ ต้องใช้ความระมัดระวังในการจัดทำเอกสารสิ่งที่คุณทำทันที
ฉันใช้ Notepad ++ เพื่อเขียนโค้ดที่ฉันคัดลอกไปยังวัตถุ Nextion ซึ่งเกือบจะอยู่ใน tm0 ของหน้า 0 เท่านั้น
ไวยากรณ์ของภาษา Nextion มีข้อ จำกัด มากมาย แต่สามารถเอาชนะพวกเขาหรือหลีกเลี่ยงพวกเขาด้วยความพยายามขั้นต่ำและพยายามมองปัญหาจากมุมมองที่ผิดปกติเช่นกัน
ตัวอย่างเช่น ฉันรายงานวิธีที่ Arduino เขียนรีจิสเตอร์ที่จะส่ง ซึ่งฉันเขียนด้วยวิธีพื้นฐานที่สุดเท่าที่จะทำได้
ขั้นตอนที่ 1: วิธีการส่งทะเบียน
ในไฟล์ ArduinoCode. PDF ฉันแสดงภาพร่างทั้งหมดของฉัน (อ่านโค้ดตรงนี้ไม่ชัดเจน)
ที่นี่ฉันต้องการเพียงแสดงให้เห็นว่า Arduino ส่งการลงทะเบียน 16 บิตไปยัง Nextion อย่างไรโดยไม่ได้รับความช่วยเหลือจากไลบรารี่ แต่เคารพไวยากรณ์ที่ ITEAD อธิบายไว้
//***************************************************************************************
เป็นโมฆะ NexUpd()
//***************************************************************************************
{
SRSerial.print("vINP.val=");
SRSerial.print(InpReg); // ส่ง 16 บิตที่รวบรวมไปยัง Nextion Display
SRSerial.print(InpReg); // ส่ง 16 บิตที่รวบรวมไปยัง Nextion Display
SRSerial.write (สิ้นสุด); // 255
SRSerial.write (สิ้นสุด); // 255
SRSerial.write(สิ้นสุด); // 255
}
//***************************************************************************************
ขั้นตอนที่ 2:.. แต่ก่อน …
แน่นอนว่าโค้ดเริ่มต้นด้วยการประกาศและการตั้งค่า () ทั้งหมด
อินพุตคือ INPUT_PULLUP ดังนั้นสวิตช์อินพุตปกติจะเปิดและเมื่อปิด จะใช้ GND กับอินพุตที่เกี่ยวข้อง
(นี่เป็นคำสั่งแรกของฉันและฉันขอโทษที่แสดงรหัสของฉันในทางที่ไม่ดี โปรดดาวน์โหลดไฟล์ ArduinoCode. PDF ที่ชัดเจนมาก
มาคุยกันดีกว่า
ฉันได้พัฒนาวิธีการของตัวเองในการ 'บอก' ให้ Nextion แสดงสิ่งที่ต้องทำ โดยปกติ MCU (ในกรณีของฉัน Arduino) จะส่งข้อความสำหรับทุกรูปแบบเพื่อนำไปใช้กับแอตทริบิวต์ของวัตถุใด ๆ วิธีการนี้เสียเวลามากในการทำสิ่งต่าง ๆ ไม่เร่งด่วนเสมอไปในการโหลด Serial Line อย่างต่อเนื่อง ฉันพบว่าสะดวกกว่าที่ Arduino รวบรวมเป็น 16 บิตเพื่อลงทะเบียนข้อมูลเกี่ยวกับแอตทริบิวต์ที่แตกต่างกันใน Nextion ทุกๆ 500 mS Arduino ของฉันจะส่งหนึ่งข้อความไปยัง Nextion ที่มี 16 บิตที่มีอยู่ในการลงทะเบียนแต่ละครั้ง เห็นได้ชัดว่าใน Nextion เราต้องการโค้ดที่จัดการสิ่งที่ต้องดำเนินการ การกระจายงาน (และรหัส) นี้ทำให้ได้รับประโยชน์อื่นๆ มากมาย เช่น คิดวิธีทำให้ไฟกระพริบ! ด้วยวิธีการของฉัน มันง่าย: ตั้งค่าเล็กน้อยในการลงทะเบียน Arduino และส่งไปที่ Nextion รีจิสเตอร์คู่ Nextion สามารถอัพเดตจาก Arduino ได้น้อยมาก เนื่องจากความถี่การกะพริบที่เป็นอิสระจากการสื่อสาร ความถี่การกะพริบขึ้นอยู่กับวัตถุ Timer ไปที่ Nextion และสามารถทำงานโดยใช้เวลาฐานขั้นต่ำใกล้กับ 50 mS ดังนั้นด้วยวิธีของฉัน เราสามารถกระพริบไฟใน Nextion ที่ความถี่ค่อนข้างสูง (สมมติว่า 2 Hz) แม้ว่า Arduino ของฉันจะส่งข้อความทุก ๆ 10 วินาทีเพียงเพื่อเป็นตัวอย่างที่รุนแรง สิ่งนี้สามารถแนะนำปัญหาตรงข้าม: จะทำอย่างไรถ้าการสื่อสารล้มเหลว นี่ไม่ใช่เป้าหมายของการสนทนานี้ แต่ฉันได้แก้ไขปัญหานี้ด้วย Watch Dog ชนิดหนึ่ง: หนึ่งในรหัส Arduino และอีกอันในรหัส Nextion
การกะพริบถูกควบคุมโดยรหัส Nextion โดยที่แสงทุกดวงจะปฏิบัติตามกฎเกณฑ์ที่เหมาะสม: เปิด/ปิด หรือ สีเขียว/แดง หรือเปลี่ยนการเขียนภายใน (หรืออื่นๆ เพิ่มเติม) ฉันสามารถบอกสิ่งอื่น ๆ เกี่ยวกับโครงการของฉันได้ แต่ฉันชอบที่จะรอคำถามของคุณก่อนที่จะเพิ่มคำมากเกินไปซึ่งไม่ง่ายสำหรับฉันที่จะแปลได้ดีเท่าที่ฉันจะทำได้
ขั้นตอนที่ 3: การแก้ไข Nextion Objects
นี่เป็นส่วนหนึ่งของรหัสที่ฉันเขียนด้วย Nextion Editor บนวัตถุ tm0
เราไม่ได้สังเกตเห็นว่าด้วย 16 บิตที่ได้รับจาก Arduino จอแสดงผล Nextion ไม่เพียงเปิดและปิดสัญญาณ ในขณะนี้ฉันละเว้นคำอธิบายเพื่อไม่ให้เกิดความเข้าใจที่ซับซ้อน
ฉันเป็นมือใหม่ ดังนั้นควรดาวน์โหลดหน้า Nextion code. PDF แทนเพื่ออ่านโค้ดที่สับสนที่นี่ (ฉันขอโทษ นี่เป็นคำสั่งแรกของฉัน)
หากคุณต้องการคุณสามารถดาวน์โหลดรหัสที่สมบูรณ์ "HMI" สำหรับแอปพลิเคชันของฉันนี้ ชื่อไฟล์ของรหัสนี้คือ POW1225. HMI มันสามารถทำงานในจอแสดงผล Nextion ของคุณ NX4024T032 ได้ แต่เพื่อให้เข้าใจคุณต้องว่ายน้ำเข้าไปในหลาย ๆ วัตถุและดูรหัสภายในหน้าต่างเล็ก ๆ ของตัวแก้ไข เลยคิดว่าจะดูโค้ดหลักได้ง่ายขึ้น เขียนเป็นไฟล์ Nextion code. PDF
// โครงการ POW1225. HMI 15 พฤษภาคม 2562
// vACC (va0) ตัวสะสม
// vINP (va1) อินพุต รีจิสเตอร์ xxxx xxxx xxxx xxxx
tm0.en=1 // tm0 เริ่ม
tm0.tim=50 // tm0 ฐานเวลา 50 mS
// RDY ***************
vACC.val=vINP.val&0x0001 // Mask
if(vACC.val!=0) // ทดสอบ RDY
{
tRDY.pco=สีน้ำเงิน // RED
}อื่น
{
tRDY.pco=GREY // สีเทาเข้ม
}
// ป.ป.ช. ***************
vACC.val=vINP.val&0x0002
if(vACC.val!=0) // ทดสอบ PWR
{
tPWR.pco=GREEN // สีเขียวอ่อน
tPON.txt="ON" // ON
tPON.pco=GREEN // สีเขียวอ่อน
}อื่น
{
tPWR.pco=GREY // สีเทาเข้ม 33808
tPON.txt="OFF" // OFF
tPON.pco=GREY // สีเทาเข้ม 33808
}
// แห้ง ***************
vACC.val=vINP.val&0x0004
if(vACC.val!=0) // ทดสอบ DRY
{
tDRV.pco=สีน้ำเงิน // BLUE
tDRY.pco=BLUE // BLUE
}อื่น
{
tDRV.pco=GREY // สีเทาเข้ม 33808
tDRY.pco=GREY // สีเทาเข้ม 33808
}
// วิ่ง ***************
vACC.val=vINP.val&0x0018
if(vACC.val!=0) // ทดสอบ RUN
{
tRUN.bco=RED // MARCIA RED (เปิด)
tRUN.pco=BLACK // บน BLACK
tDIR.bco=RED // DIR RED
tDIR.pco=BLACK // บน BLACK
}อื่น
{
tRUN.bco=32768 // MARCIA GREY (ปิด)
tRUN.pco=GREY // บน GREY
tDIR.bco=32768 // DIR สีเขียวเข้ม 1024
tDIR.pco=GREY // DIR GREY
tDIR.txt="---" // STOP
}
// ซ้าย **************
vACC.val=vINP.val&0x0008
if(vACC.val!=0) // ทดสอบ RUN Right
{
tDIR.txt="<<< " // DIR ซ้าย
}
// ขวา *************
vACC.val=vINP.val&0x0010
if(vACC.val!=0) // ทดสอบ RUN Left
{
tDIR.txt=" >>>" // ถูกต้อง
}
// ทั้งสอง **************
vACC.val=vINP.val&0x0018
if(vACC.val==24) // ทดสอบ RUN ทั้งคู่
{
tDIR.txt=">>!<<" // DIR ทั้งคู่
}
// ทดสอบ **************
vACC.val=vINP.val&0x0020
if(vACC.val!=0) // ทดสอบ TEST
{
tTEST.pco=WHITE // WHITE
tw tTEST, 1 // เปิดใช้งานเหตุการณ์การแตะ
}อื่น
{
tTEST.pco=GREY // สีเทาเข้ม 33808
tsw tTEST, 0 // ปิดใช้งานกิจกรรมการแตะ
}
// ความผิดพลาด *************
vACC.val=vINP.val&0x0040
if(vACC.val==0) // ทดสอบ FAULT
{
tFLT.pco=GREY // ไม่มีข้อผิดพลาด
}
ถ้า(vACC.val!=0)
{
tFLT.pco=YELLOW // ความผิดพลาดในปัจจุบัน
}
// อีเอ็มอี ***************
vACC.val=vINP.val&0x0080
if(vACC.val==0) // ทดสอบ EME
{
tEME.pco=GREY // ไม่มี EME
}
ถ้า(vACC.val!=0)
{
tEME.pco=RED // EME นำเสนอ
}
}
// เฟอร์โม *************
vACC.val=vINP.val&0x0100
if(vACC.val!=0) // ทดสอบ FERMO
{
tFER.pco=BLACK // BLACK
tFER.bco=GREEN // GREEN
}อื่น
{
tFER.pco=GREY // GREY
tFER.bco=672 // สีเขียวเข้ม
}
// *******************
การรับทราบ
ฉันต้องการแสดงความขอบคุณต่อ Gideon Rossouwv เพราะการอ่าน Instructables ของเขา ฉันได้รับส่วนหนึ่งของวัตถุประสงค์อย่างรวดเร็ว ขอบคุณนาย Gideon Rossouwv
แนะนำ:
เครื่องคำนวณ Nextion/Arduino: 3 ขั้นตอน
เครื่องคิดเลข Nextion/Arduino: เครื่องคิดเลขที่มีประโยชน์สำหรับ Arduino Uno เครื่องคิดเลขมีสไตล์คล้ายกับเครื่องคิดเลขมาตรฐานที่มาพร้อมกับ Windows 10 หมายเหตุ: ไม่รวมฟังก์ชันทางวิทยาศาสตร์และโปรแกรมเมอร์ที่เครื่องคิดเลข Windows 10 มี แต่ฟังก์ชันเหล่านี้
Nextion การแจ้งเตือนการประชุมปฏิทิน Outlook หน้าจอสัมผัส: 6 ขั้นตอน
Nextion Touchscreen Outlook Calendar Meeting Reminder: เหตุผลที่ฉันเริ่มโครงการนี้เพราะบ่อยครั้งที่ฉันพลาดการประชุมและคิดว่าฉันต้องการระบบเตือนความจำที่ดีกว่านี้ แม้ว่าเราจะใช้ปฏิทิน Microsoft Outlook แต่ฉันใช้เวลาส่วนใหญ่กับ Linux/UNIX บนคอมพิวเตอร์เครื่องเดียวกัน ขณะทำงานกับ
Nextion 3.5 PC Control Deck: 7 ขั้นตอน
Nextion 3.5 PC Control Deck: ดังนั้นฉันจึงตัดสินใจเผยแพร่โปรเจ็กต์ของฉันสู่สาธารณะ เนื่องจากฉันคิดว่าบางคนอาจต้องการสิ่งนี้
สถานีตรวจอากาศ DIY พร้อมจอแสดงผล Nextion และ Arduino: 11 ขั้นตอน
สถานีตรวจอากาศ DIY พร้อมจอแสดงผล Nextion และ Arduino: ในบทช่วยสอนนี้ เราจะใช้การแสดงผล Nextion, โมดูลเวลา rtc1307, Arduino UNO และ Visuino เพื่อแสดงเวลาปัจจุบัน อุณหภูมิ และความชื้น ดูวิดีโอสาธิต
Nextion ดิสเพลย์ - อธิบายอินเทอร์เฟซและโปรโตคอลด้วย PIC และ Arduino: 10 ขั้นตอน
Nextion ดิสเพลย์ | อธิบายอินเทอร์เฟซและโปรโตคอลด้วย PIC และ Arduino: Nextion Display ใช้งานง่ายมากและมีส่วนต่อประสานกับไมโครคอนโทรลเลอร์ด้วยความช่วยเหลือของตัวแก้ไข Nextion เราสามารถกำหนดค่าการแสดงผลและเราสามารถออกแบบ UI บนจอแสดงผลได้ ดังนั้นตามเหตุการณ์หรือคำสั่ง Nextion display จะทำหน้าที่แสดง