فهرست مطالب:

فراتر رفتن از استاندارد Firmata - بازبینی شده: 5 مرحله
فراتر رفتن از استاندارد Firmata - بازبینی شده: 5 مرحله

تصویری: فراتر رفتن از استاندارد Firmata - بازبینی شده: 5 مرحله

تصویری: فراتر رفتن از استاندارد Firmata - بازبینی شده: 5 مرحله
تصویری: Use Cases in UTXO DeFi / 1.10.2024 on Spaces (Chapters in Description) 2024, نوامبر
Anonim
فراتر رفتن از StandardFirmata - بازبینی شده
فراتر رفتن از StandardFirmata - بازبینی شده

چندی پیش ، دکتر Martyn Wheeler ، کاربر pymata4 ، برای راهنمایی در مورد افزودن پشتیبانی از سنسور رطوبت/دما DHT22 به کتابخانه pymata4 با من تماس گرفت. کتابخانه pymata4 ، همراه با همتای Arduino خود ، FirmataExpress ، به کاربران امکان می دهد دستگاه های Arduino خود را از راه دور کنترل و نظارت کنند. در چند دور مبادله ایمیل ، دکتر ویلر در اصلاح هر دو pymata4 و FirmataExpress موفق بود. در نتیجه ، پشتیبانی از سنسورهای DHT22 و DHT11 اکنون بخشی استاندارد از pymata4 و FirmataExpress است.

در ماه مه 2014 ، مقاله ای در مورد افزودن پشتیبانی Firmata برای دستگاه های اضافی نوشتم. با تأمل در آن مقاله اول ، متوجه شدم چقدر تغییر کرده است از زمانی که برای آن مقاله قلم به کاغذ کشیدم. علاوه بر این مقاله ، دکتر ویلر تلاشهای خود را ثبت کرد ، و شما ممکن است بخواهید آن را نیز بررسی کنید.

FirmataExpress بر اساس StandardFirmata است و ساختار فهرست راهنمای StandardFirmata تکامل یافته است. علاوه بر این ، pymata4 API نیز بسیار متفاوت از PyMata API اصلی سال 2014 است. من فکر کردم این زمان مناسب برای بازبینی و به روز رسانی آن مقاله است. با استفاده از کار دکتر ویلر به عنوان مبنایی ، بیایید نحوه گسترش عملکرد pymata4/FirmataExpress را بررسی کنیم.

قبل از شروع - برخی اطلاعات پیشین در مورد Arduino/Firmata

بنابراین Firmata چیست؟ به نقل از وب سایت Firmata ، "Firmata یک پروتکل عمومی برای ارتباط با میکروکنترلرها از نرم افزار روی رایانه میزبان است."

Arduino Firmata از یک رابط سریال برای انتقال اطلاعات فرمان و گزارش بین میکروکنترلر Arduino و رایانه استفاده می کند ، معمولاً با استفاده از پیوند سریال/USB روی 57600 bps تنظیم شده است. داده های منتقل شده در این پیوند باینری است و پروتکل در مدل سرویس گیرنده/سرور اجرا می شود.

سمت سرور در قالب طرح آردوینو روی میکروکنترلر آردوینو بارگذاری می شود. طرح استاندارد StandardFirmata ، همراه با Arduino IDE ، پین های ورودی/خروجی Arduino را طبق دستور مشتری کنترل می کند. همچنین تغییرات پین ورودی و سایر اطلاعات گزارش را به مشتری گزارش می دهد. FirmataExpress یک نسخه توسعه یافته از StandardFirmata است. با سرعت پیوند سریال 115200 bps اجرا می شود.

کلاینت آردوینو مورد استفاده برای این مقاله pymata4 است. این یک برنامه پایتون است که روی رایانه اجرا می شود. هم دستورات را به سرور آردوینو ارسال می کند و هم گزارش ها را دریافت می کند. از آنجا که pymata4 در پایتون اجرا می شود ، روی رایانه های ویندوز ، لینوکس (از جمله رزبری پای) و رایانه های macOS اجرا می شود.

چرا از Firmata استفاده می کنیم؟

میکروکنترلرهای آردوینو دستگاه های کوچک فوق العاده ای هستند ، اما منابع پردازنده و حافظه تا حدودی محدود هستند. برای برنامه هایی که پردازنده یا حافظه زیادی دارند ، اغلب گزینه کمی وجود دارد جز این که تقاضای منابع را بر روی رایانه بارگذاری کنید تا برنامه موفقیت آمیز باشد.

