Мазмуну:
Video: Nextion менен башкача мамиле: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Nextion сенсордук дисплейине туташкан Arduino Nano менен болгон биринчи долбоорумда, мен Nextionго сериялык порт аркылуу билдириле турган узак командаларды жазган элем жана эгерде кокустук учурларда таптакыр көз карандысыз буйруктарды жөнөтүү керек болсо, бул сөзсүз болот.
Мен дагы башка нерселерге караганда Китепканалар менен "күрөшүүгө" көбүрөөк убакыт бөлгөнүмдү моюнга алышым керек. Ошентип, акырындык менен ITEADдын оор китепканалары жок эле толугу менен ишке кирдим.
Мен жакында Nextionго визуалдык нерселердин атрибуттарынын өзгөрүүсүн билдирүүгө шашылбаганымды түшүндүм, бирок мен аларды топтоп, бүтүндөй Nextionго жөнөткөнчө күткөндү жакшы көрөм.
Мен өзүмдү жакшыраак түшүндүрүүгө аракет кылам.
Менин долбоорумда 16 тексттик көрсөтмөлөрдөн турганда, мен алардын айрымдарын күйгүзүп же өчүргүм келет, муну күйгүзүү үчүн "bco" атрибутунун жардамы менен жасайм (мисалы) кара боздон акка өтөт (эгер кара тик бурчтук), жана тескерисинче өчүрүү.
Колдонмомдо 16 ар кандай учурда 16 сериялык портко 16 буйрукту жөнөтүүнүн эч кандай пайдасы жок деп таптым.
Мен анын ордуна Arduino кайсы сигналдар "күйүк" (БИЙИК) болушу керек, кайсынысы "өчүрүү" (ТӨМӨН) болорун 16 биттик реестрде чогултууну туура көрөм, мында ар бир бит Nextionдун 16 сигнализациясынын бирине туура келет.
Реестрдин ар бир битин жаңырткандан кийин, мен анын маанисин Nextionго өткөрүп берем, ал 16 элементке байланыштуу жамааттык маалыматты камтыйт.
Ошентип, Arduino менен Nextionдун байланышы бир топ кыскарат, анткени Nextionго сериалда жөнөтүлгөн бир эле билдирүүдө 16 билдирүүнү берүүнү талап кылган маалымат чогултулат.
Туура, бардык отчетторду жаңыртуу дайыма эле керек боло бербейт, бирок мен антпесем көбүрөөк убакыт кетет деп ишенем.
Албетте, Arduino алган бүтүн санда камтылган ар бир бит, Nextion дисплейи аны каалаган атрибут менен байланыштырууга туура келет.
Бул код Nextion дисплейинде жазылышы керек дегенди билдирет, бирок коркпош керек: эгер мен ийгиликке жетишсем …
Андан кийин эки эсе артыкчылык бар: Arduino жеңил кодго ээ болот жана Nextion менен сериялык байланышта азыраак болот.
Nextion маалыматтарды бир билдирүүдө алгандан кийин, аларды 16 билдирүүнү күткөнгө караганда алда канча тезирээк колдонот. 16 сигналды күйгүзүү же өчүрүү демейдеги режимге карата дээрлик заманбап болуп калат, анда белгисиз сандагы билдирүүлөрдүн убактысы биринчи сигнал үчүн буйруктун аткарылышы менен акыркы сигнал үчүн буйруктун ортосунда өтөт.
Nextion дисплейинде мен бул системаны классикалык түрдө жараттым, башкача айтканда, "маска" регистрин ар бир жолу айландыруу 16 биттин ар бирин карап чыгууга мүмкүндүк берет. Текшерилген бит ЖОГОРУ болгондо, дисплейде ошол бит менен байланышкан сигнал күйөт жана бит ТӨМӨН болгондо өчөт.
Бул системанын 'терс' жагы Nextion дисплейинде жазылган кодду документтештирүү Arduino кодуна караганда анча ыңгайлуу эмес. Андан тышкары, Nextion коду ар кандай объектилерге чачырап кетүү коркунучу бар. Эмне кылганыңызды дароо документтештирүү үчүн этият болуу керек.
Мен Notepad ++ кодун жазуу үчүн колдонуп, аны Nextion объектине көчүрөм, ал дээрлик 0 -беттеги tm0до гана.
Nextion тилинин синтаксисинде көптөгөн чектөөлөр бар, бирок ал аларды жеңүүгө же минималдуу күч менен айланып өтүүгө жана көйгөйлөрдү адаттан тыш көз караш менен кароого аракет кылат.
Мисал катары, мен Ардуинонун эң жөнөкөй жол менен жазган реестрди кантип жазаарын билдирем.
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) ар бир вариантка билдирүү жөнөтүп, кандайдыр бир объекттин атрибутун колдонот. Бул метод көп убакытты текке кетирүү үчүн дайыма шашылыш боло бербейт. Мага Arduino Nextionдо айырмаланып турган атрибуттар жөнүндө маалыматты 16 биттик регистрлерге чогултуу ыңгайлуураак болду. Болжол менен ар бир 500 mS, менин Arduino Nextionго ар бир реестрде камтылган 16 битти камтыган бир билдирүү жөнөтөт. Албетте, Nextionдо биз аткарылышы керек болгон кодго муктажбыз. Бул тапшырманы (жана кодду) бөлүштүрүү башка көптөгөн артыкчылыктарды алууга мүмкүндүк берет. Мисалы, кантип жаркыроо керек экенин ойлонуп көрүңүз! Менин мамилем менен бул оңой: Arduino реестрине бир аз коюп, Nextionго жөнөтүңүз. Nextion эгиз реестрлери Arduinoдон сейрек жаңыртылышы мүмкүн, анткени көз ирмөө жыштык байланыштан көз каранды эмес; ирмөө жыштыгы Таймер объектисинен Nextionго көз каранды жана 50 мС жакын минималдуу убакыт базасы менен иштей алат. Ошентип, менин методум менен биз Nextionдо жыштыкты салыштырмалуу жогорку ылдамдыкта (2 Гц деп ойлойбуз), менин Arduino 10 секунд сайын билдирүү жөнөтүп турса дагы, өтө мисал үчүн. Бул карама -каршы маселени сунуштай алат: Байланыш үзүлсө кантип кылуу керек? Бул талкуунун объектиси эмес, бирок мен бул маселени Watch Dog түрүндө чечтим: бири Arduino кодунун ичинде, экинчиси Nextion кодуна.
Жаркыроо Nextion коду менен жөнгө салынат, мында ар бир жарык өзүнүн тиешелүү эрежелерине баш ийет: ON/OFF же GREEN/RED же ичиндеги жазууну өзгөртүү (же башка). Мен өзүмдүн долбоорум жөнүндө башка нерселерди айта алам, бирок мен сиздин суроолорду күтүүнү туура көрөм, өтө көп сөздөрдү кошуудан мурун, мен каалагандай жакшы которуу үчүн оңой эмес.
3 -кадам: Nextion объектилерин түзөтүү
Бул жерде Nextion Editor менен tm0 объектисине жазган коддун бир бөлүгү.
Ардуинодон алынган 16 бит менен Nextion дисплейи жөн эле сигналдарды күйгүзүп же өчүрбөй турганын байкабай койбойбуз. Учурда түшүнүктү татаалдаштырбоо үчүн түшүндүрмөлөрдү калтырам.
Мен башталгычмын, андыктан чаташкан кодду бул жерден окуу үчүн Nextion code. PDF баракчасын жүктөп алуу жакшы. (Кечиресиз, бул менин биринчи көрсөтмөм)
Кааласаңыз, бул колдонмо үчүн "HMI" толук кодун жүктөп алсаңыз болот. Бул коддун файл аты POW1225. HMI. Ал Nextion дисплейиңизге кире алат NX4024T032, бирок аны түшүнүү үчүн көптөгөн объектилерге сүзүп, редактордун кичинекей терезесиндеги кодду карашыңыз керек. Ошентип, Nextion code. PDF файлында жазылган негизги кодду карап көрүү оңой болот деп ойлойм
// Долбоор POW1225. HMI 15 Май 2019
// vACC (va0) Аккумулятор
// vINP (va1) Киргизүү реестри xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 Башта
tm0.tim = 50 // tm0 Убакыт базасы 50 mS
// RDY ***************
vACC.val = vINP.val & 0x0001 // Маска
if (vACC.val! = 0) // Test RDY
{
tRDY.pco = КӨК // КЫЗЫЛ
} башка
{
tRDY.pco = GRAY // күңүрт боз
}
// PWR ***************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // Test PWR
{
tPWR.pco = ЖАШЫЛ // жарык жашыл
tPON.txt = "ON" // ON
tPON.pco = ЖАШЫЛ // жарык Жашыл
} башка
{
33808
tPON.txt = "ӨЧҮК" // ӨЧҮРҮҮ
tPON.pco = БОЗ // караңгы боз 33808
}
// КУРГАК ***************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // КУРГА сыноо
{
tDRV.pco = КӨК // КӨК
tDRY.pco = КӨК // КӨК
} башка
{
tDRV.pco = БОЗ // караңгы боз 33808
tDRY.pco = БОЗ // караңгы боз 33808
}
// ЧУРКА ***************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = RED // MARCIA RED (күйгүзүлгөн)
tRUN.pco = КАРА // КАРА боюнча
tDIR.bco = КЫЗЫЛ // КЫЗЫЛ
tDIR.pco = КАРА // КАРА боюнча
} башка
{
tRUN.bco = 32768 // MARCIA GRAY (өчүрүлгөн)
tRUN.pco = GRAY // GRAY боюнча
10D. You is a comment
tDIR.pco = GRAY // DIR GRAY
tDIR.txt = "---" // ТОКТОТ
}
// СОЛ **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Оңго чуркоо
{
tDIR.txt = "<<<" // DIR LEFT
}
// ТУУРА *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Сыноо RUN Солго
{
tDIR.txt = ">>>" // DIR RIGHT
}
// БААРЫ **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Test RUN both
{
tDIR.txt = ">>! <<" // DIR BOTH
}
// ТЕСТ **************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Test TEST
{
tTEST.pco = АК // АК
tsw tTEST, 1 // Touch окуяларын иштетүү
} башка
{
tTEST.pco = БОЗ // караңгы боз 33808
tsw tTEST, 0 // Touch окуяларын өчүрүү
}
// КАТА *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // ТЕЗ КАТА
{
tFLT.pco = GRAY // FAULT жок
}
эгер (vACC.val! = 0)
{
tFLT.pco = САРЫ // КАТА бар
}
// EME ***************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // EME сыноо
{
tEME.pco = GRAY // EME жок
}
эгер (vACC.val! = 0)
{
tEME.pco = RED // EME бар
}
}
// ФЕРМО *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // Test FERMO
{
tFER.pco = КАРА // КАРА
tFER.bco = ЖАШЫЛ // ЖАШЫЛ
} башка
{
tFER.pco = GRAY // GRAY
tFER.bco = 672 // караңгы ЖАШЫЛ
}
// *******************
Ыраазычылык
Мен Гидеон Россувга ыраазычылык билдиргим келет, анткени анын Нускамаларын окуу мен максаттарымдын бир бөлүгүн тез эле алдым. Рахмат мырза. Gideon Rossouwv
Сунушталууда:
Батарея менен иштөөчү LED Light (s) Solar Charging менен: 11 кадам (Сүрөттөр менен)
Батарея менен иштөөчү LED Жарыгы (лары) Күндүн кубаттуулугу менен: Аялым самын жасоону үйрөтөт, анын сабактарынын көбү кечинде болчу, кышында бул жерде саат 16:30 чамасында караңгы кирип калат, анын кээ бир окуучулары бизди табууда кыйналышкан. үй Бизде маңдайкы жазуу бар болчу, бирок көчө лигасы менен да
Акустикалык левитация Arduino Uno менен кадам-кадам (8-кадам): 8 кадам
Акустикалык левитация менен Arduino Uno Step-by-Step (8-кадам): ультрадыбыштуу үн өткөргүчтөр L298N Dc аял адаптеринин электр энергиясы менен камсыздоосу эркек токту Arduino UNOBreadboard Бул кантип иштейт: Биринчиден, сиз Arduino Uno кодун жүктөп бересиз (бул санарип менен жабдылган микроконтроллер) жана аналогдук порттор кодду айландыруу үчүн (C ++)
Nextion Display жана Arduino менен DIY аба ырайы станциясы: 11 кадам
Nextion Display жана Arduino менен DIY Weather Station: Бул үйрөткүчтө учурдагы убакытты, температураны жана нымдуулукту көрсөтүү үчүн Nextion дисплейин, rtc1307 убакыт модулун, Arduino UNO жана Visuino колдонобуз
Nextion Display - PIC жана Arduino менен түшүндүрүлгөн интерфейс жана протокол: 10 кадам
Nextion Display | Интерфейс жана протокол PIC жана Arduino менен түшүндүрүлөт: Nextion дисплейи микро контроллердин жардамы менен колдонууга абдан оңой жана Nextion редакторунун жардамы менен биз дисплейди конфигурациялай алабыз жана дисплейде UIди иштеп чыга алабыз. көрсөтүү үчүн аракет кылат
Үй жаныбарлары үчүн IoT мамиле диспенсери: 7 кадам (сүрөттөр менен)
Үй жаныбарлары үчүн IoT дарылоо диспенсери: Менин эки мышыгым бар жана аларга күнүнө 3 маал дарыларды берүү бир топ түйшүккө айланды. Алар мени татынакай жүздөрү жана катуу көздөрү менен карап, анан мышык жашылчаларына толгон кутуга чуркап, мияулап, жалынып -жалбарышат. Мен чечтим