Мазмуну:
- Жабдуулар
- 1 -кадам: Физикалык байланыштар
- 2 -кадам: Китепкананы кантип колдонуу керек
- 3 -кадам: Негизги маалыматтарды берүү
- 4 -кадам: Негизги маалыматтарды алуу
- 5 -кадам: Тестирлөө
Video: Arduino Serial Байланыш: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Көптөгөн Arduino долбоорлору бир нече Arduino ортосунда маалыматтарды берүүгө таянат.
Сиз RC машинасын, RC учагын куруп жаткан же хобби болосузбу же алыскы дисплейи бар аба ырайынын станциясынын долбоорун түзөсүзбү, бир Ардуинодон экинчисине сериялык маалыматтарды кантип ишенимдүү өткөрүүнү билишиңиз керек болот. Тилекке каршы, хоббистердин өз долбоорлорунда сериялык маалымат алышын алуу кыйын, себеби, сериялык маалыматтар байт агымы катары жөнөтүлөт.
Байт агымында эч кандай контекст болбосо, маалыматтарды чечмелөө дээрлик мүмкүн эмес. Берилмелерди чечмелей албай туруп, сиздин Arduinos ишенимдүү баарлаша албайт. Эң негизгиси, бул контексттик маалыматтарды стандарттык сериялык пакет дизайнын колдонуу менен байт агымына кошуу.
Сериялык пакеттердин дизайны, пакеттерди толтуруу жана пакеттерди талдоо татаал жана жетүү кыйын. Бактыга жараша, Arduino колдонуучулары үчүн, бул татаал логиканын бардыгын жасай ала турган китепканалар бар, андыктан сиз долбооруңузду кошумча баштыксыз иштөөгө багыттоого болот. Бул Instructable сериялык пакеттерди иштетүү үчүн SerialTransfer.h китепканасын колдонот.
Кыскача айтканда, бул Нускамада SerialTransfer.h китепканасын колдонуп, кандай гана долбоордо болбосун күчтүү сериялык маалыматтарды оңой эле ишке ашырууга болот. Эгерде сиз сериялык байланыштын төмөнкү деңгээлдеги теориясы жөнүндө көбүрөөк билгиңиз келсе, бул окуу куралын караңыз.
Жабдуулар
-
2 Arduinos
Бир нече аппараттык UART'ге ээ болгон Arduino колдонууну сунуштайбыз (б.а. Arduino Mega)
- Кошуу зымы
-
SerialTransfer.h орнотуу
Arduino IDEнин китепканалар менеджери аркылуу жеткиликтүү
1 -кадам: Физикалык байланыштар
Сериялык байланышты колдонууда бир нече зым түйүндөрүн эстен чыгарбоо керек:
- Бардык негиздер туташкандыгын текшериңиз!
- Arduino TX (Transmit) пин башка Arduino RX (Receive) пинине туташуусу керек
2 -кадам: Китепкананы кантип колдонуу керек
SerialTransfer.h сизге ыңгайлаштырылган пакет протоколун колдонуп, чоң көлөмдөгү маалыматтарды оңой жөнөтүүгө мүмкүндүк берет. Төмөндө китепкананын бардык өзгөчөлүктөрүнүн сүрөттөмөсү келтирилген - алардын көбүн биз кийинчерээк бул окуу куралында колдонобуз:
SerialTransfer.txBuff
Бул байт массиви, анда бардык жүктөө маалыматтары сериал аркылуу жөнөтүлө электе буферленген. Сиз бул буферди башка Arduinoго жөнөтүү үчүн маалыматтын байтына толтура аласыз.
SerialTransfer.rxBuff
Бул башка Arduinoдон алынган бардык пайдалуу маалыматтар буферленген байт массиви.
SerialTransfer.bytesRead
Башка Arduino тарабынан кабыл алынган жана SerialTransfer.rxBuffте сакталган байттардын саны
SerialTransfer.begin (Stream & _port)
Китепкананын классынын мисалын баштайт. Сиз каалаган "Сериялык" класстын объектин параметр катары өткөрө аласыз - ал тургай "SoftwareSerial" класстын объекттерин!
SerialTransfer.sendData (const uint16_t & messageLen)
Бул сиздин Arduino башка Arduinoго берүү буфериндеги байттардын "messageLen" санын жөнөтөт. Мисалы, эгер "messageLen" 4 болсо, SerialTransfer.txBuffтун биринчи 4 байты башка Arduinoго сериялуу түрдө жөнөтүлөт.
SerialTransfer.available ()
Бул сиздин Arduino башка Arduino алынган сериялык маалыматтарды талдоо кылат. Эгерде бул функция логикалык "чындыкты" кайтарса, бул жаңы пакет ийгиликтүү талданганын жана жаңы алынган пакеттин маалыматтары SerialTransfer.rxBuffте сакталганын/жеткиликтүү экенин билдирет.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
"Индекс" аргументи көрсөткөндөй, индекстен башталган берүү буферине каалаган нерселердин "бай" саны (байт, int, калкып жүрүү, кош, структура ж. Б.).
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
"Индекс" аргументи көрсөткөндөй индекстен баштап, кабыл алуу буферинен (rxBuff) байттардын "len" санын каалаган объектиге (байт, int, float, double, struct ж.б.…) окуйт.
ЭСКЕРТҮҮ:
Маалыматты өткөрүүнүн эң оңой жолу - бул сиз жөнөткүңүз келген бардык маалыматтарды камтыган структураны аныктоо. Кабыл алуучу Arduino бирдей структурага ээ болушу керек.
3 -кадам: Негизги маалыматтарды берүү
Төмөндөгү эскиз analogReadдин ADC маанисин (0) жана analogReadтин маанисин (0) Arduino #2ге чыңалууга өткөрөт.
Төмөнкү эскизди Arduino #1ге жүктөңүз:
#"SerialTransfer.h" кошуу
SerialTransfer myTransfer; STRUCT {uint16_t adcVal; сүзүүчү чыңалуу; } маалыматтар; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (маалыматтар, өлчөмдөр (маалыматтар)); myTransfer.sendData (sizeof (data)); кечиктирүү (100); }
4 -кадам: Негизги маалыматтарды алуу
Төмөнкү код Arduino #1ден алынган ADC жана чыңалуу маанилерин басып чыгарат.
Төмөнкү кодду Arduino #2ге жүктөңүз:
#"SerialTransfer.h" кошуу
SerialTransfer myTransfer; STRUCT {uint16_t adcVal; сүзүүчү чыңалуу; } маалыматтар; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ERROR:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); else if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}
5 -кадам: Тестирлөө
Эки эскиз тең тиешелүү Arduinosко жүктөлгөндөн кийин, Arduino #2ден Serial Monitorду колдонуп, Arduino #1ден маалымат алып жатканыңызды ырастаңыз!
Сунушталууда:
Celular Android Remotamente Telnet менен байланыш: 9 кадам
Celular Android Remotamente Telnet менен байланышыңыз: ¡Bienvenido! Чындыгында, бул интернетке туташуу. Пенсионалдык интернет, бул дүйнөлүк глобалдык эсептөөлөрдүн бири болуп саналат; туура эмес шарттарды түзүү керек болгон учурда
Эски байланыш алуучуга санариптик дисплей кошуу: 6 кадам (сүрөттөр менен)
Эски Байланыш Алуучуга Санарип Дисплей кошуу: Эски байланыш жабдууларын колдонуунун кемчиликтеринин бири - аналогдук терүү өтө так эмес. Сиз дайыма алып жаткан жыштыкта болжоп жатасыз. AM же FM диапазондорунда бул көбүнчө көйгөй эмес, анткени сиз адатта
Зымсыз шифрленген байланыш Arduino: 5 кадам
Зымсыз шифрленген байланыш Arduino: Саламатсыздарбы, бул экинчи макалада, мен сизге зымсыз байланышты камсыз кылуу үчүн Atecc608a чипин кантип колдонууну түшүндүрөм. Бул үчүн мен NRF24L01+ Wireless бөлүгү жана Arduino UNO үчүн колдоном. ATECC608A микро чипи
Arduino негизделген долбоорлор үчүн NRF24L01 Transceiver модулун колдонуу менен зымсыз байланыш: 5 кадам (Сүрөттөр менен)
Arduino негизиндеги долбоорлор үчүн NRF24L01 Transceiver модулун колдонуу менен зымсыз байланыш: Бул роботтор жана микро контроллерлер жөнүндө менин экинчи үйрөткүч окуу куралым. Роботуңуздун тирүү жана күтүлгөндөй иштеп жатканын көрүү чынында эле таң калыштуу, эгерде сиз роботту же башка нерселерди зымсыз тез жана көзөмөлдөп турсаңыз, анда мен үчүн кызыктуу болот деп ишенем
Python3 жана Arduino байланыш: 5 кадам
Python3 жана Arduino Байланыштары: Долбоордун сыпаттамасы Бул долбоордо биз Python3төн Arduino тактасына буйруктарды жөнөтөбүз, бул Python3 менен Arduino ортосунда байланышып жатканда түшүнүүгө жардам берет. Биз " Салам дүйнө " Arduino платформасынын