رزبری پای سیم کارت GSM - GPRS ماژول دوربین پروژه رزبری پای

ارسال تصویر به سرور با برد رزبری پای از طریق اینترنت GPRS شیلد SIM800C

sending-picture-via-sim800c-gsm-module-and-raspberry-pi-camera-digispark
نوشته شده توسط معین صابری

در سری آموزش های برد رزبری پای و شیلد sim800c، به بررسی ایجاد ارتباط با شبکه GSM به منظور ارسال و دریافت پیامک پرداختیم. با توجه به اینکه شیلد SIM800C دسترسی به اینترنت از طریق GRPS را فراهم می نماید، در آموزشی دیگر به نحوه اتصال برد رزبری پای به اینترنت از طریق GPRS شیلد SIM800C پرداختیم. در این آموزش، به کمک یک دوربین USB یا همان وب کم از محیط عکس گرفته و سپس به کمک اینترنت شیلد SIM800C، آن را بر روی یک سرور، آپلود خواهیم کرد. همانند آموزش های گذشته در این زمینه، از برد رزبری پای ۳ مدل +B استفاده کرده ایم، شما نیز می توانید از بردهای مشابه رزبری پای بهره ببرید. در ادامه این آموزش با مرجع تخصصی رزبری پای و مرجع تخصصی ماژول سیم کارت به زبان فارسی، دیجی اسپارک همراه باشید.

 


عکاسی با دوربین رزبری پای


در این آموزش، برای گرفتن عکس، ما از یک دوربین USB یا همان وب کم استفاده نموده ایم، شما نیز می توانید از دوربین های مشابه نظیر دوربین مخصوص رزبری پای استفاده نمایید. پس از اتصال دوربین USB، برد رزبری پای به طور خودکار دوربین شما را شناسایی خواهد کرد، جهت اطمینان از این موضوع، پس از اتصال دوربین، در محیط ترمینال، دستور زیر را تایپ نمایید:

lsusb

پس از تایپ دستور فوق، کلیه دستگاه های متصل به پورت های USB برد رزبری پای، نظیر موس، کیبرد، دوربینUSB و..، مطابق تصویر زیر، لیست خواهند شد:

با توجه به تصویر فوق، در خط آخر(کادر قرمز رنگ)، نام دوربین متصل شده به رزبری پای، به نمایش درآمده است که نشان از شناسایی دوربین توسط برد دارد. پس از اطمینان از شناسایی دوربین توسط برد، نوبت به دانلود و نصب نرم افزار عکس برداری به کمک دوربین وب کم می رسد. برای اینکار، ما از نرم افزار fswebcam استفاده کردیم. برای دانلود و نصب این نرم افزار که در مخازن لینوکس قرار دارد، به شکل زیر، عمل کنید:

توجه: با توجه به سرعت پایین اینترنت GPRS، بهتر است از اینترنت مودم خانگی و یا اینترنت پرسرعت برای دانلود نرم افزارها استفاده نمایید.

sudo apt-get install fswebcam

پس از نصب نرم افزار فوق، به کمک دستور زیر، می توانیم با دوربین وب کم، یک عکس بگیریم:

fswebcam image.jpg

پس از دستور فوق، نرم افزار شروع به گرفتن عکس از محیط و ذخیره آن با نام image.jpg در همان دایرکتوری که ترمینال باز شده است، خواهد نمود. تصویر زیر مراحل تصویربرداری و ذخیره تصویر را نشان می دهد:

در مرحله، بعدی، با دستور زیر، عکس را باز میکنیم:

xdg-open image.jpg

در نهایت، تصویر به صورت زیر، نمایش داده می شود:

 

 


ارسال تصویر به سرور با اینترنت GPRS


