Mundarija:

StandardFirmata dan tashqariga chiqish - qayta ko'rib chiqilgan: 5 qadam
StandardFirmata dan tashqariga chiqish - qayta ko'rib chiqilgan: 5 qadam

Video: StandardFirmata dan tashqariga chiqish - qayta ko'rib chiqilgan: 5 qadam

Video: StandardFirmata dan tashqariga chiqish - qayta ko'rib chiqilgan: 5 qadam
Video: Installing Firmata on Arduino 2024, Iyul
Anonim
StandardFirmata -dan tashqariga chiqish - qayta ko'rib chiqilgan
StandardFirmata -dan tashqariga chiqish - qayta ko'rib chiqilgan

Qisqa vaqt oldin, pymata4 foydalanuvchisi, doktor Martyn Wheeler, pymata4 kutubxonasiga DHT22 namlik/harorat sensori yordamini qo'shish bo'yicha ko'rsatma berish uchun men bilan bog'lanishdi. Pymata4 kutubxonasi Arduino hamkasbi FirmataExpress bilan birgalikda foydalanuvchilarga Arduino qurilmalarini masofadan boshqarish va nazorat qilish imkonini beradi. Elektron pochta almashinuvining bir necha bosqichida doktor Uiler pymata4 va FirmataExpress -ni muvaffaqiyatli o'zgartirdi. Natijada, DHT22 va DHT11 datchiklarini qo'llab -quvvatlash endi pymata4 va FirmataExpress standart qismidir.

2014 yil may oyida men Firmata -ga qo'shimcha qurilmalarni qo'llab -quvvatlash haqida maqola yozdim. Men yozgan maqolam haqida mulohaza yuritib, men bu maqola uchun qog'ozdan qalamga olganimdan buyon qanchalik o'zgarganini angladim. Ushbu maqolaga qo'shimcha ravishda, doktor Uiler o'z harakatlarini hujjatlashtirdi va siz ham buni tekshirib ko'rishingiz mumkin.

FirmataExpress StandardFirmata -ga asoslangan va StandardFirmata katalog tuzilmasi rivojlangan. Bundan tashqari, pymata4 API -si 2014 yilgi PyMata API -dan ancha farq qiladi. Menimcha, bu maqolani qayta ko'rib chiqish va yangilash uchun eng zo'r vaqt bo'ladi. Doktor Uilerning ishini asos qilib, pymata4/FirmataExpress funksiyasini qanday kengaytirishni o'rganamiz.

Boshlashdan oldin - Arduino/Firmata haqida ba'zi ma'lumot

Xo'sh, Firmata nima? Firmata veb -sahifasidan iqtibos keltirgan holda, "Firmata - bu asosiy kompyuter dasturiy ta'minotidan mikrokontrollerlar bilan aloqa qilishning umumiy protokoli."

Arduino Firmata, ketma -ket interfeysdan foydalanib, Arduino mikrokontroller va kompyuter o'rtasida, odatda, ketma -ket/USB ulanishni 57600 bps tezlikda uzatadi. Bu havola orqali uzatiladigan ma'lumotlar ikkilik bo'lib, protokol mijoz/server modelida amalga oshiriladi.

Server tomoni Arduino eskiz shaklida Arduino mikrokontrolleriga yuklanadi. StandardFirmata eskizi, Arduino IDE bilan birga, mijoz buyurganidek, Arduino I/U pinlarini boshqaradi. Shuningdek, u kirish pinidagi o'zgarishlar va boshqa hisobot ma'lumotlarini mijozga qaytaradi. FirmataExpress - StandardFirmata kengaytirilgan versiyasi. U ketma -ket ulanish tezligi 115200 bps.

Ushbu maqola uchun ishlatiladigan Arduino mijozi pymata4. Bu kompyuterda bajariladigan Python dasturi. U Arduino serveriga ham buyruq yuboradi, ham hisobot oladi. Pymata4 Python -da qo'llanilganligi sababli u Windows, Linux (shu jumladan Raspberry Pi) va macOS kompyuterlarida ishlaydi.

Nima uchun Firmata -dan foydalanish kerak?

Arduino mikrokontrollerlari ajoyib kichik qurilmalar, lekin protsessor va xotira resurslari biroz cheklangan. Protsessorli yoki xotirasi katta bo'lgan ilovalar uchun, dastur muvaffaqiyatli bo'lishi uchun kompyuterga resurs talabini yuklashdan boshqa variant qolmaydi.

Lekin bu StandardFirmata -dan foydalanishning yagona sababi emas. Engil vaznli Arduino ilovalarini ishlab chiqishda, kompyuter Arduino mikrokontrollerida mavjud bo'lmagan asboblar va disk raskadrovka imkoniyatlarini taqdim etishi mumkin. "Ruxsat etilgan" mijoz va serverdan foydalanish dasturning murakkabligini boshqarishni osonlashtiradi. Ilova takomillashtirilgach, uni maxsus Arduino eskiziga tarjima qilish mumkin.

Nima uchun pymata4dan foydalanish kerak?

Uning muallifi bo'lganim uchun, albatta, men tarafkashman. Aytish joizki, bu so'nggi bir necha yil mobaynida doimiy ravishda saqlanib kelgan Python-ga asoslangan yagona Firma mijozi. Bu intuitiv va ishlatish uchun qulay API bilan ta'minlaydi. StandardFirmata-ga asoslangan eskizlardan tashqari, StandardFirmataWifI eskizini ishlatishda ESP-8266 kabi qurilmalar uchun Wi-Fi orqali Firmata-ni qo'llab-quvvatlaydi.

Bundan tashqari, pymata4 standart StandardFirmata tomonidan qo'llab -quvvatlanmaydigan qo'shimcha sensorlar va aktuatorlarni qo'llab -quvvatlash uchun foydalanuvchi tomonidan osongina kengaytirilishi uchun mo'ljallangan.

1 -qadam: Firmata protokolini tushunish

Firmata protokolini tushunish
Firmata protokolini tushunish

Arduino Firmata aloqa protokoli MIDI protokolidan olingan bo'lib, u ma'lumotlarni ko'rsatish uchun bir yoki bir nechta 7 bitli baytlardan foydalanadi.

Firmata foydalanuvchilar uchun kengaytiriladigan qilib yaratilgan. Ushbu kengayishni ta'minlaydigan mexanizm - bu tizim eksklyuziv (SysEx) xabarlar almashish protokoli.

Firmata protokoli bilan belgilangan SysEx xabarining formati yuqoridagi rasmda ko'rsatilgan. U o'n oltilik o'nlik o'lchovli 0xF0 qiymatiga ega bo'lgan START_SYSEX baytidan boshlanadi va undan keyin noyob SysEx buyruq bayti keladi. Bayt buyrug'i qiymati o'n oltilik 0x00-0x7F oralig'ida bo'lishi kerak. Keyin buyruq baytidan keyin 7 bitli ma'lumotlar baytining aniqlanmagan soni keladi. Nihoyat, xabar END_SYSEX bayt bilan, o'n oltilik 0xF7 sobit qiymati bilan tugatiladi.

Firmata ma'lumotlarini kodlash/dekodlash

SysEx xabarining foydalanuvchi ma'lumotlari qismi 7 bitli baytlardan iborat bo'lganligi sababli, siz 128 (0x7f) dan katta qiymatni qanday ifodalaydi, deb o'ylashingiz mumkin. Ma'lumotlar havolasi bo'ylab joylashtirilmasdan oldin, firma bu qiymatlarni bir nechta 7 bitli baytlarga ajratish orqali kodlaydi. Ma'lumot elementining eng kam bayti (LSB) birinchi bo'lib yuboriladi, so'ngra konventsiya bo'yicha ma'lumotlar elementining tobora muhim tarkibiy qismlari yuboriladi. Ma'lumotlar elementining eng muhim bayti (MSB) oxirgi yuborilgan ma'lumotlar elementidir.