اما این تنها دلیل استفاده از StandardFirmata نیست. هنگام توسعه برنامه های سبک وزن آردوینو ، رایانه شخصی می تواند ابزارها و قابلیت های اشکال زدایی را ارائه دهد که به طور مستقیم در میکروکنترلر آردوینو موجود نیست. استفاده از کلاینت و سرور "ثابت" به محدود کردن پیچیدگی برنامه در یک رایانه کمک می کند ، که به راحتی مدیریت می شود. هنگامی که برنامه کامل شد ، می توان آن را به یک طرح سفارشی و مستقل Arduino ترجمه کرد.

چرا از pymata4 استفاده می کنیم؟

البته نویسنده آن ، جانبدار هستم. گفته می شود ، این تنها مشتری Firmata مستقر در پایتون است که در چند سال گذشته به طور مداوم نگهداری شده است. این API بصری و آسان برای استفاده ارائه می دهد. هنگام استفاده از طرح StandardFirmataWifI ، علاوه بر طرح های مبتنی بر StandardFirmata ، از Firmata روی WiFi برای دستگاه هایی مانند ESP-8266 پشتیبانی می کند.

همچنین ، pymata4 به گونه ای طراحی شده است که کاربر بتواند به راحتی از سنسورها و محرک های اضافی پشتیبانی کند که در حال حاضر توسط StandardFirmata پشتیبانی نمی شوند.

مرحله 1: درک پروتکل Firmata

آشنایی با پروتکل Firmata
آشنایی با پروتکل Firmata

پروتکل ارتباطی Arduino Firmata از پروتکل MIDI گرفته شده است که از یک یا چند بایت 7 بیتی برای نمایش داده ها استفاده می کند.

Firmata به گونه ای طراحی شد که قابلیت افزایش کاربر را داشته باشد. مکانیسم ارائه کننده این قابلیت توسعه ، پروتکل پیام رسانی System Exclusive (SysEx) است.

قالب پیام SysEx ، همانطور که توسط پروتکل Firmata تعریف شده است ، در تصویر بالا نشان داده شده است. با یک بایت START_SYSEX با مقدار ثابت هگزادسیمال 0xF0 شروع می شود و یک بایت فرمان منحصر به فرد SysEx به دنبال آن می آید. مقدار دستور بایت باید در محدوده هگزادسیمال 0x00-0x7F باشد. سپس بایت فرمان با تعداد نامشخص بایت داده 7 بیتی دنبال می شود. در نهایت ، پیام با یک بایت END_SYSEX ، با مقدار ثابت هگزادسیمال 0xF7 خاتمه می یابد.

رمزگذاری/رمزگشایی داده های Firmata

از آنجا که بخش داده های کاربر یک پیام SysEx شامل یک سری بایت 7 بیتی است ، ممکن است تعجب کنید که چگونه یک مقدار بیشتر از 128 (0x7f) را نشان می دهد؟ Firmata این مقادیر را با جدا کردن آنها در چند تکه 7 بیتی بایت قبل از انتقال داده ها در پیوند داده رمزگذاری می کند. کم اهمیت ترین بایت (LSB) یک مورد داده ابتدا ارسال می شود ، و پس از آن اجزای قابل توجهی از داده به طور فزاینده ای طبق قرارداد ارسال می شود. مهمترین بایت (MSB) مورد داده آخرین مورد ارسال شده است.

این چطوری کار میکنه؟

فرض کنید می خواهیم مقدار 525 را در بخش داده های پیام SysEx قرار دهیم. از آنجا که مقدار 525 به وضوح بیشتر از مقدار 128 است ، باید آن را به "تکه های" 7 بیتی بایت تقسیم یا جدا کنیم.

در اینجا نحوه انجام این کار آمده است.

مقدار 525 به صورت اعشاری معادل مقدار هگزا دسیمال 0x20D ، مقدار 2 بایت است. برای دریافت LSB ، مقدار را با AND'ing آن با 0x7F پنهان می کنیم. هر دو پیاده سازی "C" و Python در زیر نشان داده شده است:

// پیاده سازی "C" برای جداسازی LSB

int max_distance_LSB = max_distance & 0x7f؛ // بایت پایین را # پیاده سازی پایتون برای جداسازی LSB max_distance_LSB = max_distance و 0x7F # ماسک بایت پایین تر