در این مرحله، اقدام به آپلود تصویر بر روی سرور، می نماییم. در آموزش پیشین، شیلد ماژول SIM800C را به یک مودم اینترنتی سیم کارتی برای برد رزبری پای تبدیل کرده و این برد را از طریق اینترنت GPRS شیلد SIM800C، به شبکه اینترنت متصل کردیم. حال در این آموزش قصد داریم تا با عکسی که به کمک fswebcam تهییه کرده ایم، به وسیله اینترنت GPRS و بر روی بستر پروتکل FTP، عکس مورد نظر را به سرور انتقال دهیم. پروتکل FTP که مخفف File Transport Protocol است، یک روش ساده و سریع برای آپلود، دانلود، حذف و تغییرات فایل است. برای این که به این پروتکل در برد رزبری پای دسترسی داشته باشیم، ابتدا می بایست یکی از نرم افزارهای اجراکننده این پروتکل را از مخازن لینوکس، دانلود و نصب نماییم.

sudo apt-get install ftp

پس از پایان یافتن مراحل دانلود و نصب، اتصال اینترنت رزبری پای را به جهت اتصال به اینترنت شیلد رزبری پای قطع نمایید. سپس، باتوجه به آموزش پیشین که در آن تنظیمات مربوط به اینترنت GPRS را درون فایل sim800c ذخیره نمودیم، اینترنت GPRS را به کمک دستور زیر، فعال می نماییم:

sudo pon sim800c

پس از فعال شدن اینترنت، نوبت به آپلود عکس بر روی سرور می رسد. همانطور که اطلاع دارید، برای اتصال به سرور از طریق پروتکل FTP، می بایست نام کاربری و رمز عبور پنل وب سایت خود را به عنوان ورودی، به این پروتکل ارجاع دهید. برای شروع کار با این پروتکل، ابتدا دستور زیر را در ترمینال وارد نمایید:

ftp -p ftp.example.com

در عبارت فوق، p- بیانگر اتصال به صورت passive و نه به صورت active است، بحث در رابطه با تفاوت بین دو مد active و passive از حوصله بحث خارج است، اما به طور خلاصه، در مد اکتیو شماره پورتی که قرار است به آن، بر روی سرور متصل شویم، توسط فرستنده(کلاینت) به سرور ارسال می گردد، حال آنکه در حالت passive، شماره پورت را کلاینت(فرستنده) از سرور دریافت می نماید؛ در اینجا به جهت جلوگیری از تداخل های احتمالی حین ارسال داده، از مد passive استفاده می نماییم. همچنین، برای برقراری ارتباط در مد ftp با سرور، عبارت ftp را به صورت یک زیر دامنه، در ابتدای نام سرور، مانند ftp.example.com، می آوریم. پس از دستور فوق، سرور ضمن پیام خوش آمد گویی، نام کاربری و در ادامه آن رمز عبور را از ما دریافت می نماید. در مرحله بعدی، به کمک دستور put که از دستورهای استاندارد پروتکل ftp است، نام فایلی که قرار است بر روی سرور آپلود شود، دایرکتوری که قرار است فایل در آن آپلود شود و در نهایت نامی که قرار است فایل در سرور به آن نام ذخیره شود، می بایست وارد گردد. اما، از آنجاییکه ما قصد داریم برنامه ای بنوسیم که به کمک آن، هر بیست ثانیه یکبار از محیط عکس گرفته و بر روی سرور آپلود نماییم، دستورات برقراری ارتباط، نام فایل مبدا و محل قرارگیری در مقصد را در یک خط، خواهیم نوشت. این مورد در قسمت بعدی، قابل بررسی است.


کدهای ارسال تصویر با اینترنت GPRS


در این قسمت، به بررسی و تحلیل مهم ترین قسمت پروژه، کدهای برنامه ارسال تصاویر به سرور، می پردازیم. پیش از هرچیز، در این قسمت نیز همانند پروژه ارسال دما با رزبری پای و کنترل رله با پیامک به کمک برد رزبری پای، از محیط و دستورات shell script سیستم عامل لینوکس، برای برنامه نویسی پروژه، استفاده خواهیم نمود. سازوکار پروژه را به این صورت طراحی کرده ایم که برد رزبری پای هر ۲۰ ثانیه یکبار، اقدام به عکس برداری نموده و پس از دریافت تاریخ و ساعت از سیستم، عکس مورد نظر را به همین نام، ذخیره نموده و سپس به کمک دستورات ftp، عکس را به سرور ارسال خواهد نمود. مزیت ذخیره عکس به صورت تاریخ این است که در سمت سرور، عکس ها به سادگی تفکیک خواهند شد. در ادامه، کدهای برنامه را مشاهده می نمایید:

z=5
sudo pon sim800c
while [ $z -gt 1 ]
do
x=$(date +"%d-%m-%y_%H-%M-%S".jpg)
fswebcam $x
curl -T $x ftp://ftp.example.com/htdocs/images/$x -p --user username:password
echo waiting for next iteration....
sleep 20
done

 برای اجرای کدهای فوق، ابتدا به کمک ویرایشگر nano یک فایل با نام دلخواه، مثلا upload به صورت nano upload باز نموده و سپس کدهای فوق را در آن ذخیره نمایید. سپس به کمک کلید ترکیبی ctrl+x و در ادامه گزینه y، فایل را ذخیره نمایید. برای اجرای دستورت فوق، به کمک دستور chmod +x upload فایل را به صورت اجرایی(برنامه) تبدیل نموده و با دستور upload/. برنامه را اجرا نمایید.

 


تحلیل کدهای ارسال تصویر با GPRS


در این برنامه، مشابه آموزش های پیشین، به کمک متغیر z که مقدار آن هیچ گاه تغییر نخواهد کرد، یک حلقه تکرار بی نهایت ساختیم. پیش از ورود به حلقه، به کمک دستور زیر، مشابه آنچه که در آموزش اتصال برد رزبری پای به اینترنت از طریق اینترنت شیلد sim800c دیدیم، با توجه به ذخیره تنظیمات اینترنت GPRS در فایل SIM800C، اتصال به اینترنت را فعال خواهیم نمود:

sudo pon sim800c

در این حلقه، ابتدا به کمک عبارت date که از پیش در سیستم عامل لینوکس تعریف شده است، تاریخ را به صورت فرمت بندی شده، به ترتیب روز-ماه-سال-ساعت-دقیقه-ثانیه، دریافت نموده و در متغیر x ذخیره نمودیم. سپس، به کمک دستور fswebcam، عکسی از محیط گرفته و آن را با نامی(تاریخ) که در متغیر x است، ذخیره خواهیم نمود. در مرحله بعدی، به جهت اینکه کلیه اقدامات لازم جهت آپلود فایل، نظیر نام سرور، نام کاربری، رمز عبور و… را می بایست در یک خط قرار دهیم، از دستور curl استفاده خواهیم کرد. دستور curl یا همان client url یک ابزار کاربردی در سیستم عامل لینوکس است که به شما امکان می دهد تا از طریق ترمینال، اقدام به ارسال داده ها نمایید. برای اطلاعات بیشتر، می توانید ب لینک سازندگان آن را مورد بررسی قرار دهید. در دستور curl، پس از عبارت T-، آدرس فایلی که در رزبری ذخیره شده و قرار است به سرور منتقل شود را قرار می دهیم، در اینجا چون فایل در همان دایرکتوری است که برنامه اجرا می شود، صرفا نام آن را می نویسیم. در ادامه، با قرار دادن عبارت //:ftp قبل از نام آدرس سرور، نوع اتصال به سرور را از نوع ftp تعیین می نماییم. سپس با قرار دادن عبارت .ftp پیش از نام سرور، با آن ارتباط ftp را برقرار خواهیم نمود. در اینجا ما یک دایرکتوری به نام images بر روی سرور ایجاد می نماییم تا عکس های ارسالی را در آن، مشاهده نماییم. سرور ما، از نوع سرور لینوکسی بوده و کنترل پنل آن نیز cpanel است، پس از لاگین در سرور، به سراغ online file manager مطابق تصویر زیر می رویم:

