# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > مباحث عمومی کار با سخت افزارها، سنسورها و لوازم جانبی >  مشکل با ارتباط میکرو از طریق وای فای

## ghamgin

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

----------


## c0mmander

اینجا بدترین جایی ممکنی که سوالتون پرسیدید. احتمالا یا حذف میشه تاپیکتون و یا منتقل میشه.(البته من مدیر نیستم اما باید سوالتون داخل تاپیک embedded devices می پرسیدید.)

اما درباره سوالتون باید سخت افزارتون مشخص بشه آیا میخواهید نمونه صنعتی درست کنید ویا نمونه فان اموزشی یا ...

اگر قصدتون آموزشی برنامه نویسی میتونید استفاده از برد هایی مثل رزبری و یا آردونینو  و غیر استفاده کنید. اما اگر هدف صنعتی دارید باید از فکر استفاده این ها بیرون بیاد و بردتون خودتون(یا واحد الکترونیک) طراحی کنید(کنند).

در هر صورت دو سناریو کلی وجود داره
  یک روتر بیسیم متصل به اینترنت و به تعداد اتاق هاتون شبکه اترنت متصل به روتر  دو قرار دادن ماژول وای فای رو هر کلاینت. 

مورد بخش دوم سوالتون اگر پردازش محاسباتی ندارید و فقط انتقال داده دارید میکرو های AVR کار رانداز خواهد بود. اما اگر نیاز پردازش دارید میتونید از پروسسور های arm مثل LPC2138 هم استفاده کنید.

برنامه نویسی تمام میکرو ها برای کارهای حرفه C هست.

برای avr بهترین میحط توسعه IDE atmel studio
و برای Arm من KEIL رو پیشنهاد میکنم.

در کل اگر شخصی میخواهید کار کنید خیلی باید هزینه فایده کنید.

برای کاهش نویز علاوه بر طراحی اصولی مدار و تهیه میکرو اورجینال میتونید از میکرو های سری St هم استفاده کنید من شخصا به دلیل سرعت خیلی پایین pic ها اون ها زیاد انتخاب و توصیه نمی کنم.

----------


## ghamgin

سلام 
از توجهت ممنونم دوست عزیز
چاره ای نبود میدونم جای سوالم بده.میشه لطف کنی این رو هم راهنمایی کنین؟
آیا برای ارتباط نیازی هست یک MASTER طراحی کرد یا اینکه همه رو مستقیم به سیستم وای فای متصل کنم.؟
آیا برای دریافت دماها از windows Application  یا web Application باید استفاده کنم؟
راجب میکرو َST توضیح می فرمایید؟
ممنون میشم راهنمایی فرمایید استاد عزیز

----------


## c0mmander

> آیا برای ارتباط نیازی هست یک MASTER طراحی کرد یا اینکه همه رو مستقیم به سیستم وای فای متصل کنم.؟


همه چیز بستگی به شرایط داره. با توجه به اینکه شما میخوای دما رو انتقال بدید این راه رو بهتره انجام بدید با استفاده از l2c بیاید سنسور های دماییتون رو درون اتاق ها به یک برد مرجع (مثلا یک Master) بفرستید و در پایان هر بررسی وضعیت دمایی این برد مرجع از طریق وای فای ارسال داشته باشید.




> آیا برای دریافت دماها از windows Application  یا web Application باید استفاده کنم؟


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




> راجب میکرو َST توضیح می فرمایید؟


میکرو های stm رو میتونید مشخصاتشون رو داخل گوگل جستجو کنید. توضیحاتش زیاد هست و من الان وقت لازم رو برای تایپشون ندارم.




> ممنون میشم راهنمایی فرمایید استاد عزیز


استاد واژه بزرگی هست و من استاد نیستم.  :چشمک:

----------


## ghamgin

سلام
واقعا ممنونم ازتون
نفرمایید استاد هستید
ببخشید فقط یه سوال دیگه:

آیا بر روی master نیازی به قراردادن آی سی های can یا تراشه های با قابلیت can نیز هست؟ 

بله میخوام در سطح یک ساختمان باشه با شعاع 500 متر پس win app  با زبان  C#‎ کافی هست؟ و این پروتکلی که فرمودید چی هست و چطور باید باهاش کار کرد؟ و بخوام شعاع رو وای فای پوشش بده چه ناتنی پیشنهاد می کنیدط؟ آنتن یوگی مناسبه؟ 
ببخشید ممنون میشم اینو هم لطف کنید و راهنمای بفرمائید
سپاس