Bu qanday ishlaydi?

Aytaylik, biz SysEx xabarining ma'lumotlar qismiga 525 qiymatini kiritmoqchimiz. 525 qiymati 128 qiymatidan kattaroq bo'lgani uchun, biz uni 7 bitli baytli "bo'laklarga" ajratishimiz yoki qismlarga ajratishimiz kerak.

Mana bu qanday amalga oshiriladi.

O'nli kasrdagi 525 qiymati 2 baytli 0x20D o'n oltilik qiymatiga teng. LSB -ni olish uchun biz qiymatni 0x7F bilan AND -ni to'ldirib yashiramiz. "C" va Python dasturlari quyida ko'rsatilgan:

// LSBni ajratish uchun "C" ilovasi

int max_distance_LSB = max_distance & 0x7f; // LSB max_distance_LSB = max_distance & 0x7F # izolyatsiya qilish uchun pastki baytni # Python dasturini niqoblash

Maskadan keyin max_distance_LSB 0x0d ni o'z ichiga oladi. 0x20D va 0x7F = 0x0D.

Keyinchalik, biz bu 2 baytlik qiymat uchun MSBni ajratishimiz kerak. Buning uchun biz 0x20D qiymatini o'ngga, 7 joyga siljitamiz.

// 2 baytlik qiymatli MSBni ajratish uchun "C" ilovasi

int max_distance_MSB = max_distance >> 7; // yuqori darajali baytni # Python ilovasini 2 baytli isoloat MSB ga o'tkazing max_distance_MSB = max_distance >> 7 # shift yuqori baytni olish uchun Shiftdan so'ng max_distance_MSB 0x04 qiymatini o'z ichiga oladi.

"Chiqib ketgan" marshallangan ma'lumotlar qabul qilinganda, ularni yagona qiymatga yig'ish kerak. Bu erda "C" va Python -da ma'lumotlar qanday yig'iladi

// 2 baytni qayta yig'ish uchun "C" ilovasi, // 7 bitli qiymatlar bitta qiymatga int max_distance = argv [0] + (argv [1] << 7); # Python ilovasi 2 baytli, # 7 bitli qiymatlarni bitta qiymatga yig'ish uchun max_distance = data [0] + (ma'lumotlar [1] << 7)

Qayta yig'ilgandan so'ng, qiymat yana 525 o'nlik yoki 0x20D o'n oltilikka teng bo'ladi.

Bu demontaj/qayta yig'ish jarayoni mijoz yoki server tomonidan amalga oshirilishi mumkin.

2 -qadam: Boshlaylik

Yangi qurilmani qo'llab -quvvatlash Arduino rezident serverida ham, kompyuterda yashovchi Python mijozida ham o'zgarishlarni talab qiladi. Doktor Uilerning ishi kerakli o'zgartirishlarni tasvirlash uchun ishlatiladi.

Ehtimol, eng muhim qadam - mavjud qo'llab -quvvatlovchi qurilmalar kutubxonasini Arduino tenglamasiga qo'shishni xohlaysizmi yoki o'zingiz yozishni xohlaysizmi, qaror qabul qilishdir. Agar siz mavjud kutubxonani topa olsangiz, uni noldan yozishdan ko'ra, undan foydalanish osonroq bo'ladi.

DHT qurilmasini qo'llab -quvvatlash uchun doktor Uiler o'zining kengaytma kodini DHTNew kutubxonasiga asoslangan. Doktor Uiler DHTNew kutubxonasining funktsiyalarini Arduino va pymata4 tenglamalari bo'ylab taqsimlab, Arduino tomondan minimal blokirovkani ta'minladi.

Agar biz DHTNew -ga qarasak, u quyidagilarni bajaradi:

  • Tanlangan pinli raqamli chiqish rejimini o'rnatadi.
  • Oxirgi namlik va harorat qiymatlarini olish uchun kodlangan signal chiqadi.
  • Xatolarni tekshiradi va hisobot beradi.
  • Olingan xom ma'lumotlardan odamlar o'qiy oladigan harorat va namlik qiymatlarini hisoblab chiqadi.

FirmataExpress -da ishlarni iloji boricha samarali ushlab turish uchun doktor Uiler Arduino -dan pymata4 -ga ma'lumotlarni konvertatsiya qilish tartibini yukladi.

3 -qadam: DHT -ni qo'llab -quvvatlash uchun FirmataExpress -ni o'zgartirish

FirmataExpress katalog daraxti

Quyida FirmataExpress omborini o'z ichiga olgan barcha fayllar keltirilgan. Bu daraxt StandardFiramata bilan bir xil, chunki ba'zi fayl nomlari ombor nomini aks ettiradi.

O'zgartirishga muhtoj bo'lgan fayllar yonida yulduzcha (*) bo'lgan fayllardir.

FirmataExpress

├── * taxtalar. H

├── misollar

FirmataExpress

X ├── taxta

│ * FirmataExpress.ino

Litsenziya.txt

Makefile

├── * FirmataConstants.h

├── * FirmataDefines.h

├── FirmataExpress.cpp

├── FirmataExpress.h

├── FirmataMarshaller.cpp

├── FirmataMarshaller.h

├── FirmataParser.cpp

└── FirmataParser.h

Keling, har bir faylni va kiritilgan o'zgarishlarni ko'rib chiqaylik.

Kengashlar. H

Bu fayl qo'llab-quvvatlanadigan taxtalar turlarining har biri uchun pin tipidagi so'l ta'riflarini o'z ichiga oladi. U bir nechta qurilmani qo'llab -quvvatlash zarur bo'lganda qo'llab -quvvatlanadigan qurilmalarning maksimal sonini belgilaydi.

DHT qurilmasi uchun bir vaqtning o'zida 6 tagacha qurilma ulanishi mumkin va bu qiymat quyidagicha belgilanadi:

#ifndef MAX_DHTS

#dexine MAX_DHTS 6 #endif

Shuningdek, pin-tipli makrolar ixtiyoriy ravishda yangi qurilma uchun belgilanishi mumkin, yoki barcha turdagi taxtalar uchun yoki sizni qiziqtirganlar uchun. Bu makrolar asosan hisobot berish uchun ishlatiladi va qurilmalarni boshqarish uchun ishlatilmaydi. Ushbu makrolar qurilmani qo'llab -quvvatlaydigan ikkala pinni ham aniqlaydi:

#ta'rif IS_PIN_DHT (p) (IS_PIN_DIGITAL (p) && (p) - 2 <MAX_DHTS)

Pin-raqamli konvertatsiyani aniqlash uchun so'l.

#PIN_TO_DHT (p) PIN_TO_DIGITAL (p) ni belgilang

FirmataConstants.h

Ushbu faylda Arduino -ga qaysi versiyani yuklaganingizni kuzatib borish uchun o'zgartirishingiz mumkin bo'lgan dasturiy ta'minot versiyasi raqami mavjud. Shuningdek, u Firmata xabarlari qiymatlarini, shu jumladan Firmata SysEx xabarlarini o'z ichiga oladi.

Siz ushbu faylda qurilmangiz uchun yangi xabar yoki xabarlar to'plamini belgilashingiz kerak bo'ladi. DHT uchun ikkita xabar qo'shildi. Biri pinni "DHT" pinasi sifatida, ikkinchisi esa DHT -ning so'nggi ma'lumotlarini mijozga qaytarishda xabarchi sifatida sozlaydi.

statik const int DHT_CONFIG = 0x64;

statik const int DHT_DATA = 0x65;

Pinli rejimlar ham ushbu faylda ko'rsatilgan. DHT uchun yangi pin rejimi yaratildi:

statik const int PIN_MODE_DHT = 0x0F; // pin DHT uchun tuzilgan

