در این پروژه با استفاده برد توسعه NodeMcu و نمایشگر OLED آخرین قیمت بیت کوین ( BTC ) را از سایت CoinMarketCap دریافت و نمایش می دهیم. همچنین با ذخیره تعداد دلخواهی از این مقادیر نمودار کندل استیک ( Candlestick ) بیت کوین را در تایم فریم ( Time Frame ) مشخص می سازیم و نمایش می دهیم. برنامه نویسی این پروژه با استفاده از ابزارهای VS Code و Platformio و به زبان ++C نوشته شده است. این پروژه به صورت رایگان در گیت هاب الکترو ولت قرار داده شده است.
سخت افزار مورد نیاز
برای این پروژه از یک عدد برد توسعه NodeMcu با هسته ESP8266 و مبدل CH340 و یک عدد نمایشگر 1.3 اینچی OLED با پروتکل I2C استفاده کردیم که در شکل زیر آن ها و نحوه اتصال آن را مشاهده می کنید.
نصب و راه اندازی Platformio
کار کردن با پلتفورم های متن بازی نظیر آردوینو آن هم در محبوب ترین ویرایشگر کد یعنی VS Code واقعا لذت بخش است. در VS Code کلیه زبان های برنامه نویسی پشتیبانی می شود و افزونه های بسیار کاربردی برای هر زبان برنامه نویسی به طور خاص طراحی شده است که باعث بهبود کدنویسی می گردد. در VS Code علاوه بر قابلیت ویرایش کد میتوان برنامه نوشته شده را اجرا ( Run ) و عیب یابی ( Debug ) کرد. همچنین VS Code دارای قابلیت سرچ پیشرفته در فایل ها می باشد و از ورژن کنترل محبوب Git نیز پشتیبانی می کند. برای نصب این ویرایشگر به >> این لینک مراجعه نمایید.
Platformio یک ابزار کاربردی برای مهندسین سیستم های امبدد می باشد که قابلیت برنامه نویسی با یک کامپایلر بر روی بردهای مختلف به زبان ++C/C را به ارمغان می آورد. در واقع این ابزار مشکل استفاده از چندین کامپایلر مختلف برای استفاده از میکروکنترلرها و بردهای شرکت های مختلف را حل کرده است به گونه ای که با استفاده از آن کدهای شما در تمامی پلتفورم های پشتیبانی شده قابل اجرا می باشد. اکنون Platformio بیش از 1000 برد مختلف از شرکت های سازنده مختلف AVR و ARM را پوشش می دهد. لیست کامل این بردها را می توانید در >> این لینک مشاهده نمایید.
برای نصب Platformio در VS code ابتدا به قسمت Package Manager بروید. دوم عبارت platformio-ide را جستجو کنید. سوم بر روی کلید Install کلیک کند و منتظر شوید تا نصب پایان یابد. شکل زیر این موضوع را نشان می دهد.
اگر نصب به درستی انجام شده باشد؛ در نوار کناری VSCode باید آیکون PlatformIO را مطابق عکس زیر مشاهده کنید.
ایجاد پروژه جدید در Platformio
برای ساخت پروژه ابتدا به صفحه خانه (Home) در PlatfromIO بروید و بر روی کلید New Project کلیک کنید.
بعد از فشردن کلید New Project پنجره ای ظاهر می شود که لازم است نوع سخت افزار و اسم پروژه و البته فریمور مورد استفاده را در آن مشخص کنید ؛
بعد ایجاد پروژه ؛ به سادگی میتوانید پروژه ایجاد شده را در سمت چپ نرم افزار VS Code مشاهده کنید که شامل فایل تنظیمات پروژه ( platformio.ini ) و فایل اصلی کدنویسی پروژه ( Main.cpp ) می باشد.
همانطور که مشاهده می کنید برای پروژه خواندن قیمت کنونی بیت کوین و نمایش نمودار کندل استیک به چند کتابخانه نیاز داریم که عبارتند از :
کتابخانه Arduino Json Parser و کتابخانه U8g2 برای نمایشگر OLED
آخرین نسخه این کتابخانه ها را میتوانید در لینک گیت هاب هر کدام دریافت کنید و به پروژه اضافه کنید. همچنین میتوانید به صورت شکل زیر با وارد کردن لینک گیت هاب با پسوند git. به فایل platformio.ini آن ها را به صورت خودکار به پروژه خود اضافه نمایید.
همچنین برای دیباگ کردن تنظیمات پورت monitor را به صورت شکل فوق اضافه کنید
نوشتن کلاس برای کندل و چارت ( Candlestick class )
در زبان برنامه نویسی ++C ما هر کندل را یک شیء یا کلاس در نظر می گیریم. شکل زیر یک کندل و مشخصه های آن را نشان می دهد.
بنابراین برای ساخت کلاس کندل ویژگی های اصلی آن را به صورت متغیر در نظر می گیریم و به صورت زیر پیاده سازی می کنیم.
همانطور که مشاهده می کنید تابعی برای اضافه کردن قیمت به کندل و همچنین تابعی برای دریافت تعداد قیمت های کندل نیز جزو کلاس کندل می باشد. یک تابع Constructor برای کندل نوشته شده است که دارای یک قیمت Open Price می باشد. از آن جایی که کندل همیشه با اولین قیمت باز می شود این تابع اینگونه نوشته شده است. تعریف این توابع به صورت شکل زیر می باشد.
همانطور که مشاهده می کنید در ابتدای بوجود آمدن شیء کندل چون هنوز کندل به طور کامل تشکیل نشده است همه قیمت ها همان OpenPrice هستند. توجه کنید زمانی کندل کامل می شود که یک زمان مشخص سپری شود. قبل از اینکه این زمان تمام شود بایستی چندین قیمت دیگر به کندل اضافه شود ( برای تشکیل یک کندل باید حداقل 3 قیمت داشته باشیم ) هر بار که قیمت جدید اضافه می شود این قیمت به عنوان Close Price در نظر گرفته می شود اما Close Price نهایی آخرین قیمتی است که کندل در آن قیمت بسته می شود. به مجموعه ای از کندل ها نمودار یا چارت می گوییم. بنابراین شیء چارت از مجموعه ای از اشیاء به نام کندل تشکیل شده است.
برای ساخت یک نمودار به ویژگی های آن توجه می کنیم. ویژگی هایی نظیر تعداد کندل ها، زمان ( TimeFrame )، بالاترین و پایین ترین قیمت ( برای نمایش صحیح چارت ) و … که همه آن ها به صورت زیر پیاده سازی می شود.
همانطور که مشاهده می کنید. برای چارت کندل ها مهم هستند. بنابراین به تعدادی که کندل درون چارت نیاز است که ذخیره شود فضا برای ذخیره قیمت های هر کندل نیاز داریم. همچنین برای هر کندل قیمت های Open,Close,High,Low نیاز است گرفته شود که برای هر یک تابعی در نظر گرفته شده است. برای افزودن یک کندل به چارت هم تابعی در نظر گرفته شده است که یک جا همه قیمت های مورد نیاز کندل را فراهم می کند. برای نمایش هم تابعی با همین عنوان در نظر گرفته شده است.
دریافت قیمت بیت کوین با استفاده از API سایت CoinMarketCap
برای اینکه از آخرین قیمت بیت کوین و سایر رمز ارز ها مطلع شوید به سایت CoinMarketCap.com بروید. این سایت یکی از مرجع های رسمی قیمت و اطلاعات مفید دیگر دنیای رمز ارزها می باشد. اما برای کرفتن API که بتوان با اتصال NodeMcu به این سایت آخرین قیمت بیت کوین را دریافت کرد نیاز است ابتدا در بخش Developers این سایت عضو شوید. برای این منظور به صفحه اصلی سایت بروید و مطابق شکل زیر از منوی Product روی API کلیک کنید.
بعد از ثبت نام در این بخش و ورود به آن و تایید کردن ایمیل خود وارد پنل API می شوید. در این بخش بایستی کدی که در قسمت API KEY برای شما ساخته شده است را کپی کنید و درون فایل coinmarketcap.cpp به صورت شکل زیر قرار دهید.سپس کافیه تا کد رو روی سخت افزار بریزید و نتیجه را مشاهده کنید. فراموش نکنید که بایستی یوزر و رمز عبور wifi خودتون رو در ابتدای فایل main.cpp در قسمت مشخص شده وارد کنید. شکل زیر نتیجه کار را نشان می دهد.
در این پروژه قیمت بیت کوین در SD card نیز ذخیره می گردد اگر نیازی به این کار ندارید خطوط برنامه مربوط به SD card را کامنت کنید. همچنین میتوانید زمان نمایش هر کندل را در چارت با تغییر مقادیر REQUEST_PERIOD_MS و CANDLE_PERIOD_MS درون فایل chart.h تغییر دهید. این پروژه به سبکی متفاوت و جدید در سایت الکترو ولت برای شما ارائه شده است. لطفا نظر خود را در مورد ادامه این گونه پست ها و همچنین تجربیات خود را در کامنت همین پست برای ما بنویسید. موفق باشید.
دیدگاهتان را بنویسید