Эки Arduino менен I2C протоколу менен кантип байланышса болот?
I2C протоколу Байланыш түзүү үчүн электроника тармагында кеңири колдонулат түзмөктөрдүн ортосунда. Arduino такталарынын учурда, бул технология эки же андан көп такталарды бири-бири менен байланыштырып, байланыштыргыңыз келгенде өзгөчө пайдалуу. Бул макалада биз I2C протоколунун негиздерин изилдейбиз жана бул протоколду колдонуу менен эки Arduinos ортосунда ийгиликтүү байланыш түзүү үчүн кадам-кадам менен кеңири маалымат беребиз.
I2C протоколу деген эмне?
I2C протоколу, ошондой эле Inter-Integrated Circuit деп аталат, бул эки линия боюнча түзмөктөрдүн ортосунда маалыматтарды өткөрүүгө мүмкүндүк берген синхрондуу сериялык байланыш протоколу: маалымат линиясы (SDA) жана саат (SCL) анын аркасында кеңири колдонулат бир автобуска туташтырылган бир нече түзмөктөр менен байланышта жөнөкөйлүгү жана натыйжалуулугу.
Аппараттык камсыздоонун конфигурациясы
I2C протоколу менен иштөөнү баштоодон мурун, сизде тиешелүү жабдык бар экенине ынануу керек, бул учурда бизге эки Arduino тактасы жана аларды туташтыруу үчүн керектүү кабелдер керек болот. Кошумчалай кетсек, байланышта кайсы такта кожоюн жана кайсы кул болоорун аныкташыбыз керек.
Configuración de software
Аппараттык конфигурация даяр болгондон кийин, Arduino такталарында программалык камсыздоону даярдашыбыз керек болот. Бул үчүн, Arduino IDEге кирген Wire китепканасын колдонобуз, ал бизге I2C протоколун ишке ашыруу үчүн керектүү функцияларды берет. Ар бир тактада I2C байланышын инициализациялоочу программаны жүктөшүбүз керек жана анын кожоюн же кул катары иштей турганын аныкташыбыз керек.
Comunicación I2C
Эки тактада аппараттык жана программалык камсыздоону конфигурациялагандан кийин, биз I2C байланышын түзө баштайбыз, бул SDA жана SCL линиялары аркылуу маалыматтарды жөнөтүүнү жана алууну камтыйт. Мастер байланышты кулга көздөгөн даректи жөнөтүү менен баштайт. Андан кийин эки түзмөк тең маалыматтарды эки багыттуу түрдө өткөрүп жана кабыл алат.
Жыйынтыктап айтканда, I2C протоколу эки Arduino тактасынын ортосунда байланыш түзүү үчүн эң сонун вариант. Бул макала аркылуу биз бул протоколдун негиздерин изилдеп чыктык кадам сайын түзүү жана ийгиликтүү байланыш түзүү. Эми бул билимди иш жүзүндө колдонууга жана бир нече Arduino түзмөктөрүн туташтырууну талап кылган дагы татаал долбоорлорду курууга кезек сизде.
– Arduino боюнча I2C протоколуна киришүү
I2C протоколу, ошондой эле Inter-Integrated Circuit деп аталат, бир нече электрондук шаймандарды жалпы автобуска туташтыруу үчүн колдонулган сериялык байланыш протоколу. Бул эки же андан көп Arduino тактасын туташтыруу үчүн бул протоколду колдоно алабыз дегенди билдирет жана аларга I2C байланышы түзмөктөрдү кыска аралыкка туташтыруу үчүн идеалдуу келет, анткени ал маалыматтарды өткөрүү үчүн эки гана кабельди талап кылат. Мындан тышкары, бул электрондук өнөр жайда өтө ишенимдүү жана кеңири колдонулган протокол.
Эки Arduino тактасынын ортосунда I2C байланышын орнотуу үчүн биз мастерди жана бир же бир нече кулду конфигурациялашыбыз керек. Кожоюн байланышты баштоого жана көзөмөлдөөгө жооптуу болот, ал эми кулдар кожоюндун суроо-талаптарына жооп беришет. Байланыш орнотулгандан кийин, биз түзмөктөрдүн ортосунда маалыматтарды жөнөтө жана кабыл алабыз. I2C автобусундагы ар бир аппараттын уникалдуу дареги болушу керек экенин белгилей кетүү маанилүү, ал кожоюнга аларды аныктоого жана керектүү учурда алар менен байланышууга мүмкүндүк берет.
I2C протоколунун артыкчылыгы бул эки тараптуу байланышка мүмкүндүк берет, башкача айтканда, кожоюн да, кул да маалыматтарды жөнөтүп жана кабыл ала алат. Бул түзмөктөр ортосунда маалымат алмашуу жагынан "мүмкүнчүлүктөр дүйнөсүн" ачат. Кошумчалай кетсек, бул протокол каскаддык байланышка мүмкүндүк берет, бул дегенди билдирет Биз бир нече кулдарды бир мастерге туташтыра алабыз, ошентип системабыздын мүмкүнчүлүктөрүн кеңейтебиз. Кээ бир негизги программалоо билими жана Arduino'до I2C үчүн атайын китепканаларды колдонуу менен, байланышты орнотуу жана түзмөктөр ортосунда маалымат алмашууну баштоо салыштырмалуу жөнөкөй. бул протокол.
- I2C байланышы үчүн Arduino конфигурациясы
Эки Arduino ортосундагы байланыштын эң натыйжалуу жолдорунун бири - I2C протоколун же Inter-Integrated Circuitти колдонуу. Бул протокол эки гана кабелди, бири маалыматтарды берүү (SDA) жана экинчиси саат синхрондоштуруу (SCL) үчүн бир нече түзмөктөрдүн ортосунда синхрондуу сериялык байланышка мүмкүндүк берет. I2C протоколун колдонуу үчүн Arduinos конфигурациялоо абдан жөнөкөй жана жөнөкөйлүгү жана байланыш натыйжалуулугу жагынан көптөгөн артыкчылыктарды сунуш кылат.
I2C байланышы үчүн Arduino конфигурациялоо үчүн, биз алгач ар бир Arduino ролун аныкташыбыз керек, башкача айтканда, ал кожоюн же кул катары иштейби. Андан кийин, ар бир түзмөккө тиешелүү SDA жана SCL кабелдерин колдонуп, эки Arduinoну туташтырабыз, жалпы чыңалуу шилтемесин түзүү үчүн эки Arduino тең жерге (GND) туташтырылышы керек.
Ардуинолорду физикалык жактан туташтыргандан кийин, алардын ар биринде тиешелүү кодду программалашыбыз керек. Arduino мастеринде, биз Wire.h китепканасын I2C байланышын баштоо үчүн колдонобуз, керектүү байланыш жыштыгын орнотуп, андан кийин Wire.beginTransmission() сыяктуу китепкана тарабынан берилген функцияларды колдонуу менен маалыматтарды жөнөтүп жана кабыл алабыз. маалыматтарды жөнөтүү үчүн жазыңыз (). Ардуино кулундаБиз ошондой эле Wire.h китепканасын байланышты баштоо жана I2C берүү кабыл алынганда иштетиле турган үзгүлтүккө учуроо функциясын конфигурациялоо үчүн колдонобуз. Бул функциянын ичинде биз Wire.available() функциясын маалыматтардын бар-жоктугун текшерүү үчүн жана Wire.read() функциясын кожоюн жөнөткөн маалыматтарды алуу үчүн колдоно алабыз.
I2C байланышы үчүн Arduinos конфигурациялоо бир нече түзмөктөр ортосунда сериялык байланышты орнотуунун натыйжалуу жана жөнөкөй жолу. Бул протокол салыштырмалуу жогорку байланыш ылдамдыгын сунуш кылат жана кабелдердин минималдуу санын талап кылат, туташууну жөнөкөйлөтүп, схемалардын өлчөмүн азайтат. жогоруда айтылган кадамдарды аткаруу менен, биз I2C протоколун колдонуу менен эки Arduino ортосунда жылмакай жана коопсуз байланыш түзө алабыз. Эми сиз өз ара аракеттенүүнү талап кылган татаал долбоорлорду иштеп чыгууга даярсыз бир нече түзмөктөр!
– I2C аркылуу Arduino түзмөктөрүн физикалык туташтыруу
I2C протоколу а натыйжалуу жол жана Arduino түзмөктөрүн бири-бирине туташтыруунун популярдуу жолу. Бул тармактагы бир нече түзмөктөрдү туташтырууну жеңилдетип, эки гана кабелди колдонуу менен эки багыттуу маалымат байланышын берет. I2C аркылуу бул физикалык туташуу бир жуп кабелдерге негизделген, бири маалымат берүү (SDA) жана экинчиси саат үчүн (SCL). Бул байланыш менен, эки Arduino ортосунда тез жана оңой байланышты түзүүгө болот.
Arduino'до I2C протоколун колдонуу үчүн, анын бирин конфигурациялоо керек. түзмөктөрдүн кожоюн, экинчиси кул. Кожоюн байланышты баштоо жана көзөмөлдөө үчүн жооптуу, ал эми кул кожоюндан көрсөтмөлөрдү күтүп, ошого жараша жооп берет. Байланыш конфликттерин болтурбоо үчүн I2C тармагындагы ар бир кул аппараттын уникалдуу дарегин түзүү маанилүү.
Физикалык туташуу жана мастер-кул ролдору конфигурациялангандан кийин, Arduino түзмөктөрү I2C протоколунун жардамы менен маалыматтарды алмаша алышат. Бул сенсордук маанилер, буйруктар жана туташкан түзмөктөрдүн иштеши үчүн зарыл болгон башка типтеги маалыматтарды жөнөтүүгө жана алууга мүмкүндүк берет. Кошумчалай кетсек, I2C протоколу бир тармакка бир нече кулдук түзүлүштөрдү кошууга мүмкүндүк берет, бул Arduino мүмкүнчүлүктөрүн масштабдуу жана ийкемдүү жол менен кеңейтүү мүмкүнчүлүгүн берет.
– Arduinos ортосунда I2C байланышын түзүү
I2C (Inter-Integrated Circuit) протоколу эки же андан көп Arduino түзмөктөрүнүн ортосунда байланыш түзүүнүн жөнөкөй жана натыйжалуу жолу. Бул протокол мастер-кул конфигурациясына негизделген, мында Ардуинолордун бири байланышты баштаган жана башкарган кожоюндун ролун аткарат, ал эми калгандары кожоюндан буйруктарды кабыл алып, аларга жооп берүүчү кулдар катары иштейт. Андан кийин, биз сизге эки Arduino ортосунда I2C байланышын кантип орнотууну көрсөтөбүз.
Баштоо үчүн, сиз Arduinosту колдонуп туташтырышыңыз керек el bus I2C. Бул үчүн, ар бир Arduino'нун SDA (Сериялык маалыматтар) жана SCL (Сериялык саат) пиндерин туташтырышыңыз керек. SDA пин маалымат жөнөтүү жана кабыл алуу үчүн колдонулат, ал эми SCL пин байланыш синхрондоштуруу үчүн колдонулат. Кабелдерди туташтыргандан кийин, түзмөктөрдүн даректерин коюшуңуз керек болот. Ар бир Arduino аларды айырмалоо үчүн уникалдуу дареги болушу керек. Функцияны колдонуп, бул даректерди ар бир аппараттын кодуна дайындай аласыз Wire.begin().
Байланыштарды жана түзмөк даректерин орноткондон кийин, I2C протоколун колдонуп Arduinos ортосунда байланыша баштасаңыз болот. Кожоюн функциясын колдонуп, кулдан маалыматтарды сурай алат Wire.requestFrom(), жана кул функцияны колдонуу менен маалыматтарды жөнөтүү менен жооп бере алат Wire.write(). Кошумча, сиз функцияларын колдоно аласыз Wire.available() y Wire.read() алынган маалыматтарды окуу үчүн. I2C байланышы бүтүн сандар, символдор жана байт массивдери сыяктуу ар кандай типтеги маалыматтарды өткөрүүгө мүмкүндүк берерин унутпаңыз.
– I2C байланышы үчүн кодду ишке ашыруу
La кодду ишке ашыруу эки Arduino ортосундагы I2C байланышы үчүн Бул бир процесс эки түзмөктүн ортосунда эффективдүү өз ара аракеттенүү үчүн маанилүү. I2C (Inter-Integrated Circuit) протоколу байланыштын жөнөкөй жана эффективдүү формасы, мында башкы түзүлүш эки багыттуу маалымат шинасы аркылуу бир нече кул түзмөктөрдү башкара алат. Төмөндө бул байланышты түзүү үчүн зарыл болгон кодду ишке ашыруунун мисалы келтирилген.
баштоо үчүн, бул зарыл пиндерди аныктоо ар биринде Arduino I2C байланышы үчүн колдонулат. Шарт боюнча, аналогдук пин A4 саат сигналы (SCL) үчүн колдонулат жана A5 пин маалымат сигналы (SDA) үчүн колдонулат. Бул пиндер коддо тиешелүүлүгүнө жараша киргизүү жана чыгаруу катары конфигурацияланышы керек. Мындан тышкары, Wire.h китепканасы I2C протоколун иштетүү үчүн зарыл болгон функцияларды жана ыкмаларды камтышы керек.
Пиндер жана китепкана конфигурациялангандан кийин, зарыл I2C байланышын баштоо эки Arduino боюнча. Бул үчүн, функция колдонулат Wire.begin() Коддо. Байланыш инициализациялангандан кийин, Arduino мастери китепканада бар функцияларды колдонуу менен I2C шинасы аркылуу маалыматтарды жөнөтүп жана ала алат.
– I2C байланышында өткөрүү ылдамдыгын эске алуу
I2C коммуникациясында которуу ылдамдыгын эске алуу
I2C протоколу жөнөкөйлүгүнөн жана натыйжалуулугунан улам эки Arduino ортосундагы байланыш үчүн популярдуу тандоо болуп саналат. Бирок, бул протокол менен иштөөдө, өткөрүп берүү ылдамдыгын эске алуу абдан маанилүү. Ылдамдык түздөн-түз түзмөктөр ортосунда маалымат берилүүчү убакытка таасир этет. эки түзмөк, со бул зарыл ишенимдүү байланышты камсыз кылуу үчүн бул параметрди талдоо жана тийиштүү түрдө тууралоо.
Биринчиден, I2C протоколунда которуу ылдамдыгы кантип иштээрин түшүнүү маанилүү.. Бул ылдамдык секундасына бериле турган биттердин санын билдирет. Эки Arduino ортосунда байланыш болгон учурда, эки түзмөк тең бирдей ылдамдыкта конфигурацияланышы керек, ошондуктан алар туура байланыша алышат. Мындан тышкары, ылдамдык колдонулган Arduino моделине жараша өзгөрүшү мүмкүн, андыктан аны билүү үчүн расмий документтерге кайрылуу керек. ар бир аппараттын ылдамдыгын чектөө.
Эске ала турган дагы бир аспект - которуу ылдамдыгына таасир эте турган физикалык чектөөлөр.. Түзмөктөрдү туташтыруу үчүн колдонулган кабелдердин узундугу, ошондой эле электромагниттик тоскоолдуктар жогорку ылдамдыкта байланыштын ишенимдүүлүгүнө таасир этиши мүмкүн. Кээ бир учурларда, бул көйгөйлөрдүн түрлөрүн азайтуу үчүн кыскараак кабелдерди колдонуу, ал тургай, коргоо ыкмаларын колдонуу зарыл болушу мүмкүн. Бул өткөрүп берүү ылдамдыгы түзмөктөрдүн электр керектөөсүнө таасир этиши мүмкүн экенин эске алуу да маанилүү, ошондуктан долбоордун конкреттүү муктаждыктарына жараша аны жөнгө салуу максатка ылайыктуу болуп саналат.
Жыйынтыктап айтканда, I2C протоколу аркылуу эки Arduino менен байланышып жатканда, бул параметрди туура жөнгө салуу ишенимдүү байланышты гана эмес, системанын иштешин оптималдаштырууну да эске алуу зарыл. өткөрүү ылдамдыгы кантип иштээрин түшүнүү жана физикалык чектөөлөрдү эске алуу менен, I2C протоколун туура конфигурациялоого жана түзмөктөр ортосунда ийгиликтүү байланышка жетишүүгө болот.
- I2C байланышы боюнча көйгөйлөрдү чечүү жана сунуштар
I2C байланышы боюнча көйгөйлөрдү чечүү жана сунуштар
Бул постто биз сизге эки Arduino тактасынын ортосундагы I2C байланыш көйгөйлөрү үчүн жалпы чечимдерди, ошондой эле маалыматтарды эффективдүү өткөрүүнү камсыз кылуу боюнча бир нече сунуштарды көрсөтөбүз.
I2C байланышындагы эң кеңири таралган көйгөйлөрдүн бири - бул физикалык байланыштын жоктугу. Ошондой эле тартылуучу резисторлордун SDA жана SCL пиндери менен камсыздоо чыңалууларынын ортосунда туура туташтырылганын текшериңиз.
Дагы бир мүмкүн болгон көйгөй туура эмес I2C дареги болушу мүмкүн. I2C шинасына туташкан ар бир аппараттын уникалдуу дареги болушу керек. Эгер сиз бир автобуста бир нече түзмөктү колдонуп жатсаңыз, ар бир аппараттын уникалдуу дареги бар экенин жана ал дарек кодуңузда туура конфигурацияланганын текшериңиз. Ошондой эле түзмөк даректеринин ортосундагы карама-каршылыктарды текшерип, эч кандай кайталануулар жок экенин текшериңиз.
Бул жерде I2C байланышын жакшыртуу үчүн кээ бир сунуштар бар:
1. Кыска, сапаттуу кабелдерди колдонуңуз: Узун же начар сапаттагы кабелдер I2C сигналына тоскоолдук жаратышы мүмкүн. Бул тоскоолдукту азайтуу үчүн кыска, сапаттуу кабелдерди колдонуңуз.
2. Тартуу резисторлорун жайгаштырыңыз: Тартуу резисторлору SDA жана SCL пиндеринде активдүү кыймылдабай турганда логикалык жогорку абалды орнотууга жардам берет. Бул туруктуу сигналды сактоого жана байланыш көйгөйлөрүнөн качууга жардам берет.
3. Күтүү убакытыңыз жетиштүү экенин текшериңиз: I2C шинасы аркылуу маалыматтарды өткөрүп жатканда, берүүлөрдүн ортосунда жетиштүү күтүү убактысы болушун камсыз кылуу маанилүү. Бул түзмөктөргө жаңы маалыматтарды алганга чейин алынган маалыматтарды иштеп чыгууга жетиштүү убакыт берет.
I2C байланышы бир нече Arduino түзмөктөрүн туташтыруунун эффективдүү жолу болушу мүмкүн экенин унутпаңыз, бирок бул жалпы көйгөйлөрдөн кабардар болуу жана жылмакай байланышты камсыз кылуу үчүн жогоруда айтылган сунуштарды аткаруу маанилүү.
– Ардуинодо I2C протоколун колдонуунун артыкчылыктары жана кемчиликтери
Arduino боюнча I2C протоколун колдонуунун артыкчылыктары
Arduino боюнча I2C протоколун колдонуунун негизги артыкчылыктарынын бири - бул бир байланыш автобусунда бир нече түзмөктөрдү туташтыруу мүмкүнчүлүгү. Бул бизде бир нече Arduinos бири-бири менен иштешип, маалымат бөлүшүп, макулдашылган түрдө иштешет дегенди билдирет. Кошумчалай кетсек, I2C протоколу маалыматтарды берүүдө абдан эффективдүү, бул бизге маалыматты тез жана ишенимдүү өткөрүүгө мүмкүндүк берет.
Дагы бир маанилүү артыкчылыгы - аны ишке ашыруунун жөнөкөйлүгү. I2C протоколу байланыш үчүн эки гана туташтыруучу зымды (SDA жана SCL) колдонот, бул конфигурациялоону жана туташууну жеңилдетет. Мындан тышкары, протокол маалыматтарды берүү ылдамдыгы жагынан чоң ийкемдүүлүктү сунуштайт, бул бизге аны биздин өзгөчө муктаждыктарыбызга ылайыкташтырууга мүмкүндүк берет.
Arduino боюнча I2C протоколун колдонуунун кемчиликтери
I2C протоколу көптөгөн артыкчылыктарды сунуш кылганы менен, биз эске алышыбыз керек болгон кээ бир чектөөлөр бар. Кемчиликтердин бири - байланыш автобусунун узундугу колдонулган кабелдердин каршылыгы жана кубаттуулугу менен чектелген. Бул кабелдин узундугу көбөйгөн сайын байланыш каталары да көбөйөт дегенди билдирет.
Дагы бир жетишпеген жагы, мисалы, SPI сыяктуу башка байланыш протоколдоруна салыштырмалуу анын төмөн маалыматтарды берүү ылдамдыгы болуп саналат. Бул чоң көлөмдөгү маалыматты берүүнү талап кылган колдонмолордо кемчилик болушу мүмкүн. реалдуу убакытта.
Жыйынтыктар
Кыскача айтканда, I2C протоколу бир нече туташуунун, маалыматтарды берүүнүн эффективдүүлүгүнүн жана ишке ашыруунун жөнөкөйлүгүнүн артыкчылыктарынан улам эки Arduino менен байланышуу үчүн эң сонун вариант. Бирок биз анын автобустун узундугу жана ылдамдыгы боюнча чектөөлөрүн эске алышыбыз керек. Эгерде биздин тиркемелерибиз реалдуу убакыттагы маалыматтардын чоң көлөмүн талап кылбаса же шаар аралык байланышка муктаж болбосо, I2C протоколу идеалдуу тандоо болушу мүмкүн. Arduino долбоорлорубуз үчүн тийиштүү байланыш протоколун тандоодон мурун биздин өзгөчө муктаждыктарыбызды эске алуу маанилүү.
Мен Себастьян Видал, технологияга жана өз алдынча жасоого кызыккан компьютер инженеримин. Андан тышкары, мен жаратуучумун tecnobits.com, мен технологияны баарына жеткиликтүү жана түшүнүктүү кылуу үчүн окуу куралдарын бөлүшөм.