----------


## c0mmander

> آیا بر روی master نیازی به قراردادن آی سی های can یا تراشه های با قابلیت can نیز هست؟ 
> 
> سپاس


استفاده از پروتکل can برای چه منظوری؟ برای اتصال slave ها به master یا اتصال master به سرور؟

در هر دوصورت اگر محیط شدیدا پرنویز نیست استفاده از پروتکل RS485 به نظرم از نظر هزینه ای و سهولت اسفاده مناسب تر باشه




> بله میخوام در سطح یک ساختمان باشه با شعاع 500 متر پس win app  با زبان   C#‎‎‎‎‎ کافی هست؟ و این پروتکلی که فرمودید چی هست و چطور باید باهاش کار کرد؟  و بخوام شعاع رو وای فای پوشش بده چه ناتنی پیشنهاد می کنیدط؟ آنتن یوگی  مناسبه؟


اینحا هم با توجه به شعاع قرار گرفتن سنسور هاتون نمیشه از i2c استفاده کرد. این تصویر رو ببیند:


اگر از ماژول وایفای مثل ESP8266 استفاده کنید نهایت بردشون 30 متر (در بهترین شرایط یا بقول خودمون اسمیشه) بتونه ارتباط برقرار کنید. انتنشم معمولا روی برد چاپ شده . این یک نمونه بود برای کارتون شاید بخواهید هزنیه بیشتر کنید یک ماژول برد بلند وای فای تهیه کنید.

----------


## ghamgin

با تشکر فراوان از پیگیری و توجه بی دریغتان. :تشویق: 
ببینید بنده نسبت به پروتکل­های شبکه که rs232 و re485 باشد و به سبب تفاضل حاصل در گیرنده نویز را به شدت کاهش می­دهند آگاهم و می­دانم از یک زوج سیم استفاده می­شود و همین زوج سیم نویز رو به حداقل می رساند. اما من ارتباط سیمی نمی خواهم و بنده منظورم این است شما تصور فرمایید من 100 یا حتی 1000 slave  دارم و در مکان های متفاوت که روی هر کدام یک میکرو و یک سنسور است که پردازش خاصی هم ندارم. می خوام اینا رو مستقیم (توزیع شده) یا مرکز محور (از طریق master)به صورت آنلاین هر از چند دقیقه همگی همزمان اون پارامتر(دما) رو از طریق اینترنت وای فای به کامپیوتر ارسال کنند. پس اصلا اتصال سیمی مدنظر نیست.  و برای برنامه نویسی سوکت به نظر شما چکار کنم که داده های موجود در برنامه هک نشود؟

----------


## c0mmander

[ مسلما پیشنهاد من هم لازما قابل پیاده سازی نیست و فقط یک پیشنهاد هست.] برای انجام یک کار فقط یک راه وجود نداره باید ببیند با توجه به شرایط موجود خودتون بهترین روش چیه تا جلو خیلی موارد گرفته بشه.
ببنید هر تغییری هزینه خودش رو داره مثلا شما مستقیما برد دریافت کننده دمایی رو که به گفته خودتان هیچ کار خاصی جز دریافت دما و ارسال اون ندارد رو مجزا به اینترنت متصل کنید باید به تعداد برد هاتون این هزینه ساخت این مورد رو پرداخت کنید.
حالا اگز 1000 تا از این دستگاه ها رو شما داشته باشید 1000 بار تکرار پرداخت این هزینه برای شماست.
پروتکل های با طول بلند rs485 همون طور که خودتون مستحضرید توانایی ارتباط به با طول بلند رو فراهم میکنه اما همون طور که گفتید نقص وجود سیم هست.
میشه از ماژول های رادیوی استفاده کرد و یا هر مورد دیگه ای یا به وایفای متصل کرد و یا ... 

من مستقل کردن هر برد با قطعات ارتباط به شبکه رو کار مناسبی نمی بینم.

اما برای ارتباط با وایفای شما نیاز دارید یک ماژول وایفای (قیمت با توجه به برد آن است) تهیه کنید. حتی نسخه های سریال این ماژول ها هم هست که میتونید خیلی راحت میکرو رو کانفیگ کنید اما استفاده از اون ها نسبت به spi خیلی کندتر است اما پیاده سازی راحت تری دارند. استفاده کنید.




> و برای برنامه نویسی سوکت به نظر شما چکار کنم که داده های موجود در برنامه هک نشود؟


