Мазмұны:

Arduino сериялық байланысы: 5 қадам
Arduino сериялық байланысы: 5 қадам

Бейне: Arduino сериялық байланысы: 5 қадам

Бейне: Arduino сериялық байланысы: 5 қадам
Бейне: Робожакс кітапханасында ACS712 көмегімен 5А-30А айнымалы және тұрақты токтың өлшеуі 2024, Қараша
Anonim
Arduino сериялық байланысы
Arduino сериялық байланысы

Көптеген Arduino жобалары бірнеше Arduino арасында деректерді беруге негізделген.

Сіз әуесқой болсаңыз да, RC автокөлігін, RC ұшағын құрастырасыз немесе қашықтан дисплейі бар метеорологиялық станцияны жобалайсыз, сіз бір Arduino -дан екіншісіне сериялық деректерді сенімді түрде беруді білуіңіз керек. Өкінішке орай, әуесқойларға өз жобаларында сериялық деректермен жұмыс жасау қиын, себебі сериялық деректер байт ағыны ретінде жіберіледі.

Байт ағынында қандай да бір контекст болмаса, деректерді түсіндіру мүмкін емес. Деректерді түсіндіре алмай, сіздің Arduinos сенімді түрде байланыса алмайды. Ең бастысы - бұл мәтінмәндік деректерді стандартты сериялық пакеттік дизайн көмегімен байт ағынына қосу.

Пакеттік сериялық дизайн, пакеттерді толтыру және пакеттерді талдау күрделі және қол жеткізу қиын. Бақытымызға орай, Arduino пайдаланушылары үшін бұл күрделі логиканы сахна артында жасай алатын кітапханалар бар, осылайша сіз өз жобаңызды қосымша тақырыпсыз жұмыс істеуге баса назар аудара аласыз. Бұл нұсқаулық сериялық пакеттерді өңдеу үшін SerialTransfer.h кітапханасын қолданады.

Қысқаша айтқанда: бұл нұсқаулық SerialTransfer.h кітапханасының көмегімен кез келген жобада сенімді сериялық деректерді қалай оңай енгізуге болатынын қарастырады. Егер сіз сенімді сериялық байланыс туралы төменгі деңгейдегі теория туралы көбірек білгіңіз келсе, осы оқулықты қараңыз.

Жабдықтар

  • 2 Ардуино

    UART бірнеше аппараттық құралдары бар Arduino -ны қолданғаныңыз жөн

  • Қосылатын сым
  • 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 -ға жіберуші буферіндегі байттардың «messageLen» санын басқа Arduino -ға жіберуге мәжбүр етеді. Мысалы, егер «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 (0) ADC мәнін де, analogRead (0) мәнін де Arduino #2 кернеуге түрлендіреді.

Келесі эскизді Arduino № 1 -ге жүктеңіз:

#«SerialTransfer.h» қосыңыз

SerialTransfer myTransfer; STRUCT {uint16_t adcVal құрылымы; өзгермелі кернеу; } деректер; void setup () {Serial.begin (115200); Сериялық1.bas (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (деректер, өлшемдер (деректер)); myTransfer.sendData (sizeof (деректер)); кешіктіру (100); }

4 -қадам: Негізгі деректерді алу

Келесі код ADC пен кернеудің мәндерін басып шығарады Arduino №1.

Келесі кодты Arduino № 2 -ге жүктеңіз:

#«SerialTransfer.h» қосыңыз

SerialTransfer myTransfer; STRUCT {uint16_t adcVal құрылымы; өзгермелі кернеу; } деректер; void setup () {Serial.begin (115200); Сериялық1.bas (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (деректер кернеуі); 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 -қадам: тестілеу

Екі эскиз де тиісті Arduino -ға жүктелгеннен кейін, сіз Arduino №1 -ден деректерді алғаныңызды тексеру үшін Arduino №2 сериялық мониторды пайдалана аласыз!

Ұсынылған: