بورد جدید سونی به نام Spresence قابلیتهای فوقالعادهای داره و Zerynth برنامهنویسی اون به زبان پایتون رو ساده میکنه. Spresence یک بورد توسعه قدرتمند و کم مصرف هست که برای اپلیکیشنهای IoT و چند رسانهای طراحی شده. این میکروکنترلر چندهستهای از 6 هسته ARM Cortex-M4F تشکیل شده و سرعت کلاک اون 156 مگاهرتز هست.
این بورد دارای GNSS، ورودی/خروجی صوتی با وضوح بالا و چند خروجی mic هست که باعث میشن این بورد کاربردهای مختلفی داشته باشه.
سختافزارهای مورد نیاز
-
بورد Spresence سونی
-
MikroE BME280 Weather
-
Adafruit ALS-PT19 Analog Light Sensor Breakout
نرم افزار ها و سرویس های آنلاین
-
Zerynth Studio
ویژگیهای بورد اصلی Spresence:
-
پردازنده CDX5602 سونی
-
فلش مموری 8 مگابایت
-
PCB به همراه یک فوتپرینت کوچک
-
کانکتور دوربین
-
آنتن GNSS (GPS)
-
GPIOهای مختلف (UART، SPI، I2C، I2S)
-
2 کانال ADC
-
کاربرد LED x 4 (سبز)
-
LED روشن و خاموش (آبی)
-
پورت سریاالی USB
Zerynth میان افزاری برای IoT و انقلاب صنعتی چهارم هست. با استفاده از این میان افزار میشه به راحتی و به سرعت میکروکنترلرهای 32 بیتی رو به زبان پایتون برنامهنویسی کرد و اونا رو به فضای ابری متصل کرد. علاوه بر این، این میان افزار میتونه به طور همزمان یک محیط برنامهنویسی به زبان پایتون/C ارائه بده. برای آشنایی بیشتر با این میان افزار میتونین از Zerynth Studio کمک بگیرین، علاوه بر دانلود رایگان، چند پلتفرم (cross-platform) و یک IDE قدرتمند هم داره.
در این مقاله آموزشی نحوهی استفاده از Spresence به همراه Zerynth رو به شما نشون میدیم. در این مقاله نحوهی اجرا Multiblink، نمونههای ADC و I2C رو به شما نشون میدیم.
ایجاد پروژه
برای اینکه بتونین بورد Spresence رو به همراه Zerynth Studio استفاده کنین، باید طبق مراحل زیر پیش برین:
اول از همه، باید Zerynth Studio رو دانلود و نصب کنین.
بعد از اون باید Zerynth Studio رو اجرا کنین و یک حساب کاربری ایجاد کنین ( اگه حساب دارین فقط کافیه وارد حسابتون بشین).
حالا بورد رو از طریق پورت اصلی USB وصل کنین. بسته به سیستمی که ازش استفاده میکنین ممکنه به درایورها نیاز داشته باشین. برای کسب اطلاعات بیشتر اسناد رسمی رو مطالعه کنین. اگر درایورها به درستی نصب شده باشن، Zerynth Studio دستگاه Spresence رو تشخیص میده.
- با کلیک روی کلید info و سپس Burn Bootloader، Spresense Bootloader رو burn کنین.
- با کلیک روی کلید Z از Zerynth Studio دستگاه رو ثبت کنین.
- یک بار دیگه روی کلید Z کلیک کنین و یک ماشین مجازی برای دستگاه ایجاد کنین.
- یک بار دیگه روی کلید Z کلیک کنین و دستگاه رو مجازیسازی کنین.
نمونه Multi-Blink
در قدم اول، نمونه Multiblink از کتابخانه Example Library پلتفرم Zerynth رو کلون میکنیم. برای انجام این کار، فقط کافیه Multiblink رو در این کتابخانه جستوجو کنین و نمونه MultiBlink رو انتخاب کنین و گزینه clone رو انتخاب کنین.
همونجوری که میبینین کد خیلی ساده است. سه تا thread به صورت موازی اجرا شدن که هر کدوم از اونا با فواصل مشخص یک LED رو در حالت چشمکزن قرار میدن.
# Initialize the digital pins where the LEDs are connected as output pinMode(LED0,OUTPUT) pinMode(LED1,OUTPUT) pinMode(LED2,OUTPUT) # Define the 'blink' function to be used by the threads def blink(pin,timeON=100,timeOFF=100): # delayON and delayOFF are optional parameters, used as default # if not specified when you call the function while True: digitalWrite(pin,HIGH) # turn the LED ON by making the voltage HIGH sleep(timeON) # wait for timeON digitalWrite(pin,LOW) # turn the LED OFF by making the voltage LOW sleep(timeOFF) # wait for timeOFF # Create three threads that execute instances of the 'blink' function. thread(blink,LED0) # D2 is ON for 100 ms and OFF for 100 ms, the default values of delayON an delayOFF thread(blink,LED1,200) # D8 is ON for 200 ms and OFF for 100 ms, the default value of delayOFF thread(blink,LED2,1000,200) # D5 is ON for 500 ms and OFF for 200 ms
فقط کافیه پینهای پیشفرض رو با پینهای LED بورد Spresense که میخوایم چشمک بزنن جایگزین کنیم (که در طرح پایه هم نشون داده شده)، کد آماده استفاده است.
پس از اصلاح کد میتونیم اون رو به بورد Spresence منتقل (uplink) کنیم.
حالا LED0، LED1 و LED2 در فوصل زمانی مختلف چشمک میزنن.
ADC به همراه سنسور آنالوگ
در این مرحله قصد داریم از ADC در بورد Spresense استفاده کنیم. برای انجام این کار به یک سنسور آنالوگ نیاز دارین. ما از سنسور ALS-PT19 Light آدافروت (Adafruit) استفاده میکنیم.
بعد از اینکه سنسور رو به پینهای 3.3V و GND برد وصل کردیم، خروجی اون رو به پین آنالوگ A0 برد Spresense وصل میکنیم.
حالا نمونهی Analog to Digital Acquisition از Example Library کلون میکنیم، برخی از کدها رو حذف میکنیم چون فقط میخوایم برای تست سنسور، مقدار سنسور رو در سریال مانیتور پرینت کنیم.
کد اون رو در قسمت زیر میتونین مشاهده کنین.
import streams # import the streams module import adc # import the adc driver # create a stream linked to the default serial port streams.serial() while True: # Basic usage of ADC for acquiring the analog signal from a pin value = adc.read(A0) print(value) sleep(300)
پس از ویرایش کد میتونیم اون رو به برد Spresense منتقل (uplink) کنیم.
بعد از باز کردن Serial Monitor در Zerynth Studio خروجی خام سنسور باید بهمون نشون داده بشه، اگر مانع برخورد نور با سنسور بشیم، مقدار اون کاهش پیدا میکنه و طبق انتظار عمل میکنه.
ارتباط I2C با سنسور آب و هوا
در این قسمت قراره یک سنسور دیگه رو تست کنیم، این بار قراره سنسور رو با استفاده از I2C bus که در بورد Spresense قرار داره تست کنیم.
یک بار دیگه، یک نمونه رو از Example Library کلون میکنیم؛ ما از سنسور BME280 محصول Bosch استفاده میکنیم که Mikroelektronika اون رو روی Weather Click وصل کرده. Weather Click یک برد سنسور ساده است که سه تا مقدار رو (دما، رطوبت و فشار) رو از طریق I2C ارائه میده.
در قدم اول باید پینهای SDA و SCL رو وصل کنین تا ارتباط I2C با Spresense برقرار بشه. حالا پین 3.3V و GND رو برای منبع تغذیه وصل میکنیم. برای کسب اطلاعات بیشتر در مورد بورد به طرح پایه نگاه کنین.
حالا نمونه get values رو از کتابخانه BME280 جستوجو کنین و اون رو کلون کنین.
import streams from bosch.bme280 import bme280 streams.serial() try: # Setup sensor print("start...") bme = bme280.BME280(I2C0) print("Ready!") print("--------------------------------------------------------") except Exception as e: print("Error: ",e) try: while True: temp, hum, pres = bme.get_values() print("Temperature:", temp, "C") print("Humidity:", hum, "%") print("Pressure:", pres, "Pa") print("--------------------------------------------------------") sleep(5000) except Exception as e: print("Error2: ",e)
بعد از کلون نمونه میتونیم مستقیماً اون رو به بورد منتقل کنیم (نیازی به ویرایش کد نیست).
حالا اگه سریال مانیتور رو باز کنیم میبینیم که مقادیر صحیح دما، رطوبت و فشار یک بار دیگه نشون داده میشن.
کد پایتون AnalogToDigitalAcquisition.py
import streams # import the streams module import adc # import the adc driver # create a stream linked to the default serial port streams.serial() while True: # Basic usage of ADC for acquiring the analog signal from a pin value = adc.read(A0) print(value) sleep(300)
MultiBlink.py کد پایتون
# Initialize the digital pins where the LEDs are connected as output pinMode(LED0,OUTPUT) pinMode(LED1,OUTPUT) pinMode(LED2,OUTPUT) # Define the 'blink' function to be used by the threads def blink(pin,timeON=100,timeOFF=100): # delayON and delayOFF are optional parameters, used as default # if not specified when you call the function while True: digitalWrite(pin,HIGH) # turn the LED ON by making the voltage HIGH sleep(timeON) # wait for timeON digitalWrite(pin,LOW) # turn the LED OFF by making the voltage LOW sleep(timeOFF) # wait for timeOFF # Create three threads that execute instances of the 'blink' function. thread(blink,LED0) # D2 is ON for 100 ms and OFF for 100 ms, the default values of delayON an delayOFF thread(blink,LED1,200) # D8 is ON for 200 ms and OFF for 100 ms, the default value of delayOFF thread(blink,LED2,1000,200) # D5 is ON for 500 ms and OFF for 200 ms
کد پایتون get_values.py
import streams from bosch.bme280 import bme280 streams.serial() try: # Setup sensor print("start...") bme = bme280.BME280(I2C0) print("Ready!") print("--------------------------------------------------------") except Exception as e: print("Error: ",e) try: while True: temp, hum, pres = bme.get_values() print("Temperature:", temp, "C") print("Humidity:", hum, "%") print("Pressure:", pres, "Pa") print("--------------------------------------------------------") sleep(5000) except Exception as e: print("Error2: ",e)
جمع بندی
این بورد جذاب میتونه جایگزین دو برد آردوینو و رزبری پای باشه چرا که آردوینو ممکنه برای برخی کاربردها کافی نباشه و رزبری پای هم بورد گرانی هست و این ماژول جدید شرکت سونی میتونه نیازهای ما به این دو بورد رو رفع کنه. در کنار قیمت مناسب، کارایی و همچنین مصرف انرژی بسیار پایینی داره. همین موضوع میتونه در انتخاب این بورد نقش مهمی داشته باشه. قابلیت های ویژه بورد توسعه SPRESENSE مانند پشتیبانی از دوربین و سامانه ناوبری جهانی GNSS و امکان موقعیت یابی با GPS آن را به یک ابزار مهم و جذاب در دنیای IoT تبدیل کرده که در آینده تلاش می کنیم پروژه های جذابتری با استفاده از این بورد برای شما آماده کنیم.