Windows 10 IoT
مقدمه
وقتی حرفاز رزبری پای میشود، ناخودآگاه بهیاد لینوکس و دنیای متنباز می افتیم، قطعا اگر دنیای متنباز وجود نداشت، شاهد اینچنین پیشرفتهای تکنولوژیکی نبودیم، شاید گوشی هوشمندی با سیستم عامل اندروید وجود نمیداشت یا سیستمهایی اینچنین کوچک و انعطافپذیر و قدرتمند. کمکم با رشد چشمگیر باز سیستمهای توکار(embedded) و داغشدن مباحثی مثل خانه هوشمند و سیستمهای IOT، بلاخره غول دنیای نرمافزار سورس بسته (مایکروسافت) به دنیای متن باز علاقه نشانداد و برای اولینبار سیستم عامل خود را تغییر داد. البته قبلا بارها و بارها شاهد کپیبرداری مایکروسافت از ایدههای متن باز و استفادهاز این ایدهها در محصولات این شرکت بودهایم اما این اولینباری است که مایکروسافت سیستمعامل ویندوز را برروی یک سختافزار متن باز با معماری ARM پیادهسازی میکند. البته ویندوز موردنظر با آن چیزیکه از ویندوز میشناسید کاملا متفاوت است. تنها چیزی که پیادهسازی شدهاست هسته سیستمعامل است. بهاینمعنا که شما قادر خواهیدبود بااستفادهاز پلتفرم برنامهنویسی ماکروسافت (یعنی داتنت و ویژوال استودیو) برنامه موردنظر خود را برای رزبری پای اجرا کنید. همیشه یکیاز دغدغههای اصلی افراد تازهکاری که قصد استفادهاز بردهای رزبری پای را دارند، مساله نوشتن برنامه است، چراکه بیشتر افراد با ساختار لینوکس آشنایی لازم را ندارند و همچنین با زبانهایی مثل C یا پایتون زیاد آشنا نیستند و شاید نوشتن یک برنامه چه کامندلاین چه گرافیکی برایشان یک کار پیچیده بهحساب بیاید. بااستفادهاز ساختار ارائهشده ازسوی ماکروسافت، احتمالا افراد بیشتری قادربه برنامهنویسی برای اینگونه بردها باشند. در ادامه بهنحوه راهاندازی ویندوز10 برای برد رزبری پای میپردازیم و همچنین آموزش خواهیمداد که چگونه بااستفادهاز ویژوال استودیو قادرخواهیدبود برنامه موردنظر خود را برای کنترل ورودی و خروجیها بنویسید. پس با ما همراه باشد.
رزبری پای و نصب ویندوز 10
در اینمقاله قصدداریم روش نصب ویندوز ۱۰ برروی رزبری را آموزش دهیم و سپس برنامهای نوشته و روی آن تستکنیم. قبلاز درگیرشدن با ویژگیهای فنی، ملزومات موردنیاز سیستمعامل را در زیر لیست میکنیم:
- ویندوز ۱۰ نصبشده برروی کامپیوتر
- رزبری ۲ بههمراه منبع تغذیهی مناسب
- کارت حافظه با حداقل ۸ گیگ ظرفیت
- کابل HDMI
- کابل شبکه
- یک مانیتور برای اتصالبه برد رزبری
برای نصب بهصورت عرف به یک کامپیوتر که سیستمعامل آن ویندوز ۱۰ باشد احتیاج داریم. (راههایی برای نصب در دیگر سیستمعاملها مثل لینوکس و ورژنهای قبلی ویندوز وجود دارد، ولی ما از روش رسمی و معمول آن استفاده میکنیم.)
آمادهسازی شرایط
قدم اول تهیهی برد رزبری است. در مرحلهیبعد ابزارها و سیستمعامل را از اینترنت دانلود میکنیم. سیستمعامل بهصورت image و با نام “IOT Core Rpi” دریافت میشود. در ویندوز این “ایمج” را با دوبار کلیککردن روی آن، بهصورت درایو مجازی، باز میکنیم. فایل اجرایی با نام “Windows_ 10_IoT_Core_Rpi2” در آن قرار دارد. فایل را نصب میکنیم. پساز نصب، ابزارهای موردنیاز در مسیر “C:Program Files (x86)Microsoft IoTFFURaspberryPi2” قرار میگیرد.
فایل موردنظر ما “FLASH.FFU” نامدارد. فرمت FFU توسط مایکرو سافت برای نصب ویندوز ساختهشدهاست. برایاینکه کارت حافظه را برای بوتکردن رزبری آمادهکنید، لازماست “WindowsIoTImageHelper” اجرا کنید که یک رابط برای ریختن فایل FFU برروی کارت حافظه است.
آدرس ایمج را داده و گزینه “FLASH” را انتخاب میکنیم. پساز اندکی صبر، پروسه تمام میشود.
اولین راهاندازی ویندوز 10
وقتیکه پروسهی نوشتن برروی کارت حافظه تمامشد، آنرا به رزبری متصل میکنیم. برای اولین راهاندازی لازماست کمی تنظیمات در زمینههای زبان و شبکه وایفای انجامدهیم. پساز بوتشدن، صفحهی زیر نمایش داده میشود:
در این ویندوز سیستم “کاشی” مشابه با ویندوز ۸ وجود ندارد و حتی خبری از منوی استارت هم نیست. همانطورکه در پایین صفحه هم مشخص شدهاست، این نسخه از ویندوز برای توسعهدهندگان ارائهشده و هدف آن نصبو اجرای برنامههای نوشتهشده با ویژوال استودیو است.
نصب و راهاندازی برنامهی خودمان در ویندوز رزبری پای
محیط رسمی توسعهی مایکروسافت، ویژوال استودیو است که خوشبختانه آنرا بهصورت رایگان ارائهکردهاست. پس آنرا دانلود کرده و برروی کامپیوتر خود نصب میکنیم. خب اگر تااینجا مراحل گفتهشده را صحیح پیشرفتهباشیم باید ابزارهای زیر را در اختیار داشتهباشیم:
- یک برد رزبری که سیستمعامل “Windows 10 IoT Core” روی آن نصب شدهاست. (رزبری را به موس و کیبورد و یک مانیتور متصلکنید)
- یک کامپیوتر که روی آن ویژوال استودیو نصب شده است.
حتما لازماست برای انجامکار رزبری و کامپیوتر به یک شبکه متصل شدهباشند. درصورتیکه این امر انجام شدهباشد باید رزبری را در ابزار “Windows IoT Core Watcher” ببینیم. این ابزار در زماننصب “IOT Core Rpi” بصورت خودکار نصبشدهاست. مشاهده رزبری بهمعنی نصب صحیح و آمادهیکار بودن است.
ویژوال استودیو را اجرا کرده و یک پروژهی “Blank App” ایجادکنید و آنرا توسعهدهید. برای این سیستم در دو روش میتوان برنامه نوشت: 1. با رابط کاربری مثل موس، کیبرد و مانیتور و 2. بدون رابط کاربری.
در اینجا بیشتر برنامههای بدون رابط کاربری مثل موس و کیبورد مدنظر است (مانند برنامههایی که برای آردوینو مینویسیم)؛ برنامههایی که بهطور مستقیم با سنسورها و ورودی و خروجیها کار میکنند.
ویژوال استودیو برنامه را ایجاد میکند و تعدادی فایل هم همراه با آن میسازد. در این بین فایل “MainPage.xaml” را نیز پیدا خواهید کرد. فایلهای XAML برای توصیف رابط کاربری استفاده میشوند. در این مثال، این فایل فقط اسکلتبندی پایه را شامل میشود و هیچ محتوایی ندارد. برای اولین تست میخواهیم پیام “Hello World” در وسط صفحه بهنمایش دربیاید. همانطورکه در کد زیر نشانداده شدهاست، محتوای “MainPage.xaml” را تغییر میدهیم:
<Page x:Class=”App2.MainPage” xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” xmlns:d=”http://schemas.microsoft.com/expression/blend/2008” xmlns:local=”using:App2” mc:Ignorable=”d”> xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006” <TextBlock Foreground=”Blue” HorizontalAlignment=”Center” <Grid Background=”{ThemeResource ApplicationPageBackgroundThemeBrush}”> VerticalAlignment=“Center” FontSize=“64”>Hello World</TextBlock> </Page> </Grid>
در آن از یک تکست باکس استفادهکردیم و رنگ آنرا با دستور (“with Foreground=”Blue) آبی کردهایم و توسط دستورات ( “HorizontalAlignment=”Center) و (“VerticalAlignment=”Center) آنرا در مرکز صفحه قراردادهایم. اولین برنامهی ما آمادهاست. برای تستبرنامه در ویژوال استودیو ابزارهایی قرار دادهشدهاست. برای تست بهتر است برنامه را ابتدا در کامپیوتر اجرا کنیم. برای اینمنظور کافیاست دکمهی اجرا که بهشکل یک فلش کوچک است را بزنیم:
درصورتیکه روال را درست انجامدهید یک صفحه باز میشود و در مرکز آن نوشتهی آبی رنگ “Hello World” نمایش داده میشود. نتیجهی خوبی است ولی هدف ما اجرای برنامه روی رزبری بود. برای اینمنظور یک قدم دیگر لازماست: در کنار منویی که گزینه اجرا قرار دارد، میتوانید انتخابکنید که نرمافزار چه نوع کامپایلی را برای برنامه انجامدهد. همانطورکه میدانید رزبری براساس تکنولوژی ARM ساخته شدهاست. بنابراین از منو این معماری را انتخاب میکنیم. در کنار این منو، منوی دیگری نیز وجوددارد که درحالحاضر در آن گزینه “Local Computer” انتخابشدهاست.
از آنجاییکه ما میخواهیم برنامه را برروی رزبری اجراکنیم گزینهی “Remote Computer” را انتخاب میکنیم. با انتخاب این گزینه یک باکس نمایش داده میشود که مشخصات آیپی برد را میخواهد. آن را خالی بگذارید و گزینهی اجرا را بزنید. این بار نوشته در مرکز مانیتوری که به رزبری متصل است نمایش داده میشود. هرچند مراحل انجامکار تابهاینجا بسیارساده بود ولی ما بهمرحلهی بسیارمهمی رسیدیم؛ بااستفادهاز اینروش میتوانیم برنامهها را در کامپیوتر شبیهسازی و درنهایت روی رزبری اجرا کنیم.
در قدمبعدی سطح کار را کمی گسترش میدهیم تا بتوانیم یک خروجی را کنترلکنیم. برای مثال یک LED را به پایه ۱۸ رزبری مانند شکل متصلکرده و در برنامه توسط یک کلید آن را کنترل میکنیم:
برای ریختن برنامه روی رزبری باید مراحل زیر را طی کنید: در ویژوال استودیو در منوی “View Solution Explorer” روی “References” کلیکراست کنید و اجازهدهید پنجره context menu appear باز شود. در این پنجره گزینهی “Add Reference” را انتخاب کنید در پنجرهی بازشده در سمت چپ، گزینهی “Windows Universal” انتخابکنید و در باکس جستوجو “IoT” را تایپ کنید. درنتایج جستجو “Windows IoT Extension SDK” را انتخابکنید و گزینه OK را بزنید تا نصبشود.
بسته “Windows IoT Extension SDK” تمام ملزومات لازم برای کارکردن با سختافزار را در اختیار ما قرار میدهد. ما از آن برای کنترل GPIO استفاده میکنیم. برنامهیزیر را در MainPage.xaml مینویسیم:
<Page x:Class=”App2.MainPage” xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” xmlns:d=”http://schemas.microsoft.com/expression/blend/2008” xmlns:local=”using:App2” mc:Ignorable=”d”> xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006” <StackPanel HorizontalAlignment=”Center” VerticalAlignment=”Center”> <Grid Background=”{ThemeResource ApplicationPageBackgroundThemeBrush}” > <TextBlock Foreground=”Blue” HorizontalAlignment=”Center” </StackPanel> FontSize=”48”>LED Control</TextBlock> <Button Click=”Button_Click” HorizontalAlignment=”Center” Margin=” 0,50,0,0” FontSize=”64” >OFF</Button> </Grid> </Page>
یک عنصر StackPanel اضافه میکنیم که یک نوع عنصر کنترل محتوا است که بهطورخاص امکان قراردادن عناصر را در یک ستون یکی پساز دیگری را ممکن میکند. درون این StackPanel همان TextBlock موجود در مثالاول وجوددارد که نقش عنوان صفحه را بهعهده دارد. در زیر آن یک دکمه وارد میکنیم که یک کنترل فعال است. ویژگی “Click=”Button_Click نشان میدهد که وقتی دکمه فشرده میشود متدی با نام Button_Click اجرا میشود. برنامهیزیر را برای رویداد دکمه مینویسیم:
bool state = false; const int LED_PIN = 18; GpioPin pin; private void Button_Click(object sender, RoutedEventArgs e) { state = !state; pin.Write(pinValue); var pinValue = state ? GpioPinValue.High : GpioPinValue.Low; } Button btn = (Button)sender; btn.Content = state ? “ON” : “OFF”;
این دکمه بهعنوان سوئیچ عمل میکند که وضعیت آن را با متغیر “state” مشخص میکنیم. برچسب LED برای حالت روشن یا خاموش با “ON” یا “OFF” مشخص میشود. کنترل GPIO بااستفادهاز آیتم pin انجام میشود. در کد زیر این آیتم را تعریف و پیکربندی میکنیم:
private void InitGPIO() { var gpio = GpioController.GetDefault(); pin = gpio.OpenPin(LED_PIN); pin.SetDriveMode(GpioPinDriveMode.Output); pin.Write(GpioPinValue.Low); }
تابع InitGPIO نقش پایهای که به LED متصلشدهاست را تعیینکرده و آنرا پیکربندی میکند. در این تابع، پایه ۱۸ در حالت خروجی و سطح پایین بهصورت پیشفرض مقداردهی شدهاست.
پنل پیکربندی رزبری پای در ویندوز
توسعهی برنامه با رزبری ممکناست کمی پیچیده باشد ولی ارتباط با سختافزار آن بسیارساده است. Windows 10 IoT یک رابط وب را برای تنظیمات خود درنظر گرفتهاست که از آدرسزیر میتوانید به آن دسترسی داشتهباشید : http://minwinpc.local:8080 میتوان این آدرس را تغییر داد و یا بهجای minwinpc.local از آدرس آیپی برد استفادهکرد. نام یوزر بهصورت پیشفرض “Administrator” و پسورد آن “p@ssw0rd” است. توصیه میکنیم رمز پیشفرض را عوضکنید. در رابط کاربری گزینههای جالبی مانند گزارشی از فرایندهای اجراشده، تجزیه و تحلیل بار CPU و مصرف RAM و توابع جالب دیگر وجود دارد.
عکس ۱۱
فایلهای دانلودی موردنیاز
از لینک زیر میتوانید برنامهی نوشتهشده برای کنترل LED را دانلود کنید:
rpi-universalapp-ledsample-master
منبع:سیسوگ