پس از پوشاندن ، max_distance_LSB شامل 0x0d خواهد بود. 0x20D & 0x7F = 0x0D.

در مرحله بعد ، ما باید MSB را برای این مقدار 2 بایت جدا کنیم. برای انجام این کار ، مقدار 0x20D را به راست ، 7 مکان منتقل می کنیم.

// پیاده سازی "C" برای جداسازی MSB با مقدار 2 بایت

int max_distance_MSB = max_distance >> 7؛ // بایت مرتبه بالا # پیاده سازی Python را به isoloate MSB با مقدار 2 بایت max_distance_MSB = max_distance >> 7 # shift برای بدست آوردن بایت بالا پس از تغییر ، max_distance_MSB دارای مقدار 0x04 خواهد بود.

هنگامی که داده های "chunkified" marshaled دریافت می شوند ، باید دوباره در یک مقدار واحد جمع آوری شوند. در اینجا نحوه جمع آوری مجدد داده ها در "C" و پایتون آمده است

// پیاده سازی "C" برای جمع آوری مجدد 2 بایت ،

// مقادیر 7 بیتی به یک مقدار واحد int max_distance = argv [0] + (argv [1] << 7) ؛ پیاده سازی # پایتون برای جمع آوری مجدد مقادیر 2 بایت ، # 7 بیت در یک مقدار واحد max_distance = داده [0] + (داده [1] << 7)

پس از مونتاژ مجدد ، مقدار بار دیگر برابر 525 اعشاری یا هگزادسیمال 0x20D است.

این فرآیند جداسازی/مونتاژ مجدد ممکن است توسط مشتری یا سرور انجام شود.

مرحله 2: بیایید شروع کنیم

پشتیبانی از یک دستگاه جدید مستلزم تغییر در سرور مقیم Arduino و سرویس گیرنده پایتون ساکن PC است. از آثار دکتر ویلر برای نشان دادن تغییرات لازم استفاده خواهد شد.

شاید مهمترین مرحله این باشد که تصمیم بگیرید آیا می خواهید یک کتابخانه دستگاه پشتیبانی موجود را در قسمت آردوینو معادله ادغام کنید یا خود را بنویسید. توصیه می شود اگر می توانید کتابخانه موجود را پیدا کنید ، استفاده از آن بسیار ساده تر از نوشتن کتاب خود از ابتدا است.

برای پشتیبانی دستگاه DHT ، دکتر ویلر کد فرمت خود را بر اساس کتابخانه DHTNew قرار داد. بسیار هوشمندانه ، دکتر ویلر عملکرد کتابخانه DHTNew را در دو طرف معادله آردوینو و pymata4 تقسیم کرد تا حداقل مسدودسازی را در سمت آردوینو ایجاد کند.

اگر به DHTNew نگاه کنیم ، همه موارد زیر را انجام می دهد:

  • حالت خروجی دیجیتال پین انتخاب شده را تنظیم می کند.
  • یک سیگنال رمزگذاری شده را برای بازیابی آخرین مقادیر رطوبت و دما حذف می کند.
  • خطاها را بررسی و گزارش می کند.
  • مقادیر دما و رطوبت قابل خواندن توسط انسان را از داده های خام بازیابی شده محاسبه می کند.

برای حفظ کارآیی هرچه بیشتر در سمت FirmataExpress ، دکتر ویلر روال تبدیل داده ها را از Arduino به pymata4 بارگیری کرد.

مرحله 3: اصلاح FirmataExpress برای پشتیبانی DHT

درخت راهنمای FirmataExpress

در زیر همه فایل هایی که مخزن FirmataExpress را شامل می شوند ، آمده است. این درخت با استاندارد Firamata یکسان است ، فقط برخی از نام فایل ها نام مخزن را نشان می دهند.

فایلهایی که نیاز به اصلاح دارند ، فایلهایی هستند که در کنار آنها ستاره (*) وجود دارد.

FirmataExpress

├── * تخته. h

نمونه ها

irm irm FirmataExpress

├── ├──

├── * FirmataExpress.ino

IC IC LICENSE.txt

Makefile

* FirmataConstants.h

├── * FirmataDefines.h

├── FirmataExpress.cpp

irm FirmataExpress.h

├── FirmataMarshaller.cpp

irm FirmataMarshaller.h

