یک ایده ی بامزه ی اینترنت اشیا(iot) با رزبری پای، پایتون و چاشنی گوگل! (قسمت اول)

بازم سلام!همین اول بگم که در این قسمت شما قراره یه وسیله رو با ارسال یک درخواست تو مرورگر کنترل کنین :دی.من کلا به خیلی چیزا علاقه دارم و دنبال میکنم. حداقل برای ارضای حس کنجکاوی خودمم که شده باید حتما هر چند وقت یبار حداقل تفریحی یه کار جدید و از نظر خودم جذاب انجام بدم!یکم قبل مثل خیلی ها به اینترنت چیزها،اشیا یا همون IoT علاقه ی بیشتری پیدا کردم و این باعث شد یکم پول خرج کنم! گشتم و گشتم یه رزبری پای پیدا کردم که خداروشکر قیمتش بهتر از بازار برام دراومد(تحریم ها که اصلا اثری نداره :دی ). رزبری پای که دستم رسید کارای مختلفی باهاش کردم و یجورایی توش سَرَک کشیدم. یه کارای ساده و عادی باهاش کردم که یکم حالمو خوب کرد. کم کم دیدم میشه کارای باحال تریم کرد!!من که اصولا آدم خسته ایم، خیلی دوست دارم یکم راحت تر بشه کارهارو انجام داد. خب طبیعتا رفتم سراغ چیزی که اکثر افراد با اون هدف میان سمت اینترنت چیزها(حداقل مبتدی ها)!قدم اول این بود که یه چراغ رو بتونم خاموش روشن کنم که طبیعتا با چند خط پایتون حل میشه و کار خاصی نداره. البته در کل کاری که امروز میخوام در موردش تقریبا توتوریال وار بنویسم هم در کل سخت نیست ولی یجورایی جالبه!خب بریم سر اصل مطلب:اولا که شما باید یسری اصول الکترونیک(نگران نباشین ساده ان!) رو بلد باشید که ماشالله گوگل در خدمت بشریته! اما خب تو شرایط من که با رزبری پای 3 مدل بی کار میکنم، باید حداقل کار با پین های GPIO رو بلد باشم! راستی یادتون باشه رزبری پای رو اول باید راه اندازی کنین(با نصب توزیع لینوکس مخصوصش یعنی Raspbian ) اصولا پایتون و پکیج های مربوط به کنترل GPIO از قبل روی رزبیَن نصب شده و لازم نیست کاری بکنین. فقط کافیه یکم از پایتون سر در بیارین که البته اگه سرم در نمیارین مهم نیست چون کداشو میذارم :دی ولی بهتره برای کنترل اعصابتون موقع کار بلد باشین دیگه :دی .رزبری پای 3 مدل بی 40 پین داره که اینجا یه عکس از شماتیکش رو گذاشتم:ترتیب و کاربرد پین های GPIO در رزبری پای 3 مدل بیاگه مدار منطقی خونده باشین اصولا باید میدونین که GND چیه یا سریال پورت چیه و یا ورودی دیجیتال و آنالوگ! یکم در موردش مرور کنین بد نیست.در کل بگم که میتونین از کل پین هایی که به رنگ نارنجی هستن برای ارسال یا دریافت اطلاعات دیجیتال(0 و 1) استفاده کنین! خب کاربردش چیه؟؟ مسلما وقتی میخوایم یک چراغ(یا رله یا هر چیزی) رو کنترل کنیم باید بتونیم اطلاعات رو بهش ارسال یا ازش دریافت کنیم(بستگی به اون وسیله و کاربردش داره). در مثال ما که یک چراغ ساده هست، فقط کافیه اطلاعات 0 یا 1 رو برای کنترل روشن یا خاموش بودن ارسال کنیم.خب من اینجا یک دیود نورانی ساده که با vcc یا همون 5 ولت کار میکنه(البته به پایه کوتاه ترِش یا همون پایه ی منفی بهتره یه مقاومت 1 کیلو اهمی وصل کنید که نسوزه بدبخت!) رو استفاده کردم. پایه ی منفی رو به یکی از پین هایی که با GND مشخص شده وصل میکنم. پایه ی مثبت رو هم به هرکدوم از پین های نارنجی رنگ که دلم میخواد وصل میکنم :دی (من اینجا پایه ی منفی رو به پین شماره 6 و پایه ی مثبت رو به پین شماره ی 12(GPIO18) وصل کردم)!خب اتصالاتم درسته. الان من میخوام کاری کنم که با استفاده از مرورگر خود رزبری پای یا بقیه ی کامپیوتر هایی که با رزبری شبکه شدن(همه به یک اکسس پوینت وصل شدن) بتونم با ارسال یک درخواست HTTP به وب سروری که قراره روی رزبری پای راه بندازم، اون چراغ رو خاموش یا روشن کنم!خب همونطور که گفتم ما اول نیاز داریم که یک وب سرور راه بندازیم. باید بگم شما میتونید از هر تکنولوژی و زبانی که دلتون میخواد(البته اگه بتونه با GPIO ارتباط برقرار کنه) کار کنید اما من اینجا چون راحت تره ترجیح میدم از پایتون عزیز استفاده کنم و البته از فریمورک محبوبش یعنی Flask!فلَسک رو میتونید به راحتی روی رزبری نصب کنید. با pip(پکیج منیجر پایتون) کارتون راحت تر هم میشه. در مورد نصب فلَسک مطلب زیاده. میتونید از این لینک استفاده کنید :)خب قدم بعدیمون میشه راه اندازی وب سرور و نوشتن کدهامون:ما در این پروژه نیازی به یو آی نداریم پس ویو ای رو نخواهیم داشت! یک فایل پایتون بسازین و داخلش این کدهارو بنویسین:from flask import Flask import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) #set numbering mode of GPIO pins GPIO.setwarnings(False) #don't show warnings! GPIO.setup(18, GPIO.OUT) #set GPIO 18(pin number 12) as output pin app = Flask(__name__) @app.route("/<status>") #status is a wildcard here! it can be any string def index(status): #status is a variable same as the wildcard if status == "on": GPIO.output(18, GPIO.HIGH) #giving 5 volts to GPIO18 pin. it will turn the LED on! return "on" #prints "on" on the browser! elif status == "off": GPIO.output(18, GPIO.LOW) #giving 0 volts to GPIO18 pin. it will turn the LED off! return "off" #prints "off" on the browser! else: return "error!" #prints "error" on the browser! if __name__ == "__main__": app.run(host='0.0.0.0', port=80, debug=True) #it will run the web server on localhost:80!کامنت هارو حتما نگاه کنین تا متوجه کاربرد هر خط بشین. همونطور که میبینین روند کار خیلی ساده هست.بعد از نوشتن کد ها، فایل رو ذخیره کنید و یک ترمینال جدید باز کنین و برین به مسیری که فایلتون رو اونجا ساختین! حالا باید وب سرور رو اجرا کنین:$ sudo python myfile.pyوقتی وب سرور اجرا شد یه تب جدید تو مرورگر باز کنین و به این ادرس یک درخواست بفرستین:http://localhost:80/onاگه همیه چیز درست سِت شده باشه باید چراغ روشن بشه و اگه بعد از / کلمه ی on رو به off تغییر بدین و دوباره درخواست رو بفرستین چراغ خاموش میشه :دی. خب تبریک میگم الان شما دقیقا یک پروژه ی خیلی ساده ی مبتنی بر اینترنت چیزهارو انجام دادین :دی.قدم بعدی که تو بلاگ پست بعدی دنبال میکنیم کمی خفن تر کردن همین پروژه با دستیار صوتی گوگل و روی اینترنت به صورت عمومیه D:نظراتتون مایه ی شادکامیه قطعا :)