Yangi pin rejimi qo'shilganda, TOTAL_PIN_MODESni sozlash kerak:

statik const int TOTAL_PIN_MODES = 17;

FirmataDefines.h

Bu fayl FirmataConstants.h ga qo'shilgan yangi xabarlarni aks ettirishi uchun yangilanishi kerak:

#ifdef DHT_CONFIG #undef DHT_CONFIG #endif #deftine DHT_CONFIG firmata:: DHT_CONFIG // DHT request #ifdef DHT_DATA #undef DHT_DATA #endif #define DHT_DATA firmata:: DHT_DATA // DHT reply #ifdefode PIN_FOD_FOD_DOD:: PIN_MODE_DHT

FirmataExpress.ino

Ushbu munozarada biz Arduino eskiziga kiritilgan o'zgarishlarning "yuqori nuqtalarini" ko'rib chiqamiz.

FirmataExpress bir vaqtning o'zida oltitagacha DHT qurilmasini qo'llab -quvvatlashi uchun qurilmaning har bir bog'langan pin raqamini, uning WakeUpDelay qiymatini va qurilma turini, ya'ni DHT22 yoki DHT11 ni kuzatib borish uchun 3 ta massiv yaratildi:

// DHT sensorlar

int numActiveDHTs = 0; // biriktirilgan DHTlar soni uint8_t DHT_PinNumbers [MAX_DHTS]; uint8_t DHT_WakeUpDelay [MAX_DHTS]; uint8_t DHT_TYPE [MAX_DHTS];

O'qish o'rtasida har ikkala qurilma turiga taxminan 2 soniya kerak bo'lganligi sababli, biz har bir DHTni 2 soniya ichida faqat bir marta o'qiganimizga ishonch hosil qilishimiz kerak. DHT qurilmalari va HC-SR04 masofali sensorlar kabi ba'zi qurilmalarga faqat vaqti-vaqti bilan kirish mumkin. Bu ularga o'z muhitlari bilan muloqot qilish vaqtini beradi.

uint8_t nextDHT = 0; // keyingi qurilmani o'qish uchun dht ga indekslang

uint8_t joriyDHT = 0; // Qaysi sensor faol ekanligini kuzatib boradi. int dhtNumLoops = 0; // b4 pastadir orqali DHT int dhtLoopCounter = 0 ga kirishning maqsadli soni; // Loop taymer

DHT qurilmasini sozlash va o'qish

FirmataExpress DHT ishlashi uchun pinni sozlash uchun SysEx buyrug'ini olganda, DHT qurilmalarining maksimal sonidan oshmaganligini tekshiradi. Agar yangi DHTni qo'llab -quvvatlash mumkin bo'lsa, DHT massivlari yangilanadi. Agar DHT turi noma'lum bo'lsa, SysEx mag'lubiyatli xabari yaratiladi va pymata4 -ga qaytariladi

DHT_CONFIG holati: int DHT_Pin = argv [0]; int DHT_type = argv [1]; if (numActiveDHTs <MAX_DHTS) {if (DHT_type == 22) {DHT_WakeUpDelay [numActiveDHTs] = 1; } boshqa if (DHT_type == 11) {DHT_WakeUpDelay [numActiveDHTs] = 18; } else {Firmata.sendString ("XATO: SENSORNING NOMLU TURI, BOShQA SENSORLARI 11, 22"); tanaffus; } // sensorni tekshiring DHT_PinNumbers [numActiveDHTs] = DHT_Pin; DHT_TYPE [numActiveDHTs] = DHT_tipi; setPinModeCallback (DHT_Pin, PIN_MODE_DHT);

Keyin FirmataExpress DHT qurilmasi bilan aloqa o'rnatishga harakat qiladi. Agar biron bir xato bo'lsa, u xato ma'lumotlari bilan SysEx xabarini hosil qiladi va SysEx xabarini pymat4 ga qaytaradi. _Bits o'zgaruvchisi, agar kerak bo'lsa, pymata4 tomonidan qo'shimcha ishlov berish uchun DHT qurilmasi tomonidan qaytarilgan ma'lumotlarni saqlaydi.

Firmata.write (START_SYSEX);

Firmata.write (DHT_DATA); Firmata.write (DHT_Pin); Firmata.write (DHT_type); uchun (uint8_t i = 0; i> 7 & 0x7f); } Firmata.write (abs (rv)); Firmata.write (1); Firmata.write (END_SYSEX);

