به نام خالق بی نیاز : ایجاد ارتباط بین رزبری پای و ربات پیام رسان سروش + پروژه دوربین مداربسته؛ شاید تا همین چند سال پیش، کسی فکرش رو نمی کرد که وسایل و ابزار رو بشه از جایی بسیار اونورتر!!! در مشت گرفت و کنترل کرد!! ولی امروزه به یمن وجود شبکه های جهانی و یا حتی ملی، این موضوع، یه امر عادی به نظر میاد؛ پر تکرار ترین اصطلاح در این زمینه هم اینترنت اشیاء هست ( IOT ) به زبون ساده، کنترل کردن اشیاء از طریق اینترنت؛ در این مطلب قصد داریم رزبری پای مجهز به دوربین ( شیء ) رو به بازوی سروش ( بستر ) ربط بدیم و به عنوان یک فرد دور از شیء ( کاربر ) اطلاعات ارسالی از شیء رو دریافت کنیم، شیء رو کنترل کنیم و…
ساخت ربات در پیام رسان سروش
ابتدا باید یه دونه بازو ( ربات ) در سروش بسازید؛ سروش رو باز کنید و به آدرس زیر مراجعه کنید @mrbot، در صفحه پیش رو، بعد از لمس شروع، "ایجاد بات" رو انتخاب کنید و مراحل ساخت ربات با شناسه دلخواه رو تا آخر پیش بروید؛ در انتها، یک آدرس بات مثل @abcdefg و یه توکن بات مثل as9adsfsdf5sdfsdfsdf4sdfsdfWF6565565dsdfkhjsdfnsdnfjshdfjsdjfnsjfbb652 در اختیار شما قرار میده؛ حالا به شناسه ای که ساختید مراجعه کنید و شروع رو لمس کنید؛ بازو ( ربات ) شما آماده سرویس دهی شد؛ حالا رزبری پای رو روشن کنید و اینترنتش رو روبراه کنید و در ترمینال بزنید :
1 2 |
sudo apt-get update sudo apt-get upgrade |
ما از کتابخونه آماده شده به زبان پایتون استفاده می کنیم.
نصب کتابخانه کار با ربات سروش در رزبری پای
در ترمینال بزنید :
1 2 3 |
git clone https://github.com/soroush-app/bot-python-sdk cd bot-python-sdk pip install -r requirements.txt |
رزبری رو ریست کنید؛ حالا ترمینال رو باز کنید و با دستر زیر به فولدر bot-python-sdk وارد بشید :
1 |
cd bot-python-sdk |
به فولدر کتابخونه بازوی سروش خوش آمدید!!! حالا در ترمینال یه پروژه پایتونی میسازیم :
1 |
sudo nano get-chat-id.py |
اینتر و بعدش متن زیر رو درش کپی می کنیم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from sys import path path.append('..') from client import Client bot_token = 'توکن بات بازوی سروشتون' bot = Client(bot_token) try: messages = bot.get_messages() for message in messages: print("New message from {} \nType: {}\nBody: {}" .format(message['from$ except Exception as e: print(e.args[0]) |
بعدش با Ctrl+x و y و بعدش Enter ذخیره اش می کنیم؛ حالا با دستور زیر برنامه رو اجرا می کنیم :
1 |
sudo python get-chat-id.py |
پس از رویت پیام connected successfully در ترمینال، گوشی تون رو بردارید و سروش رو باز کنید و به شناسه بازویی که قبلا ساختید مراجعه کنید و یه پیام متنی ( انگلیسی ) بنویسید و ارسال کنید؛ پس از ارسال پیام توسط گوشیتون، در ترمینال رزبری پای، پیام های زیر رو میتونید بخونید :
مقدار Chat ID، آدرس چت بین صفحه بازوی شما و اکانت سروش گوشی شما است؛ بعدا برای ارسال از بازو ( رزبری پای ) به گوشی تون بهش نیاز پیدا می کنید؛ در ترمینال، Ctrl+z بزنید و برنامه رو ببندید.
ارسال اطلاعات از رزبری پای به سروش
در ترمینال بزنید :
1 |
sudo nano send-message.py |
و متن زیر رو درش کپی کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from sys import path path.append('..') from client import Client bot_token = ' توکن بات بازوی سروشتون ' bot = Client(bot_token) try: to = ' که قبلا به دست آوردیمChat ID ' [error, success] = bot.send_text(to, 'My First Message Is : Hello') if success: print('Message sent successfully') else: print('Sending message failed: {}' .format(error)) except Exception as e: print(e.args[0]) |
بعدش با Ctrl+x و y و بعدش Enter ذخیره اش می کنیم؛ سپس با دستور زیر اجراش میکنیم :
1 |
sudo python send-message.py |
اگر اجرای برنامه موفقیت آمیز باشه، شما با مراجعه به آدرس بازودر سروش گوشیتون، پیام ارسالی توسط رزبری رو مشاهده خواهید کرد :
ارسال اطلاعات از سروش به رزبری پای
در این بخش، یه پیام رو با گوشی به بازو ارسال می کنیم و عکس العمل مناسبی رو هم براش تعریف کنیم؛ برنامه زیر رو اجرا کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from sys import path path.append('..') from client import Client bot_token = ' توکن بات بازوی سروشتون ' bot = Client(bot_token) try: messages = bot.get_messages() for message in messages: m = format(message['body']) print("message is %s"%m) if m=="salam" : print("special message recieved") except Exception as e: print(e.args[0]) |
با اجرای کد بالا، هر پیامی که توسط سروشتون به ربات بفرستید رو براتون چاپ میکنه :
خب این از ارسال و دریافت پیام متنی؛ بریم سر اصل مطلب!
ارسال عکس از رزبری پای به سروش
اول یه عکس دانلود کنید، اون رو در پوشه bot-python-sdk قرار بدید، و در ترمینال :
1 |
sudo nano send-pic.py |
و کپی متن زیر :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
from sys import path path.append('..') from client import Client from os.path import getsize import ntpath bot_token = ' توکن بات بازوی سروشتون ' bot = Client(bot_token) try: to = ' که قبلا به دست آوردیمChat ID ' image_path = 'مسیر عکس مورد نظر برای ارسال' image_thumbnail_path = ' مسیر عکس مورد نظر برای ارسال' [image_error, image_url] = bot.upload_file(image_path) if image_error: print('error in uploading image: {}' .format(image_error)) else: print('image uploaded successfully with url: {}' .format(image_url)) if image_url: [thumbnail_error, thumbnail_url] = bot.upload_file(image_thumbnail_path) if thumbnail_error: print('error in uploading thumbnail: {}' .format(thumbnail_error)) else: print('thumbnail uploaded successfully with url: {}' .format(thumbnail_url)) [error, success] = bot.send_image(to, image_url, ntpath.basename(image_path), getsize(image_path), 512, 512, thumbnail_url, caption='توضیحات عکس') if success: print('Message sent successfully') else: print('Sending message failed: {}' .format(error)) except Exception as e: print(e.args[0]) |
سپس Ctrl+x بعدش y و بعدش Enter؛ اجرای برنامه :
1 |
sudo python send-pic.py |
نتیجه :
گرفتن عکس از دوربین و ارسال به سروش توسط رزبری پای
بریم سراغ دوربین و ارسال عکس دوربین؛ برای تست دوربین، ابتدا در کانفیگ رزبین، دوربین رو فعال می کنیم، بعدش برنامه ساده زیر رو اجرا می کنیم :
1 2 3 4 5 6 7 |
import picamera with picamera.PiCamera() as camera: camera.resolution =1024,768)) camera.capture('1.jpg') |
اگر همه چیز درست باشه، یه عکس توسط دوربین گرفته و با نام 1.jpg ذخیره میشه؛ قصد داریم هر 10 ثانیه، یک عکس توسط دوربین رزبری گرفته، و توسط بازوی سروش، ارسال بشه.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
from sys import path path.append('..') from client import Client from os.path import getsize import ntpath import time import picamera bot_token = ' توکن بات بازوی سروشتون ' bot = Client(bot_token) i=0 with picamera.PiCamera() as camera: camera.resolution =(1024,768) while i !=10: i=i+1 camera.capture('%s.jpg'%i) to = ' که قبلا به دست آوردیمChat ID ' image_path = '/home/pi/bot-python-sdk/%s.jpg'%i image_thumbnail_path = '/home/pi/bot-python-sdk/%s.jpg'%i [image_error, image_url] = bot.upload_file(image_path) if image_error: print('error in uploading image: {}' .format(image_error)) else: print('image %s uploaded successfully'%i) if image_url: [thumbnail_error, thumbnail_url] = bot.upload_file(image_thumbnail_path) if thumbnail_error: print('error in uploading thumbnail: {}' .format(thumbnail_error)) [error, success] = bot.send_image(to, image_url, ntpath.basename(image_path), getsize(image_path), 512, 512, thumbnail_url, caption='%s'%i) if success: print('Message %s sent successfully'%i) else: print('Sending message failed: {}' .format(error)) time.sleep(10) |
برنامه بالا، 10 تا عکس میفرسته ( با فاصله زمانی 10 ثانیه ) :
پروژه کامل ارتباط رزبری پای و سروش
برای پایان این مطلب ،برنامه ای که هروقت به بازو دستور داده شد، یک عکس بفرسته :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
from sys import path path.append('..') from client import Client from os.path import getsize import ntpath import time import picamera import sys bot_token = ' توکن بات بازوی سروشتون ' bot = Client(bot_token) i=0 with picamera.PiCamera() as camera: camera.resolution = (1024,768) while 1: messages = bot.get_messages() for message in messages: m = format(message['body']) print("message is %s"%m) if m=="send pic" : print("sending...") i=i+1 camera.capture('%s.jpg'%i) to = ' که قبلا به دست آوردیمChat ID ' image_path = '/home/pi/bot-python-sdk/%s.jpg'%i image_thumbnail_path = '/home/pi/bot-python-sdk/%s.jpg'%i [image_error, image_url] = bot.upload_file(image_path) if image_error: print('error in uploading image: {}' .format(image_error)) else: print('image %s uploaded successfully'%i) if image_url: [thumbnail_error, thumbnail_url] = bot.upload_file(image_thumbnail_path) if thumbnail_error: print('error in uploading thumbnail: {}' .format(thumbnail_error)) [error, success] = bot.send_image(to, image_url, ntpath.basename(image_path), getsize(image_path), 512, 512, thumbnail_url, caption='%s'%i) if success: print('Message %s sent successfully'%i) else: print('Sending message failed: {}' .format(error)) |
نتیجه :
توجه داشته باشید که ارسال ویدئو و فایل هم میسره کافیه به پوشه مثال ها ی کتابخونه bot-python-sdk مراجعه فرمایید.
برای گسترش عملکرد دستگاه، این امکان هست که با هر بارتشخیص حرکت در تصویر ( motion detection ) یه عکس یا ویدئو رو برامون ارسال کنه؛ برای این کار، میتونید ازکتابخونه pi-timolo استفاده کنید.
و یا برای گسترش فضای تحت پوشش دوربین، اون رو روی یه سروو موتور نصب کنید و با دستوراتی که بهش میدید ( و یا حتی به صورت اتوماتیک)، دوربین رو در زوایای مختلف بچرخونید و...
یه سوال تخصصی :
به نظرتون این گونه آموزش های پروژه محور ( استفاده از ماژول ها و کتابخونه های آماده ) از نظر علمی فایده هم داره؟
لطفا نظراتتون رو با ما درمیون بذارید.
با تشکر از همراهی شما.
دو تا سوال +18
- به نظر شما بدتر از دولت تدبیر و امید، میشه کشور رو اداره کرد؟
- هدف دولت از ناراضی کردن مردم چیه؟ ( از این نارضایتی قصد برداشت چه محصولی داره؟ )
جهت هر چه مستحکم تر شدن جایگاه ولایت فقیه، و ظهور بابای خوبمون مهدی عج صلوات.
مهمان
حاجی خدا حفظت کنه
مهمان
امکان ارتباط آردینو با ربات سروش هم هست؟
مهمان
سلام
ممنون از مطلب قشنگتون
فقط یک سوال:
ارتباط خیلی متنی و خشک هست. راهی داره از طریق رابط تعاملی مثلا دکمه منو و … در ارتباط باشند؟ درست مثل ربات تلگرام؟
در مورد سوال +18:
به نظرم خیلی خوب شد. خیلی وقت ها قدر نعمت هایی که داریم رو نمی دونیم تا زمانی که ازمون گرفته بشه! به گفته جناب رائفی پور بیشتر خدمت رو به دولت احمدی نژاد، حسن روحانی کرد…
کاری کرد مردم با چراغ قوه برن دنبال احمدی نژاد ( نگین طرف دار احمدی نژادم!! البته اول بودم ….)
مهمان
سلام یه سوال داشتم خدمتتون که ربطی به مطلب نداره می خواست بدونم در اوایل طراحی سایتتون چطوری این برنامه نویس ها رو کنار هم جمع کردید برای همکاری.
چون راستش بنده دارم یه سایت اخبار تکنولوژی و رفع مشکلات مباحث مربوط به کامپیوتر و دنیای دیجیتال و این مباحث طراحی می کنم.و در یک بخش می خوام آموزش های برنامه نویسی رایگان و پولی بزارم. وراستش خودم تنهایی نمیتونم تمام این بخش ها رو کامل کنم.
نیاز به همکار دارم به نظرتون چی کار کنم.
نویسنده این مطلب
بااجازه آقا مهدی
اول وبسایت رو راه انداختن و شروع کردن به مطلب نوشتن. نیتش آموزش بوده. خدا هم کمک کرده هر چند وقت یه بار، سرو کله نویسنده جدید پیدا میشه و مطلب جدید می نویسه برای وبسایت.
یه خاصیتی که الکترونیک داره، اینه که شخص دوست داره هر تجربه ای که در پروژه ها به دست میاره رو جایی دم دست یادداشت کنه تا برای دفعات بعد به مشکلات تکراری برخورد نکنه. خب کجا بهتر از یه وبسایت همیشه در دسترس؟؟؟؟!!
برای ماها، اینجا یه کتابخونه هست از مسائل حل شده.
مهمان
آفرین
فقط همین
ادامه بدید که هم اطلاعات تون خوبه هم ایدوئولوژی تون
یاعلی ع
مهمان
سلام. یه نکته دیگه هم بگم اگه اول هر دستوری sudo میزاید یعنی بالاترین دسترسی اجراش میکنید ، پس بهتره از sudo فقط برای نصب نرم افزار که نیاز به دسترسی ادمین داره استفاده کنید.
مهمان
برای ویرایش فایلها برنامه های بهتری از nano هم هست مثل vim یا geany که میتونید اینطوری نصب کنید : sudo apt install geany
نویسنده این مطلب
با تشکر