پس از کلیک و بازگشایی، برروی پوشه htdocs که کلیه فایل های قابل نمایش به کاربر در آن قرار میگیرد، کلیک نمایید و اقدام به ایجاد یک دایرکتوری(فولدر) به نمام images، نمایید. در هاست مورد استفاده ما، این مورد به شکل زیر انجام می گیرد:

در قسمت بعدی، نوبت به قرارگیری نام کاربری و رمز عبور است. پس از عبارت user– نام کاربری و بلافاصله پس از نام کاربری، با عبارت : رمز عبور را قرار دهید. همانطور که پیشتر ذکر گردید، در این پروژه قصد داریم تا داده ها را هر بیست ثانیه یکبار به سرور ارسال نماییم، بنابراین، پس از دستور آپلود داده ها، به کمک دستور sleep 20، یک تاخیر بیست ثانیه ای در برنامه ایجاد خواهیم کرد. در پایان، برای اجرای برنامه، دستور upload/. را در ترمینال وارد نموده و اجرای برنامه را به شکل زیر، شاهد خواهیم بود:

برای رویت تصاویر در سمت سرور، با توجه به آنکه تصاویر در دایرکتوری images ذخیره شده است، در صورتیکه در مرورگر خود، آدرس سرور خود را به صورت example.com/images وارد نمایید، با تصویر زیر، که لیستی از تصاویر آپلود شده است، رو به رو خواهید شد:

 


وسایل مورد نیاز


شیلد سیم کارت sim800C مخصوص رزبری پای Raspberry Pi GSM Shield

بردهای رزبری پای Raspberry Pi

انواع ماژول سیم کارت

 


جمع بندی


در این آموزش، به نحوه عکس گرفتن ازمحیط  و آپلود آن بر روی سرور، پرداختیم. به منظور عکس برداری از یک دوربین وب کم و برای دسترسی به اینترنت، از شیلد SIM800C مخصوص رزبری پای استفاده نمودیم. در ابتدا به نحوه استفاده از دوربین وب کم(USB) و ذخیره عکس پرداختیم، سپس در مرحله بعد، نحوه آپلود فایل را مورد بررسی قرار دادیم. در نهایت با طراحی یک برنامه در محیط shell script، برنامه ای را طراحی کردیم تا ضمن اتصال برد رزبری پای به اینترنت از طریق اینترنت GPRS شیلد SIM800C، هر بیست ثانیه یکبار، از محیط عکس گرفته و بر روی سرور، آن را آپلود نماید.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۴ دیدگاه

  • سلام مهندس:
    من تازه رزبری رو برای کنجکاوی شروع به یادگیری دارم میکنم و خوبم پیش میره. فقط یه مشکل که دارم اینه که خیلی از فایل ها که باید از مخزن لینوکس نصب بشه بعد از سرچ و درصد خطا میده . نمیتونه وصل بشه. اینترنت من مودم adsl با سرعت هم هست.
    البته فکر کنم فایلها یا آدرس ها عوض شدن.
    آدم دلش دوست داره رزبری رو خورد کنه.

  • درود مجدد :
    مهندس مشکل رو حل کردم. ایراد از نداشتن اینترنت از طریق putty بود.
    طبق آموزشها موفق شدم به شکل کامنت تصویر به هاست بفرستم. خیلی جالب بود.
    چنتا سوال در مورد ساخت فایل اجرایی که موفق نشدم.
    پسوند فایل nano upload چی باید باشه
    من در هنگام اجرای برنامه با ارور زبان گرامری در خط ۱۰ مواجه شدم . چون این زبانو بلد نیستم نمیدونم چیکار باید بکنم.
    بعد اینکه nano حتما باید از کامنت اجرا بشه آیکن نداره ؟
    اگه این مرحله هم حل بشه چه کارا که نمیشه کرد.
    پروزه زیبایی هست دست شما درد نکنه

    • از لطف شما ممنونم
      پسوند فایل مهم نیست. لطفا خطا را در کامنت بعدی قرار بدید. آیا فایل به حالت اجرایی تبدیل شده؟