Talaan ng mga Nilalaman:

Serial Communication ng Arduino: 5 Mga Hakbang
Serial Communication ng Arduino: 5 Mga Hakbang

Video: Serial Communication ng Arduino: 5 Mga Hakbang

Video: Serial Communication ng Arduino: 5 Mga Hakbang
Video: Lesson 05: Introduction to Serial Monitor | Robojax Arduino Step By Step Course 2024, Nobyembre
Anonim
Serial Communication ng Arduino
Serial Communication ng Arduino

Maraming mga proyekto ng Arduino ang umaasa sa paglilipat ng data sa pagitan ng maraming mga Arduino.

Kung ikaw man ay isang libangan na nagtatayo ng isang kotseng RC, isang sasakyang panghimpapawid RC, o pagdidisenyo ng isang istasyon ng panahon na may isang malayong pagpapakita, kakailanganin mong malaman kung paano mapagkakatiwalaan na ilipat ang serial data mula sa isang Arduino patungo sa isa pa. Sa kasamaang palad, mahirap para sa mga hobbyist na makakuha ng serial data na komunikasyon na gumagana sa kanilang sariling mga proyekto. Ito ay dahil ang serial data ay ipinadala bilang isang stream ng bytes.

Nang walang anumang uri ng konteksto sa loob ng stream ng mga byte, halos imposibleng bigyang kahulugan ang data. Nang hindi magagawang bigyang kahulugan ang data, hindi maaasahang makipag-usap ang iyong Arduinos. Ang susi ay upang idagdag ang data ng konteksto na ito sa byte stream sa pamamagitan ng paggamit ng isang karaniwang disenyo ng serial packet.

Ang disenyo ng serial packet, pagpupuno ng packet, at pag-parse ng packet ay kumplikado at mahirap makamit. Sa kabutihang palad para sa mga gumagamit ng Arduino, may magagamit na mga silid-aklatan na maaaring gawin ang lahat ng kumplikadong lohika sa likod ng mga eksena upang maaari kang tumuon sa paggana ng iyong proyekto nang walang labis na pahiwatig. Ang Instructable na ito ay gagamit ng library ng SerialTransfer.h para sa pagproseso ng serial packet.

Sa maikli: ang Instructable na ito ay pupunta kung paano mo maipapatupad ang matatag na serial data nang madali sa anumang proyekto gamit ang library ng SerialTransfer.h. Kung nais mong matuto nang higit pa tungkol sa mababang antas ng teorya sa matatag na serial komunikasyon, tingnan ang tutorial na ito.

Mga gamit

  • 2 Arduinos

    Masidhing hinihikayat na gumamit ka ng Arduinos na mayroong maraming mga hardware UART (ibig sabihin, Arduino Mega)

  • Hookup wire
  • I-install ang SerialTransfer.h

    Magagamit sa pamamagitan ng Tagapamahala ng Mga Aklatan ng Arduino IDE

Hakbang 1: Mga Koneksyon sa Pisikal

Mga Koneksyon sa Pisikal
Mga Koneksyon sa Pisikal

Kapag gumagamit ng serial komunikasi, ilang mga puntos ng mga kable ang kailangang tandaan:

  • Siguraduhin na ang lahat ng mga bakuran ay konektado!
  • Ang Arduino TX (Transmit) na pin ay kailangang maiugnay sa ibang RX (Tumanggap) na pin ng Arduino

Hakbang 2: Paano Gumamit ng Library

Paano Magamit ang Library
Paano Magamit ang Library

Pinapayagan ka ng SerialTransfer.h na madaling magpadala ng maraming data gamit ang isang pasadyang packet protocol. Nasa ibaba ang isang paglalarawan ng lahat ng mga tampok sa library - marami sa mga ito ang gagamitin namin sa paglaon sa tutorial na ito:

SerialTransfer.txBuff

Ito ay isang byte array kung saan ang lahat ng data ng kargamento na ipapadala sa serial ay buffered bago ang paghahatid. Maaari mong mapunan ang buffer na ito ng mga byte ng data upang ipadala sa isa pang Arduino.

SerialTransfer.rxBuff

Ito ay isang byte array kung saan ang lahat ng data ng kargamento na natanggap mula sa iba pang Arduino ay buffered.

SerialTransfer.bytesRead

Ang bilang ng mga byload ng payload na natanggap ng iba pang Arduino at nakaimbak sa SerialTransfer.rxBuff

SerialTransfer.begin (Stream at _port)

Pinasimulan ang isang halimbawa ng klase ng aklatan. Maaari mong ipasa ang anumang "Serial" na object ng klase bilang isang parameter - kahit na mga object ng klase ng "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

Ginagawa nitong magpadala ang iyong Arduino ng "messageLen" na bilang ng mga byte sa pagpapadala ng buffer sa iba pang Arduino. Halimbawa, kung ang "messageLen" ay 4, ang unang 4 bytes ng SerialTransfer.txBuff ay ipapadala sa pamamagitan ng serial sa iba pang Arduino.

SerialTransfer.available ()

Ginagawa nitong i-parse ang iyong Arduino anumang natanggap na serial data mula sa iba pang Arduino. Kung ibabalik ng pagpapaandar na ito ang "totoo" ng boolean, nangangahulugan ito na ang isang bagong packet ay matagumpay na na-parse at ang data ng bagong natanggap na packet ay nakaimbak / magagamit sa SerialTransfer.rxBuff.

SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Ang mga bagay na "len" na bilang ng mga byte ng isang di-makatwirang bagay (byte, int, float, doble, struct, atbp …) sa pagpapadala ng buffer na nagsisimula sa index tulad ng tinukoy ng argumentong "index".

SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Binabasa ang "len" na bilang ng mga byte mula sa makatanggap na buffer (rxBuff) na nagsisimula sa index tulad ng tinukoy ng argument na "index" sa isang di-makatwirang bagay (byte, int, float, doble, struct, atbp …).

TANDAAN:

Ang pinakamadaling paraan upang magpadala ng data ay upang tukuyin muna ang isang istruktura na naglalaman ng lahat ng data na nais mong ipadala. Ang Arduino sa pagtanggap ng pagtatapos ay dapat magkaroon ng isang magkatulad na istrukturang tinukoy.

Hakbang 3: Ipadala ang Pangunahing Data

Ang sumusunod na sketch ay nagpapadala ng parehong halaga ng ADC ng analogRead (0) at halaga ng analogRead (0) na na-convert sa boltahe sa Arduino # 2.

I-upload ang sumusunod na sketch sa Arduino # 1:

# isama ang "SerialTransfer.h"

SerialTransfer myTransfer; istraktura STRUCT {uint16_t adcVal; float boltahe; } data; 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 (data, laki ng (data)); myTransfer.sendData (sizeof (data)); pagkaantala (100); }

Hakbang 4: Tumanggap ng Pangunahing Data

Ang sumusunod na code ay naglilimbag ng mga halagang ADC at boltahe na natanggap mula sa Arduino # 1.

I-upload ang sumusunod na code sa Arduino # 2:

# isama ang "SerialTransfer.h"

SerialTransfer myTransfer; istraktura STRUCT {uint16_t adcVal; float boltahe; } data; 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 (); } iba pa kung (myTransfer.status <0) {Serial.print ("ERROR:"); kung (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); kung hindi man (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); kung hindi man (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Hakbang 5: Pagsubok

Kapag na-upload na ang parehong mga sketch sa kani-kanilang mga Arduino, maaari mong gamitin ang Serial Monitor sa Arduino # 2 upang mapatunayan na nakakatanggap ka ng data mula sa Arduino # 1!

Inirerekumendang: