Серијска комуникација омогућава вашем Ардуину да разговара са другим уређајима. Откријте како да их повежете и кодирате користећи било који од четири протокола.

Када радите на великим Ардуино пројектима, прилично је уобичајено да останете без доступних пинова за спајање компоненти. Рецимо да желите да повежете више сензора/актуатора са хитном потребом да и даље сачувате додатне игле да бисте нахранили модул екрана који је гладан иглица.

Осим ако не радите неку магију, понекад је тешко управљати свим овим везама на једној Ардуино плочи - посебно када одлучите да користите мање плоче јер сте притиснути простор. Тада долази у обзир серијска комуникација.

Хајде да истражимо шта је серијска комуникација и начине на које је можете подесити са Ардуином за задатке као што су дистрибуирана обрада и општа интеграција.

Шта је серијска комуникација?

Серијска комуникација је метод слања и примања података између два или више електронских уређаја, један по један бит преко једне комуникационе линије. Као што име говори, подаци се шаљу у „серијама".

instagram viewer

Чак и само могућност постављања скица на вашу омиљену Ардуино плочу користи серијску комуникацију преко УСБ-а.

Серијски комуникациони протоколи на Ардуину

Ардуино плоче су невероватно разноврсне и могу да комуницирају са широким спектром уређаја. Подржавају четири серијска комуникациона протокола: Софт Сериал, СПИ (Сериал Перипхерал Интерфаце), стандардни УАРТ (Универзални асинхрони пријемник-предајник) и И2Ц (Интер-Интегратед Цирцуит). За више детаља, погледајте наш свеобухватни водич о како функционишу УАРТ, СПИ и И2Ц серијске комуникације.

Овај водич користи основне скице да покаже како можете да подесите серијску везу између две Ардуино Уно плоче користећи различите протоколе. Прилагодите код да испуни ваше специфичне захтеве.

СПИ (серијски периферни интерфејс)

СПИ је синхрони серијски комуникациони протокол који омогућава комуникацију велике брзине између микроконтролера и периферних уређаја. Овај протокол захтева четири жице за комуникацију: СЦК (серијски сат), МОСИ (Мастер Оут Славе Ин), МИСО (Мастер Ин Славе Оут), и СС (Славе Селецт).

Тхе СПИ.х библиотека је веома згодна за ову врсту комуникације и мора бити укључена на врху ваше скице.

#укључити

Ево СПИ пинова на Ардуино Уно плочи:

Функција

Пин број (дигитални)

Пин број (ИЦСП заглавље)

МОС

11

4

МИСО

12

1

СЦК

13

3

СС

10 (подразумевано)

1 (Алтернатива)

Након иницијализације серијске комуникације, мораћете да конфигуришете комуникационе пинове.

празнинаподесити(){
СПИ.започети(115200);
// Подесите пин модове за СС, МОСИ, МИСО и СЦК
пинМоде(СС, ОУТПУТ);
пинМоде(МОСИ, ОУТПУТ);
пинМоде(МИСО, УЛАЗНИ);
пинМоде(СЦК, ОУТПУТ);

// Подесите пин за одабир славе (СС) високо да бисте онемогућили славе уређај
дигиталВрите(СС, ХИГХ);
}

СС сигнал се користи да каже славе уређају када се подаци преносе.

// Изаберите славе
дигиталВрите(СС, ЛОВ);

// Шаље податке на славе уређај
СПИ.трансфер(подаци);

// Опозовите избор славе уређаја
дигиталВрите(СС, ХИГХ);

Ево како да повежете две Ардуино плоче користећи СПИ.

Код за главну плочу:

#укључити
констинт славеСелецтПин = 10;
празнинаподесити(){
СПИ.започети(115200);
пинМоде(славеСелецтПин, ОУТПУТ);
}

празнинапетља(){
дигиталВрите(славеСелецтПин, ЛОВ);
СПИ.трансфер('Х');
дигиталВрите(славеСелецтПин, ХИГХ);
кашњење(1000);
}

Код за славе боард:

#укључити
констинт славеСелецтПин = 10;
празнинаподесити(){
СПИ.започети(115200);
пинМоде(славеСелецтПин, ОУТПУТ);
}

празнинапетља(){
ако (дигиталРеад(славеСелецтПин) == ЛОВ) {
цхар рецеивеДата = СПИ.трансфер('Л');
Сериал.принтлн(рецеиведДата);
}
}

Уверите се да ваши уређаји деле заједничку основу за исправну конфигурацију.

УАРТ (универзални асинхрони пријемник-предајник)

УАРТ је асинхрони серијски комуникациони протокол који омогућава комуникацију између уређаја користећи само две жице: ТКС (пренос) и РКС (пријем). УАРТ се обично користи за комуникацију са уређајима као што су ГПС модули, Блуетоотх модули и други микроконтролери. Свака Ардуино плоча долази опремљена са најмање једним портом за УАРТ.

УАРТ пинови на популарним Ардуино плочама укључују:

Одбор, табла

Сериал Пинс

Сериал1 Пинс

Сериал2 Пинс

Сериал3 Пинс

Уно, Нано, Мини

0 (РКС), 1 (ТКС)

Н/А

Н/А

Н/А

Мега

0 (РКС), 1 (ТКС)

19 (РКС), 18 (ТКС)

17 (РКС), 16 (ТКС)

15 (РКС), 14 (ТКС)

Можете добити пуну табелу са Ардуино онлајн документација о серијској комуникацији.

Прво повежите своје плоче овако:

Затим користите овај код за таблу пошиљаоца:

празнинаподесити(){
Сериал.започети(9600);
}

празнинапетља(){
// Пошаљи поруку преко серијског сваке секунде
Сериал.принтлн(„Здраво од одбора пошиљаоца!“);
кашњење(1000);
}

Код за пријемну плочу:

празнинаподесити(){
Сериал.започети(9600);
}

празнинапетља(){
// Провери да ли има долазних података
ако (Сериал.доступан() > 0) {
// Прочитајте долазне податке и одштампајте их на серијски монитор
Низ инцомингДата = Сериал.реадСтринг();
Сериал.принтлн(инцомингДата);
}
}

Ардуино Уно ради на логичком нивоу од 5В, док РС232 порт рачунара користи +/-12В логички ниво.

Директно повезивање Ардуино Уно на РС232 порт може и оштетиће вашу плочу.

И2Ц (међу-интегрисано коло)

И2Ц је синхрони серијски комуникациони протокол који омогућава комуникацију између више уређаја користећи само две жице: СДА (серијски подаци) и СЦЛ (серијски сат). И2Ц се обично користи за комуникацију са сензорима, ЕЕПРОМ-има и другим уређајима који треба да преносе податке на кратке удаљености.

И2Ц пинови на Ардуино Уно су СДА (А4) и СЦЛ (А5).

Направићемо једноставан програм за успостављање везе између две Ардуино плоче користећи И2Ц комуникацију. Али прво повежите своје плоче овако:

Код за главну плочу:

#укључити
празнинаподесити(){
Жица.започети(); // придружи се И2Ц магистрали као мастер
Сериал.започети(9600);
}

празнинапетља(){
Жица.бегинТрансмиссион(9); // преноси на славе уређај са адресом 9
Жица.писати('а'); // шаље 'а' бајт подређеном уређају
Жица.ендТрансмиссион(); // зауставити пренос

кашњење(500);
}

Код за славе боард:

#укључити
празнинаподесити(){
Жица.започети(9); // придружи се И2Ц магистрали као славе са адресом 9
Жица.онРецеиве(рецеивеЕвент);
Сериал.започети(9600);
}

празнинапетља(){
кашњење(100);
}

празнинарецеивеЕвент(инт бајтова){
док(Жица.доступан()) { // петља кроз све примљене бајтове
цхар рецеивеБите = Жица.читати(); // читање сваког примљеног бајта
Сериал.принтлн(рецеиведБите); // штампа примљени бајт на серијски монитор
}
}