Agar haqiqiy ma'lumotlar qaytarilsa, faol DHTlar soni ortadi. Ma'lumotlar uchun keyingi DHTni tekshirishdan oldin qancha tsikl takrorlanishini kuzatib boruvchi o'zgaruvchi ham o'rnatiladi. Bu o'zgaruvchi tizimga qancha DHT qo'shilmasin, ularning barchasi 2 soniya ichida o'qilishini ta'minlaydi.

int rv = readDhtSensor (numActiveDHTs);

agar (rv == DHTLIB_OK) {numActiveDHTs ++; dhtNumLoops = dhtNumLoops / numActiveDHTs; // hammasi yaxshi}

Agar eskizning pastadir funktsiyasida bir yoki bir nechta DHT qurilmalari tuzilgan bo'lsa, keyingi DHT qurilmasi o'qiladi. Yaroqli ma'lumotlar yoki uning xato holati pysata4 ga SysEx xabari shaklida qaytariladi:

if (dhtLoopCounter ++> dhtNumLoops) {if (numActiveDHTs) {int rv = readDhtSensor (nextDHT); uint8_t current_pin = DHT_PinNumbers [nextDHT]; uint8_t current_type = DHT_TYPE [nextDHT]; dhtLoopCounter = 0; joriyDHT = keyingiDHT; agar (nextDHT ++> = numActiveDHTs - 1) {nextDHT = 0; } if (rv == DHTLIB_OK) {// TEST CHECKSUM uint8_t sum = _bits [0] + _bits [1] + _bits [2] + _bits [3]; agar (_bits [4]! = sum) {rv = -1; }} // xabarni xato holati bilan qaytarib yuboring Firmata.write (START_SYSEX); Firmata.write (DHT_DATA); Firmata.write (joriy_pin); Firmata.write (current_type); uchun (uint8_t i = 0; i <sizeof (_bits) - 1; ++ i) {Firmata.write (_bits ); // Firmata.write (_bits ;} Firmata.write (abs (rv)); Firmata.write (0); Firmata.write (END_SYSEX);}}

DHT qurilmasi bilan bog'lanish uchun ishlatiladigan kod to'g'ridan -to'g'ri DHTNew kutubxonasidan olingan:

int readDhtSensor (int indeksi) {

// INIT BUFFERVAR ma'lumotlarini olish uchun uint8_t mask = 128; uint8_t idx = 0; // EMPTY BUFFER // memset (_bits, 0, sizeof (_bits)); for (uint8_t i = 0; i 5 BYTES for (uint8_t i = 40; i! = 0; i--) {loopCnt = DHTLIB_TIMEOUT; while (digitalRead (pin) == LOW) {if (--loopCnt == 0) DHTLIB_ERROR_TIMEOUT;} uint32_t t = micros (); loopCnt = DHTLIB_TIMEOUT; while (digitalRead (pin) == HIGH) {if (--loopCnt == 0) return DHTLIB_ERROR_TIMEOUT;} if ((micros ()-t) 40) {_bits [idx] | = niqob;} niqob >> = 1; agar (niqob == 0) // keyingi bayt? {Mask = 128; idx ++;}} DHTLIB_OK;};

4 -qadam: DHT -ni qo'llab -quvvatlash uchun Pymata4 -ni o'zgartirish

shaxsiy_sozlar.h

DHT-ni qo'llab-quvvatlash uchun biz ushbu faylga yangi pin-tipli va SysEx xabarlarini qo'shishimiz kerak:

# pinli rejimlar INPUT = 0x00 # pin kirish sifatida o'rnatiladi OUTPUT = 0x01 # pin ANALOG = 0x02 # analogli analogda Kirish rejimida PWM = 0x03 # raqamli pin PWM chiqish rejimida SERVO = 0x04 # Servo chiqish rejimida I2C = 0x06 # pin I2C sozlamasiga kiritilgan STEPPER = 0x08 # qadam rejimidagi har qanday pin SERIAL = 0x0a PULLUP = 0x0b # tortishish rejimidagi har qanday pin SONAR = 0x0c # SONAR rejimidagi har qanday pin TONE = 0x0d # PIXY = 0x0e # ohang rejimidagi har qanday pin. pixy kamera rejimi uchun ajratilgan DHT = 0x0f # DHT sensori IGNORE = 0x7f # DHT SysEx buyruq xabarlari DHT_CONFIG = 0x64 # dht config buyrug'i DHT_DATA = 0x65 # dht sensorli javob

Qo'shilgan pin turi va SysEx buyruqlari FirmataExpress -ga qo'shilgan FirmataConstants.h qiymatlariga mos kelishi kerak.

pymata4.py

Pymata4 Python lug'atidan foydalanib, kiruvchi Firmata xabarini xabarlar bilan tez bog'laydi. Bu lug'atning nomi report_dispatch.

Lug'atga kirish formati:

{MessageID: [message_handler, ishlov beriladigan ma'lumotlar baytlari soni]}

Kiruvchi DHT xabarlarini boshqarish uchun lug'atga yozuv qo'shildi:

{PrivateConstants. DHT_DATA: [self._dht_read_response, 7]}

Xabarda 7 bayt ma'lumotlar Arduino raqamli pin raqami, DHT qurilmasining turi (22 yoki 11) va 5 bayt xom ma'lumotdir.

_Dht_read_response usuli xabar qilingan xatolarni tekshiradi. Agar xatoliklar bo'lmasa, namlik va harorat Arduino DHTNew kutubxonasidan olingan algoritm yordamida hisoblanadi.

Hisoblangan qiymatlar foydalanuvchi tomonidan qayta qo'ng'iroq qilish usuli orqali xabar qilinadi. Ular, shuningdek, pin_data ma'lumotlarining ichki tuzilmasida saqlanadi. Hisobot berilgan oxirgi qiymatni dht_read usuli yordamida pin_data so'rovi yordamida qaytarib olish mumkin.

Yangi DHT qurilmasini sozlash

Yangi DHT qurilmasini qo'shganda, set_pin_mode_dht usuli chaqiriladi. Bu usul pin_data raqamli pinlar uchun yangilanadi. Shuningdek, u DHT_CONFIG SysEx xabarini yaratadi va FirmataExpress -ga yuboradi.

5 -qadam: yig'ish

Ko'rib turganimizdek, yangi qurilmaga Firmata yordamini qo'shish uchun siz Arduino FirmataExpress server kodini va Python asosidagi pymata4 mijoz kodini o'zgartirishingiz kerak. FirmataExpress kodini disk raskadrovka qilish qiyin bo'lishi mumkin. Nosozliklarni tuzatishga yordam berish uchun FirmataExpress -ga printData deb nomlangan usul qo'shildi. Bu usul sizga ma'lumotlar qiymatlarini FirmataExpress -dan yuborish imkonini beradi va ularni pymata4 konsolida chop etadi.

Bu funksiya belgilar satriga ko'rsatgichni ham, siz ko'rmoqchi bo'lgan qiymatni ham talab qiladi. Agar ma'lumotlar qiymati argc deb nomlangan o'zgaruvchida bo'lsa, siz printData -ga quyidagi parametrlar bilan qo'ng'iroq qilishingiz mumkin.

printData ((char*) "argc =", argc);

Agar sizda biron bir savol bo'lsa, sharh qoldiring, men javob berishdan xursand bo'laman.

Baxtli kodlash!

Tavsiya: