Mundarija:
- Ta'minotlar
- 1 -qadam: jismoniy aloqa
- 2 -qadam: Kutubxonadan qanday foydalanish kerak
- 3 -qadam: Asosiy ma'lumotlarni uzatish
- 4 -qadam: Asosiy ma'lumotlarni oling
- 5 -qadam: Sinov
Video: Arduino seriyali aloqasi: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:24
Ko'p Arduino loyihalari bir nechta Arduino o'rtasida ma'lumotlarni uzatishga tayanadi.
Siz RC avtomobili, RC samolyotini quradigan yoki masofadan turib displeyli ob -havo stantsiyasini loyihalashni yaxshi ko'radigan havaskor bo'lsangiz ham, ketma -ket ma'lumotlarni bir Arduino -dan boshqasiga ishonchli tarzda o'tkazishni bilishingiz kerak bo'ladi. Afsuski, havaskorlar uchun o'z loyihalarida ketma -ket ma'lumotlarni uzatish qiyin, chunki ketma -ket ma'lumotlar baytlar oqimi sifatida yuboriladi.
Baytlar oqimida hech qanday kontekst bo'lmasa, ma'lumotlarni sharhlash deyarli mumkin emas. Ma'lumotni sharhlay olmagan holda, sizning Arduinosingiz ishonchli aloqa qila olmaydi. Asosiysi, bu kontekst ma'lumotlarini standart ketma -ket paketli dizayn yordamida bayt oqimiga qo'shish.
Paketlarni ketma -ket tuzish, paketlarni to'ldirish va ajratish murakkab va erishish qiyin. Yaxshiyamki, Arduino foydalanuvchilari uchun bu murakkab mantiqni bajarishi mumkin bo'lgan kutubxonalar mavjud, shuning uchun siz o'z loyihangizni qo'shimcha boshsiz ishlashiga e'tibor qaratishingiz mumkin. Bu yo'riqnoma ketma -ket paketli ishlov berish uchun SerialTransfer.h kutubxonasidan foydalanadi.
Qisqacha aytganda, bu ko'rsatma SerialTransfer.h kutubxonasidan foydalanib, har qanday loyihada mustahkam ketma -ket ma'lumotlarni qanday osonlik bilan amalga oshirish mumkinligini ko'rib chiqadi. Agar siz kuchli ketma-ket aloqa haqidagi past darajali nazariya haqida ko'proq bilmoqchi bo'lsangiz, ushbu qo'llanmani ko'ring.
Ta'minotlar
-
2 Arduino
Bir nechta apparat UART -lariga ega bo'lgan Arduino -dan foydalanish tavsiya etiladi (ya'ni Arduino Mega)
- Ulanish simlari
-
SerialTransfer.h ni o'rnating
Arduino IDE kutubxonalar menejeri orqali mavjud
1 -qadam: jismoniy aloqa
Ketma -ket aloqadan foydalanganda, bir nechta simli nuqtalarni yodda tutish kerak:
- Barcha asoslar ulanganligiga ishonch hosil qiling!
- Arduino TX (uzatish) pinini boshqa Arduino RX (qabul qilish) piniga ulash lozim.
2 -qadam: Kutubxonadan qanday foydalanish kerak
SerialTransfer.h sizga maxsus paketli protokol yordamida katta hajmdagi ma'lumotlarni osongina yuborish imkonini beradi. Quyida kutubxonaning barcha funktsiyalari tavsifi keltirilgan, ularning ko'pchiligini biz keyinchalik ushbu darslikda ishlatamiz:
SerialTransfer.txBuff
Bu ketma -ket yuboriladigan barcha yuk ma'lumotlari uzatilishdan oldin buferlangan bayt qatoridir. Siz buferni boshqa Arduino -ga yuborish uchun ma'lumot baytlari bilan to'ldirishingiz mumkin.
SerialTransfer.rxBuff
Bu boshqa Arduino -dan olingan barcha yuk ma'lumotlari tamponlangan baytli qator.
SerialTransfer.bytesRead
Boshqa Arduino tomonidan qabul qilingan va SerialTransfer.rxBuff -da saqlangan yuk baytlari soni
SerialTransfer.begin (Oqim va _port)
Kutubxona sinfining namunasini ishga tushiradi. Siz har qanday "Serial" sinf ob'ektini parametr sifatida o'tkazishingiz mumkin - hatto "SoftwareSerial" sinf ob'ektlari ham!
SerialTransfer.sendData (const uint16_t & messageLen)
Bu sizning Arduino -ni boshqa "Arduino" ga uzatish buferidagi "messageLen" bayt sonini yuborishga majbur qiladi. Masalan, agar "messageLen" 4 bo'lsa, SerialTransfer.txBuff -ning dastlabki 4 bayti ketma -ket boshqa Arduino -ga yuboriladi.
SerialTransfer.available ()
Bu sizning Arduino -ni boshqa Arduino -dan olingan ketma -ket ma'lumotlarni tahlil qilishga majbur qiladi. Agar bu funktsiya mantiqiy "rost" ni qaytarsa, bu yangi paket muvaffaqiyatli tahlil qilinganligini va yangi olingan ma'lumotlarning SerialTransfer.rxBuff -da saqlanganligini bildiradi.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
"Indeks" argumenti ko'rsatganidek, indeksdan boshlanadigan uzatish buferiga ixtiyoriy ob'ektning baytlari (bayt, int, float, double, struct va boshqalar) "len".
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Qabul qilish buferidan "renx" baytlar sonini indeksdan boshlab "indeks" argumenti o'zboshimchalik bilan ob'ektga o'qiydi (bayt, int, float, dubl, strukt va boshqalar …).
ESLATMA:
Ma'lumot uzatishning eng oson usuli - bu siz yubormoqchi bo'lgan barcha ma'lumotlarni o'z ichiga olgan tuzilmani aniqlash. Qabul qilayotgan Arduino bir xil tuzilishga ega bo'lishi kerak.
3 -qadam: Asosiy ma'lumotlarni uzatish
Quyidagi eskiz analogRead (0) ning ADC qiymatini ham, analogRead (0) qiymatini ham Arduino №2 ga o'tkazadi.
Quyidagi eskizni Arduino #1 -ga yuklang:
#"SerialTransfer.h" ni qo'shing
SerialTransfer myTransfer; STRUCT {uint16_t adcVal tuzilishi; suzuvchi kuchlanish; } ma'lumotlar; void setup () {Serial.begin (115200); Seriya 1. boshlanishi (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (ma'lumotlar, hajmlar (ma'lumotlar)); myTransfer.sendData (hajmi (ma'lumotlar)); kechikish (100); }
4 -qadam: Asosiy ma'lumotlarni oling
Quyidagi kod ADC va Arduino #1dan olingan kuchlanish qiymatlarini bosib chiqaradi.
Quyidagi kodni Arduino #2 -ga yuklang:
#"SerialTransfer.h" ni qo'shing
SerialTransfer myTransfer; STRUCT {uint16_t adcVal tuzilishi; suzuvchi kuchlanish; } ma'lumotlar; void setup () {Serial.begin (115200); Seriya 1. boshlanishi (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (ma'lumotlar kuchlanish); Serial.println (); } if if (myTransfer.status <0) {Serial.print ("ERROR:"); agar (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); aks holda (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); aks holda (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}
5 -qadam: Sinov
Ikkala eskiz ham tegishli Arduino -larga yuklanganidan so'ng, siz Arduino #1 -dan ma'lumot olganingizni tekshirish uchun Arduino #2 seriyali monitoridan foydalanishingiz mumkin!
Tavsiya:
MPU 6050 Gyro, Arduino bilan akselerometr aloqasi (Atmega328p): 5 qadam
MPU 6050 Gyro, Arduino bilan akselerometr aloqasi (Atmega328p): MPU6050 IMU 3 o'qli akselerometr va bitta o'qga o'rnatilgan 3 o'qli giroskopga ega. X, Y va Z o'qlari. Gyroskopning natijalari
TM1637 displey modulining Arduino bilan o'zaro aloqasi: 3 qadam
TM1637 displey moduli Arduino bilan o'zaro aloqada: As-Salam-O-Aleykum! Menga bu ko'rsatma TM1637 displey modulini Arduino bilan bog'lash haqida, bu to'rtta raqamli etti segmentli displey moduli, u har xil rangda, meniki qizil rangda, Tm1637 muzidan foydalanadi
Arduino va mobil Bluetooth aloqasi (messenjer): 8 qadam
Arduino va mobil Bluetooth aloqasi (messenjer): Aloqa kundalik hayotimizda muhim rol o'ynaydi. Ammo qulflangan vaqtda o'z oilamiz bilan yoki uyimizdagi odamlar bilan muloqotda bo'lish uchun ba'zida mobil telefonlar kerak bo'ladi. Ammo qisqa vaqt ichida mobil telefonlardan foydalanish
Oddiy Arduino LoRa aloqasi (5 km dan ortiq): 9 qadam
Oddiy Arduino LoRa aloqasi (5 km dan ortiq): Biz kutubxonam bilan E32-TTL-100 ni sinovdan o'tkazamiz. Bu simsiz qabul qiluvchi modul bo'lib, SEMTECH -dan original RFIC SX1278 asosida 410 441 MGts (yoki 868 MGts yoki 915 MGts) da ishlaydi, shaffof uzatish mavjud, TTL darajasi. Modul LORA -ni qabul qiladi
TMP-112 ning Arduino Nano (I2C) bilan o'zaro aloqasi: 5 qadam
TMP-112 ning Arduino Nano (I2C) bilan o'zaro aloqasi: Salom, salom .. !! Men (Somanshu Choudhary) Dcube texnologiya korxonalari nomidan Arduino nano yordamida haroratni o'lchaydilar, bu o'qish uchun I2C protokoli dasturlaridan biridir. harorat sensori TMP-112 analog ma'lumotlari