کپسوله کردن اطلاعات. encode کردن رمزگذاری در کل دو روش وجود داره یکی برپاییه متن و دیگری برپاییه بایت. و در نهایت decode کردن. موضوع بعدی این هست که باید حتما در برنامه سی شارپتون از کیجکننده ها استفاده کنید چون برنامه های سیشارپ به راحتی کدشون رو میشه استخراج کرد.

----------


## ghamgin

سلام
یه دنیا تشکر از لطفتان
فقط ببخشید به خدا
آیا نیازی به گذاشتن سیم کارت روی برد هست؟ یعنی ماژول وای فای بدون سیم کارت هم کار خواهد کرد؟ 
جدای از این مسائل
میدونم gprs مودم هست و GPS ماژول. دقیقا تفاوتشون رو در ردیابی افراد میخواستم بدونم؟ 
ممنون

----------


## c0mmander

> آیا نیازی به گذاشتن سیم کارت روی برد هست؟ یعنی ماژول وای فای بدون سیم کارت هم کار خواهد کرد؟ 
> ممنون


سلام 
بله. هیچ ارتباطی وای فای به سیم کارت ندارد. اما اینکه آیا نیاز به گذاشتن ماژول های مثل sim900 روی بوردتون هست رو خودتون باید مشخص کنید که آیا میخواهید مستقیما به اینترنت دسترسی داشته باشید یا خیر. 
توصیه من این هست که از شبکه محلی استفاده کنید تا نیازی به اینترنت نداشته باشید.
نکته: ماژول هایی مثل ESP8266 هم مود کلاینت دارند و هم مود سرور!



> میدونم gprs مودم هست و GPS ماژول. دقیقا تفاوتشون رو در ردیابی افراد میخواستم بدونم؟


جالبه یک دوست دیگه هم سوالی مشابه این پرسیده بود.

ماژول GPS طول و عرض جغرافیایی شما رو در صفحه ای قرار دارد رو به شما بر میگردونه. این اطلاعات از ماهواره دریافت میشه و گرفتن این اطلاعات در حالت عمومی رایگان هست.

مودم gprs امکان استفاده از سیم کارت رو فراهم میکنه اعمالی مثل ارسال اس ام اس اتصال به اینترنت(gprs) و ... 

مودم gprs نقشی در ردیابی افراد نداره و مانند موبایل فقط برای مراجع قانونی امکان بررسی در محدوده شبکه gprs رو فراهم میکنه.(این مورد در اختیار کاربران نیست)
اما از اتصال gps و gprs میشه موقعیت فعلی رو به هر شماره ای یا اینترنت ارسال کرد.

----------


## ghamgin

مرسی
تشکر یه دنیا
میشه بی زحمت درباره برنامه سوکت اش یه مقدار توضیح بفرمایید چطور باید باشه؟ 
و
در مورد اعمال ولتاژ بی سیم به میکرو آیا کسی در ایران کار کرده؟
بنظرتون کجا ميتونه کاربرد داشته باشه؟
که من بتونم بدون سیم به میکرو ولتاژ بدهم؟

----------


## c0mmander

اول باید مشخص کنید که برنامه سوکت در حالت سرور هست یا در حالت کلاینت. از اونجایی که عموما براساس tcp مودم ها رو کافیگ میکنن باید داخل سی شارپ یا هر زبان دیگه ای سوکت رو بر همون اساس ساخت.

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

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

اگر دستگاه سرور در نظر گرفته شده باشه عکس این عمل باید انجام بشه البته به نحوی کاملا متفاوت . داخل اینترنت آموزش های مختلفی از این کار بصورت ساده و قابل درک هست. حتما بررسی کنید.

----------


## ghamgin

بازم تشکر فراوان
ببینید برداشتم این شد درسته؟
پس باید یا یک وب سرور باشه و یک app با سی شارپ ایجاد کنم و بعد روی iis سرور رو بذارم و داده رو از میکرو بگیرم و ثبت کنم؟
یا
برنامه با سوکت بنویسم به یه پورت گوش کنه و داده رو از میکرو بگیرد و ثبت کنه ؟
شما فرمودید لوکال باشه بدون اینترنت یعنی اگه سیستم خاموش باشه باز اطلاعاتی ذخیره میشه؟؟؟
درمورد سوال دوم پست قبل اطلاع ندارید؟
بازم تشکر

----------


## c0mmander