├── FirmataParser.cpp

└── FirmataParser.h

بیایید هر یک از پرونده ها و تغییرات ایجاد شده را بررسی کنیم.

تخته ها. h

این فایل شامل تعاریف ماکرو از نوع پین برای هر یک از انواع برد پشتیبانی شده است. هنگامی که بیش از یک دستگاه نیاز به پشتیبانی داشته باشد ، حداکثر تعداد دستگاه های پشتیبانی شده را تعریف می کند.

برای دستگاه DHT ، ممکن است همزمان 6 دستگاه به هم متصل شوند و این مقدار به صورت زیر تعریف می شود:

#ifndef MAX_DHTS

#MAX_DHTS 6 را تعریف کنید #endif

همچنین ، ماکروهای نوع پین ممکن است به صورت اختیاری برای دستگاه جدید ، برای همه انواع برد یا فقط مواردی که مورد توجه شما هستند ، تعریف شوند. این ماکروها بیشتر برای اهداف گزارش استفاده می شوند و برای کنترل دستگاه ها استفاده نمی شوند. این ماکروها هر دو پین پشتیبانی کننده دستگاه را تعریف می کنند:

#تعریف IS_PIN_DHT (p) (IS_PIN_DIGITAL (p) && (p) - 2 <MAX_DHTS)

و همچنین یک کلان برای تبدیل تبدیل شماره پین.

#تعریف PIN_TO_DHT (p) PIN_TO_DIGITAL (p)

FirmataConstants.h

این فایل شامل شماره نسخه سیستم عامل است که ممکن است بخواهید آن را تغییر دهید تا بتوانید نسخه ای را که در Arduino بارگذاری کرده اید پیگیری کنید. همچنین حاوی مقادیر پیام Firmata ، از جمله پیام های Firmata SysEx است.

در این فایل باید یک پیام جدید یا مجموعه ای از پیام ها را برای دستگاه خود اختصاص دهید. برای DHT ، دو پیام اضافه شد. یکی هنگام ارسال آخرین اطلاعات DHT به مشتری ، یک پین را به عنوان یک پین "DHT" و دیگری به عنوان یک پیام گزارشگر پیکربندی می کند.

const static int DHT_CONFIG = 0x64؛

const static int DHT_DATA = 0x65؛

حالت های پین نیز در این فایل مشخص شده است. برای DHT ، یک حالت پین جدید ایجاد شد:

ساختار ثابت PIN_MODE_DHT = 0x0F ؛ // پین برای DHT پیکربندی شده است

هنگام افزودن حالت پین جدید ، TOTAL_PIN_MODES باید تنظیم شود:

ساختار ایستا TOTAL_PIN_MODES = 17 ؛

FirmataDefines.h

این فایل باید به روز شود تا پیامهای جدید اضافه شده به FirmataConstants.h را منعکس کند:

#ifdef DHT_CONFIG #undef DHT_CONFIG #endif #define DHT_CONFIG firmata:: DHT_CONFIG // DHT request #ifdef DHT_DATA #undef DHT_DATA #endif #define DHT_DATA firmata:: DHT_DATA_DDEDDEDDEDDEEDDEEDDEDDEE:: PIN_MODE_DHT

FirmataExpress.ino

در این بحث ، ما "نقاط برجسته" تغییرات ایجاد شده در این طرح آردوینو را پوشش خواهیم داد.

برای اینکه FirmataExpress بتواند همزمان از شش دستگاه DHT پشتیبانی کند ، 3 آرایه ایجاد شد تا هر یک از شماره پین های مربوط به دستگاه ، مقدار WakeUpDelay آن و نوع دستگاه ، یعنی DHT22 یا DHT11 را پیگیری کند.

// سنسورهای DHT

int numActiveDHTs = 0 ؛ // تعداد DHT های پیوست شده uint8_t DHT_PinNumbers [MAX_DHTS] ؛ uint8_t DHT_WakeUpDelay [MAX_DHTS] ؛ uint8_t DHT_TYPE [MAX_DHTS] ؛

از آنجا که هر دو نوع دستگاه تقریباً 2 ثانیه بین خواندن نیاز دارند ، باید مطمئن شویم که هر DHT را فقط یک بار در بازه زمانی 2 ثانیه ای خوانده ایم. برخی از دستگاهها ، مانند دستگاههای DHT و سنسورهای فاصله HC-SR04 ، فقط به صورت دوره ای قابل دسترسی هستند. این به آنها فرصت می دهد تا با محیط خود ارتباط برقرار کنند.