Шта је СофтвареСериал?

Ардуино СофтвареСериал библиотека је развијена да емулира УАРТ комуникацију, омогућавајући серијску комуникацију преко било која два дигитална пина на Ардуино плочама. Корисно је када хардверски УАРТ већ користе други уређаји.

Да бисте подесили СофтвареСериал, прво укључите библиотеку СофтвареСериал у скицу.

#укључити

Затим креирајте инстанцу објекта СофтвареСериал тако што ћете навести РКС и ТКС игле које се користе за комуникацију.

СофтвареСериалмиСериал(2, 3); // РКС, ТКС пинови

Ево примера кода за Ардуино који показује употребу СофтвареСериал-а:

#укључити
СофтвареСериалмиСериал(2, 3); // РКС, ТКС пинови
празнинаподесити(){
Сериал.започети(9600); // покретање хардверске серије
миСериал.започети(9600); // старт софт сериал
}

празнинапетља(){
ако (моја серија.доступан()) {
Сериал.писати(моја серија.читати()); // шаље примљене податке у хардверску серију
}
ако (Сериал.доступан()) {
миСериал.писати(Сериал.читати()); // шаље податке са хардверског серијског на меки серијски
}
}

Тхе Сериал Либрари

Серијска библиотека је моћан алат у Ардуину који омогућава комуникацију између микроконтролера и рачунара или других уређаја путем серијске везе. Неке уобичајене функције укључују:

Функција

Опис

Сериал.бегин (брзина)

Иницијализује серијску комуникацију са одређеном брзином података.

Сериал.принт (подаци)

Шаље податке на серијски порт за пренос као АСЦИИ текст.

Сериал.врите (подаци)

Шаље необрађене бинарне податке преко серијског порта.

Сериал.аваилабле()

Враћа број бајтова доступних за читање из серијског бафера.

Сериал.флусх()

Чека да се одлазни серијски подаци заврше пренос пре него што наставите.

Сериал.реад()

Чита први бајт долазних серијских података и враћа га као цео број.

Брзина преноса и формат серијских података

Брзина преноса података се односи на брзину којом се подаци преносе преко серијске везе. Представља број битова који се преносе у секунди. Брзина преноса мора бити подешена на исти и на уређајима пошиљаоца и пријемника, иначе комуникација може бити погрешна или уопште неће радити. Уобичајене брзине преноса за Ардуино укључују 9600, 19200, 38400 и 115200.

Формат серијских података односи се на структуру података који се шаљу преко серијске везе. Постоје три главне компоненте серијског формата података: почетни битови, битови података и стоп битови.

  • Дата Битс: Број битова који се користе за представљање једног бајта података.
  • Паритет: Опциони бит који се користи за проверу грешке. Може се подесити на никакав, парни или непарни паритет, у зависности од захтева комуникационог канала.
  • Стоп Битс: Број битова који се користе за сигнализацију краја бајта података.

Формат података мора бити исти и на уређајима за пренос и на пријемним уређајима како би се осигурала правилна комуникација. Ево примера како можете да подесите одређене формате података:

празнинаподесити(){
// Подесите серијску комуникацију са брзином преноса од 9600, 8 битова података, без паритета и 1 стоп бит
Сериал.започети(9600, СЕРИАЛ_8Н1);
}

овде, СЕРИАЛ_8Н1 представља формат података са 8 битови података, без парности, и 1 стоп бит. Друге опције као што су СЕРИАЛ_7Е1, СЕРИАЛ_8О2, итд., могу се користити у зависности од специфичних захтева пројекта.

Сериал Талк

Ардуино плоче пружају различите опције серијске комуникације које омогућавају ефикасну и поуздану размену података између уређаја. Разумевањем како да подесите серијске комуникационе протоколе на Ардуино ИДЕ, можете искористити моћ дистрибуиране обраде или у великој мери смањити број жица које се користе у вашим пројектима.