> پس باید یا یک وب سرور باشه و یک app با سی شارپ ایجاد کنم و بعد روی iis سرور رو بذارم و داده رو از میکرو بگیرم و ثبت کنم؟
> یا
> برنامه با سوکت بنویسم به یه پورت گوش کنه و داده رو از میکرو بگیرد و ثبت کنه ؟


استفاده از وب سرور در حالتی هست که شما بخواهید از اینترنت استفاده کنید. اول یک سرور تهیه میکنید حالا یا هاست و سرور لینوکسی یا ویندوزی و بعدا با استفاده از asp.net یا php یک وب سرویس پیاده سازی میکنید.

برای ارتباط با این وب سرویس شما برای pc باید یک برنامه جدا بنویسید و برای میکرو تون هم به نحوی که خودتون میدونید به اینترنت متصل کنید و با اون وب سرویس تبادل اطلاعات کنید.

اما برای حالت لوکال شما دیگه نیازی به اینترنت ندارید و فقط با برقرار کردن شبکه (مثلا با wifi) مستقیما با برنامه pc و سوکتش ارتباط برقرار میکنید.




> شما فرمودید لوکال باشه بدون اینترنت یعنی اگه سیستم خاموش باشه باز اطلاعاتی ذخیره میشه؟؟؟


این جوابش مشخصه دیگه در حالت لوکال فقط در صورت اجرا بودن برنامه تبادل اطلاعات صورت میگیره. که باید برای داشتن دیتا های قبلی در صورت عدم برقرار سوکت داده ها در حافظه ای ذخیره و بافر شوند. و بعدا ارسال ها صورت بگیره.
اما در صورت استفاده از نت این موضوع فقط به وجود اینترنت بستگی داره.



> درمورد سوال دوم پست قبل اطلاع ندارید؟


خیر انتقال بیسیم انرژی رو من فقط در معدود گوشی های هوشمند دیدم که هنوز استفاده از اون ها توجیه اقتصادی برای مردم نداره.
اما اینکه ایا در ایران هم فعالیت هایی انجام شده یا خیر اطلاعی ندارم.

----------


## ghamgin

زبان تشکر عاجزه
واقعا ممنونم
متوجه شدم
فقط 
باید به هر میکرو به شناسه یا ip برای ارتباط بدم درسته؟ چطور این کار انجام میشه؟ در وب سرویس که میخواهم با wcf بنویسم فقط باید اطلاعات دریافتی در بانک ذخیره شه؟
و هنگام استفاده لوکال باید بافر کنم یعنی چه ؟ متوجه منظورتون نشدم .یعنی میکرو بفرسته اما چطور یه جا بافر شه بعد سیستم که روشن شد درج بشه ؟ به چه شکل
ممنونم
سپاس فراوان..

----------


## c0mmander

> باید به هر میکرو به شناسه یا ip برای ارتباط بدم درسته؟ چطور این کار  انجام میشه؟ در وب سرویس که میخواهم با wcf بنویسم فقط باید اطلاعات  دریافتی در بانک ذخیره شه؟


بلی برای ارتباط چه با وای فای (البته در صورت تنظیم بصورت کلاینت ماژول wifi) و چه وب سرویس شما نیاز به تنظیم آی پی دارید.

بله  شما میتونید با ساخت یک وب سرویستون مثلا wcf و یک ماژول sim900 (یا  مشابه) از طریق gprs سیم کارت به وب سرویس ارسال داده کنید و داده های  ارسال شده رو ذخیره کنید.(چیزی که الان به ذهنم میاد اینکه برای هر فرستنده  تون یک شناسه تعریف کنید و داده های دماییتون رو به سرور ارسال کنید. داده  همراه با زمان دریافت شدنشون در دیتابیس ذخیره کنید و اون ها در صورت  تقاضا بعدی به برنامه دسکتاپتون بدید. البته این فقط یک ایده سادست.باید  روی مکانیزم های امنیتی وب سرویستون هم تحقیق کنید ببیند چطوری میتونید اون  رو ایمن تر درست کنید.)

هم طور که گفتم وب سرویس شما باید دوکار رو انجام بده یک دریافت ذخیره سازی اطلاعات دو ارسال در صورت درخواست کلاینت دسکتاپ.




> و هنگام استفاده لوکال باید بافر کنم یعنی چه ؟ متوجه منظورتون نشدم .یعنی  میکرو بفرسته اما چطور یه جا بافر شه بعد سیستم که روشن شد درج بشه ؟ به چه  شکل


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

----------


## ghamgin

سپاس
ببخشید این سوال برام پیش آمد که
خوب  چطور برای هر میکرو ip تنظیم میشه؟این حافظه جانبی که فرمودید چطور میکرو آفلاين داده روش قرار میده
و
شما برای امنیت وب سرویس چه مکانیرمی پیشنهاد می فرمایید؟
اگه از php استفاده کنم برای نوشتن وب سرویس ساده تر و امن تر هست یا wcf? 
شما نمونه ای از این روند ارسال داده از میکرو به سرور لوکال سراغ ندارید لطف کنید بهم لینک بدید؟(یه شما ببینم ازش)
بازم عذرخواهی می کنم 
و
سپاس فراوان

----------


## c0mmander

> خوب  چطور برای هر میکرو ip تنظیم میشه؟


تعیین ای پی یا دامین مربوط به نحوه کار با ماژولهاست.باید با توجه به  سخت افزار و ماژول ها مرود استفادتون بگردید رو روش استفادش رو پیدا کنید.
نکته  ای که من فراموش کردم قبلا بگم این هست که در صورت استفاده از اینترنت شما  میتونید از دامین هم بجای آی پی استفاده کنید فرقی نداره. مثلا در ماژول  Sim900 شما با ارسال دستورات at تقاضا هاتون رو میفرسید.



> این حافظه جانبی که فرمودید چطور میکرو آفلاين داده روش قرار میده


میتونید  از یک حافظه SD برای این کار استفاده کنید. این که ارتباط برقرار نبود و  یا اینکه دریافت اطلاعات مناسب در یک بازه زمانی (همون timeout) صورت  نگرفته بود و یا وجود خطا و یا حالت های مختلف دیگه... میشه در حافظه ذخیره  کرد.[نحوه ارتباط حافظه های جانبی(یا مشخصا SD) با میکروکنترلر رو میتونید  تحقیق کنید.]



> شما برای امنیت وب سرویس چه مکانیرمی پیشنهاد می فرمایید؟


در  این مورد نظر خاصی نمی تونم بدم. این مورد رو میتونید داخل انجمن های  مربوط به اون زبانی که میخواهید کار کنید پرسید. اما ساده ترین موردی که  باید هم در استفاده از هر دو این ها وجود داره این هست که نوع ورودی ها رو  بررسی کنید تا خطا های انجکشن رو نداشته باشید.




> اگه از php استفاده کنم برای نوشتن وب سرویس ساده تر و امن تر هست یا wcf?


این مورد هم یکی از اون مواردی هست بحث های مختلفی روش هست. امنیت در  php به برنامه نویس بیشتر مربوط هست و باید تمام موارد رو رعایت کنه. اما  در Wcf این موارد توسط ماکروسافت گفته میشود که رعایت شده. تنها چیزی که  میشه گفت این هست که *ساده تر و ارزان تر* میشه با php  نوشت. اما امنیت در php مستقیما به خود برنامه نویس مربوط هست.اما در  استفاده از تکنولوژی های ماکروسافت موضوع امنیت توسط شرکت تا حدودی پرداخته  شده. البته Wcf عملا یک سری توابع هستند. که توضحاتش رو در بخش wcf همین  سایت میتونید کامل دنبال کنید.




> شما نمونه ای از این روند ارسال داده از میکرو به سرور لوکال سراغ ندارید لطف کنید بهم لینک بدید؟(یه شما ببینم ازش)


سرور لوکال.(یعنی شبکه داخلی بدون استفاده از اینترنت):
هر  ماژول wifi یا اترنت(نه اینترنت) که شما بخواهید استفاده کنید باید مشخص  باشه. اما من نمونه ای رایگان رو  برای ماژول عمومی wifi رو برای شما  میزارم .
http://electrovolt.ir/%D8%A2%D9%85%D...D9%84-esp8266/

که هم راندازی بصورت کلاینت و هم سرور رو توضیح داده.

----------


## ghamgin

واقعا ممنونم از وقتی که لطف می کنید و میگذارید
فقط
ببخشید با توجه با فرمايشات و راهنمایی شما و نیازها باید با استفاده از اینترنت باشه
شما نمونه ای هم برای ارسال داده توسط میکرو با سیم کارت gprs به سرور دارید؟ 
سپاس فراوان

----------


## c0mmander

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

----------


## ghamgin

بابت همه راهنمایی هاتون ممنونم
شروع به جمع آوری اطلاعات و انجام پروژه خواهم کرد و اگر سوالی بود و اگر ایرادی نداره ؟ازتون میپرسم 
با سپاس فراوان عزیز

----------