uint8_t nextDHT = 0؛ // در dht فهرست شود تا دستگاه بعدی خوانده شود

uint8_t currentDHT = 0 ؛ // پیگیری می کند که کدام سنسور فعال است. int dhtNumLoops = 0 ؛ // تعداد دفعات هدف از طریق حلقه b4 دسترسی به DHT int dhtLoopCounter = 0 ؛ // شمارنده حلقه

پیکربندی و خواندن دستگاه DHT

هنگامی که FirmataExpress یک فرمان SysEx برای پیکربندی پین برای عملکرد DHT دریافت می کند ، تأیید می کند که از حداکثر تعداد دستگاه های DHT تجاوز نشده است. اگر DHT جدید قابل پشتیبانی باشد ، آرایه های DHT به روز می شوند. اگر نوع DHT ناشناخته باشد ، یک پیام رشته SysEx ایجاد می شود و به pymata4 منتقل می شود

مورد DHT_CONFIG: int DHT_Pin = argv [0]؛ int DHT_type = argv [1]؛ if (numActiveDHTs <MAX_DHTS) {if (DHT_type == 22) {DHT_WakeUpDelay [numActiveDHTs] = 1 ؛ } else if (DHT_type == 11) {DHT_WakeUpDelay [numActiveDHTs] = 18 ؛ } else {Firmata.sendString ("خطا: نوع سنسور ناشناخته ، سنسورهای معتبر 11 ، 22 هستند") ؛ زنگ تفريح؛ } // تست سنسور DHT_PinNumbers [numActiveDHTs] = DHT_Pin؛ DHT_TYPE [numActiveDHTs] = نوع DHT؛ setPinModeCallback (DHT_Pin ، PIN_MODE_DHT) ؛

FirmataExpress سپس سعی می کند با دستگاه DHT ارتباط برقرار کند. در صورت وجود خطا ، یک پیام SysEx با داده های خطا تشکیل می دهد و پیام SysEx را به pymat4 ارسال می کند. متغیر _bits داده های داده شده توسط دستگاه DHT را برای پردازش بیشتر توسط pymata4 در صورت تمایل نگه می دارد.

Firmata.write (START_SYSEX) ؛

Firmata.write (DHT_DATA) ؛ Firmata.write (DHT_Pin) ؛ Firmata.write (DHT_type) ؛ برای (uint8_t i = 0؛ i> 7 & 0x7f) ؛ } Firmata.write (abs (rv))؛ Firmata.write (1)؛ Firmata.write (END_SYSEX) ؛

در صورت بازگشت داده های معتبر ، تعداد DHT های فعال افزایش می یابد. همچنین متغیری که تعداد تکرارهای حلقه را برای بررسی قبل از بررسی DHT بعدی برای داده ها ذخیره می کند ، تنظیم می شود. این متغیر اطمینان می دهد که مهم نیست چند DHT به سیستم اضافه شود ، همه آنها در مدت 2 ثانیه خوانده می شوند.

int rv = readDhtSensor (numActiveDHTs) ؛

if (rv == DHTLIB_OK) {numActiveDHTs ++ ؛ dhtNumLoops = dhtNumLoops / numActiveDHTs ؛ // همه خوب است}

اگر یک یا چند دستگاه DHT در عملکرد حلقه طرح تنظیم شده اند ، دستگاه DHT بعدی خوانده می شود. داده های معتبر یا وضعیت خطای آن در قالب یک پیام SysEx به pymata4 بازگردانده می شود:

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 ؛ currentDHT = nextDHT؛ if (nextDHT ++> = numActiveDHTs - 1) {nextDHT = 0 ؛ } if (rv == DHTLIB_OK) {// TEST CHECKSUM uint8_t sum = _bits [0] + _bits [1] + _bits [2] + _bits [3] ؛ if (_bits [4]! = sum) {rv = -1؛ }} // پیام را با وضعیت خطا به عقب ارسال کنید Firmata.write (START_SYSEX)؛ Firmata.write (DHT_DATA) ؛ Firmata.write (پین_ جاری) ؛ Firmata.write (نوع فعلی) ؛ برای (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 مستقیماً از کتابخانه DHTNew گرفته شده است:

int readDhtSensor (int index) {

// INF BUFFERVAR برای دریافت اطلاعات uint8_t mask = 128؛ uint8_t idx = 0؛ // تخلیه خالی // memset (_bits ، 0 ، sizeof (_bits)) ؛ برای (uint8_t i = 0؛ i 5 BYTES برای (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) DHTLIB_ERROR_TIMEOUT؛} اگر ((micros ()-t) 40) {_bits [idx] | = mask؛} mask >> = 1؛ if (mask == 0) // بایت بعدی؟ {mask = 128؛ idx ++؛}} DHTLIB_OK را برگردانید؛}

مرحله 4: اصلاح Pymata4 برای پشتیبانی DHT

private_constants.h

برای پشتیبانی از DHT ، باید پیام های جدید نوع پین و SysEx را به این فایل اضافه کنیم:

# پین حالت INPUT = 0x00 # پین به عنوان ورودی تنظیم می شود 0x06 # پین در تنظیمات I2C گنجانده شده است STEPPER = 0x08 # هر پین در حالت استپر SERIAL = 0x0a PULLUP = 0x0b # هر پین در حالت کشش SONAR = 0x0c # هر پین در حالت SONAR TONE = 0x0d # هر پین در حالت تن PIXY = 0x0e # رزرو شده برای حالت دوربین pixy DHT = 0x0f # DHT sensor IGNORE = 0x7f # پیام های فرمان DHT SysEx DHT_CONFIG = 0x64 # dht فرمان پیکربندی DHT_DATA = 0x65 # dht پاسخ سنسور

نوع پین اضافه شده و دستورات SysEx باید با مقادیر FirmataConstants.h اضافه شده به FirmataExpress مطابقت داشته باشد.

pymata4.py

Pymata4 از یک فرهنگ لغت پایتون برای پیوند سریع پیام دریافتی Firmata با یک کنترل کننده پیام استفاده می کند. نام این فرهنگ لغت report_dispatch است.

فرمت ورودی فرهنگ لغت به شرح زیر است:

{MessageID: [message_handler ، تعداد بایت داده برای پردازش]}

برای مدیریت پیام های DHT ورودی ، یک ورودی به فرهنگ لغت اضافه شد:

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

7 بایت داده در پیام عبارت است از شماره پین دیجیتال آردوینو ، نوع دستگاه DHT (22 یا 11) و 5 بایت داده خام.

روش _dht_read_response خطاهای گزارش شده را بررسی می کند. در صورت عدم وجود خطا ، رطوبت و دما با استفاده از الگوریتم منتقل شده از کتابخانه Arduino DHTNew محاسبه می شود.

مقادیر محاسبه شده از طریق یک روش تماس تلفنی ارائه شده توسط کاربر گزارش می شود. آنها همچنین در ساختار داده pin_data داخلی ذخیره می شوند. آخرین مقدار گزارش شده ممکن است با نظرسنجی pin_data با استفاده از روش dht_read فراخوانی شود.

پیکربندی دستگاه DHT جدید

هنگام اضافه کردن یک دستگاه DHT جدید ، روش set_pin_mode_dht فراخوانی می شود. این روش pin_data را برای پین های دیجیتال به روز می کند. همچنین یک پیام DHT_CONFIG SysEx به FirmataExpress ایجاد و ارسال می کند.

مرحله 5: جمع بندی

همانطور که دیدیم ، افزودن پشتیبانی Firmata برای دستگاه جدید مستلزم این است که کد سرور Arduino FirmataExpress و کد سرویس گیرنده pymata4 مبتنی بر پایتون را تغییر دهید. اشکال زدایی کد FirmataExpress می تواند چالش برانگیز باشد. روشی به نام printData به FirmataExpress اضافه شد تا به اشکال زدایی کمک کند. این روش به شما امکان می دهد مقادیر داده را از FirmataExpress ارسال کرده و آنها را بر روی کنسول pymata4 چاپ کنید.

این تابع هم به اشاره گر به رشته کاراکتر و هم به مقداری که می خواهید مشاهده کنید نیاز دارد. اگر مقدار داده در متغیری به نام argc وجود دارد ، می توانید printData را با پارامترهای زیر فراخوانی کنید.

printData ((char*) "argc =" ، argc) ؛

اگر س questionsالی دارید ، فقط نظر دهید ، خوشحال می شوم پاسخ دهم.

کد نویسی مبارک!

توصیه شده: